Luận văn Ứng dụng mô hình học máy trong phát hiện nguy cơ mã độc trên nền tảng android

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

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

Các file đính kèm theo tài liệu này:

  • pdfluan_van_ung_dung_mo_hinh_hoc_may_trong_phat_hien_nguy_co_ma.pdf
Tài liệu liên quan