Tải bản đầy đủ (.pdf) (73 trang)

Xây dựng hệ thống phát hiện mã độc trên di động

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.79 MB, 73 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
--------------------------------------NGUYỄN VĂN LỰC

XÂY DỰNG HỆ THỐNG PHÁT HIỆN MÃ ĐỘC TRÊN DI ĐỘNG

Chuyên ngành : Kỹ Thuật Máy Tính

LUẬN VĂN THẠC SĨ KỸ THUẬT
KỸ THUẬT MÁY TÍNH

NGƯỜI HƯỚNG DẪN KHOA HỌC :
PGS. TS Nguyễn Linh Giang

Hà Nội – Năm 2017


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

MỤC LỤC
LỜI CẢM ƠN ..................................................................................................................3
LỜI CAM ĐOAN ............................................................................................................4
DANH MỤC THUẬT NGỮ, TỪ VIẾT TẮT.................................................................5
DANH MỤC CÁC BẢNG SỬ DỤNG ...........................................................................6
DANH MỤC CÁC HÌNH VẼ SỬ DỤNG ......................................................................7
MỞ ĐẦU .........................................................................................................................8
CHƯƠNG I. TỔNG QUAN MÃ ĐỘC TRÊN ANDROID .........................................12
1.1. Kiến trúc hệ điều hành Android .......................................................................12
1.1.1.

Sơ lược lịch sử hệ điều hành Android .......................................................12



1.1.2.

Các thành phần trong hệ điều hành Android.............................................14

1.2. Ứng dụng APK trên Android ...........................................................................19
1.2.1.

Cấu trúc tệp tin APK .................................................................................19

1.2.2.

Quản lý truy cập và an ninh trên Android. ................................................27

1.3. Mã độc trên hệ điều hành Android ...................................................................28
1.3.1.

Các loại mã độc trên Android ...................................................................28

1.3.2.

Các kỹ thuật phát hiện mã độc trên Android ............................................29

CHƯƠNG II. ỨNG DỤNG SVM VÀO PHÁT HIỆN MÃ ĐỘC ANDROID .............32
2.1. Tìm hiểu về học máy véc tơ hỗ trợ SVM .........................................................32
2.1.1.

Bài toán phân loại hai lớp SVM ................................................................32

2.1.2.


Quá trình phân loại sử dụng SVM ............................................................36

2.2. Phát hiện mã độc Android sử dụng SVM .........................................................37
2.2.1.

Đặc trưng và trích chọn đặc trưng .............................................................37

2.2.2.

Xây dựng véc tơ đặc trưng ........................................................................40

CHƯƠNG III. XÂY DỰNG ỨNG DỤNG PHÁT HIỆN MÃ ĐỘC TRÊN ANDROID
.......................................................................................................................................43
3.1. Mơ hình ứng dụng phân loại APK ...................................................................43
3.2. Phân tích và thiết kế..........................................................................................44
3.2.1.

Phân tích và thiết kế cấu trúc lớp dữ liệu ..................................................45

3.2.2.

Phân tích và thiết kế chức năng.................................................................47

3.3. Xây dựng ứng dụng phát hiện mã độc DroidGuard .........................................55
3.3.1.

Môi trường và công cụ phát triển ..............................................................55

1



Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

3.3.2.

Các giao diện màn hình DroidGuard ........................................................56

3.4. Cài đặt và thử nghiệm .......................................................................................57
3.4.1.

Cài đặt và chuẩn bị dữ liệu ........................................................................57

3.4.2.

Các kịch bản thử nghiệm...........................................................................60

3.5. Đánh giá kết quả ...............................................................................................62
3.5.1.

Ứng dụng phân loại apkClassifer ..............................................................62

3.5.2.

Ứng dụng DroidGuard ..............................................................................66

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ....................................................................67
TÀI LIỆU THAM KHẢO .............................................................................................69
PHỤ LỤC ......................................................................................................................71
1.


Mơ hình phân loại tuyến tính (c = 0.03125) .....................................................71

2.

Mơ hình phân loại RBF (g =0.03125 ,c =8) .....................................................71

3.

Mơ hình phân loại Polynomial (g= 0.5, c=32, d=3) .........................................72

2


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

LỜI CẢM ƠN
Để hồn thành luận văn, tơi xin gửi lời cảm ơn tới PGS.TS Nguyễn Linh Giang,
trưởng bộ môn Truyền thơng và Mạng máy tính, Viện CNTT & TT, Trường Đại học
Bách Khoa Hà Nội. Thầy Nguyễn Linh Giang đã giúp đỡ, động viên và chỉ ra những
kiến thức khoa học tơi cịn thiếu sót, cũng như đã góp ý về nội dung của luận văn.
Tôi cũng xin cảm ơn tới tồn thể giảng viên bộ mơn Truyền thơng và Mạng máy
cùng Viện CNTT & TT đã tận tình giảng dạy, truyền đạt những kiến thức quý báu
trong quá trình học tập tại lớp cao học Truyền thơng và Mạng máy tính 2014A. Những
kiến thức này đã giúp tơi hồn thành tốt luận văn.
Cuối cùng, tơi muốn cảm ơn gia đình, người thân và bạn bè đã động viên giúp đỡ
tơi trong q trình học tập và hồn thành luận văn.

Hà Nội, Ngày 22 tháng 05 năm 2017
Tác giả


Nguyễn Văn Lực

3


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

LỜI CAM ĐOAN
Đề tài luận văn “Xây dựng hệ thống phát hiện mã độc trên di động” được thực
hiện dưới sự hướng dẫn của PGS. TS Nguyễn Linh Giang, nghiên cứu về giải pháp
phát hiện mã độc mới: áp dụng học máy véc tơ SVM vào việc phát hiện mã độc trên
các thiết bị di động chạy hệ điều hành Android. Ứng dụng phát hiện mã độc sử dụng
học máy SVM được xây dựng dựa trên các kiến thức tìm hiểu về học máy SVM kết
hợp với kỹ thuật phân tích tĩnh các tệp tin APK. Ứng dụng được thử nghiệm và đánh
giá kết quả đạt được khả quan, hứa hẹn áp dụng vào các phần mềm, hệ thống phát hiện
mã độc trên Android nói riêng và các hệ thống nói chung.
Tơi xin cam đoan đây là cơng trình nghiên cứu, phát triển của bản thân dựa trên các
kiến thức về mã độc, hệ điều hành Android, và học máy véc tơ SVM cũng như các
công cụ, thư viện mã nguồn mở hợp pháp, các tài liệu tham khảo và nội dung trích dẫn
được ghi rõ nguồn gốc rõ ràng, khơng sao chép tồn văn nội dung luận văn của bất kỳ
cá nhân, tổ chức nào khác.

Hà Nội, Ngày 22 tháng 05 năm 2017
Tác giả

Nguyễn Văn Lực

4



Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

DANH MỤC THUẬT NGỮ, TỪ VIẾT TẮT

APK

Android Package Kit

OHA

Open Handset Alliance

SSL/TSL

Transport Layer Security/Secure Sockets
Layer (SSL)

GPS

Global Positioning System

CPU

Central Processing Unit

Android Runtime

Một thành phần trong kiến trúc Android


Dalvik

Máy ảo chạy trên nền tảng Android

Activity

Một khái niệm chỉ các tác vụ trong
Android

Bytecode

Một loại mã lệnh được biên dịch và chạy
trong máy ảo Java

DEX

Dalvik Executable

LEB128

Little Edian Base 128

AndroidManifest

Tệp tin quản lý quyền truy cập cho ứng
dụng Android

API

Application Programming Interface


Permission

Quyền truy cập trong hệ điều hành Android

SVM

Support Vector Machine

RBF

Radius Basis Function

Polynomial

Hàm nhân đa thức trong phân loại SVM

5


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

DANH MỤC CÁC BẢNG SỬ DỤNG
Bảng I-1. Phân bố các thiết bị theo phiên bản Android26 ..............................................14
Bảng I-2. Minh họa kiểu lưu trữ LEB128 .....................................................................21
Bảng II-1. Các permission có mức độ nguy hiểm. ........................................................39
Bảng III-1. Mô tả ca sử dụng Training ..........................................................................48
Bảng III-2. Mô tả ca sử dụng Scanning .........................................................................49
Bảng III-3. Mô tả ca sử dụng RuntimeDetection ..........................................................50
Bảng III-4. Mô tả ca sử dụng File Scanning .................................................................50

Bảng III-5. Mô tả ca sử dụng Classifying .....................................................................51
Bảng III-6. Mô tả ca sử dụng Reporting........................................................................51
Bảng III-7. Các tham số xây dựng mơ hình phân loại ..................................................58
Bảng III-8. Kết quả thử nghiệm apkClassifier với mơ hình tuyến tính .........................63
Bảng III-9. Kết quả thử nghiệm apkClassifier với nhân RBF .......................................64
Bảng III-10. Kết quả thử nghiệm apkClassifier với nhân Polynomial ..........................66

6


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

DANH MỤC CÁC HÌNH VẼ SỬ DỤNG
Hình I-1. Liên minh các thiết bị cầm tay mở OHA25 ....................................................13
Hình I-2. Kiến trúc hệ điều hành Android18 ..................................................................15
Hình I-3. Chu trình hoạt động của một ứng dụng Android ...........................................17
Hình I-4. Quá trình xây dựng một tệp tin APK .............................................................20
Hình I-5. Cấu trúc tệp tin Dex và Header ......................................................................21
Hình I-6. Cấu trúc của string_ids ..................................................................................23
Hình I-7. Cấu trúc của class_ids ....................................................................................24
Hình I-8. Cấu trúc của class_data_item.........................................................................25
Hình I-9. Thẻ <uses-permission> trong tệp tin AndroidMainifest................................26
Hình II-1. Bài tốn phân loại tuyến tính hai lớp SVM ..................................................33
Hình II-2. Mặt siêu phẳng phân tách âm và dương .......................................................34
Hình II-3. Sơ đồ khối phân loại sử dụng SVM .............................................................36
Hình II-4. Phân loại mã độc APK sử dụng SVM ..........................................................42
Hình II-5. Minh họa quá trình phân loại SVM với véc tơ đặc trưng.............................42
Hình III-1. Mơ hình ứng dụng phân loại APK ..............................................................43
Hình III-2. Thiết kế các lớp đối tượng ..........................................................................45
Hình III-3. Biểu đồ ca sử dụng ......................................................................................48

Hình III-4. Quá trình training ........................................................................................52
Hình III-5. Quá trình classifying ...................................................................................53
Hình III-6. Quá trình Scanning trên DroidGuard ..........................................................54
Hình III-7. Màn hình MainActivity ...............................................................................56
Hình III-8. Màn hình ScanActivity ...............................................................................56
Hình III-9. Màn hình ReportAcitivity ...........................................................................57
Hình III-10. Tối ưu giá trị c cho mơ hình tuyến tính .....................................................63
Hình III-11. Tối ưu giá trị c và g cho mơ hình RBF .....................................................64
Hình III-12. Tối ưu giá trị c và g cho mơ hình Polynomial ..........................................65

7


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

MỞ ĐẦU
Hiện nay, chúng ta đang tiến vào cuộc cách mạng công nghệ lần thứ 4.0 của thế kỷ
21. Cuộc cách mạng này đang diễn ra với các phát minh về smartphone, IoT (internet
of things), AI (trí tuệ nhân tạo),...Smartphone là một phát minh vĩ đại của con người,
ngày nay ta có thể bắt gặp smartphone ở mọi nơi, mọi ngõ ngách cuộc sống.
Smartphone được phát triển như hiện nay, Steve Jobs đóng góp một vai trị rất quan
trọng, ơng được coi là người đã thay đổi cả ngành công nghiệp sản xuất điện thoại với
Iphone và iOS. Nhưng Steve Jobs không phải là người làm cho smartphone trở nên
phổ biến và trở thành một kỷ nguyên như hiện nay, Google và Android mới là nhân tố
tạo nên kỷ nguyên công nghệ di động. Google đã phát triển và duy trì Android trở
thành một hệ điều hành di động phổ biến nhất hiện nay.
Theo thống kê của Wikipedia vào năm 201518, hệ điều hành Android chiếm 80.52%
số thiết bị thông minh và 59.16% số thiết bị di động trên toàn cầu, hiện nay con số này
đã lên tới 62.94% vào tháng 03 năm 2017 theo số liệu của Operating System Market
Share19. Điều này khiến Android đang trở thành mục tiêu của rất nhiều các cuộc tấn

công của giới tội phạm mạng bởi sự phổ biến, số lượng người dùng lớn, khó kiểm sốt
an ninh và phân phối của các ứng dụng.
Theo thống kê trong [9] bởi các công ty bảo mật, số lượng các ứng dụng độc hại đã
tăng từ 120,000 lên 718,000 trong khoảng từ năm 2012 tới 2013. Đặc biệt vào năm
2012, một nhóm hacker có tên gọi Eurograbber đã tấn công và đánh cắp gần 36 triệu
euro từ người dùng tại liên minh Châu Âu.
Lý do chọn đề tài
Với thiết kế mở, Android cho phép người dùng phát triển và chia sẻ ứng dụng qua
hệ thống Google Play của Goolge hoặc cài đặt qua các một phân phối thứ ba, thậm chí
trực tiếp vào thiết bị. Điều này khiến cho nguy cơ về bảo mật trên Android có thể bị
lợi dụng và trở nên khó kiểm sốt. Tuy rằng, Google đã có hệ thống kiểm sốt và ngăn
chặn nhưng thực tế chỉ ra các ứng dụng độc hại vẫn được chia sẻ và cài đặt rất nhiều
qua Google Play. Bởi vậy, các ứng dụng bảo mật trở nên thật sự cần thiết, trong khi
các ứng dụng bảo mật trên Android hiện nay chủ yếu sử dụng các kỹ thuật phân tích

8


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

và phát hiện truyền thống trên mơi trường PC. Chính vì vậy, các ứng dụng này thường
tỏ ra kém hiệu quả.
Hiện nay, cơng nghệ AI nói chung và học máy nói riêng đang được nghiên cứu,
phát triển và áp dụng vào nhiều lĩnh vực một cách hiệu quả. Các nghiên cứu về phát
hiện mã độc sử dụng SVM trên Android được đưa ra rất nhiều nhưng có sự khác nhau
về các yếu tố đặc trưng và hiệu quả phát hiện. Đa phần, các nghiên cứu này chỉ dừng
lại ở việc thử nghiệm trên mơi trường MatLab và PC.
Chính vì thế, tôi quyết định thực hiện luận văn với đề tài “Xây dựng hệ thống phát
hiện mã độc trên di động”, tơi muốn mở rộng các nghiên cứu trước đó và hiện thực
hóa các nghiên cứu về áp dụng học máy vào phân tích mã độc trên di động, đồng thời

xây dựng một ứng dụng di động trên Android để phát hiện các mối nguy hại đối với
người dùng smartphone.
Lịch sử nghiên cứu
Một số nghiên cứu nổi trội áp dụng học máy véc tơ hỗ trợ SVM vào việc phát hiện
mã độc Android như các nghiên cứu của Daniel Arp1, Naser Peiravian2, H. Alain
Pimentel3 đều được đăng trên các tạp chí uy tín. Các nghiên cứu này chủ yếu thực hiện
trên môi trường thử nghiệm MatLab để đánh giá kết quả. Trong đó, chỉ Daniel Arp đã
xây dựng thành cơng ứng dụng phát hiện mã độc di dộng Drebin, nhưng Drebin lại
không được cung cấp tới người dùng.
Hiện tại, trong quá trình làm việc tại cơng ty VSEC, tơi đã được nhận được rất
nhiều yêu cầu giúp đỡ về việc phân tích các mẫu mã độc trên Android. Đồng thời, xuất
hiện nhu cầu xây dựng một mơi trường phân tích mã độc cho phép người dùng chia sẻ,
thực hiện phân tích trên nền tảng Web nhắm hướng tới sự hỗ trợ cho cộng đồng.
Với các kiến thức về học máy véc tơ tơi đã tìm hiểu và được chỉ dạy, hướng dẫn bởi
PGS.TS Nguyễn Linh Giang, cùng với nền tảng là các các nghiên cứu đã được xuất
bản trên quốc tế. Tôi quyết định thực hiện nghiên cứu về việc áp dụng học máy véc tơ
cho phát hiện mã độc trên di động. Đây chính là các nền tảng, cơ sở khoa học cho
phép tôi thực hiện luận văn.

9


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

Mục đích, đối tượng và phạm vi của nghiên cứu
-

Mục đích nghiên cứu: luận văn được thực hiện với mục đích áp dụng cơng
nghệ học máy vào lĩnh vực phân tích và phát hiện mã độc. Từ cơ sở nghiên cứu,
xây dựng một ứng dụng phát hiện mã độc trên di động nhằm thử nghiệm và

đánh giá hiệu quả của phương pháp, từ đó đưa ra giải pháp kết hợp với các
phương pháp phát hiện mã độc truyền thống trong các phần mềm, hệ thống phát
hiện mã độc cho di động.

-

Đối tượng nghiên cứu: phát hiện các phần mềm độc hại sử dụng học máy véc
tơ SVM đối với các tệp tin ứng dụng APK trên Android.

-

Phạm vi nghiên cứu: luận văn chỉ dừng lại ở việc áp dụng một phương pháp
học máy cụ thể là SVM vào phát hiện mã độc kết hợp với kỹ thuật phân tích
tĩnh. Đồng thời, tác giả chỉ thực hiện việc áp dụng học máy véc tơ cho bài toán
phân loại hai lớp là mã độc và phần mềm sạch.

Các luận điểm chính của luận văn:
Các luận điểm chính được nêu ra trong luận văn bao gồm:
 Các kiến thức tổng quan về kiến trúc hệ điều hành Android, cấu trúc và cách
thức hoạt động của các ứng dụng trong hệ điều hành Android. Đồng thời
luận văn chỉ ra các đặc trưng, hành vi của một mã độc và các thông tin quan
trọng cần nắm bắt để phát hiện và phân tích hành vi đó.
 Tìm hiểu về phương pháp học máy véc tơ SVM, áp dụng phân loại SVM cho
đối tượng ứng dụng Android. Chỉ ra các đặc trưng cần thiết để phát hiện mã
độc, và xây dựng véc tơ đặc trưng đối với tệp tin APK cho ứng dụng phát
hiện mã độc.
 Từ lý thuyết, tiến hành phân tích thiết kế và xây dựng một ứng dụng phát
hiện mã độc APK. Đồng thời thử nghiệm và đánh giá kết quả.
Phương pháp nghiên cứu
Nghiên cứu được thực hiện trên một tập dữ liệu thu thập được chia sẻ từ các nguồn

nghiên cứu uy tín trên Internet và các trường đại học trên thế giới. Tập dữ liệu bao
gồm 400 mẫu mã độc và 400 mẫu phần mềm sạch, và được chia thành bốn tập dữ liệu
con phục vụ quá trình huấn luyện, thử nghiệm và đánh giá kết quả.

10


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

Quá trình huấn luyện và thử nghiệm phân loại sẽ được thực hiện trên môi trường PC
để đánh giá kết quả. Kết thúc quá trình thử nghiệm, quá trình huấn luyện sẽ được thực
hiện lại trên toàn bộ tập dữ liệu ban đầu, đầu ra là một cơ sở dữ liệu các véc tơ đặc
trưng. Cơ sở dữ liệu sẽ được sử dụng cho ứng dụng di dộng được xây dựng và thử
nghiệm trên môi trường mô phỏng Genymotion.

11


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

CHƯƠNG I. TỔNG QUAN MÃ ĐỘC TRÊN ANDROID
1.1. Kiến trúc hệ điều hành Android
Hệ điều hành Android là một điều hành di động mã nguồn mở được phát triển bởi
Google dựa trên nền tảng nhân Linux. Android ban đầu được thiết kế dành cho các
thiết bị cảm ứng như điện thoại và máy tính bảng, nhưng sau này với sự phát triển của
cơng nghệ, Android cịn được sử dụng cho các thiết bị khác như đồng hồ thông minh,
ti vi, đầu kỹ thuật số, ơ tơ, …
Do cơng việc chính của luận văn là xây dựng một ứng dụng phân loại và phát hiện
mã độc trên nền tảng Android nên cần thiết phải có những hiểu biết cơ bản về hệ điều
hành Android.

1.1.1. Sơ lược lịch sử hệ điều hành Android
Android ban đầu được tạo ra và phát triển bởi Andy Rubin, Rich Miner, Nick Sears,
và Chris White trong công ty Android Inc tại Paolo Alto, California. Họ cũng chính là
đồng chủ tịch của Android Inc.
Android Inc. sau đó được mua lại bởi Google vào năm 2005 và trở thành một cơng
ty trực thuộc của Google. Đây chính là những bước đi đầu tiên của Google nhằm tham
gia vào thị trường di động. Với sự đầu tư và hỗ trợ mạnh mẽ từ Google, Android được
giới thiệu tới hàng loạt các nhà mạng cũng như các hãng phần cứng: SamSung, HTC,
Motorola, LG, …
Android được giới thiệu là một điều hành mở, uyển chuyển và dễ dàng nâng cấp.
Đặc biệt, Android được hỗ trợ bởi hệ sinh thái của Google: công cụ tìm kiếm, gmail,
lịch, … Dường như, Google quyết định tạo ra một hệ điều hành di động và một hệ sinh
thái bao quanh Android nhằm cạnh tranh thị trường di động với Apple, một công ty
cũng đang phát triển một hệ điều hành di động khác là iOS.
Ngày 05/11/2007, liên minh thiết bị cầm tay mở OHA được thành lập bởi hiệp hội
các công ty lớn về viễn thông, phần cứng và phần mềm trên thế giới. Liên minh này
được lập ra với mục đích phát triển các tiêu chuẩn mở cho di động. Cùng thời gian

12


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

này, Google cũng chính thức ra mắt hệ điều hành Android đầu tiên được xây dựng trên
nhân Linux 2.6 mang tên Android CupCake 1.5.

Hình I-1. Liên minh các thiết bị cầm tay mở OHA25

Ngày 23/09/2008, chiếc điện thoại chạy hệ điều hành Android đầu tiên được bán ra
với tên gọi HTC Dream hay còn gọi với tên khác là T-Mobile G1.

Từ năm 2008 tới nay, Android tiếp tục được phát triển và ra mắt các phiên bản cao
hơn như Donut (1.6), Éclair (2.0 – 2.1), Froyo (2.2 - 2.2.3), … và phiên bản Ice Cream
Sandwich (4.0 – 4.0.4) đánh dấu sự bùng nổ về di động khi mà hàng loạt các hãng điện
thoại ra mắt các mẫu điện thoại chạy Android. Hiện nay phiên bản Nougat (7.0 - 7.1.1)
là phiên bản cập nhật mới nhất dành cho các điện thoại Android.
Mặc dù hiện này, phiên bản mới nhất là 7.1 nhưng các thiết bị chạy Android thấp
hơn vẫn còn rất lớn. Dưới đây là bảng thống kê thể hiện sự phân bố các phiên bản
Android trên các thiết bị di động hiện nay (số liệu được lấy từ Google 06/03/2017):

13


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

Phiên bản

Tên phiên bản

API

Tỉ lệ

2.3.32.3.7

Gingerbread

10

1.0%


4.0.34.0.4

Ice Cream Sandwich

15

1.0%

4.1.x

Jelly Bean

16

3.7%

4.2.x

17

5.4%

4.3

18

1.5%

4.4


KitKat

19

20.8%

5.0

Lollipop

21

9.4%

22

23.1%

5.1
6.0

Marshmallow

23

31.3%

7.0

Nougat


24

2.4%

25

0.4%

7.1

Bảng I-1. Phân bố các thiết bị theo phiên bản Android26

1.1.2. Các thành phần trong hệ điều hành Android
Android là một hệ điều hành mở và được phát triển dựa trên nhân Linux. Android
được phát triển dựa trên kiến trúc ngăn xếp, mỗi ngăn xếp là một tầng và được xếp
chồng lên các tầng dưới.
Android bao gồm bốn tầng cơ bản, mỗi tầng cung cấp một chức năng, dịch vụ khác
nhau từ việc quản lý phần cứng, các cảm biến thiết bị, bộ nhớ, chíp ở mức thấp cho
tới các ứng dụng được phát triển và tương tác với người dùng ở mức cao. Hình I-2
dưới đây thể hiện kiến trúc của hệ điều hành Android.

14


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

Hình I-2. Kiến trúc hệ điều hành Android18

Do Android được phát triển dựa trên nhân Linux nên tầng dưới cùng chính là nhân

Linux.
a. Nhân Linux
Nhân Linux là tầng thấp nhất trong kiến trúc hệ điều hành Android. Đây chính là
tầng quang trọng nhất và được coi là trái tim của hệ điều hành Android.
Nhân Linux được tạo ra và phát triển bởi Linus Torvalds, một nhân hệ điều hành
phổ biến nhất hiện nay và cũng được coi như trái tim của Internet bởi nó được sử dụng
làm nhân của các hệ điều hành quan trọng nhất trong hạ tầng Internet ngày nay:
CentOS, RedHat, OpenSuse, Ubuntu,…
Trong kiến trúc Android, nhân Linux cung cấp các dịch vụ dành cho hoạt động của
hệ điều hành và quản lý các thành phần phần cứng. Nhân Linux cung cấp các chức
năng như quản lý bộ nhớ, quản lý tiến trình, quản lý các giao thức kết nối Internet:

15


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

TCP/IP, HTTP, DNS, …Thậm chí nhân Linux cũng quản lý các trình điều khiển thiết
bị như cảm ứng, âm thanh, hình ảnh, thu phát sóng,…
b. Các thư viện hỗ trợ
Tầng trên của nhân Linux là tập hợp các thư viện cung cấp các chức năng xử lý dữ
liệu cho các tầng bên trên, tầng này chính là tầng giao tiếp giữa nhân Linux và các tầng
khác.
Các thư viện này được viết bằng ngôn ngữ C/C++ và biên dịch sang mã máy dưới
dạng nhị phân cung cấp các API cho việc quản lý giao diện (Surface Manager), xử lý
đa phương tiện, kết nối cơ sở dữ liệu (SQLite), xử lý đồ họa (OpenGL-ES), xử lý
phông chữ (FreeType), và hỗ trợ kết nối web, trình duyệt (WebKit) hay thậm chí là kết
nối an tồn SSL/TLS,…Tầng này cịn cung cấp các thư viện Android Runtime, các thư
viện này hỗ trợ các ứng dụng được phát triển bằng ngôn ngữ Java. Android Runtime sẽ
được nói chi tiết ở phần bên dưới.

c. Android Runtime
Android Runtime cũng bao gồm một tập hợp các thư viện được viết bằng C/C++ và
một máy ảo Dalvik cho việc phát triển và chạy các ứng dụng được viết bằng ngôn ngữ
Java. Các thư viện hỗ trợ việc phát triển ứng dụng Java, cung cấp các API cho việc
giao tiếp với máy ảo Dalvik cũng như các API cho lập trình viên Java sử dụng.
Máy ảo Dalvik
Máy ảo Dalvik là một kiến trúc và nền tảng được phát triển dựa trên máy ảo dành
cho ngơn ngữ Java, nó được sử dụng như một hộp cát để chạy các chương trình viết
bằng Java. Do các đặc tính và mơi trường khác biệt của các thiết bị di động so với môi
trường máy tính mà máy ảo Dalvik đã được thiết kế lại bởi Google.
Các thiết bị di động thường bị giới hạn về kích thước và năng lượng sử dụng nhưng
vẫn phải đảm bảo hiệu năng là một thiết bị thông minh, trong khi bộ vi xử lý CPU có
xung nhịp thấp, bộ nhớ nhỏ so với máy tính. Chính vì thế mà máy ảo được Oracle phát
triển dành cho Java trên máy tính là khơng phù hợp với các thiết bị di động do máy ảo

16


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

này tạo ra rất nhiều tiến trình cho mỗi chương trình viết bằng Java. Dalvik ra đời nhằm
giải quyết vấn đề này, Dalvik được thiết kế chỉ chạy một lần duy nhất trong quá trình
khởi động máy. Dalvik được coi như tiến trình cha của tất cả các tiến trình khác được
tạo ra bởi ứng dụng Android.
Android sử dụng một khái niệm có tên gọi “Zygote” nhằm chia sẻ các lệnh, bộ nhớ
tài nguyên cho các ứng dụng trên hệ điều hành Android mỗi khi ứng dụng được khởi
chạy. Zygote chính là tiến trình được tạo ra từ Dalvik trong quá trình khởi động của
thiết bị, tiến trình này sẽ khởi tạo và tải các thư viện hỗ trợ (mục b) lên bộ nhớ.
Hình I-3 dưới đây thể hiện cách thức hoạt động của máy ảo Dalvik và các ứng dụng
Android.


Hình I-3. Chu trình hoạt động của một ứng dụng Android

Mỗi khi một ứng dụng Android được khởi chạy bởi người dùng, tiến trình Zygote sẽ
khởi tạo các trạng thái, bộ nhớ, lệnh đã được tải lên bộ nhớ bởi các thư viện hỗ trợ.
Việc này giảm thời gian tạo tiến tình, tiết kiệm chi phí bộ nhớ do sử dụng cơ chế bộ
nhớ ảo.
ByteCode
Như đã trình bày trong mục máy ảo Dalvik, thì các chương trình Java sẽ được biên
dịch sang một loại mã chạy trong máy ảo. Mã này có tên gọi “bytecode”, và có thể

17


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

được chạy trong máy ảo Java nhưng do Dalvik đã được thiết kế lại bởi Google để đảm
bảo hiệu năng cũng như tối ưu cho Android nên mã bytecode cũng được chuyển đổi
cho phù hợp với Dalvik. Các mã bytecode trong Dalvik có tên gọi khác là DEX
bytecode được chuyển đổi từ bytecode qua công cụ Dx Tool nằm trong bộ Android
SDK được phát triển bởi Google. Các mã DEX bytecode này được lưu trong tệp tin có
định dạng Dex do Google tự phát triển và đóng gói vào các ứng dụng Android. Chi tiết
về cấu trúc tệp tin Dex và ứng dụng APK sẽ được trình bày cụ thể trong mục sau.
d. Application FrameWork
Tầng này có chức năng cung cấp các gói hỗ trợ các ứng dụng android, phục vụ quá
trình xây dựng ứng dụng Android, cũng như cung cấp các dịch vụ quản lý, hỗ trợ tầng
ứng dụng.
Các dịch vụ này tạo ra các API cho lập trình viên Android quản lý tài nguyên bằng
ngôn ngữ Java. Một số dịch vụ có thể kể ra như quản lý cuộc gọi, tin nhắn hay giám
sát tài nguyên, năng lượng của hệ thống. Dưới đây là một số dịch vụ chính trong tầng

Application FrameWork:
Activity Manager
Đây là một dịch vụ quản lý các hoạt động của ứng dụng. Mỗi ứng dụng khi được
khởi chạy đều có một “activity” ban đầu gọi là MainActivity, và các activity con được
gọi từ MainActivity ban đầu này. Một ví dụ cho activity có thể là hành động nhắn tin
của người dùng, một cuộc gọi thoại, hay một thao tác rà quét các phần mềm độc hại
trong hệ thống, …
Dịch vụ này cũng quản lý các ứng dụng Android đang bị treo, hay các chương trình
đang chiếm dụng nhiều bộ nhớ.
Content Providers
Dịch vụ quản lý việc chia sẻ dữ liệu, tài nguyên giữa các ứng dụng Android. Các dữ
liệu có thể được chia sẻ như danh bạ liên lạc, bộ lưu tin nhắn,... Dịch vụ này cho phép
dữ liệu được truy cập bởi nhiều ứng dụng mà không bị xung đột.

18


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

Telephony Manager
Telephony Manager quản lý truy cập các dịch vụ cuộc gọi trong Adnroid. Dịch vụ
này quản lý các thông tin như định danh điện thoại (IMEI), chế độ sóng nhà mạng,
chuyển vùng giữa các trạm phát sóng.
Location Manager
Dịch vụ cung cấp quản lý truy cập định vị của Android, cho phép các ứng dụng truy
cập vị trí sử dụng cảm ứng GPS của thiết bị
e. Ứng dụng Android
Tầng cuối cùng trong kiến trúc Android chính là tầng ứng dụng. Tầng này chính là
tầng làm việc dành cho các lập trình viên Android và người dùng Android. Các ứng
dụng được cài đặt bởi một tệp tin có tên gọi APK được viết bằng ngôn ngữ Java và

được cài đặt vào hệ thống thông qua kênh phân phối của Google là Google Play.
Các ứng dụng tạo ra các activity từ thao thác của người dùng và chuyển các yêu cầu
xuống các tầng bên dưới. Chi tiết về các ứng dụng APK trên Android sẽ được trình
bày ở mục 1.2 dưới đây.
1.2. Ứng dụng APK trên Android
Trong phần này tơi sẽ trình bày chi tiết về ứng dụng trên Android, các ứng dụng này
có định dạng với tên gọi APK.
1.2.1. Cấu trúc tệp tin APK
Như tơi đã trình bày ở mục 1.1.2 về máy ảo Dalvik và DEX bytecode, các chương
trình nguồn viết bằng Java sau khi được biên dịch thành các mã bytecode và chuyển
đổi sang mã Dex bytecode để lưu trong tệp tin có định dạng Dex.
Tệp tin có định dạng Dex này sẽ được đóng gói cùng với các tệp tin dữ liệu khác để
tạo thành tệp tin APK. Dưới đây là hình vẽ minh họa quá trình xây dựng tệp tin APK
từ các chương trình nguồn viết bằng Java.

19


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

Hình I-4. Quá trình xây dựng một tệp tin APK

Do tệp tin APK được xây dựng bởi các lập trình viên Android nên thành phần tệp
tin APK là khác nhau do dữ liệu khác nhau. Tơi chỉ tập trung trình bày chi tiết các
thành phần và cấu trúc các tệp tin quan trọng có ảnh hưởng trực tiếp tới quá trình phân
loại và phát hiện mã độc sử dụng SVM.
a. Tệp tin Dex
Nội dung của tệp tin chính là các đoạn mã lệnh đã được biên dịch từ ngôn ngữ Java
của lập trình viên, như vậy nếu có thể phân tích tệp tin Dex này ta hồn tồn có thể chỉ
ra được luồng thực thi, các chức năng của một ứng dụng Android và các mối nguy hại

có thể xảy ra.
Cấu trúc tệp tin Dex
Trong máy ảo Java, các lớp đối tượng sẽ được biên dịch thành từng tệp tin chứa mã
bytecode riêng biệt, cịn đối với Android thì tất cả các lớp đối tượng sẽ được biên dịch
và chỉ nằm một tệp tin Dex có tên gọi là class.dex.
Dex sử dụng một kiểu lưu trữ little endian có tên gọi LEB128 để lưu các giá trị có
độ dài 32 bit trong tệp tin. Ví dụ giá trị 624485 và - 624485 trong hệ thập phân sẽ được
lưu trữ trong tệp tin Dex như sau:

20


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

Cơ số 10

Cơ số 16

Cơ số 2

LEB128

624485

98765

1001 1000 0111 0110 0101

E58E26


-624485

FFF6789B

0110 0111 1000 1001 1011

9BF159

Bảng I-2. Minh họa kiểu lưu trữ LEB128

Cấu trúc của tệp tin Dex được lưu trữ theo các liên kết và bao gồm các phần cơ bản
được thể hiện trong hình I-5 dưới đây:

Hình I-5. Cấu trúc tệp tin Dex và Header

Phần header: header của tệp tin Dex bao gồm các thông tin về sơ đồ vật lý và logic
của tệp tin. Header được lưu trữ trong tệp tin Dex với kích thước là 128 byte. Các
thông tin quan trọng trong phần header bao gồm:
 magic là 8 byte định nghĩa nhận dạng của tệp tin dex so với các tệp tin khác
và phiên bản của tệp tin Dex. Một ví dụ “dex\n035” chỉ ra tệp tin có định
dạng Dex và phiên bản là 035. Hiện tại với Android 7.0 thì phiên bản là 037
dex.

21


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

 string_ids_off và string_ids_size chỉ ra vị trí cũng như kích thước của phần
string_ids trong tệp tin. Hai giá trị này cho phép xác định tất cả các chuỗi ký

tự được sử dụng trong tệp tin Dex hay chính là các chuỗi ký tự được sử dụng
trong các lớp đối tượng: tên lớp đối tượng, tên biến,…
 proto_ids_off và proto_ids_size chỉ ra vị trí và kích thước của phần
proto_ids trong tệp tin Dex.
 method_ids_off và method_ids_size chỉ ra vị trí lưu trữ phần method_ids
trong tệp tin Dex. Thông tin này rất quan trọng vì nó cho phép ta có thể tìm
ra vị trí lưu trữ các phương thức trong một lớp đối tượng: tên phương thức,
tên class tương ứng,…
 class_ids_off và class_ids_size, phần này tương tự cũng chỉ ra vị trí và kích
thước dùng để lưu trữ phần class_ids. Phần này cho phép ta xác định các
thông tin cần thiết về các lớp đối tượng trong tệp tin Dex, class_ids cùng với
method_ids chính là hai phần chính liên quan tới việc trích xuất đặc trưng sẽ
được trình bày ở chương sau.
 data_ids_off và data_ids_size xác định vị trí và kích thước của phần data
chứa dữ liệu của tệp tin Dex. Đây chính là nơi chứa tồn bộ dữ liệu của tệp
tin. Các thành phần khác ngoài header gần như đều nằm trong data.
 map_offset là được dùng để xác định nhanh các thành phần trong tệp tin
Dex.
 Ngoài ra trong phần header cũng chỉ ra các thông tin là vị trí và kích thước
của các phần khác như type_ids, field_ids, kích thước của tệp tin dex, mã
checksum hay signature của tệp tin.
Phần string_ids:
Phần này định nghĩa danh sách các vị trí cấu trúc string_item_string_data được
lưu trữ trong tệp tin Dex. Hình I-6 dưới đây thể hiện cấu trúc của phần string_ids
trong tệp tin Dex.

22


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động


Hình I-6. Cấu trúc của string_ids

Mỗi phần tử trong danh sách có tên gọi string_data_off có kích thước 4 byte chỉ ra
một vị trí của string_item_string_data trong tệp tin dex.
Cấu trúc string_item_string_data bao gồm hai phần:
struct string_item_string_data {
ULEB128 utf16_size;
char data[utf16_size];
};

Trong đó,
 utf16_size (kích thước 1 byte) là độ dài của chuỗi ký tự được lưu trong tệp
tin theo kiểu LEB128.
 data là nội dung của chuỗi ký tự.
Phần class_ids:
Nội dung của phần này chứa tất cả các lớp đối tượng được định nghĩa hay được sử
dụng trong ứng dụng. Hình I-7 thể hiện cấu trúc của class_ids:

23


Xây Dựng Hệ Thống Phát Hiện Mã Độc Trên Di Động

Hình I-7. Cấu trúc của class_ids

Trong class_ids định nghĩa một danh sách cấu trúc có tên gọi class_def_item_class.
Mỗi cấu trúc này có kích thước 32 byte và chia làm 8 trường có kích thước đều bằng 4
byte. Trong đó, một số trường quan trọng được mô tả như sau:
 class_idx chỉ ra định danh kiểu của lớp.

 access_flags chỉ ra các quyền truy cập vào lớp đối tượng được định nghĩa.
Một số quyền quan trọng như: ACC_PUBLIC, _PRIVATE, _PROTECTED,
_STATIC
 source_file_idx: chính là vị trí của chuỗi ký tự mà định nghĩa tên tệp chương
trình nguồn của lớp đối tượng.
 class_data_off: đây là trường quan trọng nhất vì nó chỉ ra vị trí của cấu trúc
class_data_item chứa nội dung chính của các lớp đối tượng: phương thức,
số biến và định nghĩa của từng biến,…
Cấu trúc class_data_item:
Cấu trúc class_data_item cho phép ta chỉ ra được tất các thông tin về các lớp đối
tượng trong tệp tin Dex .

24


×