Ứng dụng phát hiện mã độc sử dụng học máy SVM được xây dựng dựa trên các kiến thức tìm hiểu về học máy SVM kết hợp với kỹ thuật phân tích tĩnh các tệp tin APK.. 5 DANH MỤC THUẬT NGỮ, TỪ
Trang 1NGUYỄN VĂN LỰC
XÂY DỰNG HỆ THỐNG PHÁT HIỆN MÃ ĐỘC TRÊN DI ĐỘNG
Chuyên ngành : Kỹ Thuật Máy Tính
LUẬN VĂN THẠC SĨ KỸ THUẬT
KỸ THUẬT MÁY TÍNH
NGƯỜI HƯỚNG DẪN KHOA HỌC :
PGS TS Nguyễn Linh Giang
Hà Nội – Năm 2017
Trang 21
MỤC LỤC
LỜI CẢM ƠN 3
LỜI CAM ĐOAN 4
DANH MỤC THUẬT NGỮ, TỪ VIẾT TẮT 5
DANH MỤC CÁC BẢNG SỬ DỤNG 6
DANH MỤC CÁC HÌNH VẼ SỬ DỤNG 7
MỞ ĐẦU 8
CHƯƠNG I TỔNG QUAN MÃ ĐỘC TRÊN ANDROID 12
1.1 Kiến trúc hệ điều hành Android 12
1.1.1 Sơ lược lịch sử hệ điều hành Android 12
1.1.2 Các thành phần trong hệ điều hành Android 14
1.2 Ứng dụng APK trên Android 19
1.2.1 Cấu trúc tệp tin APK 19
1.2.2 Quản lý truy cập và an ninh trên Android 27
1.3 Mã độc trên hệ điều hành Android 28
1.3.1 Các loại mã độc trên Android 28
1.3.2 Các kỹ thuật phát hiện mã độc trên Android 29
CHƯƠNG II ỨNG DỤNG SVM VÀO PHÁT HIỆN MÃ ĐỘC ANDROID 32
2.1 Tìm hiểu về học máy véc tơ hỗ trợ SVM 32
2.1.1 Bài toán phân loại hai lớp SVM 32
2.1.2 Quá trình phân loại sử dụng SVM 36
2.2 Phát hiện mã độc Android sử dụng SVM 37
2.2.1 Đặc trưng và trích chọn đặc trưng 37
2.2.2 Xây dựng véc tơ đặc trưng 40
CHƯƠNG III XÂY DỰNG ỨNG DỤNG PHÁT HIỆN MÃ ĐỘC TRÊN ANDROID 43
3.1 Mô hình ứng dụng phân loại APK 43
3.2 Phân tích và thiết kế 44
3.2.1 Phân tích và thiết kế cấu trúc lớp dữ liệu 45
3.2.2 Phân tích và thiết kế chức năng 47
3.3 Xây dựng ứng dụng phát hiện mã độc DroidGuard 55
3.3.1 Môi trường và công cụ phát triển 55
Trang 32
3.3.2 Các giao diện màn hình DroidGuard 56
3.4 Cài đặt và thử nghiệm 57
3.4.1 Cài đặt và chuẩn bị dữ liệu 57
3.4.2 Các kịch bản thử nghiệm 60
3.5 Đánh giá kết quả 62
3.5.1 Ứng dụng phân loại apkClassifer 62
3.5.2 Ứng dụng DroidGuard 66
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 67
TÀI LIỆU THAM KHẢO 69
PHỤ LỤC 71
1 Mô hình phân loại tuyến tính (c = 0.03125) 71
2 Mô hình phân loại RBF (g =0.03125 ,c =8) 71
3 Mô hình phân loại Polynomial (g= 0.5, c=32, d=3) 72
Trang 43
LỜI CẢM ƠN
Để hoàn thành luận văn, tôi xin gửi lời cảm ơn tới PGS.TS Nguyễn Linh Giang, trưởng bộ môn Truyền thông và Mạng máy tính, Viện CNTT & TT, Trường Đại học Bách Khoa Hà Nội Thầy Nguyễn Linh Giang đã giúp đỡ, động viên và chỉ ra những kiến thức khoa học tôi còn thiếu sót, cũng như đã góp ý về nội dung của luận văn Tôi cũng xin cảm ơn tới toàn thể giảng viên bộ môn Truyền thông và Mạng máy cùng Viện CNTT & TT đã tận tình giảng dạy, truyền đạt những kiến thức quý báu trong quá trình học tập tại lớp cao học Truyền thông và Mạng máy tính 2014A Những kiến thức này đã giúp tôi hoàn thành tốt luận văn
Cuối cùng, tôi muốn cảm ơn gia đình, người thân và bạn bè đã động viên giúp đỡ tôi trong quá trình học tập và hoàn thành luận văn
Hà Nội, Ngày 22 tháng 05 năm 2017
Tác giả
Nguyễn Văn Lực
Trang 54
LỜI CAM ĐOAN
Đề tài luận văn “Xây dựng hệ thống phát hiện mã độc trên di động” được thực
hiện dưới sự hướng dẫn của PGS TS Nguyễn Linh Giang, nghiên cứu về giải pháp phát hiện mã độc mới: áp dụng học máy véc tơ SVM vào việc phát hiện mã độc trên các thiết bị di động chạy hệ điều hành Android Ứng dụng phát hiện mã độc sử dụng học máy SVM được xây dựng dựa trên các kiến thức tìm hiểu về học máy SVM kết hợp với kỹ thuật phân tích tĩnh các tệp tin APK Ứng dụng được thử nghiệm và đánh giá kết quả đạt được khả quan, hứa hẹn áp dụng vào các phần mềm, hệ thống phát hiện
mã độc trên Android nói riêng và các hệ thống nói chung
Tôi xin cam đoan đây là công trình nghiên cứu, phát triển của bản thân dựa trên các kiến thức về mã độc, hệ điều hành Android, và học máy véc tơ SVM cũng như các công cụ, thư viện mã nguồn mở hợp pháp, các tài liệu tham khảo và nội dung trích dẫn được ghi rõ nguồn gốc rõ ràng, không sao chép toàn văn nội dung luận văn của bất kỳ
cá nhân, tổ chức nào khác
Hà Nội, Ngày 22 tháng 05 năm 2017
Tác giả
Nguyễn Văn Lực
Trang 65
DANH MỤC THUẬT NGỮ, TỪ VIẾT TẮT
SSL/TSL Transport Layer Security/Secure Sockets
Layer (SSL)
Android Runtime Một thành phần trong kiến trúc Android
Activity Một khái niệm chỉ các tác vụ trong
Android Bytecode Một loại mã lệnh được biên dịch và chạy
trong máy ảo Java
AndroidManifest Tệp tin quản lý quyền truy cập cho ứng
dụng Android
Permission Quyền truy cập trong hệ điều hành Android
Polynomial Hàm nhân đa thức trong phân loại SVM
Trang 76
DANH MỤC CÁC BẢNG SỬ DỤNG
Bảng I-1 Phân bố các thiết bị theo phiên bản Android26 14
Bảng I-2 Minh họa kiểu lưu trữ LEB128 21
Bảng II-1 Các permission có mức độ nguy hiểm 39
Bảng III-1 Mô tả ca sử dụng Training 48
Bảng III-2 Mô tả ca sử dụng Scanning 49
Bảng III-3 Mô tả ca sử dụng RuntimeDetection 50
Bảng III-4 Mô tả ca sử dụng File Scanning 50
Bảng III-5 Mô tả ca sử dụng Classifying 51
Bảng III-6 Mô tả ca sử dụng Reporting 51
Bảng III-7 Các tham số xây dựng mô hình phân loại 58
Bảng III-8 Kết quả thử nghiệm apkClassifier với mô hình tuyến tính 63
Bảng III-9 Kết quả thử nghiệm apkClassifier với nhân RBF 64
Bảng III-10 Kết quả thử nghiệm apkClassifier với nhân Polynomial 66
Trang 87
DANH MỤC CÁC HÌNH VẼ SỬ DỤNG
Hình I-1 Liên minh các thiết bị cầm tay mở OHA25 13
Hình I-2 Kiến trúc hệ điều hành Android18 15
Hình I-3 Chu trình hoạt động của một ứng dụng Android 17
Hình I-4 Quá trình xây dựng một tệp tin APK 20
Hình I-5 Cấu trúc tệp tin Dex và Header 21
Hình I-6 Cấu trúc của string_ids 23
Hình I-7 Cấu trúc của class_ids 24
Hình I-8 Cấu trúc của class_data_item 25
Hình I-9 Thẻ <uses-permission> trong tệp tin AndroidMainifest 26
Hình II-1 Bài toán phân loại tuyến tính hai lớp SVM 33
Hình II-2 Mặt siêu phẳng phân tách âm và dương 34
Hình II-3 Sơ đồ khối phân loại sử dụng SVM 36
Hình II-4 Phân loại mã độc APK sử dụng SVM 42
Hình II-5 Minh họa quá trình phân loại SVM với véc tơ đặc trưng 42
Hình III-1 Mô hình ứng dụng phân loại APK 43
Hình III-2 Thiết kế các lớp đối tượng 45
Hình III-3 Biểu đồ ca sử dụng 48
Hình III-4 Quá trình training 52
Hình III-5 Quá trình classifying 53
Hình III-6 Quá trình Scanning trên DroidGuard 54
Hình III-7 Màn hình MainActivity 56
Hình III-8 Màn hình ScanActivity 56
Hình III-9 Màn hình ReportAcitivity 57
Hình III-10 Tối ưu giá trị c cho mô hình tuyến tính 63
Hình III-11 Tối ưu giá trị c và g cho mô hình RBF 64
Hình III-12 Tối ưu giá trị c và g cho mô hình Polynomial 65
Trang 98
MỞ ĐẦU
Hiện nay, chúng ta đang tiến vào cuộc cách mạng công nghệ lần thứ 4.0 của thế kỷ
21 Cuộc cách mạng này đang diễn ra với các phát minh về smartphone, IoT (internet
of things), AI (trí tuệ nhân tạo), Smartphone là một phát minh vĩ đại của con người, ngày nay ta có thể bắt gặp smartphone ở mọi nơi, mọi ngõ ngách cuộc sống Smartphone được phát triển như hiện nay, Steve Jobs đóng góp một vai trò rất quan trọng, ông được coi là người đã thay đổi cả ngành công nghiệp sản xuất điện thoại với Iphone và iOS Nhưng Steve Jobs không phải là người làm cho smartphone trở nên phổ biến và trở thành một kỷ nguyên như hiện nay, Google và Android mới là nhân tố tạo nên kỷ nguyên công nghệ di động Google đã phát triển và duy trì Android trở thành một hệ điều hành di động phổ biến nhất hiện nay
Theo thống kê của Wikipedia vào năm 201518, hệ điều hành Android chiếm 80.52%
số thiết bị thông minh và 59.16% số thiết bị di động trên toàn cầu, hiện nay con số này
đã lên tới 62.94% vào tháng 03 năm 2017 theo số liệu của Operating System Market Share19 Điều này khiến Android đang trở thành mục tiêu của rất nhiều các cuộc tấn công của giới tội phạm mạng bởi sự phổ biến, số lượng người dùng lớn, khó kiểm soát
an ninh và phân phối của các ứng dụng
Theo thống kê trong [9] bởi các công ty bảo mật, số lượng các ứng dụng độc hại đã tăng từ 120,000 lên 718,000 trong khoảng từ năm 2012 tới 2013 Đặc biệt vào năm
2012, một nhóm hacker có tên gọi Eurograbber đã tấn công và đánh cắp gần 36 triệu euro từ người dùng tại liên minh Châu Âu
Lý do chọn đề tài
Với thiết kế mở, Android cho phép người dùng phát triển và chia sẻ ứng dụng qua
hệ thống Google Play của Goolge hoặc cài đặt qua các một phân phối thứ ba, thậm chí trực tiếp vào thiết bị Điều này khiến cho nguy cơ về bảo mật trên Android có thể bị lợi dụng và trở nên khó kiểm soát Tuy rằng, Google đã có hệ thống kiểm soát và ngăn chặn nhưng thực tế chỉ ra các ứng dụng độc hại vẫn được chia sẻ và cài đặt rất nhiều qua Google Play Bởi vậy, các ứng dụng bảo mật trở nên thật sự cần thiết, trong khi các ứng dụng bảo mật trên Android hiện nay chủ yếu sử dụng các kỹ thuật phân tích
Trang 10về các yếu tố đặc trưng và hiệu quả phát hiện Đa phần, các nghiên cứu này chỉ dừng lại ở việc thử nghiệm trên môi trường MatLab và PC
Chính vì thế, tôi quyết định thực hiện luận văn với đề tài “Xây dựng hệ thống phát
hiện mã độc trên di động”, tôi muốn mở rộng các nghiên cứu trước đó và hiện thực
hóa các nghiên cứu về áp dụng học máy vào phân tích mã độc trên di động, đồng thời xây dựng một ứng dụng di động trên Android để phát hiện các mối nguy hại đối với người dùng smartphone
Lịch sử nghiên cứu
Một số nghiên cứu nổi trội áp dụng học máy véc tơ hỗ trợ SVM vào việc phát hiện
mã độc Android như các nghiên cứu của Daniel Arp1, Naser Peiravian2, H Alain Pimentel3 đều được đăng trên các tạp chí uy tín Các nghiên cứu này chủ yếu thực hiện trên môi trường thử nghiệm MatLab để đánh giá kết quả Trong đó, chỉ Daniel Arp đã xây dựng thành công ứng dụng phát hiện mã độc di dộng Drebin, nhưng Drebin lại không được cung cấp tới người dùng
Hiện tại, trong quá trình làm việc tại công ty VSEC, tôi đã được nhận được rất nhiều yêu cầu giúp đỡ về việc phân tích các mẫu mã độc trên Android Đồng thời, xuất hiện nhu cầu xây dựng một môi trường phân tích mã độc cho phép người dùng chia sẻ, thực hiện phân tích trên nền tảng Web nhắm hướng tới sự hỗ trợ cho cộng đồng
Với các kiến thức về học máy véc tơ tôi đã tìm hiểu và được chỉ dạy, hướng dẫn bởi PGS.TS Nguyễn Linh Giang, cùng với nền tảng là các các nghiên cứu đã được xuất bản trên quốc tế Tôi quyết định thực hiện nghiên cứu về việc áp dụng học máy véc tơ cho phát hiện mã độc trên di động Đây chính là các nền tảng, cơ sở khoa học cho phép tôi thực hiện luận văn
Trang 1110
Mục đích, đối tượng và phạm vi của nghiên cứu
- Mục đích nghiên cứu: luận văn được thực hiện với mục đích áp dụng công
nghệ học máy vào lĩnh vực phân tích và phát hiện mã độc Từ cơ sở nghiên cứu, xây dựng một ứng dụng phát hiện mã độc trên di động nhằm thử nghiệm và đánh giá hiệu quả của phương pháp, từ đó đưa ra giải pháp kết hợp với các phương pháp phát hiện mã độc truyền thống trong các phần mềm, hệ thống phát hiện mã độc cho di động
- Đối tượng nghiên cứu: phát hiện các phần mềm độc hại sử dụng học máy véc
tơ SVM đối với các tệp tin ứng dụng APK trên Android
- Phạm vi nghiên cứu: luận văn chỉ dừng lại ở việc áp dụng một phương pháp
học máy cụ thể là SVM vào phát hiện mã độc kết hợp với kỹ thuật phân tích tĩnh Đồng thời, tác giả chỉ thực hiện việc áp dụng học máy véc tơ cho bài toán phân loại hai lớp là mã độc và phần mềm sạch
Các luận điểm chính của luận văn:
Các luận điểm chính được nêu ra trong luận văn bao gồm:
Các kiến thức tổng quan về kiến trúc hệ điều hành Android, cấu trúc và cách thức hoạt động của các ứng dụng trong hệ điều hành Android Đồng thời luận văn chỉ ra các đặc trưng, hành vi của một mã độc và các thông tin quan trọng cần nắm bắt để phát hiện và phân tích hành vi đó
Tìm hiểu về phương pháp học máy véc tơ SVM, áp dụng phân loại SVM cho đối tượng ứng dụng Android Chỉ ra các đặc trưng cần thiết để phát hiện mã độc, và xây dựng véc tơ đặc trưng đối với tệp tin APK cho ứng dụng phát hiện mã độc
Từ lý thuyết, tiến hành phân tích thiết kế và xây dựng một ứng dụng phát hiện mã độc APK Đồng thời thử nghiệm và đánh giá kết quả
Phương pháp nghiên cứu
Nghiên cứu được thực hiện trên một tập dữ liệu thu thập được chia sẻ từ các nguồn nghiên cứu uy tín trên Internet và các trường đại học trên thế giới Tập dữ liệu bao gồm 400 mẫu mã độc và 400 mẫu phần mềm sạch, và được chia thành bốn tập dữ liệu con phục vụ quá trình huấn luyện, thử nghiệm và đánh giá kết quả
Trang 1211
Quá trình huấn luyện và thử nghiệm phân loại sẽ được thực hiện trên môi trường PC
để đánh giá kết quả Kết thúc quá trình thử nghiệm, quá trình huấn luyện sẽ được thực hiện lại trên toàn bộ tập dữ liệu ban đầu, đầu ra là một cơ sở dữ liệu các véc tơ đặc trưng Cơ sở dữ liệu sẽ được sử dụng cho ứng dụng di dộng được xây dựng và thử nghiệm trên môi trường mô phỏng Genymotion
Trang 13ti vi, đầu kỹ thuật số, ô tô, …
Do công việc chính của luận văn là xây dựng một ứng dụng phân loại và phát hiện
mã độc trên nền tảng Android nên cần thiết phải có những hiểu biết cơ bản về hệ điều hành Android
1.1.1 Sơ lược lịch sử hệ điều hành Android
Android ban đầu được tạo ra và phát triển bởi Andy Rubin, Rich Miner, Nick Sears,
và Chris White trong công ty Android Inc tại Paolo Alto, California Họ cũng chính là đồng chủ tịch của Android Inc
Android Inc sau đó được mua lại bởi Google vào năm 2005 và trở thành một công
ty trực thuộc của Google Đây chính là những bước đi đầu tiên của Google nhằm tham gia vào thị trường di động Với sự đầu tư và hỗ trợ mạnh mẽ từ Google, Android được giới thiệu tới hàng loạt các nhà mạng cũng như các hãng phần cứng: SamSung, HTC, Motorola, LG, …
Android được giới thiệu là một điều hành mở, uyển chuyển và dễ dàng nâng cấp Đặc biệt, Android được hỗ trợ bởi hệ sinh thái của Google: công cụ tìm kiếm, gmail, lịch, … Dường như, Google quyết định tạo ra một hệ điều hành di động và một hệ sinh thái bao quanh Android nhằm cạnh tranh thị trường di động với Apple, một công ty cũng đang phát triển một hệ điều hành di động khác là iOS
Ngày 05/11/2007, liên minh thiết bị cầm tay mở OHA được thành lập bởi hiệp hội các công ty lớn về viễn thông, phần cứng và phần mềm trên thế giới Liên minh này được lập ra với mục đích phát triển các tiêu chuẩn mở cho di động Cùng thời gian
Trang 1413
này, Google cũng chính thức ra mắt hệ điều hành Android đầu tiên được xây dựng trên nhân Linux 2.6 mang tên Android CupCake 1.5
Hình I-1 Liên minh các thiết bị cầm tay mở OHA 25
Ngày 23/09/2008, chiếc điện thoại chạy hệ điều hành Android đầu tiên được bán ra với tên gọi HTC Dream hay còn gọi với tên khác là T-Mobile G1
Từ năm 2008 tới nay, Android tiếp tục được phát triển và ra mắt các phiên bản cao hơn như Donut (1.6), Éclair (2.0 – 2.1), Froyo (2.2 - 2.2.3), … và phiên bản Ice Cream Sandwich (4.0 – 4.0.4) đánh dấu sự bùng nổ về di động khi mà hàng loạt các hãng điện thoại ra mắt các mẫu điện thoại chạy Android Hiện nay phiên bản Nougat (7.0 - 7.1.1)
là phiên bản cập nhật mới nhất dành cho các điện thoại Android
Mặc dù hiện này, phiên bản mới nhất là 7.1 nhưng các thiết bị chạy Android thấp hơn vẫn còn rất lớn Dưới đây là bảng thống kê thể hiện sự phân bố các phiên bản Android trên các thiết bị di động hiện nay (số liệu được lấy từ Google 06/03/2017):
Trang 1514
Phiên bản Tên phiên bản API Tỉ lệ
2.3.3- 2.3.7
Gingerbread 10 1.0%
4.0.4
4.0.3-Ice Cream Sandwich 15 1.0%
Bảng I-1 Phân bố các thiết bị theo phiên bản Android26
1.1.2 Các thành phần trong hệ điều hành Android
Android là một hệ điều hành mở và được phát triển dựa trên nhân Linux Android được phát triển dựa trên kiến trúc ngăn xếp, mỗi ngăn xếp là một tầng và được xếp chồng lên các tầng dưới
Android bao gồm bốn tầng cơ bản, mỗi tầng cung cấp một chức năng, dịch vụ khác nhau từ việc quản lý phần cứng, các cảm biến thiết bị, bộ nhớ, chíp ở mức thấp cho tới các ứng dụng được phát triển và tương tác với người dùng ở mức cao Hình I-2 dưới đây thể hiện kiến trúc của hệ điều hành Android
Trang 16Trong kiến trúc Android, nhân Linux cung cấp các dịch vụ dành cho hoạt động của
hệ điều hành và quản lý các thành phần phần cứng Nhân Linux cung cấp các chức năng như quản lý bộ nhớ, quản lý tiến trình, quản lý các giao thức kết nối Internet:
Trang 1716
TCP/IP, HTTP, DNS, …Thậm chí nhân Linux cũng quản lý các trình điều khiển thiết
bị như cảm ứng, âm thanh, hình ảnh, thu phát sóng,…
b Các thư viện hỗ trợ
Tầng trên của nhân Linux là tập hợp các thư viện cung cấp các chức năng xử lý dữ liệu cho các tầng bên trên, tầng này chính là tầng giao tiếp giữa nhân Linux và các tầng khác
Các thư viện này được viết bằng ngôn ngữ C/C++ và biên dịch sang mã máy dưới dạng nhị phân cung cấp các API cho việc quản lý giao diện (Surface Manager), xử lý
đa phương tiện, kết nối cơ sở dữ liệu (SQLite), xử lý đồ họa (OpenGL-ES), xử lý phông chữ (FreeType), và hỗ trợ kết nối web, trình duyệt (WebKit) hay thậm chí là kết nối an toàn SSL/TLS,…Tầng này còn cung cấp các thư viện Android Runtime, các thư viện này hỗ trợ các ứng dụng được phát triển bằng ngôn ngữ Java Android Runtime sẽ được nói chi tiết ở phần bên dưới
c Android Runtime
Android Runtime cũng bao gồm một tập hợp các thư viện được viết bằng C/C++ và một máy ảo Dalvik cho việc phát triển và chạy các ứng dụng được viết bằng ngôn ngữ Java Các thư viện hỗ trợ việc phát triển ứng dụng Java, cung cấp các API cho việc giao tiếp với máy ảo Dalvik cũng như các API cho lập trình viên Java sử dụng
Máy ảo Dalvik
Máy ảo Dalvik là một kiến trúc và nền tảng được phát triển dựa trên máy ảo dành cho ngôn ngữ Java, nó được sử dụng như một hộp cát để chạy các chương trình viết bằng Java Do các đặc tính và môi trường khác biệt của các thiết bị di động so với môi trường máy tính mà máy ảo Dalvik đã được thiết kế lại bởi Google
Các thiết bị di động thường bị giới hạn về kích thước và năng lượng sử dụng nhưng vẫn phải đảm bảo hiệu năng là một thiết bị thông minh, trong khi bộ vi xử lý CPU có xung nhịp thấp, bộ nhớ nhỏ so với máy tính Chính vì thế mà máy ảo được Oracle phát triển dành cho Java trên máy tính là không phù hợp với các thiết bị di động do máy ảo
Trang 1817
này tạo ra rất nhiều tiến trình cho mỗi chương trình viết bằng Java Dalvik ra đời nhằm giải quyết vấn đề này, Dalvik được thiết kế chỉ chạy một lần duy nhất trong quá trình khởi động máy Dalvik được coi như tiến trình cha của tất cả các tiến trình khác được tạo ra bởi ứng dụng Android
Android sử dụng một khái niệm có tên gọi “Zygote” nhằm chia sẻ các lệnh, bộ nhớ tài nguyên cho các ứng dụng trên hệ điều hành Android mỗi khi ứng dụng được khởi chạy Zygote chính là tiến trình được tạo ra từ Dalvik trong quá trình khởi động của thiết bị, tiến trình này sẽ khởi tạo và tải các thư viện hỗ trợ (mục b) lên bộ nhớ
Hình I-3 dưới đây thể hiện cách thức hoạt động của máy ảo Dalvik và các ứng dụng Android
Hình I-3 Chu trình hoạt động của một ứng dụng Android
Mỗi khi một ứng dụng Android được khởi chạy bởi người dùng, tiến trình Zygote sẽ khởi tạo các trạng thái, bộ nhớ, lệnh đã được tải lên bộ nhớ bởi các thư viện hỗ trợ Việc này giảm thời gian tạo tiến tình, tiết kiệm chi phí bộ nhớ do sử dụng cơ chế bộ nhớ ảo
ByteCode
Như đã trình bày trong mục máy ảo Dalvik, thì các chương trình Java sẽ được biên dịch sang một loại mã chạy trong máy ảo Mã này có tên gọi “bytecode”, và có thể
Trang 1918
được chạy trong máy ảo Java nhưng do Dalvik đã được thiết kế lại bởi Google để đảm bảo hiệu năng cũng như tối ưu cho Android nên mã bytecode cũng được chuyển đổi cho phù hợp với Dalvik Các mã bytecode trong Dalvik có tên gọi khác là DEX bytecode được chuyển đổi từ bytecode qua công cụ Dx Tool nằm trong bộ Android SDK được phát triển bởi Google Các mã DEX bytecode này được lưu trong tệp tin có định dạng Dex do Google tự phát triển và đóng gói vào các ứng dụng Android Chi tiết
về cấu trúc tệp tin Dex và ứng dụng APK sẽ được trình bày cụ thể trong mục sau
d Application FrameWork
Tầng này có chức năng cung cấp các gói hỗ trợ các ứng dụng android, phục vụ quá trình xây dựng ứng dụng Android, cũng như cung cấp các dịch vụ quản lý, hỗ trợ tầng ứng dụng
Các dịch vụ này tạo ra các API cho lập trình viên Android quản lý tài nguyên bằng ngôn ngữ Java Một số dịch vụ có thể kể ra như quản lý cuộc gọi, tin nhắn hay giám sát tài nguyên, năng lượng của hệ thống Dưới đây là một số dịch vụ chính trong tầng Application FrameWork:
Activity Manager
Đây là một dịch vụ quản lý các hoạt động của ứng dụng Mỗi ứng dụng khi được khởi chạy đều có một “activity” ban đầu gọi là MainActivity, và các activity con được gọi từ MainActivity ban đầu này Một ví dụ cho activity có thể là hành động nhắn tin của người dùng, một cuộc gọi thoại, hay một thao tác rà quét các phần mềm độc hại trong hệ thống, …
Dịch vụ này cũng quản lý các ứng dụng Android đang bị treo, hay các chương trình đang chiếm dụng nhiều bộ nhớ
Trang 2019
Telephony Manager
Telephony Manager quản lý truy cập các dịch vụ cuộc gọi trong Adnroid Dịch vụ này quản lý các thông tin như định danh điện thoại (IMEI), chế độ sóng nhà mạng, chuyển vùng giữa các trạm phát sóng
Các ứng dụng tạo ra các activity từ thao thác của người dùng và chuyển các yêu cầu xuống các tầng bên dưới Chi tiết về các ứng dụng APK trên Android sẽ được trình bày ở mục 1.2 dưới đây
1.2 Ứng dụng APK trên Android
Trong phần này tôi sẽ trình bày chi tiết về ứng dụng trên Android, các ứng dụng này
có định dạng với tên gọi APK
1.2.1 Cấu trúc tệp tin APK
Như tôi đã trình bày ở mục 1.1.2 về máy ảo Dalvik và DEX bytecode, các chương trình nguồn viết bằng Java sau khi được biên dịch thành các mã bytecode và chuyển đổi sang mã Dex bytecode để lưu trong tệp tin có định dạng Dex
Tệp tin có định dạng Dex này sẽ được đóng gói cùng với các tệp tin dữ liệu khác để tạo thành tệp tin APK Dưới đây là hình vẽ minh họa quá trình xây dựng tệp tin APK
từ các chương trình nguồn viết bằng Java
Trang 2120
Hình I-4 Quá trình xây dựng một tệp tin APK
Do tệp tin APK được xây dựng bởi các lập trình viên Android nên thành phần tệp tin APK là khác nhau do dữ liệu khác nhau Tôi chỉ tập trung trình bày chi tiết các thành phần và cấu trúc các tệp tin quan trọng có ảnh hưởng trực tiếp tới quá trình phân loại và phát hiện mã độc sử dụng SVM
Cấu trúc tệp tin Dex
Trong máy ảo Java, các lớp đối tượng sẽ được biên dịch thành từng tệp tin chứa mã bytecode riêng biệt, còn đối với Android thì tất cả các lớp đối tượng sẽ được biên dịch
và chỉ nằm một tệp tin Dex có tên gọi là class.dex
Dex sử dụng một kiểu lưu trữ little endian có tên gọi LEB128 để lưu các giá trị có
độ dài 32 bit trong tệp tin Ví dụ giá trị 624485 và - 624485 trong hệ thập phân sẽ được lưu trữ trong tệp tin Dex như sau:
Trang 2221
624485 98765 1001 1000 0111 0110 0101 E58E26
-624485 FFF6789B 0110 0111 1000 1001 1011 9BF159
Bảng I-2 Minh họa kiểu lưu trữ LEB128
Cấu trúc của tệp tin Dex được lưu trữ theo các liên kết và bao gồm các phần cơ bản được thể hiện trong hình I-5 dưới đây:
Hình I-5 Cấu trúc tệp tin Dex và Header
Phần header: header của tệp tin Dex bao gồm các thông tin về sơ đồ vật lý và logic
của tệp tin Header được lưu trữ trong tệp tin Dex với kích thước là 128 byte Các thông tin quan trọng trong phần header bao gồm:
magic là 8 byte định nghĩa nhận dạng của tệp tin dex so với các tệp tin khác
và phiên bản của tệp tin Dex Một ví dụ “dex\n035” chỉ ra tệp tin có định dạng Dex và phiên bản là 035 Hiện tại với Android 7.0 thì phiên bản là 037 dex
Trang 2322
string_ids_off và string_ids_size chỉ ra vị trí cũng như kích thước của phần
string_ids trong tệp tin Hai giá trị này cho phép xác định tất cả các chuỗi ký
tự được sử dụng trong tệp tin Dex hay chính là các chuỗi ký tự được sử dụng trong các lớp đối tượng: tên lớp đối tượng, tên biến,…
proto_ids_off và proto_ids_size chỉ ra vị trí và kích thước của phần
proto_ids trong tệp tin Dex
method_ids_off và method_ids_size chỉ ra vị trí lưu trữ phần method_ids
trong tệp tin Dex Thông tin này rất quan trọng vì nó cho phép ta có thể tìm
ra vị trí lưu trữ các phương thức trong một lớp đối tượng: tên phương thức, tên class tương ứng,…
class_ids_off và class_ids_size, phần này tương tự cũng chỉ ra vị trí và kích thước dùng để lưu trữ phần class_ids Phần này cho phép ta xác định các
thông tin cần thiết về các lớp đối tượng trong tệp tin Dex, class_ids cùng với method_ids chính là hai phần chính liên quan tới việc trích xuất đặc trưng sẽ được trình bày ở chương sau
data_ids_off và data_ids_size xác định vị trí và kích thước của phần data
chứa dữ liệu của tệp tin Dex Đây chính là nơi chứa toàn bộ dữ liệu của tệp tin Các thành phần khác ngoài header gần như đều nằm trong data
map_offset là được dùng để xác định nhanh các thành phần trong tệp tin
Dex
Ngoài ra trong phần header cũng chỉ ra các thông tin là vị trí và kích thước
của các phần khác như type_ids, field_ids, kích thước của tệp tin dex, mã checksum hay signature của tệp tin
Trang 2423
Hình I-6 Cấu trúc của string_ids Mỗi phần tử trong danh sách có tên gọi string_data_off có kích thước 4 byte chỉ ra một vị trí của string_item_string_data trong tệp tin dex
Cấu trúc string_item_string_data bao gồm hai phần:
ULEB128 utf16_size;
char data[utf16_size];
};
Trong đó,
utf16_size (kích thước 1 byte) là độ dài của chuỗi ký tự được lưu trong tệp
tin theo kiểu LEB128
data là nội dung của chuỗi ký tự
Phần class_ids:
Nội dung của phần này chứa tất cả các lớp đối tượng được định nghĩa hay được sử
dụng trong ứng dụng Hình I-7 thể hiện cấu trúc của class_ids:
Trang 25 class_idx chỉ ra định danh kiểu của lớp
access_flags chỉ ra các quyền truy cập vào lớp đối tượng được định nghĩa
Một số quyền quan trọng như: ACC_PUBLIC, _PRIVATE, _PROTECTED, _STATIC
source_file_idx: chính là vị trí của chuỗi ký tự mà định nghĩa tên tệp chương
trình nguồn của lớp đối tượng
class_data_off: đây là trường quan trọng nhất vì nó chỉ ra vị trí của cấu trúc
class_data_item chứa nội dung chính của các lớp đối tượng: phương thức,
số biến và định nghĩa của từng biến,…
Cấu trúc class_data_item:
Cấu trúc class_data_item cho phép ta chỉ ra được tất các thông tin về các lớp đối tượng trong tệp tin Dex
Trang 2625
Cấu trúc này sẽ chứa định nghĩa về chính lớp đối tượng được định danh bởi
class_def_item_class Hình I-8 thể hiện cấu trúc class_data_item:
Hình I-8 Cấu trúc của class_data_item Như hình I-8, qua cấu trúc của class_data_item ta có được vị trí của từng phương
thức trong lớp đối tượng và từ đó xác định được nội dung chính của các bytecode của các phương thức trong lớp Đây chính là kết quả quan trọng giúp cho ta xác định được các lời gọi hàm hay luồng thực thi của ứng dụng qua các mã bytecode của các phương thức trong từng lớp của tệp tin dex
Phần method_ids:
Nội dung của phần method_ids chỉ ra các định nghĩa cho từng phương thức bao
gồm: tên, kiểu trả về, và lớp đối tượng mà phương thức này thuộc Phần này không chỉ
ra vị trí và bytecode của phương thức
Trang 2726
b Tệp tin AndroidManifest
AndroidManifest.xml là một tệp tin được đưa vào trong quá trình phát triển hệ điều hành Android Mọi ứng dụng APK của hệ điều hành Android đều phải định nghĩa một tệp tin AndroidManifest.xml, nó có quan hệ trực tiếp với mô hình quản lý truy cập và
an ninh trong hệ điều hành Android
Tệp tin AndroidManifest có định dạng xml, định nghĩa các thông tin cơ bản về hoạt động của ứng dụng bao gồm tên các gói ứng dụng, các mô đun, thành phần của ứng dụng và các activity, hay quyền truy cập của ứng dụng,…Do AndroidManifest có định dạng xml nên cấu trúc của tệp tin được định nghĩa theo các thẻ
AndroidManifest có chức năng quan trọng trong việc quản lý quyền truy cập, an toàn thông tin mà một ứng dụng được phép Một trường quan trọng là quyền truy cập
được quản lý bởi thẻ <uses-permission> Trong [14], tác giả có chỉ ra rằng mỗi khi
một ứng dụng được cài đặt vào thiết bị Android các trình quản lý ứng dụng của Android sẽ cấp các quyền truy cập được định nghĩa trong AndroidManifest hoặc đưa
ra một thông báo để cảnh báo người sử dụng về quyền truy cập của ứng dụng Dưới
đây là hình I-9, mô tả về thẻ <uses-permission> của một tệp tin AndroidManifest.xml:
Hình I-9 Thẻ <uses-permission> trong tệp tin AndroidMainifest
Như vậy, với các thông tin trọng thẻ <use-permission> ta có thể chỉ ra cơ bản các
quyền, các hành vi của ứng dụng Điều này cũng rất quan trọng đối với quá trình phát hiện mã độc Đặt biệt, các quyền truy cập này có thể được kết hợp với các thông tin trong tệp tin dex để làm các đặc trưng cho quá trình phát hiện mã độc bằng học máy véc tơ hỗ trợ mà tôi sẽ trình bày ở phần sau
Trang 2827
1.2.2 Quản lý truy cập và an ninh trên Android
Do Android được xây dựng dựa trên nhân hệ điều hành Linux, nên Android cũng thừa kế mô hình quản lý an toàn và quyền truy cập của Linux Trong hệ điều hành Android có hai mức hoạt động dành cho các tiến trình là ring 3 và ring 0 tương ứng với quyền người dùng và quyền system
Ngoài các ứng dụng của Google, và các nhà phát hành thiết bị thì các ứng dụng của các lập trình viên đều chạy ở ring 3 có quyền hạn chế và ứng với quyền người dùng của ứng dụng đó Đặc biệt, các ứng dụng Android đều chạy trong vùng nhớ được cấp phát bởi tiến trình Zygote đã được nhắc đến trong phần Android Runtime (mục 1.1.2) Mỗi ứng dụng sẽ hoạt động trong một vùng nhớ riêng được chia sẻ chung với Zygote,
có quyền truy cập riêng không thể sử dụng sang vùng nhớ của ứng dụng khác
Ngoài ra, Android còn cung cấp mô hình quản lý truy cập ở ring 3 cho các ứng dụng dựa trên các permission trong tệp tin AndroidManifest
Như tôi đã trình bày ở phần tệp tin AndroidManifest (mục 1.2.1), Android quản lý các quyền truy cập của ứng dụng thông qua các giá trị permission được khai báo trong tệp tin AndroidManifest Thông thường, các permission của ứng dụng trên Android được Google chia làm bốn loại:
Normal: đây là mức dành cho các permission có mức độ nguy hiểm thấp,
cho phép ứng dụng được phép truy cập vào các tài nguyên ít quan trọng của
hệ thống Các permission thuộc mức này sẽ được cấp phép mặc định mà không cần phải xin phép người sử dụng
Dangerous: mức này chỉ ra các permission được đánh giá là nguy hiểm, do
các permission này cho phép ứng dụng truy cập vào các tài nguyên nhạy cảm như danh bạ, hình ảnh, camera, hay tin nhắn Để có thể sử dụng các permission này thì ứng dụng phải xin phép và được sự cho phép của người
sử dụng khi được cài dặt vào hệ điều hành Android
Signature: Đây là mức truy cập được sử dụng cho các chương trình của hệ
thống Các permission này được cấp phép mặc định cho các ứng dụng mà
Trang 2928
không cần có sự cho phép của người dùng Các ứng dụng có permission này
là các ứng dụng được nhà sản xuất thiết bị đưa vào
Signature/system:Tương tự mức ở trên, nhưng các permission thuộc nhóm
này chỉ dành cho các ứng dụng nằm trong chính hệ điều hành Android như các chương trình quản lý định vị, các thư viện quản lý đa phương tiện, font chữ, hay kết nối an toàn SSL/TLS
Như vậy, trong phạm vi của luận văn tôi chỉ xem xét đến hai mức permission là normal và dangerous, đây là các permission có thể được xin cấp pháp bởi một ứng dụng Các mức permission này được sử dụng làm các thông tin, đặc trưng để đánh giá một ứng dụng là an toàn hay nguy hại Phần này, tôi sẽ trình bày cụ thể trong mục áp dụng học máy véc tơ vào phân loại mã độc ở chương II
1.3 Mã độc trên hệ điều hành Android
Để hiểu rõ hơn về cách thức phân loại và phát hiện mã độc, tôi xin trình bày sơ qua
về mã độc Android cũng như một số loại Song song với đó là một số kỹ thuật phân tích được sử dụng để phát hiện mã độc
Các mã độc trên Android có nhiều loại nhưng thường có chức năng đơn giản, thường nhắm tới hành vi đánh cắp các thông tin cá nhân của người dùng Gần đây, một
số mẫu mã độc xuất hiện với chức năng như một loại ransomware trên môi trường PC
Để có thể phát hiện các mã độc trên Android, tôi sẽ giới thiệu sơ lược về một số loại
mã độc và hành vi của chúng trong mục này
1.3.1 Các loại mã độc trên Android
Dưới đây là một số loại mã độc phổ biến trên Android, các mã độc này chủ yếu có nhiệm vụ đánh cắp thông tin hoặc điều khiển thiết bị của người dùng
a SMS Trojan
Mã độc này được cài đặt và xin cấp các quyền về tin nhắn, danh bạ, Chức năng của các mẫu mã độc này là tự động gửi các tin nhắn dịch vụ có trả phí, hay các tin nhắn tự mua các dịch vụ có phí trong các ứng dụng hay dịch vụ giá trị gia tăng Một ví
dụ cho hành vi này là nhắn tin nhắn đăng ký dịch vụ game Người sử dụng thiết bị sẽ
Trang 30xa
c Ransomware
Đây là một dạng mã độc mới, mã độc này chỉ cần xin cấp quyền đọc, ghi dữ liệu trong thẻ nhớ và truy cập Internet là có thể thực hiện hành vi độc hại Ransomware mới nổi lên là một trong các vấn đề nhức nhối hiện nay về an toàn thông tin Khi được lây nhiễm, Ransomware sẽ thực hiện mã hóa dữ liệu trên thiết bị theo mã hóa bất đối xứng, dữ liệu được mã hóa gần như không thể khôi phục và chỉ có thể khôi phục nếu nạn nhân chấp nhận trả tiền để có được khóa giải mã
1.3.2 Các kỹ thuật phát hiện mã độc trên Android
Phân tích mã độc không chỉ giúp cho quá trình điều tra, tìm ra kẻ tấn công mà còn cho phép giải quyết các sự cố và được sử dụng vào quá trình phát hiện mã độc
Các hiểu biết về mã độc, hành vi của mã độc từ quá trình phân tích sẽ là những dữ liệu quan trọng cho quá trình phòng ngừa, phát hiện mã độc trong các thiết bị khác hay các thiết bị chưa bị lây nhiễm Với mã độc Android, dù có những đặc điểm khác biệt
so với mã độc truyền thống trên PC nhưng ta vẫn có thể sử dụng hai phương pháp cơ bản dưới đây để phân tích mã độc
Kỹ thuật phân tích tĩnh
Kỹ thuật phân tích động
Trong phạm vi của luận văn, tôi sẽ sử dụng phương pháp phân tích tĩnh để xây ứng dụng phát hiện mã độc trên Android do cân nhắc các ưu và nhược điểm của từng phương pháp dưới đây:
Trang 3130
a Kỹ thuật phân tích tĩnh
Kỹ thuật phân tích tĩnh là kỹ thuật phân tích mã độc bằng cách phân tích tĩnh các tệp tin mã độc, hay các dữ liệu từ mã độc mà không cần phải chạy ứng dụng mã độc Với những hiểu biết về cấu trúc của tệp tin APK, và cách thức hoạt động của các ứng dụng trong Android cũng như mô hình quản lý truy cập và an ninh trên Android thì phương pháp này tỏ ra rất hữu hiệu với việc phát hiện mã độc
Các thông tin về quyền truy cập, hay những lời gọi hàm, luồng thực thi của ứng dụng trong tệp tin Dex sẽ cho phép ta thực hiện các phân tích để chỉ ra các tính chất độc hại của ứng dụng Từ đó có kết luận về loại mã độc và loại bỏ mã độc ra khỏi hệ thống hoặc ngăn chặn quá trình cài đặt mã độc vào hệ thống
Ưu điểm: kỹ thuật phân tích tĩnh thực hiện mà không đòi hỏi nhiều tài nguyên của
hệ thống, có thể phát hiện trước khi mã độc được cài vào hệ thống
Nhược điểm: phân tích tĩnh cũng có những nhược điểm là độc chính xác không cao
nếu mã độc có chức năng tự giải mã, tự biến đổi trong quá trình thực hiện Dễ dàng bị vượt qua bởi kẻ tấn công nếu kẻ tấn công có thể biết được các kỹ thuật và cách thức phân tích
Phương pháp này rất phù hợp cho việc phát triển một ứng dụng di dộng phát hiện
mã độc trên Android do tốn ít tài nguyên, kích thước chương trình nhỏ
b Kỹ thuật phân tích động
Kỹ thuật phân tích động là một kỹ thuật xuất phát từ việc nghiên cứu và phân tích
mã độc bằng tay Kỹ thuật này sử dụng môi trường phù hợp để tiến hành chạy thử mã độc và đưa ra kết luận dựa trên các hành vi của mã độc
Ưu điểm: kỹ thuật này có ưu điểm rất lớn là tính chính xác cao do kết luận dựa trên
các hành vi cụ thể của mã độc Kỹ thuật này có thể phát hiện các mã độc có mã hóa dữ liệu hay tự chỉnh sửa, biến đổi trong quá trình chạy
Nhược điểm: Tuy nhiên, phương pháp cũng có nhược điểm rất lớn là các mã độc
phải được thực thi trong hệ thống hoặc được giả lập trong một môi trường phù hợp Điều này gây ra sự tốn kém tài nguyên, hiệu năng của ứng dụng phát hiện bị giảm đáng kể hoặc gây tổn tại tới dữ liệu của người dùng
Trang 3231
Chình vì thế, kỹ thuật phân tích động khó thực hiện, triển khai và thường phù hợp với môi trường PC là các hệ thống máy chủ Kỹ thuật này được áp dụng nhiều trong hệ thống phát hiện mã độc dành cho các hệ thống lớn trong doanh nghiệp, tập đoàn, hoặc các giải pháp phục vụ cộng đồng
Trang 3332
CHƯƠNG II ỨNG DỤNG SVM VÀO PHÁT HIỆN MÃ ĐỘC ANDROID
Trong chương I của luận văn, tôi đã trình bày các nội dung tổng quan về hệ điều hành Android Đồng thời, tôi cũng chỉ ra thông tin quan trọng có ảnh hưởng tới việc xây dựng ứng dụng phát hiện mã độc trên di động:
Cấu trúc tệp tin APK
Tệp tin Dex
Tệp tin AndroidManifest
Quản lý truy cập và an ninh trên Android
Bên cạnh đó, tôi cũng đã chỉ ra một số loại mã độc và các đặc tính quan trọng của chúng Song song đó là hai kỹ thuật phân tích mã độc cơ bản được sử dụng việc phát hiện mã độc Trong phần này, tôi sẽ nói về nội dung chính của luận văn là việc áp dụng học máy véc tơ hỗ trợ SVM kết hợp với kỹ thuật phân tích tĩnh vào việc phát hiện mã độc
2.1 Tìm hiểu về học máy véc tơ hỗ trợ SVM
Phương pháp véc tơ học máy SVM được đề xuất và xây dựng bởi Vladimir N Vapnik và Alexey Ya Chervonenkis vào năm 1963 Sau đó, SVM tiếp tục được nghiên cứu và phát triển bởi Vapnik cho các tập dữ liệu không độc lập khả tuyến tính
Để hiểu rõ hơn về SVM, tôi xin được trình bày bài toán đơn giản nhất của SVM là phân loại tuyến tính Trong phần này, tôi có sử dụng tài liệu tham khảo về SVM trong [5], [6]
2.1.1 Bài toán phân loại hai lớp SVM
Để có thể hiểu rõ về SVM, ta xem xét bài toán phân loại đơn giản sau đây:
Bài toán:
véc tơ đối tượng được phân loại thành mẫu âm và mẫu dương:
gán nhãn C i = 1
Trang 3433
C i = -1
Hình II-1 Bài toán phân loại tuyến tính hai lớp SVM
Yêu cầu: Tìm mặt siêu phẳng phân tách các mẫu dương khỏi các mẫu âm với
Trang 35Mặt siêu phẳng H được gọi là tối ưu nếu mặt phẳng này phân tách hoàn toàn mẫu
âm và mẫu dương (sai số phân loại cực tiểu) và có lề cực đại (lề là khoảng cách từ mẫu
âm và mẫu dương gần mặt siêu phẳng H nhất) Hình II-2 dưới đây biểu diễn mặt siêu phẳng tối ưu H
Hình II-2 Mặt siêu phẳng phân tách âm và dương
Trong hình II-2, hai mặt siêu phẳng H1, H2 có phương trình + = ±1 được gọi là hai mặt siêu phẳng hỗ trợ (các đường nét đứt trong hình II-2) Hai mặt siêu phẳng hỗ trợ H1, H2 là mặt phẳng chứa các mẫu âm, mẫu dương gần mặt siêu phẳng
Trang 36Nghiệm của phương trình Lagrange là các hệ số Từ đó ta có thể xác định giá trị của = ∑ , đối với độ dịch b, ta có thể xác định bằng cách chọn một mẫu
ớ > 0 (ứng với các mẫu nằm gần mặt siêu phẳng tối ưu nhất) và áp dụng điều kiện Karush-Kuhn-Tucker (KKT)20
Với các giá trị w,b tối ưu ta có thể thực hiện phân loại một mẫu x là mẫu âm hay dương bằng cách xét dấu của ( ) = ( + )