Hà N i, ngày tháng 9

55
i LỜI CAM ĐOAN Tôi xin cam đoan các kết qunghiên cu trong luận văn này là sản phm của cá nhân tôi dưới shướng dn ca thy giáo PGS. TS. Ph m Thanh Giang. Các sli u, kết quđược công blà hoàn toàn trung thc. Nhng ni dung trình bày trong lu ận văn này là do tôi nghiên cứu, t ng hp tnhiu ngun tài li u khác nhau. Các tài li u tham kho có xut xrõ ràng, và được trích dẫn đầy đủ, hp pháp. Tôi xin hoàn toàn ch u trách nhi ệm trước l ời cam đoan của mình. Hà Ni, ngày tháng 9 năm 2020 Người cam đoan Trần Đức Kiên

Transcript of Hà N i, ngày tháng 9

Page 1: Hà N i, ngày tháng 9

i

LỜI CAM ĐOAN

Tôi xin cam đoan các kết quả nghiên cứu trong luận văn này là sản

phẩm của cá nhân tôi dưới sự hướng dẫn của thầy giáo PGS. TS. Phạm

Thanh Giang. Các số liệu, kết quả được công bố là hoàn toàn trung thực.

Những nội dung trình bày trong luận văn này là do tôi nghiên cứu, tổng

hợp từ nhiều nguồn tài liệu khác nhau. Các tài liệu tham khảo có xuất xứ

rõ ràng, và được trích dẫn đầy đủ, hợp pháp.

Tôi xin hoàn toàn chịu trách nhiệm trước lời cam đoan của mình.

Hà Nội, ngày tháng 9 năm 2020

Người cam đoan

Trần Đức Kiên

Page 2: Hà N i, ngày tháng 9

ii

LỜI CẢM ƠN

Lời đầu tiên, tôi xin được gửi lời biết ơn sâu sắc tới thầy giáo PGS.

TS. Phạm Thanh Giang, Trưởng phòng Tin học viễn thông, Viện Công

nghệ thông tin, Viện Hàn lâm Khoa học và Công nghệ Việt Nam người

thầy đã luôn khuyến khích, tận tình chỉ bảo, hướng dẫn và hỗ trợ tôi trong

suốt quá trình nghiên cứu.

Tôi xin dành lời cảm ơn chân thành tới các thầy cô giáo của Viện

Công nghệ thông tin đã tận tình đào tạo, cung cấp cho tôi những kiến thức

vô giá, tạo điều kiện tốt nhất cho tôi trong quá trình học tập, nghiên cứu.

Tôi cũng xin gửi lời cảm ơn tất cả những người thân yêu trong gia

đình tôi cùng toàn thể bạn bè, đặc biệt là bạn Nguyễn Việt Đức, cán bộ

Phòng Tin học viễn thông, Viện Công nghệ thông tin đã luôn giúp đỡ,

động viên tôi những khi khó khăn, trở ngại.

Cuối cùng, tôi xin gửi lời cảm ơn tới các đồng nghiệp của tôi tại Bộ

Tư lệnh Cảnh vệ, Bộ Công an đã giúp đỡ, tạo điều kiện thuận lợi cho tôi

học tập và nghiên cứu chương trình thạc sĩ Viện Công nghệ thông tin,

Viện Hàn lâm Khoa học và Công nghệ Việt Nam.

Page 3: Hà N i, ngày tháng 9

iii

MỤC LỤC

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

Page 4: Hà N i, ngày tháng 9

iv

DANH MỤC CÁC KÝ HIỆU VIẾT TẮT

KÝ HIỆU Ý NGHĨA

OS Operating system – Hệ điều hành

APK Android Package Kit

FN False Negative

FP False Positive

TN True Negative

TP True Positive

FNR False Negative Rate

FPR False Positive Rate

TNR True Negative Rate

TPR True Positive Rate

LR Logistic Regression – Hồi quy Logistic

SVM Support Vector Machine

Page 5: Hà N i, ngày tháng 9

v

DANH MỤC CÁC BẢNG BIỂU

Bảng 1.1. Ưu và nhược điểm của phân tích tĩnh, phân tích động ............. 16

Bảng 3.1. Precision và Recall của S1 đến S8 ........................................... 40

Bảng 3.2. Precision và Recall các nhóm thuộc tính ................................. 42

Page 6: Hà N i, ngày tháng 9

vi

DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ

Hình 2.1. Sơ đồ quy trình học máy cơ bản ............................................... 18

Hình 2.2. Mô hình phân lớp nhị phân của SVM ....................................... 21

Hình 3.1. Cách đóng gói file APK ........................................................... 28

Hình 3.2. Thư mục chứa dữ liệu giải nén từ file APK .............................. 29

Hình 3.3. Biểu đồ F1 – Score của các thuộc tính S1 đến S8 .................... 39

Hình 3.4. Biểu đồ Accuracy của các thuộc tính S1 đến S8 ...................... 39

Hình 3.5. F1-score của các nhóm thuộc tính ............................................ 44

Page 7: Hà N i, ngày tháng 9

1

MỞ ĐẦU

Ngày nay cùng với sự phát triển mạnh mẽ của công nghệ thông tin

và sự phát triển của Internet toàn cầu là các nguy cơ mất an toàn thông

tin đang trở nên nguy hiểm và khó lường hơn, trong đó mã độc hại

(malware) là một trong những mối hiểm họa nghiêm trọng trên Internet.

Mã độc ngày càng tiến hóa với những biến thể đa dạng từ virus máy tính,

worm, botnet…với các hình thức xâm nhập, che dấu ngày càng tinh vi.

Số lượng và hình thái đa dạng của mã độc ngày càng tăng, trong khi các

phần mềm phòng chống mã độc không thể phát hiện, ngăn chặn được hết

dẫn đến hàng triệu máy tính bị nhiễm mã độc. Ở Việt Nam, theo số liệu

thống kê của BKAV thì năm 2017 có đến 15 triệu máy tính ở Việt Nam

bị nhiễm mã độc tương ứng thiệt hại khoảng 12.300 tỷ đồng. Ngoài ra,

ngày nay để phát triển một mã độc mới không yêu cầu nhiều kỹ năng cao

do tính sẵn có các công cụ tấn công trên internet. Tính sẵn sàng cao của

các kỹ thuật chống phát hiện cũng như khả năng mua phần mềm độc hại

trên thị trường chợ đen dẫn đến cơ hội trở thành một kẻ tấn công cho bất

kỳ ai, không phụ thuộc vào cấp độ kỹ năng và trình độ chuyên môn. Do

đó, bảo vệ hệ thống máy tính khỏi các phần mềm độc hại trên Intenet là

một trong những nhiệm vụ quan trọng nhất về an ninh mạng cho người

dùng, doanh nghiệp. Một cuộc tấn công đơn lẻ có thể dẫn đến dữ liệu bị

xâm phạm và gây ra những hậu quả to lớn. Sự mất mát lớn và các cuộc

tấn công thường xuyên đặt ra yêu cầu cần thiết phải có các phương pháp

phát hiện chính xác và kịp thời.

Android là một nền tảng hệ điều hành phổ biến nhất trên thiết bị di

động ngày nay. Cùng với hàng trăm nghìn ứng dụng trên các kênh lưu trữ

trực tuyến, nền tảng Android đã đáp ứng được hầu hết các nhu cầu đa

dạng của người sử dụng. Do sự phổ biến, tính mở, tính tùy biến linh hoạt

Page 8: Hà N i, ngày tháng 9

2

nên vấn đề an toàn, bảo mật nói chung và mã độc nói riêng trong hệ thống

Android luôn là chủ đề nóng.

Phát hiện mã độc là một bước quan trọng để có thể ngăn chặn và

tiêu diệt hoàn toàn mã độc ra khỏi thiết bị hoặc hệ thống mạng; khôi phục

lại hiện trạng của thiết bị, hệ thống mạng; truy tìm nguồn gốc tấn công.

Hầu hết mã độc ở dạng các chương trình, dịch vụ không thể đọc thông

thường. Các cách phát hiện mã độc chính là: sử dụng các công cụ và các

kĩ thuật phân tích. Có hai kĩ thuật phân tích chính là Phân tích tĩnh (không

cần chạy mã độc trong hệ thống) và Phân tích động (thực hiện khi mã độc

chạy trong hệ thống).

Học máy là một lĩnh vực của trí tuệ nhân tạo liên quan đến việc

nghiên cứu và xây dựng các kĩ thuật cho phép các hệ thống "học" tự động

từ dữ liệu để giải quyết những vấn đề cụ thể.

Ứng dụng học máy trong phát hiện mã độc là chủ đề đang thu hút

nhiều sự quan tâm trong thời gian qua; khắc phục những nhược điểm của

các phương pháp so sánh mẫu dựa trên cơ sở dữ liệu mã độc được xây

dựng và định nghĩa từ trước là không có khả năng phát hiện ra các mẫu

mã độc mới, số lượng dữ liệu mã độc ngày càng gia tăng làm cho cơ sở

dữ liệu mẫu trở nên ngày càng lớn.

Hơn nữa, ngày nay số lượng mã độc ngày càng tăng cao dẫn đến số

lương mẫu ngày càng nhiểu đòi hỏi phải có một phương pháp phù hợp để

phát hiện mã độc. Do đó hướng nghiên cứu dựa vào các mô hình học máy

để phát hiện và phân loại mã độc tỏ ra là phương pháp tìm năng và hiệu

quả khi số lượng mẫu mã độc lớn và các biến thể của mã độc ngày càng

đa dạng. Tuy nhiên một trong những vấn đề chính được quan tâm là làm

thế nào để xây dựng được mô hình học máy hiệu quả và mang lại kết quả

chính xác cao. Trong đó có một yếu tố quan trọng ảnh hưởng chính đến

mô hình và hiệu qủa của các thuật toán học máy là lựa chọn đặc trưng và

Page 9: Hà N i, ngày tháng 9

3

các phương pháp trích chọn đặc trưng phù hợp. Trong luận văn, tác giả

đề xuất một phương pháp thu thập bộ tiêu chí mở rộng gồm các thông tin

đa dạng thu thập từ ứng dụng Android sau đó phân tích đánh giá mức độ

an toàn của ứng dụng. Dữ liệu đánh giá dựa trên tập mẫu bao gồm 82.682

mẫu với 545.167 feature. Với tập mẫu như vậy, phương pháp hứa hẹn sẽ

đạt hiệu quả trong việc dự đoán và phát hiện các loại mã độc khác nhau,

tuy nhiên nghiên cứu vẫn sẽ đảm bảo được hiệu năng cao.

Page 10: Hà N i, ngày tháng 9

4

CHƯƠNG 1. TỔNG QUAN

1.1. NGHIÊN CỨU LIÊN QUAN

Hiện nay, nhằm thay thế phương pháp đối chiếu chữ ký số cũ với

những hạn chế trong việc xử lý các mẫu mã độc mới, các nghiên cứu

thường tập trung phân tích sâu hơn vào mỗi tập tin apk để tìm ra đặc điểm

riêng. Hai cơ chế chính là cơ chế phân tích tĩnh và cơ chế phân tích động.

Trong đó, cơ chế thứ nhất là phương pháp trích xuất đặc trưng từ mã

nguồn của tập tin cài đặt. Cơ chế còn lại là thu thập các luồng thông tin

nhập xuất trong thời gian thực thi của ứng dụng. Các đặc trưng được rút

ra từ hai phương pháp này chính là thuộc tính đầu vào của phương pháp

học máy[1].

Crowdroid, AMDA và MADAM nằm trong số các công trình nghiên

cứu thực hiện phát hiện phần mềm độc hại android thông qua cơ chế phân

tích động. Trình theo dõi Crowdroid ghi lại tất cả cuộc gọi hệ thống và

sử dụng các kỹ thuật phân cụm để xây dựng mô hình phân loại. AMDA

chỉ tập trung theo dõi các hành vi lành tính qua15 lệnh gọi hệ thống để

nhận biết mã độc. MADAM đã đề xuất một khung phát hiện kết hợp các

tính năng ở cấp lõi và cấp ứng dụng MADAM nhận thấy rằng có 11 lệnh

gọi hệ thống ở cấp độ kernel có thể mô tả tốt nhất hành vi của thiết bị.

Tuy nhiên, các đặc trưng được rút ra từ phân tích động thường rất tốn

kém và thiếu tính khái quát.

Đối với thuộc tính tĩnh, Ignacio Martín và cộng sự khai thác các thông

tin trên cửa hàng ứng dụng như ngày đưa lên, số lượt tải, số lượt bình

chọn hay tên nhà phát triển để thuộc tính. Sau đó, họ thử các thuộc tính

này với 3 thuật toán cây quyết định, máy vec-tơ hỗ trợ và hồi quy

logistic.Chen và công sự[2] kết hợp thuật toán PCA với 3 bộ thuộc tính

bao gồm: quyền ứng dụng, thành phần ứng dụng và hàm chức năng. Tuy

nhiên, vì số lượng mẫu có hạn với 387 mẫu nên số lượng thuộc tính chỉ

Page 11: Hà N i, ngày tháng 9

5

đạt số lượng nhỏ là 29. Cũng với sử dụng 3 bộ thuộc tính như bài báo

nhưng Drebin đã mở rộng chúng thành 8 bộ thuộc tính chi tiết hơn (quyền,

thành phần ứng dụng, bộ lọc intent, kết nối phần cứng, hàm API bị hạn

chế, quyền thực dụng, API đáng ngờ, địa chỉ mạng). Có thể thấy 8 bộ

thuộc tính này là rất phong phú và đầy đủ để chúng tối sử dụng và tiến

hành so sánh và đánh giá.

1.2. GIỚI THIỆU VỀ NỀN TẢNG ANDROID

1.2.1. Lịch sử hình thành và phát triển

Hệ điều hành Android cách đây 13 năm bởi Andy Rubin, người

sáng lập công ty Android .Inc năm 2003. Hiện nay, nó đã trở thành hệ

điều hành di động phổ biến nhất trên thế giới, đánh bại nhiều đối thủ như

Symbian, BlackBerry, Palm OS, webOS và Windows Phone[3]. Ban đầu,

Android là hệ điều hành cho các thiết bị cầm tay dựa trên lõi Linux do

công ty Android Inc. Năm 2005, Android Inc. được google mua lại và

phát triển.

Tháng 11 năm 2007, hàng điện thoại và khai thác mạng không dây

TMobile của Mỹ công bố chiếc điện thoại Android đầu tiên mang tên

TMobile G1. Cùng thời điểm, Google công bố ra mắt phiên bản Android

SDK release Candidate 1.0.

Cuối năm 2008, Google cho ra mắt một thiết bị cầm tay tên là

Android Dev Phone 1 có khả năng chạy các ứng dụng Android độc lập

mà không bị ràng buộc với các nhà cung cấp mạng điện thoại di động như

T-Mobie. Đồng thời, Google phát hành bản vá lỗi Android 1.1.

Tháng 4/2009, Android phiên bản 1.5 Cupcake được ra mắt. Trong

phiên bản này, Google đã bổ sung nhiều tính năng và cải tiến so với 2

phiên bản công khai đầu tiên như tải video lên Youtube, xoay màn hình

Page 12: Hà N i, ngày tháng 9

6

và cho phép bên thứ ba phát triển bàn phím. Đây cũng là phiên bản đầu

tiên Google đặt tên riêng cho phiên bản của Android theo tên các loại

bánh kẹo.

Tháng 9/2009, Google nhanh chóng tung ra Android 1.6 Donut.

Cập nhật quan trọng nhất trong phiên bản này là việc hỗ trợ cho các nhà

mạng sử dụng mạng CDMA. Điều này đã thúc đẩy việc các điện thoại

Android có thể vươn ra trên toàn cầu.

Tháng 10/2009, Android 2.0 Eclair được cập nhật. Đây là phiên bản

đầu tiên tính năng chuyển văn bản thành giọng nói (Text – to – speech)

được đưa vào cùng nhiều tính năng, cải tiến khác.

Tháng 5/2010, Android 2.2 Froyo được ra mắt. Các cập nhật đáng

chú ý của phiên bản này là tính năng phát sóng di động Wi-Fi, hỗ trợ

flash, Android Cloud.

Tháng 9/2010, Android 2.3 Gingerbread được google tung ra. Cho

đến nay, đây là phiên bản thấp nhất Google còn liệt kê trong các phiên

bản cập nhật. NFC lần đầu tiên được đưa vào Android. Đây cũng là phiên

bản đặt nền móng cho việc chụp ảnh selfie, hỗ trợ nhiều camera, hỗ trợ

Google Talk.

Tháng 02/2011, Android 3.0 Honeycomb được giới thiệu. Đây là

phiên bản Google tập trung phát triển dành cho máy tính bảng hoặc các

thiết bị di động có màn hình lớn.

Tháng 10/2011, Android 4.0 Ice-cream Sandwich là sự kết hợp của

Honeycomb và Gingerbread dành cho các thiết bị smartphone. Đây là

phiên bản đầu tiên Android hỗ trợ mở khóa điện thoại bằng cách chụp

ảnh khuôn mặt, đánh dấu sự phát triển của sinh trắc học trên smartphone.

Tháng 6/2012, Android 4.1 Jelly Bean được tung ra và nhận được

sự đón nhận tích cực từ cả người dùng và các nhà phát triển. Khả năng

Page 13: Hà N i, ngày tháng 9

7

phản hồi cảm ứng được cải thiện rất nhiều. Tính năng chụp hình HDR và

kết nối Miracast cũng được hỗ trợ.

Tháng 9/2013, Android 4.4 Kitkat xuất hiện. Kitkat không thật sự

có nhiều tính năng nổi trội mới nhưng đây là phiên bản được tối ưu hóa

để chạy trên các smartphone với chỉ 512MB Ram. Điều này cho phép các

nhà sản xuất cài đặt Kitkat trên các điện thoại chi phí thấp hơn, góp phần

tích cực vào việc phổ biến Android trên toàn thế giới.

Tháng 9/2014, Android 5.0 Lollipop ra mắt đánh dấu một bước thay

đổi lớn về giao diện Hệ điều hành. Trong phiên bản này, ngôn ngữ

Material Design của Google được sử dụng, nổi bật với các hiệu ứng ánh

sáng và bóng tối tự do.

Tháng 10/2015, Android 6.0 Marshmallow được phát hành. Nó bao

gồm nhiều tính năng mới như: Google Now trên Tap, ngăn kéo ứng dụng

di chuyển dọc, mở khóa bằng phương pháp sinh trắc học, hỗ trợ USB

Type-C, tích hợp Android Pay, và nhiều tính năng hơn nữa.

Tháng 8/2016, Android 7.0 Nougat được tung ra. Một số tính năng

mới trong phiên bản này gồm các chức năng đa tác vụ tốt hơn đối với

điện thoại thông minh có màn hình lớn như chia màn hình và việc chuyển

đổi nhanh giữa các ứng dụng.

Tháng 3/2017, Android 8.0 Oreo được công bố. Hệ điều hành được

bổ sung, nâng cấp nhiều thay đổi trực quan trong menu Cài đặt. Ngoài ra,

Oreo còn hỗ trợ chế độ ảnh-trong-ảnh, các kênh thông báo, API tự động

điền mới để quản lý mật khẩu và điền dữ liệu tốt hơn.

Tháng 3/2018, Android 9.0 Pie được phát hành. Trong phiên bản

này, một số tính năng, cập nhật đáng chú ý như cử chỉ điều hướng, thời

gian sử dụng ứng dụng, kết nối bluetooth với 5 thiết bị khác nhau song

song, tính năng xoay nhanh màn hình.

Page 14: Hà N i, ngày tháng 9

8

Tháng 9/2019, Android 10.0 chính thức phát hành. Không giống

các phiên bản trước đây, phiên bản 10.0 này Google không sử dụng tên

các loại bánh kẹo, được sắp xếp theo alphabet như trước đây nữa. Android

10.0 ra mắt đi kèm nhiều tính năng mới như chế độ tối toàn diện, thao tác

điều hướng mới, tăng cường bảo mật và riêng tư, chế độ Focus Mode, tối

ưu cho các sản phẩm màn hình gập.

Android đã có một chặng đường dài phát triển và hoàn thiện. Đến

nay, Hệ điều hành Android đang trở nên phổ biến nhất thế giới, tiếp cận

đến đầy đủ các đối tượng khách hàng, phân khúc khác nhau. Bằng chất

lượng, tính đa dạng của mình, Android chắc chắn sẽ còn phát triển hơn

nữa trong tương lai, phổ biến sâu, rộng hơn trong các thiết bị điện tử,

không chỉ đối với điện thoại thông minh.

1.2.2. Một số phương pháp lây nhiễn mã độc trên nền tảng

Android

Từ năm 2015 đến nay, mỗi ngày thế giới phát hiện thêm khoảng

230.000 chương trình, phần mềm độc hại[4]. Phần mềm độc hại có hành

vi nguy hiểm, có thể bao gồm cài đặt phần mềm mà không cần sự đồng ý

của người dùng. Người dùng đôi khi không nhận ra rằng các tệp có thể

tải xuống của họ là phần mềm độc hại, do đó các tệp này có thể được vô

tình lưu trữ.

Có nhiều phương pháp mà các hacker áp dụng với phần mềm độc

hại để lây nhiễm vào các thiết bị Android. Bốn phương pháp phổ biến là:

- Đóng gói lại ứng dụng hợp pháp: Đây là một trong những

phương pháp phổ biến nhất được sử dụng bởi những kẻ tấn công. Họ có

thể tìm và tải về ứng dụng phổ biến trên thị trường, sử dụng các công cụ

dịch ngược, thêm các đoạn mã độc hại và sau đó đóng gói lại thành các

Page 15: Hà N i, ngày tháng 9

9

ứng dụng mới và đưa ra thị trường ứng dụng Android chính thức hoặc

của bên thứ ba. Người dùng có thể dễ dàng cài đặt các ứng dụng này do

bị dụ dỗ để tải về và cài đặt các ứng dụng bị nhiễm mã độc. Đã có khoảng

86,0% ứng dụng hợp pháp bị đóng gói lại bao gồm cả các mã độc hại sau

khi phân tích hơn 1.200 mẫu phần mềm độc hại Android [5].

- Khai thác các lỗ hổng trên ứng dụng Android: Có thể là một

lỗi trong các ứng dụng của người dùng. Những kẻ tấn công có thể sử dụng

lỗ hổng này để xâm nhập vào điện thoại và cài đặt phần mềm độc hại trên

thiết bị.

- Ứng dụng giả mạo: Có những ứng dụng giả mạo là các phần mềm

độc hại cho phép kẻ tấn công truy cập vào thiết bị di động của bạn. Những

kẻ tấn công tải lên trên thị trường ứng dụng các ứng dụng giả mạo là các

phần mềm chứa mã độc của kẻ tấn công. Ví dụ: Kẻ tấn công tải lên một

phần mềm có tên Facebook nhưng thực tế đó lại là phần mềm do kẻ tấn

công viết và có chứa mã độc trong đó.

- Cài đặt từ xa: Các phần mềm độc hại có thể được cài đặt từ xa

lên điện thoại của người dùng. Nếu kẻ tấn công có thể lấy được các thông

tin của người sử dụng và vượt qua chúng trên chợ ứng dụng, sau đó trong

trường hợp này, các phần mềm độc hại sẽ được cài đặt vào thiết bị mà

không cần sự can thiệp từ phía người dùng[6]. Ứng dụng này sẽ chứa mã

độc hại cho phép kẻ tấn công truy cập dữ liệu cá nhân như danh sách liên

lạc, tin nhắn,...

1.3. PHÁT HIỆN MÃ ĐỘC

Mã độc là các chương trình có chứa các đoạn mã độc hại được viết

kèm hoặc toàn bộ chương trình nhằm thực hiện hành vi có mục đích xấu

như: đánh cắp thông tin, truy cập trái phép, tấn công, chiếm quyền sử

Page 16: Hà N i, ngày tháng 9

10

dụng máy,... Bất kỳ phần mềm nào cũng bị xem là mã độc nếu có một

trong biểu hiện như phá hoại, thay đổi trái phép, phá vỡ hoặc làm mất

tính bảo mật, toàn vẹn của dữ liệu người dùng.

Tùy thuộc hình thức, cơ chế hoạt động, lây lan và kiểu phá hoại mà

phân loại các kiểu mã độc như: spyware, virus, backdoor, trojan,

adware,...

Ngày nay, Internet phát triển mạnh mẽ tạo điều kiện cho việc tiếp

cận có chủ đích và tạo ra mã độc càng trở nên dễ dàng hơn mà không cần

các kiến thức quá sâu về công nghệ thông tin[7]. Chính vì vậy, thách thức

bảo vệ an toàn, an ninh thông tin trước bị đổi mới, biến thể không ngừng

của mã độc càng trở nên khó khăn.

1.3.1. Các phương pháp phát hiện mã độc trên Android

Phát hiện mã độc là một bước quan trọng trong để có thể ngăn chặn

và tiêu diệt hoàn toàn mã độc ra khỏi máy tính và hệ thống mạng; khôi

phục lại hiện trạng của mạng như ban đầu; truy tìm nguồn gốc tấn công.

Trước tiên cần xác định được chính xác chuyện gì đã xảy ra với

toàn bộ hệ thống, tìm được toàn bộ các thiết bị, tệp, ứng dụng đã bị lây

nhiễm.

Trong quy trình phát hiện mã độc, chúng ta cần xác định được chính

xác những gì mã độc có thể thực hiện, cách thức phát hiện mã độc trong

hệ thống mạng, phương pháp đo lường thiệt hại nó có thể gây ra. Và quan

trọng nhất cần tìm ra qui luật đặc trưng (Mã nhận diện – signatures) để

nhận diện mã độc, diệt mã độc và khôi phục hệ thống.

Hầu hết mã độc ở dạng các chương trình, dịch vụ (dạng binary)

không thể đọc thông thường. Cách phát hiện mã độc chính là: sử dụng

các công cụ và các kĩ thuật phân tích. Có hai kĩ thuật phân tích chính:

Page 17: Hà N i, ngày tháng 9

11

+ Phân tích tĩnh (Phân tích mà không cần mã độc chạy trong hệ

thống): Thực hiện việc dịch ngược mã độc bằng các công cụ

Disassembler, xem nội dung và cấu trúc[8] mã nguồn để xác định xem

mã độc làm gì. Đặc trưng của phương pháp này yêu cầu kiến thức về dịch

ngược, hệ thống, tập lệnh.

+ Phân tích động (Phát hiện mã độc chạy thật trong hệ thống): Sử

dụng các trình debugger để nghiên cứu và xem cách thức thực thi của mã

độc trong môi trường thật. Từ đó trích xuất thông tin chi tiết về mã độc:

nguồn gốc, cách thức lây nhiễm, các đoạn mã, các hàm quan trọng. Để có

thể thực hiện được phương pháp này cần trang bị kiến thức chuyên sâu

về kĩ thuật, thành thạo việc sử dụng các công cụ và nhiều kĩ năng để có

thể vượt qua các kĩ thuật của mã độc.

Một số quy tắc chính khi phân tích mã độc:

- Không nên tập trung quá vào những tiểu tiết, hầu hết các mã độc

đều có lượng mã nguồn rất lớn, phức tạp và có chứa nhiều mã rác. Do đó,

chúng ta nên tập trung vào các tính năng chính để tránh mất nhiều thời

gian chi tiết hóa các thông tin không cần thiết.

- Mỗi công cụ hỗ trợ phân tích có những chức năng riêng, cần vận

dụng linh hoạt và hiệu quả dựa trên điểm mạnh của từng công cụ để quá

trình phân tích nhanh hơn, chính xác hơn.

- Có nhiều chiến thuật phân tích khác nhau, do đó cần thay đổi chiến

thuật một cách linh hoạt để hiệu quả phân tích tốt hơn.

Việc phân tích mã độc (malware analysis) giống như một trò chơi

đuổi bắt, người viết mã độc thì luôn cố che giấu còn người phân tích thì

luôn cố tìm ra các thông tin chi tiết nhất[9]. Các kĩ thuật mới được tạo ra

mỗi ngày, do đó cần luôn luôn cập nhật các kĩ thuật phân tích và công

Page 18: Hà N i, ngày tháng 9

12

nghệ mới nhất, ngoài ra cũng cần có sự sáng tạo để quá trình phân tích

nhanh, hiệu quả hơn.

1.3.1.1. Phương pháp phân tí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

Page 19: Hà N i, ngày tháng 9

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

Page 20: Hà N i, ngày tháng 9

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ó.

Page 21: Hà N i, ngày tháng 9

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,

Page 22: Hà N i, ngày tháng 9

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.

Page 23: Hà N i, ngày tháng 9

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:

Page 24: Hà N i, ngày tháng 9

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

Page 25: Hà N i, ngày tháng 9

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

Page 26: Hà N i, ngày tháng 9

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).

Page 27: Hà N i, ngày tháng 9

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.

Page 28: Hà N i, ngày tháng 9

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à

Page 29: Hà N i, ngày tháng 9

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ư

Page 30: Hà N i, ngày tháng 9

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.

Page 31: Hà N i, ngày tháng 9

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),

Page 32: Hà N i, ngày tháng 9

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

Page 33: Hà N i, ngày tháng 9

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.

Page 34: Hà N i, ngày tháng 9

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 <APK filename>

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:

Page 35: Hà N i, ngày tháng 9

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.

Page 36: Hà N i, ngày tháng 9

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 tích các file khác)[31].

Sau đó, chương trình sẽ phân tích file AndroidManifest.xml chứa

thông tin như các requested permission, activity name và intent-filter.

Mọi thứ được trích xuất từ file trên và được ghi ở output có thể tìm thấy

trực tiếp trong manifest. Các nội dung được trích xuất từ file là: activity,

permission, feature, intent, service_receiver[32].

Nguồn thông tin thứ hai là mã dịch ngược (file .smali). Các URL

được truy cập bởi ứng dụng có thể được tìm thấy bằng cách sử dụng một

Page 37: Hà N i, ngày tháng 9

31

biểu thức chính quy mà khớp với các chuỗi bắt đầu bằng “http://” hoặc

“https://”. Call tag có thể được giải nén bằng cách kiểm tra mã dịch ngược

bao gồm một dòng từ apicalls_suspicious.txt. Nếu một dòng chứa

“Cipher”, dòng mã trước đó được phân tích để xác định chính xác phương

thức mã hóa. Tất cả các lệnh gọi theo phương thức yêu cầu quyền được

xác định bằng cách sử dụng jellybean_allmappings.txt. Đây là những

quyền thực sự được yêu cầu bởi chương trình. Các quyền được yêu cầu

trong AndroidManifest.xml có thể được sử dụng, nhưng không nhất thiết

phải sử dụng tất cả chúng. Các thẻ sau được trích xuất từ mã dịch ngược:

api_call, permission, url, call, real_ permission.

2.2. PHƯƠNG PHÁP CHUẨN HÓA TẬP THUỘC TÍNH

2.2.1. Tập thuộc tính

Hầu hết các ứng dụng Android đều được định dưới dạng bytecode

(file apk). Bytecode[33] không dễ để bị xáo trộn. Vì vậy, công nghệ phát

hiện phần mềm độc hại áp dụng phân tích tĩnh trong Android là khá phổ

biến. Các công cụ hỗ trợ sẽ kiểm tra trực tiếp bytecode để xác định các

khả năng nguy hiểm của một ứng dụng. Phân tích tĩnh không yêu cầu mã

thực sự chạy. Cơ chế này giúp ta sớm phát hiện được mã độc từ trước khi

nó có thể hoạt động.

Đối với cơ chế phân tích tĩnh, để đạt được độ chính xác cần thiết,

một ứng dụng cần phải được đánh giá trên nhiều phương diện. Mỗi

phương diện được gọi là một tiêu chí. Nghiên cứu hướng tới xây dựng

một bộ các tiêu chí đa dạng và đầy đủ nhất. Với bộ tiêu chí đó, ta có thể

xây dựng được một khung đánh giá có tỷ lệ dương phát hiện dương tính

giả và âm tính giả ở mức thấp nhất.

Áp dụng cơ chế phân tích tĩnh, Drebin đã sử dụng công cụ biên dịch

ngược - Android Asset Packaging Tool (AAPT)[34] để khai thác các tập

Page 38: Hà N i, ngày tháng 9

32

thuộc tính mà ở đó, mỗi thuộc tính đều có những ảnh hưởng nhất định tới

an toàn bảo mật thông tin của thiết bị di động. Trong một gói apk, các

thông tin quan trọng sẽ nằm ở 2 tập tin, bao gồm manifest và java code

trong tập tin dex:

- Manifest - Mỗi ứng dụng Android đều cần phải khai báo những

thông tin chính vào file AndroidManifest.xml để có thể hoạt động được

trên hệ thống. Vậy nên, các thông tin trong tập tin này sẽ rất quan trọng

khi được đưa vào làm thuộc tính.

- Tập thuộc tính S1 – permission (quyền): Đăng kí quyền để có thể

được phép tương tác với thành phần của hệ thống. Ví dụ: Với

android.permission.READ_CONTACTS, ứng dụng đó có thể truy cập

vào đọc toàn bộ danh bạ người dùng.

- Tập thuộc tính S2 - app component (thành phần ứng dụng): Mô

tả các thành phần của ứng dụng - Activity, Service và BroadCast Receiver

(hoạt động, dịch vụ, hàm nhận quảng bá và trình cung cấp nội dung) mà

ứng dụng soạn ra. Tên của các thành phần này có thể giúp ta phát hiện

những họ mã độc đã từng được công bố, bởi các biến thể của 1 ứng dụng

có hại có thể được giữ nguyên tên của một trong các thành phần.

- Tập thuộc tính S3 - intent filter (bộ lọc intent): Quá trình liên lạc

và xử lý nội bộ trên Android chủ yếu được thực hiện thông qua các intent.

Bộ lọc intent sẽ dựa trên các app component đã nêu để định hướng ứng

dụng một ứng dụng có thể thực hiện được chức năng nào. Ví dụ: với

BOOT_COMPLETED, ứng dụng có thể đợi khởi chạy ngay khi máy vừa

bật.

- Tập thuộc tính S4 - feature hardware (kết nối phần cứng): Xin

quyền truy cập khi ứng dụng muốn can thiệp vào phần cứng. Ví dụ: kết

nối với camera.

Page 39: Hà N i, ngày tháng 9

33

- Mã dịch ngược trong tập tin dex - Đây đơn giản có thể hiểu là

những dòng code Java được biên dịch cho môi trường Dalvik. Nhờ phân

tích những đoạn mã này, ta có thể nắm được luồng dữ liệu của một ứng

dụng được gửi tới đâu và chứa những thông tin gì bên trong nó.

- Tập thuộc tính S5 - restricted API call (API bị hạn chế): Hệ thống

bảo mật Android thường đặt hạn chế cho những API có liên quan tới

những dự liệu quan trọng. Những ứng dụng nào nếu sử dụng các API này

mà không bỏ qua việc xin cấp quyền thì ta có thể biết ngay đó là những

ứng dụng đã chiếm quyền root và có thể gây nguy hiểm cho di động.

- Tập thuộc tính S6 - used permission (quyền được sử dụng): Như

đã nhắc như trên, ở tập S5, chúng ta có những API quan trọng cần được

bảo vệ. S6 là tập những quyền sẽ cần được cấp phép trước khi sử dụng

những API đó. Tập gồm 70 thuộc tính.

- Tập thuộc tính S7 - suspicious API call (API đáng ngờ): Tập hợp

của những API call xuất hiện chủ yếu ở những ứng dụng độc hại. Tập

thuộc tính được xếp riêng, để tăng khả năng phán đoán dương tính cao

cao hơn.

- Tập thuộc tính S8 - url (địa chỉ mạng): Trong các loại mã độc,

spyware là loại mã thường được điểu khiển và truyền thông tin đánh cắp

tới một máy chủ từ xa. Vì vậy, tập cả các địa chỉ IP, máy chủ và URL

cũng cần được lưu ý.

Kết luận: 8 tập thuộc tính trên là những thông tin có thể dựa vào

để đánh giá nguy cơ của một ứng dụng. Mỗi thuộc tính đều thể hiện một

khía cạnh mà mã độc có thể khai thác. Tổng hợp của 8 thuộc tính sẽ là dữ

liệu đầu vào cho mô hình học máy.

Page 40: Hà N i, ngày tháng 9

34

2.2.2. Chuyển dữ liệu sang không gian vector

Để có thể dễ dàng làm việc với thư viện học máy, bộ dữ liệu ban

đầu sẽ được chuyển sang dạng vector nhị phân. Cụ thể, trong từng ứng

dụng, mỗi sự tồn tại của một feature sẽ được nhận giá trị là 1 và ngược

lại là 0. Vấn đề này dẫn tới khả năng xuất hiện các ma trận rời rạc với

nhiều giá trị 0 gây khó khăn trong việc quản lý tài nguyên khi chạy thực

nghiệm. Vì vậy, dạng vector svm_ligh_file đã được chọn ra để đối phó

với vấn đế này:

<label> <feature1>:<value1> ... <featuren>:<valuen>

Trong đó:

- label: là nhãn thực tế của một ứng dụng (0 – benign, 1 – malware).

- feature: là vị trí của một thuộc tính trong tập thuộc tính (thuật toán

sử dụng vị trí để nhận biết 1 thuộc tính thay vì tên gọi cụ thể).

- value: luôn luôn có giá trị bằng 1. (bỏ qua các giá trị 0 => tránh

được ma trận rời rạc).

2.2.2.1. Công thức áp dụng hồi quy logistic với bộ vector:

Với mỗi vector x là tập các điểm feature của 1 ứng dụng, ta coi khả

năng x nằm trong nhóm y0 (malware hoặc benign) là p(y0|x). Theo công

thức tính xác suất hậu nghiệm ta có:

p(y0|x) = 1

1+exp(−𝑎)= σ(a)

với

a = wTx

Trong đó:

x: là tập giá trị của các feature trong mỗi ứng dụng

w: là trọng số tương ứng

Page 41: Hà N i, ngày tháng 9

35

Với công thức tính xác suất trên, ta cần tìm ra một ngưỡng ϵ ∈ [0,1] để

phân loại ứng dụng như sau:

Việc tìm ϵ được thực hiện trong quá trình training bằng việc tối thiểu hàm

lỗi sau:

Với

m là kích cỡ của tập dữ liệu,

y(i) là lớp giá trị thực tế của ứng dụng thứ i trong tập dữ liệu

σ(i) là kết quả dự đoán tương ứng cho dữ liệu thứ i.

2.2.2.2. Công thức áp dụng SVM với bộ vector:

Trong thuật toán máy vecto hỗ trợ, các giá trị vecto của 2 lớp

(malware/benign) được phân chia với khoảng cách lớn nhất tới một siêu

phẳng sau:

|𝜔 ∗ Φ(𝑥) + 𝑏|

√∑ 𝜔𝑖2𝑑

𝑖=1

=|𝜔 ∗ 𝑥 + 𝑏|

||𝜔||2

Với x: là dữ liệu thuộc tính của ứng dụng

Φ(x): là hàm ánh xạ dữ liệu lên không gian siêu mặt phẳng

w: là trọng số tương ứng

b: là bias tương ứng

d: là số chiều của không gian

Quá trình training bộ dữ liệu là việc tối thiểu hóa giá trị ||w||. Từ

đây, dữ liệu được phân lớp với điều kiện sau:

{𝑥𝑖 ∗ 𝜔 + 𝑏 ≥ 1𝑡ℎì𝑦𝑖 = 1

𝑥𝑖 ∗ 𝜔 + 𝑏 ≤ −1𝑡ℎì𝑦𝑖 =−1

Với xi là vector dữ liệu của một ứng dụng trong mặt phẳng

Page 42: Hà N i, ngày tháng 9

36

yi là giá trị đầu ra của mô hình svm

Nếu yi = 1, ta có ứng dụng thuộc phía malware của siêu mặt phẳng

và có nhãn bằng 1. Ngược lại, ứng dụng sẽ có nhãn bằng 0 hay benign.

Page 43: Hà N i, ngày tháng 9

37

CHƯƠNG 3. ĐỀ XUẤT MÔ HÌNH, ĐÁNH GIÁ

Như đã nói ở chương trên, hai thuật toán LR và SVM thường được

ưu tiên đối với các bài toán có mô hình phân lớp nhị phân nên ta sẽ lựa

chọn 2 phương pháp này để so sánh về khả năng phân loại.

Đầu tiên, ta có thể nhận định đây là bộ mẫu mất cân bằng dữ liệu

khi Benign gấp khoảng 21 lần Malware.

Confusion matrix (Ma trận hỗn loạn) giúp ta có cái nhìn rõ hơn về

việc các điểm dữ liệu được phân loại đúng và sai như thế nào. Trong đó:

- True Positive Rate (TPR) - Độ nhạy: Tỷ lệ xác định đúng mã độc.

𝑇𝑃𝑅 =𝑇𝑃

𝑇𝑃 + 𝐹𝑁

- False Negative Rate (FNR) – Đặc trưng: Tỷ lệ xác định sai mã

độc.

𝐹𝑁𝑅 =𝐹𝑁

𝑇𝑃 + 𝐹𝑁

- True Negative Rate (TNR) – Tỷ lệ xác định đúng lành tính.

𝑇𝑁𝑅 =𝑇𝑁

𝐹𝑃 + 𝑇𝑁

- False Positive Rate (FPR) – Tỷ lệ xác định sai lành tính.

𝐹𝑃𝑅 =𝐹𝑃

𝐹𝑃 + 𝑇𝑁

Để có cái nhìn chính xác hơn về hiệu quả dự đoán ta cần tập trung

vào kết quả của cả Precision và Recall. Trong đó, Precision thể hiện độ

chính xác của các mẫu mã độc bị phát hiện, còn Recall đại diện cho tỉ lệ

bỏ sót các mẫu thực sự là mã độc.

Precision: Tỉ lệ số điểm true positive trong số những điểm được

phân loại là positive (TP + FP).

Page 44: Hà N i, ngày tháng 9

38

𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 =𝑇𝑃

𝑇𝑃 + 𝐹𝑃

Recall: Tỉ lệ số điểm true positive trong số những điểm thực sự là

positive (TP + FN).

𝑅𝑒𝑐𝑎𝑙𝑙 =𝑇𝑃

𝑇𝑃 + 𝐹𝑁

F1: là trung bình điều hòa (harmonic mean) của precision và recall.

F1 có giá trị nằm trong nửa khoảng (0; 1]. F1 càng cao, bộ phân lớp càng

tốt.

𝐹1 = 2𝑥𝑅𝑒𝑐𝑎𝑙𝑙𝑥𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛

𝑅𝑒𝑐𝑎𝑙𝑙 + 𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛

Tiến hành thực nghiệm:

Để có cái nhìn tổng quát về hiệu quả của các thuộc tính, ta chạy thử

với tập dữ liệu của từng thuộc tính và xem xét kết quả của F1-score và

Accuracy. Dễ dàng nhận ra, bộ dữ liệu Test là một bộ dữ liệu gần cân

bằng với tỉ lệ Malware – Benign là 3120 và 3220. Điều này giúp accuracy

trở nên đáng tin cậy (Do Accuracy chỉ phù hợp với các bài toán mà kích

thước các lớp dữ liệu tương đối như nhau).

F1-score và accuracy của từng thuộc tính S1 đến S8:

Page 45: Hà N i, ngày tháng 9

39

Hình 3.3. Biểu đồ F1 – Score của các thuộc tính S1 đến S8

Hình 3.4. Biểu đồ Accuracy của các thuộc tính S1 đến S8

Theo kết quả trên, trong 8 thuộc tính, S3 cho hiệu quả tốt nhất ở cả

2 thuật toán, trong đó LR vượt trội hơn một chút, chênh lệch chưa đến

S1 S2 S3 S4 S5 S6 S7 S8

LR 0.8852 0.9254 0.92981 0.8934 0.92511 0.89399 0.49255 0.84958

SVM 0.88651 0.84419 0.9291 0.89619 0.92812 0.89326 0.49252 0.89309

BIỂU ĐỒ F1-SCORE

LR SVM

S1 S2 S3 S4 S5 S6 S7 S8

LR 0.87776 0.9276 0.93502 0.8989 0.92476 0.8929 0.60804 0.84401

SVM 0.87965 0.85962 0.93454 0.90189 0.92808 0.89385 0.60931 0.85678

BIỂU ĐỒ ACCURACY

LR SVM

Page 46: Hà N i, ngày tháng 9

40

0.05%. Thuộc tính S5 cũng cho kết quả rất cao, khi cả 2 chỉ số F1-score

và Accuracy chênh lệch thấp hơn so với S3 là nhỏ.

Ngoài ra, S7 cho hiệu quả kém nhất trên cả LR và SVM (kết quả

chỉ đạt khoảng 60%).

Để có cái nhìn sâu hơn về hiệu quả, ta tiếp tục xem xét đến Precision

và Recall của các thuộc tính.

Precision và Recall của từng thuộc tính S1 đến S8:

Bảng 3.1. Precision và Recall của S1 đến S8

hiệ

u

Feature

sets

Feature

s

Confusion

Matrix

Precisio

n Recall

Thuật

toán

S1 Requested

permissions 3780

[[3034 186]

[ 273 2847]] 0.93867 0.9125 LR

[[3039 181]

[ 709 2411]] 0.93017 0.77276 SVM

S2 App

components 223344

[[3199 21]

[ 391 2729]] 0.99236 0.87468 LR

[[3206 14]

[ 401 2719]] 0.99488 0.87147 SVM

S3 Filtered

intents 6369

[[3013 207]

[ 434 2686]] 0.92845 0.8609 LR

[[3033 187]

[ 435 2685]] 0.93489 0.86058 SVM

S4 Hardware

components 72

[[2577 643]

[ 132 2988]] 0.82291 0.95769 LR

[[2597 623]

[ 140 2980]] 0.82709 0.95513 SVM

Page 47: Hà N i, ngày tháng 9

41

S5 Restricted

API calls 315

[[2917 303]

[ 174 2946]] 0.90674 0.94423 LR

[[2940 280]

[ 176 2944]] 0.91315 0.94359 SVM

S6 Used

permissions 70

[[2798 422]

[ 257 2863]] 0.87154 0.91763 LR

[[2851 369]

[ 304 2816]] 0.88414 0.90256 SVM

S7 Suspicious

API calls 730

[[2649 571]

[1914 1206]] 0.67867 0.38654 LR

[[2661 559]

[1918 1202]] 0.68257 0.38526 SVM

S8 Network

addresses 310446

[[2558 662]

[ 327 2793]] 0.80839 0.89519 LR

[[2570 650]

[ 258 2862]] 0.81492 0.91731 SVM

Dựa vào bảng trên, ta nhận thấy S3 có kết quả Precision cao tuyệt

vời (LR: 99.236%; SVM: 99.488%). Thế nhưng Recall của S3 lại cho kết

quả cao chỉ ở mức tương đối với kết quả xấp xỉ 87%%. Điều này có thể

giải thích cho việc S3 đạt kết quả rất tốt ở chỉ số F1-score và Accuracy.

Tượng tự thuộc tính S7 cho kết quả cực thấp. Ta sẽ xem xét việc

không sử dụng S7 để giảm nhiễu trong các nhóm kết hợp thuộc tính ở

phần sau.

Ta có thể đánh giá chủ quan rằng số lượng feature càng cao thì kết

quả sẽ càng tốt vì rõ ràng tập mẫu càng nhiều thì càng có nhiều cơ hội để

phát hiện hơn. Nhưng qua kết quả thực nghiệm trên, Ta có thể nhận xét

rằng kết luận trên chỉ mang tính tương đối. Khi quan sát thêm số lượng

feature của từng thuộc tính, rõ ràng số feature của S1 nhỏ hơn rất nhiều

Page 48: Hà N i, ngày tháng 9

42

so với S8 nhưng S1 lại có kết quả tốt hơn. Điều này chứng minh rằng,

chất lượng của từng thuộc tính để dự đoán mã độc là hoàn toàn khác nhau.

Ngoài ra, ta phát hiện thêm rằng, chỉ số Recall của S1 cũng rất đáng

chú ý khi cao nhất trong 8 thuộc tính ở cả 2 thuật toán.

Từ các kết luận trên, ta xem xét đến việc kết hợp các thuộc tính

khác nhau để có hiệu quả dự đoán tốt hơn. Xét trong 8 thuộc tính, ta có:

Nhóm thuộc tính thứ nhất: S1 cho kết quả Recall cao nhất, S3 cho

kết quả Precision cao nhất nên ta sẽ kết hợp 2 thuộc tính này.

Nhóm thuộc tính thứ hai: Do S2, S3 và S5 cho kết quả F1-score và

Accuracy có kết quả không chênh lệch nhau đáng kể, đồng thời cũng

thuộc nhóm cao nhất nên ta sẽ kết hợp 3 thuộc tính này (thuật toán SVM

cho hiệu quả Recall đối với S2 không tốt, chỉ đạt 77.276% nhưng ta vẫn

thử nghiệm để có thêm dữ liệu so sánh khách quan hơn).

Nhóm thuộc tính thứ ba: Do S7 và S8 là 2 thuộc tính cho kết quả

kém nhất trong các thuộc tính (2 thuộc tính cho kết quả F1-score và

accuracy thấp nhất; S8 có số feature lớn nhưng hiệu quả không tốt, chỉ ở

mức khá.

Nhóm thuộc tính thứ tư: Nhóm kết hợp đủ 8 thuộc tính. Việc có

càng nhiều dữ liệu càng có nhiều cơ hội để cải thiện kết quả nên đây vẫn

là một nhóm thuộc tính cần xem xét.

Ta có bảng kết quả:

Bảng 3.2. Precision và Recall các nhóm thuộc tính

Số thứ

tự

Feature

sets

Confusion

Matrix Precision Recall

Thuật

toán

1 S1 và S3 [[3080 140]

[ 261 2859]] 0.95332 0.91635 LR

Page 49: Hà N i, ngày tháng 9

43

[[3090 130]

[ 699 2421]] 0.94904 0.77596 SVM

2 S2 + S3 +

S5

[[3182 38]

[ 125 2995]] 0.98747 0.95994 LR

[[3186 34]

[ 595 2525]] 0.98671 0.80929 SVM

3 S1 đến S6

[[3175 45]

[ 39 3081]] 0.9856 0.9875 LR

[[3189 31]

[ 61 3059]] 0.98997 0.98045 SVM

4 S1 đến S8

[[3193 27]

[ 24 3096]] 0.99135 0.99231 LR

[[3197 23]

[ 55 3065]] 0.99255 0.98237 SVM

Trước đó, khi xem xét riêng từng thuộc tính, S3 cho kết quả

Precision cực cao; S1 cho kết quả Recall cao nhất trong 8 thuộc tính (LR:

95.769%; SVM: 95.513%). Trong bài toán phát hiện nguy cơ mã độc, yếu

tố bỏ xót mã độc sẽ nghiêm trọng hơn việc cảnh báo nhầm. Vì vậy, ta sẽ

quan tâm đến độ hiệu quả của Recall trước khi xét đến độ hiệu quả của

Precision khi đánh giá.

So sánh về chỉ số Recall, ta thấy chỉ có Nhóm thứ nhất (S1 và S3)

là có chỉ số Recall thấp hơn so với sử dụng riêng S1, 3 nhóm còn lại đều

cho kết quả cao hơn. Điều này chứng tỏ, tỉ lệ bỏ sót mẫu malware của các

nhóm thuộc tính kết hợp lại có xu hướng cải thiện.

Ta thấy được nhóm thuộc tính S1 đến S8 cho kết quả Recall cao

nhất. Điều này chứng tỏ, nhóm gồm đủ 8 thuộc tính vẫn đem lại kết quả

tốt nhất về hiệu quả dự đoán mã độc. Tỉ lệ bỏ sót ứng dụng có mã độc chỉ

có 24 mẫu (khoảng 0.769%) đối với LR; 55 mẫu (khoảng 1.763%).

Page 50: Hà N i, ngày tháng 9

44

Tuy nhiên, để đánh giá độ hiệu quả của thuật toán khách quan, ta

sẽ xem xét đến F1-score của các nhóm thuộc tính trên:

Hình 3.5. F1-score của các nhóm thuộc tính

Qua kết quả tại Hình 3.5, ta thấy rằng, thuật toán LR tỏ ra hiệu quả

hơn so với SVM khi thử nghiệm trên bộ dữ liệu được sử dụng nghiên cứu.

Vì số lượng mẫu trong bộ dữ liệu được sử dụng trong nghiên cứu này

được tổng hợp một cách khách quan, đa dạng, số lượng lớn nên có thể

đảm bảo được chất lượng của mô hình trong tương lai trên các bộ dữ liệu

khác cùng cấu trúc, mục tiêu phân loại.

Nhận xét: Như vậy, qua kết quả thực nghiệm, ta có thể thấy nhóm

gồm đủ 8 thuộc tính vẫn cho kết quả dự đoán mã độc tốt nhất. Thuật toán

Hồi quy Logistic là phù hợp nhất với bộ dữ liệu sử dụng.

0.75

0.8

0.85

0.9

0.95

1

1.05

S1 + S3 S2 + S3 + S5 S1 đến S6 S1 đến S8

F1-score của các nhóm thuộc tính

LR SVM

Page 51: Hà N i, ngày tháng 9

45

CHƯƠNG 4. KẾT LUẬN

Luận văn đã trình bày một hướng tiếp cận có hiệu quả về ứng dụng

học máy trong phát hiện nguy cơ mã độc trên nền tảng Android. Qua đây,

ta có thể đánh giá việc sử dụng học máy trong phân tích, phát hiện nguy

cơ mã độc là một giải pháp thành công, cần phát triển trong tương lai.

Đồng thời, luận văn đã đề xuất việc kết hợp các nhóm thuộc tính để

cải thiện khả năng dự đoán mã độc so với dùng đơn lẻ. Với hiệu quả đạt

99.231% phát hiện đúng mã độc khi sử dụng thuật toán LR, đây là kết

quả rất khả quan đối với các bài toán phát hiện nguy cơ mã độc hiện nay.

Các kết quả luận văn đã đạt được:

- Trình bày tổng quan về hệ điều hành Android, mã độc, học máy.

- Tìm hiểu về phương pháp phân tích mã độc tĩnh và động.

- Trình bày về phương pháp dịch ngược, trích xuất các thuộc tính

đối với một ứng dụng Android.

- Tiến hành thực nghiệm, đánh giá, so sánh các kết quả. Đề xuất mô

hình học máy phát hiện nguy cơ mã độc trên nền tảng Android có hiệu

quả khả quan.

Hướng phát triển, nghiên cứu tiếp theo:

Mở rộng với hướng tiếp cận bằng các thuật toán phát hiện mã độc

khác thuộc nhóm học có giám sát, học không giám sát, phân tích động.

Từ đó, xây dựng các hệ thống có khả năng phát hiện nguy cơ mã độc một

cách chính xác, đa dạng.

Page 52: Hà N i, ngày tháng 9

46

TÀI LIỆU THAM KHẢO

[1] https://machinelearningcoban.com/2017/04/09/smv/

[2] https://machinelearningcoban.com/2017/01/27/logisticregression/

[3] Daniele Ucci, Leonardo, Roberto Baldoni, "Survey of Machine

Learning Techiniques for Malware Analysis", Computer & Security

(2018).

[4] Roberto Perdisci, Davide Ariu, Prahlad Fogla, Giorgio Giacinto,

Wenke Lee “McPAD: A Multiple Classifer System for Accurate Payload-

based Anomaly Detection”, Preprint submitted to Elsevier Science

(2008).

[5] Prakash Mandayam Commar, Lei Liu, Sabyasachi Saha, Pang-Ning

Tan+, Antonio Nucci "Combining Supervised and Unsupervised

Learning for Zero-Day Malware Detection" , 2013 Proceedings IEEE

INFOCOM

[6] Michael Sikrski and Andrew Honig “Practical Malware Analysis –

The

Hands-On Guide to Dissecting Malicious Software”

[7] William Stallings, "Network Security Essentials: Applications and

Standard Foutth Edition"

[8] Nayan Zalavadiya1 Dr. Priyanka Sharma2, "A Methodology of

Malware

Analysis, Tools and Technique for windows platform – RAT Analysis"

[9] Savan Gadhiya and Kaushal Bhavsar, “Techniques for Malware

Analysis”, International Journal of Advanced Research in Computer

Science and Software Engineering, Vol. 3, Issue 4, pp. 972-975, April

Page 53: Hà N i, ngày tháng 9

47

2013

[10] Peter Harrington, “Machine Leaning in Action”, in Part 1

Classification, by Manning Publications, 2012, pp 1-129

[11] Iman Sharafaldin, Arash Habibi Lashkari and Ali A. Ghorbani,

"Toward Generating a New Intrusion Detection Dataset and

IntrusionTraffic Characterization"

[12] Trent Hauck, “scikit-learn Cookbook”, in Chapter 4 Classifying Data

with scikit-learn, by Packt Publishing, 2014, pp. 119-157

[13] Andi FitriahA. Kadir, Laya Taheri and Ali A. Ghorbani "Toward

Developing a Systematic Approach toGenerate Benchmark Android

Malware Datasets and ClassificationArashHabibiLashkari"

[14] D. Arp, M. Spreitzenbarth, M. Huebner, H. Gascon, and K. Rieck,

“Drebin: Efficient and explainable detection of android malware in your

pocket,” 21th Annual Network and Distributed System Security

Symposium (NDSS), 2014.

[15] T. Micro, 2017 Mobile Threat Landscape, 2018. [Online]. Available:

https://www.trendmicro.com/vinfo/us/security/research-and-

analysis/threat -reports/roundup/2017-mobile-threat-landscape

[16] F. Wei, Y. Li, S. Roy, X. Ou, and W. Zhou, “Deep ground truth

analysis of current android malware,” Tech reports 2017, 2017.

[17] S. Arshad, A. Khan, M. A. Shah, and M. Ahmed, “Android malware

detection and protection: A survey,” International Journal of Advanced

Computer Science and Applications, vol. 7, no. 2, 2016.

[18] F. Gagnon and F. Massicotte, “Revisiting static analysis of android

malware,” CSET @ USENIX Security Symposium, 2017.

Page 54: Hà N i, ngày tháng 9

48

[19] V. D. Nguyen, T. G. Pham, N. H. Nguyen, M. V. Pham, and D. H.

Luong, “Đánh giá một số phương pháp học máy trong phân tích mức độ

an toàn ứng dụng android,” Hội thảo quốc gia lần thứ XX: Một số vấn đề

chọn lọc của Công nghệ thông tin và truyền thông, 2017.

[20] S. A. Gordon, Google’s security suite ‘Play Protect’ rolling out to

Android phones, 2017. [Online]. Available: http://www.androidauthority.

com/google-play-protect-rolling-out-788614/

[21] M. C. Grace, Y. Zhou, Q. Zhang, and X. Jiang, “Riskranker: scalable

and accurate zero-day android malware detection,” June 2012.

[22] P. G. William Enck and B.-G. Chun, “Taintdroid: An information-flow

tracking system for real-time privacymonitoring on smartphones,” in 9th

USENIX Symposium on Operating Systems Design and Implementation,

2010.

[23] L. Xu, D. Zhang, N. Jayasena, and J. Cavazos, “Hadm: Hybrid analysis

for detection of malware,” in Conference: Proceedings of SAI Intelligent

Systems Conference, 2018.

[24] Google Play. [Online]. Available: https://play.google.com/store

[25] M. Spreitzenbarth, F. Echtler, T. Schreck, F. C. Freling, and J.

Hoffmann, “Mobilesandbox: Looking deeper into android applications,”

28th International ACM Symposium on Applied Computing (SAC), 2013.

[26] Android Asset Packaging Tool, 2010 - 2018. [Online]. Available:

https://elinux.org/Android_aapt

[27] S. Sperandei, “Understanding logistic regression analysis,” Biochem

Medica, vol. 24(1), pp. 12–18, 2014.

[28] J. R. Quinlan, “Induction of decision trees,” Mach. Learn., vol. 1, no.

1, pp. 81–106, Mar. 1986. [Online]. Available: http://dx.doi.org/10.1023/

Page 55: Hà N i, ngày tháng 9

49

[29] C. C. Xiang Li, “A spatial entropy-based decision tree for classification

of geographical information,” GIS, vol. 10(3), pp. 451 – 467, 2006.

[30] V. Vapnik, “The nature of statistical learning theory,” Springer, 2000.

[31] Kernel Support Vector Machine, 2017. [Online].

Available: https://machinelearningcoban.com/2017/04/22/kernelsmv/

[32] J. Pearl, “Reverend bayes on inference engines: a distributed

hierarchical approach.” in In Proceedings of the National Conference on

Artificial Intelligence, 1982, pp. 133–136.

[33] Scikit-learn. [Online]. Available: http://scikit-learn.org/stable/

[34] M. Sokolova and G. Lapalme, “A systematic analysis of performance

measures for classification tasks,” in Information Processing &

Management, vol. 45, July 2019, pp. 427–437.