API là các lớp và sự can thiệp cho phép các ứng dụng tƣơng tác và thực hiện các chức năng của hệ thống Android cơ bản. Nền tảng Android cung cấp cấu trúc phân cấp của các lớp dựa trên phiên bản đƣợc nhắm mục tiêu của hệ thống Android đƣợc chỉ định bởi cấp API. Khung API cung cấp một bộ lõi gồm 232 gói và hàng trăm lớp và giao diện. Chúng tôi sử dụng các API làm các tính năng để xác định các quy trình mà ứng dụng muốn thực thi; các ứng dụng độc hại gọi các API nhạy cảm cho phép thực hiện các hoạt động độc hại nhƣ tải các tệp jar bên ngoài bằng cách gọi loadClass() hoặc thu thập thông tin của thiết bị bằng cách gọi getDeviceId(). Các ứng dụng thuộc một danh mục nhất định gọi một bộ API nhất định cần thiết để cung cấp các chức năng của danh mục. Chúng liên quan giữa các API do ứng dụng yêu cầu và tập hợp các API phổ biến mà các ứng dụng lành tính trong cùng một danh mục yêu cầu.
Hình 2. 9. Các API đƣợc yêu cầu bởi các ứng dụng độc hại 2.4.4. Tiền xử lý dữ liệu và lựa chọn đặc trƣng
Bƣớc này nhằm mục đích giảm chiều của không gian biến trong tập dữ liệu bằng cách xác định các tập con của các đối tƣợng là yếu tố dự đoán tốt nhất cho các nhãn lớp. Nói chung, lựa chọn các đặc trƣng nâng cao tính tổng quát của các mô hình đã học bằng cách giảm số chiều đặc trƣng quá mức, tăng độ chính xác của phân loại và giảm thời gian huấn luyện và phân loại, tạo ra các mô hình đƣợc diễn giải đơn giản.
Thông thƣờng, các kỹ thuật lựa chọn đặc trƣng đƣợc chia thành ba cách tiếp cận chính: bộ lọc, trình bao bọc và nhúng. Trƣớc tiên, ta tìm kiếm không gian biến cho các tập hợp con của các tính năng và sau đó đánh giá các tính năng đã chọn bằng cách áp dụng các thuật toán học máy. Bộ lọc sử dụng phân tích thống kê để xếp hạng từng đặc trƣng dựa trên các thuộc tính thống kê của tập dữ liệu; các đặc trƣng sau đó đƣợc giữ lại hoặc lọc ra dựa trên điểm số của chúng. Hạn chế của kỹ thuật này là các đặc trƣng đƣợc chọn mà không liên quan đến thuật toán học máy trong quá trình chọn các tính năng. Kỹ thuật nhúng chọn và xây dựng các mô hình đã học cùng một lúc, một ví dụ của kỹ thuật này là thuật toán rừng ngẫu nhiên.
Trƣớc khi áp dụng các thuật toán lựa chọn đặc trƣng, ta cần làm sạch các tập dữ liệu; các đặc trƣng đƣợc cung cấp bởi nền tảng Android là điều quan trọng nhất để cân nhắc trong việc lọc ra hoặc giữ một bộ đặc trƣng nhất định để áp dụng các thuật toán lựa chọn đặc trƣng. Đối với mỗi thuật toán học máy, cần lựa chọn các đặc trƣng khác nhau và phù hợp với mô hình máy học đó để nâng cao độ phân loại chính xác.
2.4.5. Vector hóa các đặc trƣng
Mỗi ứng dụng trong mẫu của tập dữ liệu huấn luyện đƣợc thể hiện dƣới dạng một phiên bản duy nhất với vectơ nhị phân của các tính năng và nhãn lớp cho biết ứng dụng đó là lành tính hay độc hại. Hình 2.11 cho thấy các thể hiện của tập dữ liệu; nếu tính năng có trong ứng dụng, nó đƣợc biểu thị bằng 1, nếu không có trong ứng dụng, nó đƣợc biểu thị bằng 0.
Hình 2. 11. Vectơ nhị phân của ứng dụng 2.4.6. Giới thiệu về phƣơng pháp đánh giá chéo
Phƣơng pháp đánh giá chéo - Cross validation: Là một phƣơng pháp đánh giá dựa vào việc phân chia dữ liệu giữa tập dữ liệu huấn luyện gọi là tập các quan sát và các tập kiểm chứng gọi là tập các quan sát dùng để ƣớc lƣợng lỗi nhằm tìm ra tham số hoặc lựa chọn các mô hình máy học. Đánh giá chéo là phƣơng pháp dùng lỗi trên tập dữ liệu kiểm thử để ƣớc lƣợng lỗi dự đoán.
Một cách thƣờng đƣợc sử dụng là:
Chia tập huấn luyện ra k tập con không giao nhau, có kích thƣớc gần bằng nhau.
Tại mỗi lần kiểm thử, một trong số k tập con đƣợc lấy ra làm tập kiểm chứng. Mô hình sẽ đƣợc xây dựng dựa vào hợp của k−1 tập con còn lại.
Kết quả cuối cùng đƣợc tính bởi công thức: ( ̂) ∑
̂
Trong đó ̂ là hàm ƣớc lƣợng tốt nhất trong tập các hàm, là hàm mất mát để đo lƣờng sai số của mô hình.
Hình 2.12. Một ví dụ về đánh giá chéo 10 lần
Cách làm này còn có tên gọi là k-fold cross validation. Khi k = N, tức là mỗi tập con có đúng một phần tử, ta gọi kỹ thuật này là leave-one-out.
2.5. TIỂU KẾT CHƢƠNG 2
Chƣơng 2 đã cung cấp tổng quan, cơ sở lý thuyết về phát hiện khả năng rò rỉ thông tin riêng tƣ trong các ứng dụng Android sử dụng mô hình SVM để phân loại các ứng dụng độc hại có khả năng gây ra rò rỉ thông tin, mô hình tổng quát của hệ thống và các đặc trƣng cần thiết để giải quyết bài toán.
CHƢƠNG 3. CÀI ĐẶT THỬ NGHIỆM VÀ ĐÁNH GIÁ
Chương này sử dụng các kiến thức đã giới thiệu liên quan đến bài toán phát hiện khả năng làm rò rỉ thông tin trong các ứng dụng Android đã nêu ở Chương 1 và ứng dụng mô hình SVM và các đặc trưng đã được trình bày ở Chương 2 vào bài toán phát hiện khả năng rò rỉ thông tin tiêng tư.
3.1. GIỚI THIỆU PHÁT BIỂU BÀI TOÁN 3.1.1. Giới thiệu 3.1.1. Giới thiệu
Với sự xuất hiện gần đây của các nền tảng di động có khả năng thực thi phần mềm ngày càng phức tạp và sự gia tăng của việc sử dụng nền tảng di động trong các ứng dụng nhạy cảm nhƣ ngân hàng, nguy cơ gia tăng liên quan đến phần mềm độc hại nhắm vào thiết bị di động làm tăng khả năng rò rỉ thông tin riêng tƣ của ngƣời sử dụng.
Bài toán phát hiện phần mềm độc hại có khả năng làm rò rỉ dữ liệu nhƣ vậy đặt ra những thách thức do tài nguyên hạn chế có sẵn của thiết bị và các đặc quyền hạn chế đƣợc cấp cho ngƣời dùng. Chƣơng này trình bày một hệ thống dựa trên máy học SVM để phát hiện phần mềm độc hại có khả năng phát hiện rò rỉ thông tin trên thiết bị Android.
Nói cách khác, cho một tập dữ liệu có nhãn (học có giám sát), thuật toán SVM sẽ dựa trên dữ liệu học để xây dựng một siêu phẳng tối ƣu đƣợc sử dụng để phân loại dữ liệu mới.
3.1.2. Phát biểu bài toán
Bài toán của chúng tôi trích xuất một số đặc trƣng đã đƣợc giới thiệu ở Chƣơng 2 và huấn luyện trên mô hình học máy vectơ hỗ trợ (SVM) theo cách ngoại tuyến (ngoài thiết bị), để tận dụng sức mạnh tính toán cao hơn.
dụng Android đã đƣợc thu thập. Trên cơ sở đó, luận văn sử dụng các công cụ mã nguồn mở để giải mã các ứng dụng thành các tệp mã code của ứng dụng. Sau đó sử dụng các đặc trƣng đã đƣợc giới thiệu để đƣa vào mô hình học máy SVM để tiến hành huấn luyện. Sau cùng là sử dụng mô hình SVM để dự đoán khả năng rò rỉ dữ liệu của các điểm dữ liệu tức là các ứng dụng dùng để kiểm tra và phát hiện.
3.2. CÀI ĐẶT MÔ PHỎNG
3.2.1. Môi trƣờng và ngôn ngữ lập trình
Để tiến hành cài đặt mô phỏng, chúng tôi sử dụng hệ điều hành Windows 10, 64 bit và ngôn ngữ lập trình Python 3.7 chạy trên nền tảng Anacoda. Anaconda là một nền tảng phân phối miễn phí của ngôn ngữ lập trình Python và R cho tính toán khoa học (khoa học dữ liệu, machine learning, xử lý dữ liệu lớn, phân tích dự đoán, v.v.), nhằm mục đích đơn giản hóa việc quản lý và triển khai gói. Nó có trên cả Windows, MacOS và Linux.
3.2.2. Công cụ và thƣ viện
Luận văn sử dụng công cụ Androguard [5], Androguard là một công cụ python đầy đủ để làm việc với các tệp Android. Nó đƣợc thiết kế để chỉ hoạt động với Python 3.
Để tiến hành cài đặt mô hình SVM, luận văn sử dụng thƣ viện Scikit- learn (Sklearn). Nó là thƣ viện mạnh mẽ dành cho các thuật toán học máy đƣợc viết trên ngôn ngữ Python. Thƣ viện cung cấp một tập các công cụ xử lý các bài toán học máy.
3.2.3. Bộ dữ liệu
Trong phần cài đặt này chúng tôi sử dụng bộ dữ liệu phần mềm độc hại Android có tên là CIC-AndMal2017 đƣợc công bố và giới thiệu tại địa chỉ:
https://www.unb.ca/cic/datasets/andmal2017.html. Bộ dữ liệu này của Viện bảo mật mạng của Canada đƣợc các trƣờng đại học, các công ty tƣ nhân và các nhà nghiên cứu độc lập sử dụng trên khắp thế giới. Bộ dữ liệu CIC- AndMal2017 đƣợc cung cấp công khai cho các nhà nghiên cứu.
Bộ dữ liệu này chứa hơn 10.854 mẫu (4.354 phần mềm độc hại và 6.500 phần mềm không độc hại) từ một số nguồn. Đã đƣợc thu thập hơn sáu nghìn ứng dụng an toàn từ GooglePlay đƣợc tạo ra vào các năm 2015, 2016, 2017.
3.2.4. Trích xuất và lựa chọn đặc trƣng
Để áp dụng bất kỳ hạt nhân nào, trƣớc tiên chúng ta phải trích xuất các đặc trƣng từ ứng dụng. Các ứng dụng Android đƣợc đóng gói dƣới dạng tệp APK, tƣơng tự nhƣ tệp jar tiêu chuẩn của Java. Chúng tôi sử dụng dự án mã nguồn mở Androguard [5] để xử lý các tệp này và trích xuất các đặc trƣng. Androguard cung cấp một giao diện dễ sử dụng để phân tích và dịch ngƣợc các ứng dụng Android.
3.2.4.1. Đặc trƣng quyền truy cập
Hệ thống Android chạy các ứng dụng trong sandbox trên môi trƣờng ảo (Davik VM), nơi các ứng dụng đƣợc cách ly khỏi việc can thiệp trực tiếp vào tài nguyên của hệ thống và các ứng dụng khác.
Android quy định các ứng dụng truy cập vào tài nguyên của phần cứng, hệ điều hành và các ứng dụng đƣợc cài đặt khác thông qua mô hình quyền. Ứng dụng cần đƣợc cấp các quyền thích hợp để thực hiện bất kỳ loại quy trình đặc quyền nào trên hệ thống. Nhà phát triển ứng dụng cần khai báo các quyền cần thiết cho ứng dụng trong tệp AndroidManifest.xml; và ngƣời dùng cần cấp các quyền đƣợc yêu cầu tại thời điểm cài đặt để tiến hành cài đặt hoặc nếu không thì quá trình cài đặt sẽ bị chấm dứt.
Các ứng dụng APK phải bao gồm một tệp kê khai, trong số những thứ khác, yêu cầu quyền truy cập vào các phần tử bị hạn chế nhất định của hệ điều hành Android. Các yếu tố này bao gồm quyền truy cập vào các thiết bị phần cứng khác nhau (ví dụ: GPS, máy ảnh), các tính năng nhạy cảm của hệ điều hành (ví dụ: danh bạ) và quyền truy cập vào một số phần tiếp xúc của các ứng dụng khác. Ví dụ: quyền “android.permission.INTERNET‖ yêu cầu quyền truy cập Internet và “android.permission.READ CONTACTS” yêu cầu quyền truy cập vào cơ sở dữ liệu danh bạ điện thoại của ngƣời dùng.
Khi đã trích xuất danh sách các quyền đƣợc yêu cầu, chúng tôi chia chúng thành hai nhóm: quyền tích hợp tiêu chuẩn và quyền không chuẩn. Đối với các quyền tiêu chuẩn, chúng tôi tạo một vectơ nhị phân trong đó mỗi mục nhập tƣơng ứng với một quyền tích hợp đƣợc đặt thành 1 nếu ứng dụng yêu cầu quyền đó và 0 nếu không.
Đối với các quyền không chuẩn, chúng tôi chia các chuỗi thành ba phân đoạn: tiền tố (thƣờng là ―com‖ hoặc ―org”), tổ chức và phần sản phẩm và tên quyền. Chúng tôi bỏ qua bất kỳ sự xuất hiện của các từ android hoặc permission vì đó là những từ phổ biến.
3.2.4.2. Đặc trƣng đồ thị luồng điều khiển
Với mỗi phƣơng pháp trong một ứng dụng nhất định, chúng tôi trích xuất một đồ thị luồng điều khiển (CFG – Control Flow Graph) từ bytecode. Một CFG là một biểu diễn trừu tƣợng của một chƣơng trình, trong đó các đỉnh đại diện cho các khối nguyên tử của các lệnh không chứa lệnh nhảy và các cạnh biểu thị các đƣờng có thể có của dòng chƣơng trình. Mỗi đỉnh đƣợc gắn nhãn dựa trên lệnh cuối cùng trong khối, vì chính lệnh này quyết định cách dòng chƣơng trình rời khỏi khối. Ví dụ, một bƣớc nhảy không điều kiện đƣợc biểu diễn dƣới dạng một cạnh duy nhất; một bƣớc nhảy có điều kiện
đƣợc biểu diễn dƣới dạng sự cố hai cạnh trên cùng một nút bắt đầu.
Tuy nhiên, nhiều virus sử dụng kỹ thuật biến hình để tạo ra các bản sao sửa đổi với mã có cùng ngữ nghĩa, nhƣng với luồng điều khiển khác nhau. Để chống lại những đột biến này, chúng tôi áp dụng các quy tắc viết lại biểu đồ của:
• Hợp nhất các khối lệnh liên tiếp
• Hợp nhất các bƣớc nhảy vô điều kiện với khối lệnh mà chúng nhảy tới • Hợp nhất các bƣớc nhảy có điều kiện liên tiếp
Việc viết lại hoặc rút gọn này có thêm lợi ích là giảm kích thƣớc của đồ thị đƣợc trích xuất mà không phá hủy thông tin ngữ nghĩa quan trọng về luồng chƣơng trình. Khi chúng tôi đã trích xuất và xử lý các biểu đồ này, chúng tôi sẽ loại bỏ các biểu đồ có năm nút trở xuống, vì chỉ có tƣơng đối ít CFG có thể có từ năm nút trở xuống (và do đó chúng mã hóa ít thông tin ngữ nghĩa) và việc loại bỏ chúng cho phép tăng tốc độ đáng kể trong quá trình xử lý. Sau đó, chúng tôi kết hợp các đồ thị này thành một đồ thị lớn không kết nối.
3.2.5. Vector hóa đặc trƣng
Việc phát hiện phần mềm độc hại bằng cách sử dụng các kỹ thuật khai thác dữ liệu yêu cầu cung cấp các thuật toán máy học với tập dữ liệu về các phiên bản và biến để tìm hiểu các mẫu và xây dựng mô hình phân loại. Các đặc trƣng (Permissions, Broadcast Receivers, APIs) đƣợc phân tích cú pháp từ mã nguồn bởi một mô-đun python; các tính năng đƣợc trích xuất đƣợc sử dụng để tạo vectơ nhị phân cho mỗi ứng dụng trong mẫu. Nếu một đặc trƣng cụ thể, chẳng hạn nhƣ quyền READ PHONE STATE, đƣợc ứng dụng yêu cầu, nó đƣợc biểu thị bằng 1 trong vectơ nhị phân trong khi nó đƣợc biểu thị bằng 0 nếu nó không đƣợc yêu cầu. Các phần tiếp theo giải thích các đặc
3.3. KẾT QUẢ CÀI ĐẶT THỰC NGHIỆM VÀ ĐÁNH GIÁ 3.3.1. Kết quả cài đặt 3.3.1. Kết quả cài đặt
Vì không bao giờ có đủ dữ liệu để đào tạo mô hình của bạn, nên việc
loại bỏ một phần của nó để xác thực sẽ đặt ra vấn đề bị thiếu. Bằng cách giảm dữ liệu đào tạo, chúng tôi có nguy cơ mất các mẫu / xu hướng quan trọng trong tập dữ liệu, do đó làm tăng lỗi do sai lệch gây ra. Vì vậy, những
gì chúng tôi yêu cầu là một phƣơng pháp cung cấp nhiều dữ liệu để đào tạo mô hình và cũng để lại nhiều dữ liệu để xác thực. K Fold chéo xác thực thực hiện chính xác điều đó.
Cách tính sử dụng độ chính xác (accuracy) nhƣ ở trên chỉ cho chúng ta biết đƣợc bao nhiêu phần trăm lƣợng dữ liệu đƣợc phân loại đúng mà không chỉ ra đƣợc cụ thể mỗi loại đƣợc phân loại nhƣ thế nào, lớp nào đƣợc phân loại đúng nhiều nhất, và dữ liệu thuộc lớp nào thƣờng bị phân loại nhầm vào lớp khác.
Hình 3. 1. Kết quả dự đoán của mô hình sau khi cài đặt với bộ dữ liệu thu thập đƣợc.
Chúng tôi tiến hành sử dụng bộ dữ liệu thu thập đƣợc nhƣ đã giới thiệu kết hợp với các công cụ, thƣ viện mã nguồn mở để tiến hành cài đặt bằng ngôn ngữ lập trình Python trên môi trƣờng Anacoda 3.7. Kết quả thu đƣợc trên bộ dữ liệu thu thập đƣợc đƣợc cài đặt đánh giá độ chính xác theo phƣơng pháp đánh giá chéo trên tập dữ liệu thu thập đƣợc. Kết quả thu đƣợc sau quá trình cài đặt đƣợc thể hiện nhƣ trong hình 3.1.
3.3.2. Đánh giá kết quả của mô hình
Luận văn đã kiểm tra hệ thống dựa trên một tập hợp 2081 lành tính và 91 ứng dụng Android độc hại có khả năng làm rò rỉ thông tin riêng tƣ. Đối với