LỜI CAM ĐOAN . i
LỜI CẢM ƠN . ii
MỤC LỤC .iii
DANH MỤC CÁC KÝ HIỆU VIẾT TẮT. iv
DANH MỤC CÁC BẢNG BIỂU . v
DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ . vi
MỞ ĐẦU . 1
CHƯƠNG 1. TỔNG QUAN . 4
1.1. NGHIÊN CỨU LIÊN QUAN . 4
1.2. GIỚI THIỆU VỀ NỀN TẢNG ANDROID. 5
1.2.1. Lịch sử hình thành và phát triển . 5
1.2.2. Một số phương pháp lây nhiễn mã độc trên nền tảng Android . 8
1.3. PHÂN TÍCH MÃ ĐỘC . 9
1.3.1. Các phương pháp phân tích mã độc trên Android. 10
1.3.2. Ưu và Nhược điểm của phân tích tĩnh và phân tích động . 16
1.4. GIỚI THIỆU VỀ HỌC MÁY . 17
1.4.1. Phân loại các thuật toán học máy. 19
1.4.2. Giới thiệu một số thuật toán học máy hiệu quả với bài toán. 20
CHƯƠNG 2. ỨNG DỤNG MÔ HÌNH HỌC MÁY TRONG PHÁT HIỆN
NGUY CƠ MÃ ĐỘC TRÊN NỀN TẢNG ANDROID . 25
2.1. PHƯƠNG PHÁP THU THẬP DỮ LIỆU THÔ . 25
2.1.1. Thu thập dữ liệu . 25
2.1.2. Giải thích cấu tạo file APK. 25
2.1.3. Thực hiện dịch ngược file APK để lấy thuộc tính với apktool 28
2.1.4. Trích xuất feature từ dữ liệu thô được dịch ngược từ apktool. 30
2.2. PHƯƠNG PHÁP CHUẨN HÓA TẬP THUỘC TÍNH . 31
2.2.1. Tập thuộc tính. 31
2.2.2. Chuyển dữ liệu sang không gian vector. 34
CHƯƠNG 3. ĐỀ XUẤT MÔ HÌNH, ĐÁNH GIÁ . 37
CHƯƠNG 4. KẾT LUẬN. 45
TÀI LIỆU THAM KHẢO . 46
55 trang |
Chia sẻ: honganh20 | Ngày: 05/03/2022 | Lượt xem: 686 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Luận văn Ứng dụng mô hình học máy trong phát hiện nguy cơ mã độc trên nền tảng android, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ích tĩnh:
Đặc điểm của phương pháp phân tích tĩnh này là sẽ kiểm tra, phân
tích Malware mà không thực thi mã độc. Cơ bản của việc phân tích tĩnh
bao gồm các bước kiểm tra các file thức thi mà không cần các hướng dẫn
thực tế. Qua bước phân tích tĩnh sẽ xác nhận cho chúng ta liệu file đó có
phải là mã độc hay không, cung cấp thông tin về chức năng của chúng,
đôi khi những thông tin này sẽ cung cấp cho người dùng những dấu hiệu
nhận dạng các loại Malware.
Là phương pháp đơn giản và có thể thực hiện một cách nhanh
chóng. Tuy nhiên phương pháp này lại không có hiệu quả trong việc phân
tích những loại Malware phức tạp và do đó chúng ta có thể bỏ qua những
hành vi quan trọng mà Malware gây ra.
Trong mức này chúng ta chưa quan tâm tới việc thực thi File
Malware, trong phần này tôi sẽ tập trung vào việc phân tích mã, cấu trúc,
header của chương trình để xác định các chức năng:
- Sử dụng Hash để xác định Malware.
- Xác định các thông tin từ string, header, function của file
Mỗi kỹ thuật sẽ cung cấp các thông tin khác nhau tùy thuộc mục
đích nghiên cứu. Tôi sẽ sử dụng một vài kỹ thuật sao cho thu thập được
càng nhiều thông tin càng tốt[10].
Sử dụng Hash để xác định Malware
Hashing là phương pháp phổ biến để nhận diện và xác định phần
mềm độc hại. Khi Malware được chạy qua một phần mềm hash sẽ tạo ra
13
một chuỗi ký tự (chuỗi ký tự này được coi như là vân tay của Malware).
Mỗi chuỗi hash xác định ra các Malware duy nhất[11], có thể chia sẻ các
mẫu hash này để giúp cho những người phân tích xác định Malware.
Sử dụng việc tìm kiếm chuỗi
Một chương trình thường chứa các chuỗi nếu nó in ra một message,
kết nối tới một đường dẫn URL hoặc copy một file đến một vị trí xác
định.
Nghiên cứu các chuỗi cũng là một phương pháp đơn giản để chúng
ta có thêm những thông tin về chức năng của chương trình. Ví dụ, chương
trình này thường in xuất ra màn hình để cung cấp cho người dùng một
cập nhật trạng thái, hoặc để cho biết rằng một lỗi đã xảy ra. Những chuỗi
trạng thái và chuỗi lỗi kết thúc có thể nhúng trong tập tin thực thi của
chương trình và có thể vô cùng hữu ích trong việc phân tích phần mềm
độc hại.
Việc bóc tách các chuỗi có trong các phần mềm độc hại được thực
hiện bằng các công cụ như Hex Editor, PeiD[12]. Cho dù sử dụng bất kỳ
công cụ gì để bóc tách các String thì các string có thể được thể hiện dưới
dạng mã ASCII hoặc Unicode. Nhưng việc phân tích chuỗi cần phải hết
sức cẩn thận vì có thể chuỗi đó được người viết Malware cố tình chèn
vào để đánh lừa người phân tích.
Việc thực hiện phân tích chuỗi có thể giúp chúng ta phát hiện ra
một số loại Malware được lưu dưới một định dạng khác để đánh lửa người
dùng như ví dụ sau: Malware netcat là một file thực thi, nhưng chúng
được lưu lại dưới định dạng là một file nén để lừa người dùng có dạng là
nc.rar.
Mỗi loại file có các byte định dạng riêng. Kiểm tra các byte định
dạng để xác định file đó là loại file gì. Chẳng hạn những file thực thi luôn
14
có các byte định dạng là MZ (được thể hiện dưới dạng hex: 4D 5A), các
file nén có định dạng là PK (được thể hiện dưới dạng hex: 50 4B).
Để kiểm tra xem file này có thật sự là một file nén hay là một file
thực thi được lưu dưới dạng của một file nén[13], chúng ta có thể sử dụng
các công cụ như Hex Editor hay PEiD để kiểm tra vấn đề này.
Trình soạn thảo cho phép bạn tìm kiếm chuỗi byte cụ thể trong bản
thân file. Nó sẽ cho bạn biết liệu Malware download về như trong hình
minh hoạ ở trên có thực sự là file winzip hay không. Người dùng không
cần lo lắng liệu mình có vô tình khiến Malware này phát huy tác dụng
hiệu quả của nó ngay bây giờ. Đơn giản là vì trong trình soạn thảo Hex,
chúng ta chỉ có thể xem được nội dung mà không thể kích hoạt file thực
thi.
1.3.1.2. Phương pháp phân tích động:
Đặc điểm của phương pháp phân tích động này là sẽ kiểm tra, phân
tích Malware bằng việc thực thi mã độc:
- Basic dynamic analysis: là phương pháp thực thi mã độc và giám
sát các hành vi của chúng trên hệ thống để tìm cách loại bỏ chúng, tìm ra
các dấu hiệu để nhận biết Malware. Tuy nhiên, chúng ta cần phải xây
dựng môi trường an toàn để cho phép chạy và nghiên cứu Malware mà
không gây tổn hại đến hệ thống hoặc môi trường mạng. Cũng giống với
basic static analysis thì phương pháp basic dynamic analysis thường được
sử dụng kể cả với những người không am hiểu về kiến thức lập trình. Và
phương pháp này cũng không hiệu quả trong việc phân tích các loại
Malware phức tạp[14].
- Advanced dymanic analysis: đây là phương pháp sử dụng chương
trình gỡ lỗi để kiểm tra các trạng thái ngầm của mã độc khi thực thi nó.
15
Phương pháp này sẽ cung cấp cho chúng ta những thông tin chi tiết khi
thực thi mã độc. Phương pháp này sẽ giúp chúng ta thu thập thông tin khi
các thông tin đó khó có thể lấy được từ những phương pháp phân tích
khác[15].
Dynamic analysis giám sát quá trình thực hiện của Malware sau khi
đã chạy, thực thi mã độc. Kỹ thuật dynamic analysis[16] là bước thứ hai
trong tiến trình phân tích Malware, thường thì dynamic analysis sẽ được
thực hiện sau bước basic analysis Malware kết thúc.
Nếu như static analysis phân tích Malware qua việc phân tích chuỗi,
phân tích dựa trên hash, phân tích các byte định dạng, đóng gói Malware
và không thực thi Malware thì Dynamic analysis sẽ phân tích Malware
dựa trên việc thực thi Malware. Dynamic analysis là phương pháp hiệu
quả trong việc xác định các chức năng của Malware.Ví dụ nếu mã độc
của bạn là một keylogger thì dynamic analysis sẽ cho phép bạn xác định
các file log của keylogger trên hệ thống, giúp bạn khám phá ra những bản
ghi mà keylogger nắm giữu, giải mã ra thông tin mà Keylogger gửi đi.
Những điều này rất khó có thể thực hiện được nếu sử dụng kỹ thuật basic
static analysis.
Mặc dù dynamic analysis là một kỹ thuật mạnh mẽ và hữu ích trong
việc phân tích Malware nhưng chúng ta chỉ nên thực hiện dynamic
analysis sau khi thực hiện static analysis[17] vì phương pháp này sẽ đặt
hệ thống của chúng ta trong tình trạng nguy hiểm. Bên cạnh việc trực
quan, dễ nhận thấy những tác động trực tiếp của Malware tới hệ thống thì
phương pháp này vẫn còn có những hạn chế nhất định bởi không phải tất
cả các đường dẫn, các mã lệnh đều được thực hiện khi Malware mới chỉ
chạy có một phần. Trong trường hợp command của Malware yêu cầu các
tham số, mỗi tham số có thể thực hiện chức năng chương trình khác nhau,
16
và nếu không biết lựa chọn sẽ không thể tự động kiểm tra tất cả các chức
năng của Malware
1.3.2. Ưu và Nhược điểm của phân tích tĩnh và phân tích động
Để so sánh cụ thể hơn, ta xây dựng bảng so sánh sau:
Bảng 1.1. Ưu và nhược điểm của phân tích tĩnh, phân tích động
Phân tích tĩnh Phân tích động
Chế độ
phân tích
Phân tích ứng dụng khi ứng dụng
đó không thực thi.
Phân tích ứng dụng khi
ứng dụng đang ở chế độ
thực thi.
Phân tích
mã độc
- Sử dụng các công cụ dịch
ngược để lấy mã nguồn của ứng
dụng từ tệp tin APK(dex2jar,
APKtool,...).
- Kiểm tra quyền của ứng
dụng thông qua tệp tin
AndroidManifest.xml.
- Phân tích dựa trên các đặc
điểm nghi ngờ bởi các họ nhất
định.
- Các lời gọi hệ thống thông
qua API được phân tích nhằm
phát hiện hành vi nguy hiểm của
ứng dụng.
- Phân tích dựa trên
các tính năng, hành vi của
các ứng dụng khi chạy các
ứng dụng.
- Phân tích dựa trên
việc kiểm tra các cuộc gọi
hệ thống và đường dẫn
thực thi.
- Thông tin bị rò rỉ
trong quá trình phân tích
và tiêu hao tài nguyên để
phát hiện hành vi nguy
hiểm của các ứng dụng.
17
Hạn chế - Trong trường hợp mã
nguồn bị làm rối sẽ giảm hiệu quả
của phân tích.
- Mã nguồn không thể được
phân tích trong trường hợp phân
tích bytecode.
- Không thể phát hiện ra mẫu
mã độc quá mới.
- Cần nhiều thời gian
và công sức để phân tích
ứng dụng trong các khoảng
thời gian chạy khác nhau.
1.4. GIỚI THIỆU VỀ HỌC MÁY
Ngày nay, trí tuệ nhân tạo[18] (AI-Artifical Intelligent) nói chung
và học máy (Machine Learning) nói riêng đang vô cùng được quan tâm
nghiên cứu và phát triển như một cơ hội cho cuộc cách mạng công nghiệp
lần thứ tư. Trí tuệ nhân tạo xuất hiện xung quanh ta ngày càng nhiều và
trong mọi lĩnh vực đời sống như hệ thống trợ lý ảo Siri, alexa, Google
Assitant; các dòng xe tự lái của Tesla, Google; hệ thống gợi ý phù hợp
với từng khách hàng của Amazon, Netflix, ...
Học máy là một phần của Trí tuệ nhân tạo. Theo định nghĩa trên
Wikipedia: “Học máy là một lĩnh vực nhỏ của khoa học máy tính, nó có
khả năng tự học hỏi dựa trên dữ liệu đưa vào mà không cần lập trình cụ
thể”.
Ý tưởng cơ bản của học máy là dựa trên một số thuật toán xây dựng
mô hình để giải quyết vấn đề cụ thể như phân lớp, phân loại, hồi quy...
Giai đoạn huấn luyện của học máy sử dụng dữ liệu đầu vào và mô hình
được xây dựng để dự đoán đầu ra. Quá trình học máy cơ bản như sau:
18
Hình 2.1. Sơ đồ quy trình học máy cơ bản
Quá trình để xây dựng hệ thống học máy gồm các giai đoạn sau:
- Thu thập dữ liệu (gathering data): Quá trình thu thập dữ liệu tùy
thuộc vào kiểu bài toán ta cần xử lý. Dữ liệu có thể được thu thập từ nhiều
nguồn khác nhau như một cơ sở dữ liệu, cảm biến, tệp tin,...
- Tiền xử lý dữ liệu (data pre-processing): Tiền xử lý dữ liệu là giai
đoạn quan trọng, giúp xây dựng mô hình học máy hiệu quả. Đây là giai
đoạn chuyển hóa dữ liêu thô, dữ liệu từ nhiều nguồn khác nhau trong thế
giới thực thành dữ liệu sạch (dữ liệu thô có một số đặc điểm như thiếu
xót, nhiễu, không nhất quán).
- Xây dựng mô hình phù hợp (researching model): Đây là giai đoạn
ta dựa trên các thuật toán phân lớp, phân loại để xây dựng mô hình cho
kết quả tốt nhất.
- Huấn luyện, kiểm thử đối với mô hình (training and testing
model): Ta chia dữ liệu thành 03 phần gồm dữ liệu huấn luyện (trainning
data) để huấn luyện bộ phân lớp, dữ liệu xác nhận (validation data) để
tinh chỉnh bộ phân lớp, dữ liệu kiểm thử (testing data) để kiểm tra hiệu
19
suất bộ phân lớp. Chú ý rằng, bộ dữ liệu kiểm thử không được dùng để
huấn luyện do làm sai lệch đánh giá hiệu quả[19].
- Đánh giá (evaluation): Đây là giai đoạn ta đánh giá mô hình, giúp
lựa chọn mô hình phù hợp nhất đối với bộ dữ liệu và mô hình sẽ hoạt
động hiệu quả như thế nào.
1.4.1. Phân loại các thuật toán học máy
Hiện nay, có hai cách thông dụng để phân loại thuật toán học máy
là dựa vào phương thức học (learning style)[20] và dựa vào chức năng
(funtion) của thuật toán. Khi phân loại theo phương thức học thì các thuật
toán chia làm 04 loại gồm: học có giám sát (Supervise learning), học
không giám sát (Unsupervise learning), học bán giám sát (Semi-supervise
learning), học tăng cường (Reinforcement Learning)[21]. Cụ thể như sau:
- Học có giám sát: Dự đoán đầu ra cho dữ liệu mới dựa trên các cặp
dữ liệu đã biết từ trước[22]. Các cặp dữ liệu này thường được gọi là dữ
liệu và nhãn. Đây là thuật toán phổ biến nhất trong học máy. Bài toán học
có giám sát cũng được chia thành 02 loại sau:
+ Bài toán phân loại (Classification): Đây là bài toán khi các nhãn
của dữ liệu đầu vào được có hạn như bài toán phân loại phần mềm dính
mã độc hay không, phân loại email rác hay không, phân loại hoa,...
+ Bài toán hồi quy (Regression): Khi nhãn không được chia thành
các loại mà mang một giá trị như một căn nhà rộng a mét, chia thành b
phòng, cách c kilomet so với trung tâm thành phố thì giá bao nhiêu?
- Học không giám sát: Bài toán chỉ có dữ liệu đầu vào, còn đầu ra
ta hoàn toàn chưa biết. Tùy thuộc vào cấu trúc của dữ liệu mà bài toán
học không giám sát sẽ có thể phân nhóm (clustering) hoặc giảm số chiều
20
(dimension reduction)[23] để thuận tiện lưu trữ và tính toán. Bài toán học
không giám sát cũng được chia thành 02 loại sau:
+ Phân nhóm (clustering): Bài toán phân nhóm toàn bộ dữ liệu
thành nhiều nhóm nhỏ mà dữ liệu trong các nhóm đó có liên quan đến
nhau. Ví dụ: Phân nhóm động vật dựa trên cấu tạo cơ thể, Phân nhóm
khách hàng dựa trên hành vi...
+ Kết hợp (association): Đây là bài toán khi ta tìm ra quy luật từ
nhiều dữ liệu cho trước. Ví dụ: Khách hàng nam mua vest thường mua
thêm áo sơmi; khách hàng mua vợt bóng bàn thường mua thêm hộp quả
bóng,...
- Học bán giám sát (semi-supervised learning): Đây là bài toán dữ
liệu biết trước không đầy đủ như khi ta có một lượng lớn dữ liệu nhưng
chỉ có một số nhất định được gán nhãn. Bài toàn thuộc loại này là loại
nằm giữa hai loại trên.
Khi phân loại theo chức năng của thuật toán, ta có: thuật toán hồi
quy như Logistic Regression, Stepwise Regression[24], Linear
Regression; thuật toán phân loại như SVM, Linear Classifier, kernel
SVM[25]; thuật toán phân cụm như: K-mean clustering, K-Medians,
EM,...
1.4.2. Giới thiệu một số thuật toán học máy hiệu quả với bài
toán
Trong luận văn này, mục tiêu của ta là đề xuất một cơ sở để đánh
giá ứng dụng an toàn hay không. Điều này giúp đưa bài toàn thành dạng
mô hình phân lớp nhị phân với hai nhãn là Malware (mã độc) và Benign
(lành tính). Đối với loại mô hình này, hai thuật toán thường được ưu tiên
sử dụng là Logistic Regression (LR) và Support Vector Machine (SVM).
21
Hồi quy Logistic mô tả mối quan hệ giữa biến phụ thuộc và biến độc lập.
Đối với bài toán phân loại mã độc, biến phụ thuộc là xác suất phát hiện
mã độc và biến độc lập là những thuộc tính mà một ứng dụng có. Đối với
SVM, các điểm dữ liệu sẽ được ánh xạ lên không gian đa chiều và phân
loại thông qua siêu mặt phẳng. Trong hình dưới đây, 2 khoảng dữ liệu
được phân định bằng phương pháp này. Trong đó, các điểm đỏ là tập
Malware và xanh là tập Begin.
Hình 2.2. Mô hình phân lớp nhị phân của SVM
1.4.2.1. Thuật toán Logistic Regression
Kỹ thuật học máy giám sát có nhiều thuật toán phân lớp. Trong đó,
thuật toán Hồi quy Logistic (LR) được sử dụng nhiều trong bài toán phân
lớp dữ liệu. LR tỏ ra đặc biệt tốt đối với tập dữ liệu được phân tách tuyến
tính, dễ thực hiện, diễn giải và rất hiệu quả để huấn luyện.
22
Thuật toán Học máy LR mượn từ xác suất thống kê, nó được sử
dụng để tính khả năng phân loại [0,1] với đầu vào dữ liệu cụ thể, trong
đó thuật toán được biểu diễn dựa trên hàm Logistic Funtion[26] (hàm
sigmoid của logarit tự nhiên).
Sau đây là những điểm mạnh và yếu của thuật toán Hồi quy
Logistic:
- Ưu điểm:
+ Hồi quy Logistic thực hiện tốt đối với tập dữ liệu được phân tách
tuyến tính.
+ Hồi quy Logistic ít khi bị Over-fitting, nhưng nó có thể bị trong
những bộ dữ liệu nhiều chiều.
+ Thuật toán không chỉ đưa ra một thước đo về mức độ tốt của dự
đoán mà còn bao gồm cả phân loại (âm tính hay dương tính).
- Nhược điểm:
+ Giới hạn chính của hồi quy logistic là giả định về tuyến tính giữa
biến phụ thuộc và biến độc lập. Trong thế giới thực, dữ liệu hiếm khi
được phân tách tuyến tính. Hầu hết dữ liệu thời gian sẽ là một mớ hỗn
độn.
+ Hồi quy logistic chỉ có thể được sử dụng để dự đoán các hàm rời
rạc. Do đó, biến phụ thuộc của Hồi quy logistic bị giới hạn ở tập số rời
rạc. Hạn chế này là vấn đề vì nó hạn chế dự đoán dữ liệu liên tục.
1.4.2.2. Giới thiệu về thuật toán Support Vector Machine
SVM (support vector machine) là khái niệm trong thống kê và khoa
học máy tính đối với một tập hợp các phương pháp học có giám sát liên
quan đến nhau để phân loại và phân tích hồi quy. SVM dạng chuẩn nhận
dữ liệu đầu vào và phân loại chúng vào hai lớp khác nhau. Do đó SVM là
23
một thuật toán phân loại nhị phân. Với một bộ các mẫu huấn luyện thuộc
hai loại cho trước, thuật toán huấn luyện SVM xây dựng một mô hình
SVM để phân loại các dữ liệu khác vào hai loại đó. Một mô hình SVM là
một cách biểu diễn các điểm trong không gian và lựa chọn ranh giới giữa
hai loại sao cho khoảng cách từ các mẫu huấn luyện tới ranh giới là xa
nhất có thể. Các dữ liệu mới cũng được biểu diễn trong cùng một không
gian và được thuật toán dự đoán thuộc một trong hai loại tùy vào ví dụ
đó nằm ở phía bên nào của ranh giới.
SVM xây dựng một siêu phẳng hoặc một tập hợp các siêu phẳng
trong một không gian nhiều chiều hoặc vô hạn chiều, có thể được sử dụng
cho phân loại, hồi quy, hoặc các nhiệm vụ khác. Một cách trực giác, để
phân loại tốt nhất thì các siêu phẳng nằm ở càng xa các điểm dữ liệu của
tất cả các lớp (gọi là hàm lề) càng tốt, vì nói chung lề càng lớn thì sai số
tổng quát hóa của thuật toán phân loại càng bé.
Trong nhiều trường hợp, không thể phân chia các lớp dữ liệu một
cách tuyến tính trong một không gian ban đầu được dùng để mô tả một
vấn đề. Vì vậy, nhiều khi cần phải ánh xạ các điểm dữ liệu trong không
gian ban đầu vào một không gian mới nhiều chiều hơn, để việc phân tách
chúng trở nên dễ dàng hơn trong không gian mới. Để việc tính toán được
hiệu quả, ánh xạ sử dụng trong thuật toán SVM chỉ đòi hỏi tích vô hướng
của các vector dữ liệu trong không gian mới có thể được tính dễ dàng từ
các tọa độ trong không gian cũ. Tích vô hướng này được xác định bằng
một hàm hạt nhân K(x,y) phù hợp. Một siêu phẳng trong không gian mới
được định nghĩa là tập hợp các điểm có tích vô hướng với một vectơ cố
định trong không gian đó là một hằng số. Vector xác định một siêu phẳng
sử dụng trong SVM là một tổ hợp tuyến tính của các vector dữ liệu luyện
tập trong không gian mới với các hệ số αi. Với siêu phẳng lựa chọn như
24
trên, các điểm x trong không gian đặc trưng được ánh xạ vào một siêu
mặt phẳng là các điểm thỏa mãn: Σi αi K(xi,x) = hằng số.
Ghi chú rằng nếu K(x,y) nhận giá trị ngày càng nhỏ khi y xa dần
khỏi x thì mỗi số hạng của tổng trên được dùng để đo độ tương tự giữa x
với điểm tương ứng trong dữ liệu luyện tập. Như vậy, tác dụng của tổng
trên chính là so sánh khoảng cách giữa điểm cần dự đoán với các điểm
dữ liệu đã biết. Lưu ý là tập hợp các điểm x được ánh xạ vào một siêu
phẳng có thể có độ phức tạp tùy ý trong không gian ban đầu, nên có thể
phân tách các tập hợp thậm chí không lồi trong không gian ban đầu.
Phân loại thống kê là một nhiệm vụ phổ biến trong học máy. Trong
mô hình học có giám sát, thuật toán được cho trước một số điểm dữ liệu
cùng với nhãn của chúng thuộc một trong hai lớp cho trước. Mục tiêu của
thuật toán là xác định xem một điểm dữ liệu mới sẽ được thuộc về lớp
nào. Mỗi điểm dữ liệu được biểu diễn dưới dạng một vector p chiều và ta
muốn biết liệu có thể chia tách hai lớp dữ liệu bằng một siêu phẳng p − 1
chiều, đây gọi là phân loại tuyến tính. Có nhiều siêu phẳng có thể phân
loại được dữ liệu. Một lựa chọn hợp lý trong chúng là siêu phẳng có lề
lớn nhất giữa hai lớp.
25
CHƯƠNG 2. ỨNG DỤNG MÔ HÌNH HỌC MÁY TRONG PHÁT
HIỆN NGUY CƠ MÃ ĐỘC TRÊN NỀN TẢNG ANDROID
2.1. PHƯƠNG PHÁP THU THẬP DỮ LIỆU THÔ
2.1.1. Thu thập dữ liệu
Dữ liệu ban đầu gồm các file apk được tổng hợp từ nhiều nguồn.
Trong đó, các mẫu Malware (có mã độc) thuộc về đề tài “Drebin” của
trường Đại học Gottingen, Đức[27]; các mẫu Benign (không có mã độc)
tổng hợp từ kho ứng dụng CH play (được đề xuất của Biên tập viên). Từ
tập dữ liệu tổng hợp, hai bộ dữ liệu train và test được chia ra. Trong đó,
tỷ lệ Malware – Benign trong mỗi tập và được đảm bảo độc lập nhau,
không trùng lặp. Số lượng cụ thể như sau:
- Bộ dữ liệu học (train) gồm 82.682 mẫu. Trong đó: Malware có
3.669 mẫu; Benign có 79.013 mẫu.
- Bộ dữ liệu kiểm tra (test) gồm 6.340 mẫu. Trong đó: Malware có
3.120 mẫu; Bengin có 3.220 mẫu.
2.1.2. Giải thích cấu tạo file APK
Android Package Kit (APK) là định dạng file nén được sử dụng bởi
hệ điều hành Android để phân phối và cài đặt các ứng dụng, trò chơi và
phần mềm trung gian.
APK tương tự như các gói phần mềm như APPX trong Microsoft
Windows hoặc Debian package trong hệ điều hành dựa trên Debian. Để
tạo một file APK, một chương trình của Android đầu tiên được dịch bằng
Android Studio, sau đó tất cả các phần của gói sẽ đóng thành một file
nén. Một file APK bao gồm tất cả các chương trình (như file *.dex),
26
resources, assets, certificates, và file manifest. Với trường hợp có nhiều
định dạng, file APK có thể có bất cứ tên nào cần thiết, nhưng chỉ yêu cầu
tên file kết thúc bằng đuôi “.apk” để được định dạng.
Hệ thống Android cho phép người sử dụng cài đặt file APK thủ
công sau khi bật cài đặt “nguồn không xác định” (Unknown Sources)[28],
cho phép cài đặt các nguồn tin cậy khác ngoài Google Play. Mọi người
có thể làm như vậy vì nhiều lý do như cài đặt các ứng dụng không tìm
thấy trên Store, hoặc cài đặt một phiên bản cũ hơn. Mặc dù người dùng
có thể hạ cấp một ứng dụng bằng cách gỡ bỏ phiên bản mới trước, nhưng
nếu thực hiện thông qua Android Debug Bridge[29] sẽ tốt hơn vì nó cho
phép giữ lại dữ liệu.
Một file APK thường có cấu trúc như sau:
- classes.dex:
Bao gồm các mã code đã được biên dịch, dưới dạng Dex (Dalvik
Executable) bytecode. Có thể nhìn thấy nhiều file DEX trong 1 file APK.
Từ Android 5.0 trở lên, với việc giới thiệu ART runtime, chúng được biên
dịch dưới dạng OTA file.
- res/:
Folder này chứa toàn bộ các file XML (layout), và file ảnh (PNG,
JPEG) trong các folder đặc trưng, như là -mdpi và -hdpi cho densities, -
sw600dp hoặc -large cho kích cỡ màn hình, -en, -de, -pl cho ngôn ngữ.
Bất kỳ file XML nào trong res/ đều đã được biên dịch lại. Do đó không
thể đọc trực tiếp chúng bằng các text editor được.
- resource.arsc:
Một vài resource và file định danh (identifiers) được biên dịch và
chứa lại trong file này. Bình thường nó sẽ không được nén lại và được
chứa trong file APK, giúp cho việc truy xuất dữ liệu nhanh hơn. Việc nén
27
lại file này bằng cách thủ công có thể là giải pháp đơn giản để giảm dụng
lượng file.
- AndroidManifest.xml:
Tương tự như các file XML khác, file Manifest của ứng dụng sẽ
được biên dịch lại thành mã máy. Google Play Store sử dụng các thông
tin trong file này để xác định file APK có thể cài đặt được trên thiết bị
hay không dựa vào kiểm tra loại phần cứng, màn hình, độ phân giải của
các thiết bị.
- libs/:
Tất cả các thư viện native (*.so files) sẽ được đặt trong các folder
con (cấu trúc CPU , e.g. x86, x86_64, armeabi-v7a) của folder libs/. Bình
thường nó sẽ được copy từ APK vào folder /data trong quá trình cài đặt.
- assets/:
Folder này chứa các file mà không được sử dụng như các file đặc
trưng của Android. Các file phổ biến nhất là font chữ và data của game,
hoặc bất kỳ loại data nào muốn sử dụng trực tiếp như là file stream.
- META-INF/:
Folder này được chứa trong các file APK đã được ký (signed APK),
bao gồm danh sách tất cả các file có trong APK và chữ ký của chúng.
Cách xác thực chữ ký hiện tại trong Android là việc xác thực từng chữ ký
với nội dung của từng file chưa được nén.
28
Hình 3.1. Cách đóng gói file APK
2.1.3. Thực hiện dịch ngược file APK để lấy thuộc tính với
apktool
Apktool là công cụ dựa trên Java có tính năng dịch ngược, chỉnh
sửa và biên dịch file APK trên Windows, Linux, MacOS.
Sau khi chuẩn bị file APK cần dịch ngược, mở ứng dụng Terminal
emulator hoặc Command prompt tại thư mục chứa file APK. Dịch ngược
file APK khá đơn giản, chỉ cần dùng một lệnh theo mẫu sau:
apktool d
Apktool sẽ tạo một thư mục cùng tên với file APK và đặt tất cả dữ
liệu của ứng dụng trong đó. Thư mục mới sẽ có cấu trúc tương tự như
sau:
29
Hình 3.2. Thư mục chứa dữ liệu giải nén từ file APK
Thư mục res chứa mọi thứ liên quan đến bản dịch và bố cục giao
diện người dùng.
Thư mục smali chứa mã nguồn ứng dụng ở dạng smali. Smali là
một loại ngôn ngữ tương tự như Assembly.
Thư mục unknown chứa mọi thứ khác được đóng gói trong file
APK mà không tuân thủ theo hướng dẫn của Google về đóng gói APK.
Cuối cùng, AndroidManifest.xml là file Manifest. File này chứa
thông tin như tên và đặc điểm ứng dụng, chỉ mục và quyền nó sử dụng.
30
2.1.4. Trích xuất feature từ dữ liệu thô được dịch ngược từ
apktool
Để trích xuất feature từ dữ liệu thô để phục vụ cho quá trình học
máy để phát hiện nguy cơ mã độc, tôi đã sử dụng các tập lệnh từ DREBIN.
Thành phần chính được sử dụng để trích xuất các tính năng từ một
ứng dụng là FeatureExtractor.jar.
Để thực thi file FeatureExtractor.jar ta sử dụng lệnh:
java -jar FeatureExtractor.jar [inputDir] [outputDir]
với [inputDir] [outputDir] là thư mục và inputDir chứa nội dung
ứng dụng.
Phương cách trích xuất:
Đầu tiên, file apicalls_suspicious.txt và jellybean_allmappings.txt
được tải và lưu trữ trong cấu trúc dữ liệu. Chương trình duyệt qua tất cả
file trong inputDir và xử lý chúng tuần tự. Mỗi file sẽ được giải nén và
dịch ngược thông qua apktool.jar. Khi giải nén, mỗi file sẽ tạo một thư
mục để chứa ứng dụng giải nén. Thư mục này sẽ bị xét sau khi phân tích
kết thúc. Nếu quá trình giải nén tốn hơn 30 giây, quy trình giải nén sẽ bị
hủy bỏ và bỏ qua ứng dụng (tránh trường hợp 01 file bị hỏng làm ngăn
cản việc phân
Các file đính kèm theo tài liệu này:
- luan_van_ung_dung_mo_hinh_hoc_may_trong_phat_hien_nguy_co_ma.pdf