Điện thoại thông minh đã trở nên rất phổ biến trong vài năm trở lại đây. Trong sự phát triển của thi trường di động thông minh, Android một nền tảng mã nguồn mở của Google đã trở thành một trong những hệ điều hành di động phổ biến nhất. Android chủ yếu được sử dụng trên điện thoại thông minh và máy tính bảng
Trang 1BAN CƠ YẾU CHÍNH PHỦ
Trang 31.2 Vấn đề về mã độc trên hệ điều hành Android 2
1.3 Kiến trúc hệ điều hành android 4
1.4 Cấu trúc tệp tin trong hệ điều hành Android 8
1.4.1 Tổng quan về hệ thống tệp tin trên Android 8
1.4.2 Các kiểu tệp tin trên android 9
1.4.3 Tổ chức quyền sở hữu và quyền hạn trên tệp tin 9
1.4.4 Cây thư mục trên hệ điều hành Android 10
1.5 Mô hình bảo mật của android và các nguy cơ mất an toàn 11
1.6 Kết luận chương 1 13
Chương 2NGHIÊN CỨU KĨ THUẬT PHÁT HIỆN MÃ ĐỘC DỰATRÊN PHÂN TÍCH TĨNH2.1 Phân loại các kỹ thuật phân tích phát hiện mã độc 14
2.1.1 Một số phương pháp lây nhiễm mã độc vào thiết bị Android142.1.2 Các kĩ thuật phân tích mã độc trên Android 14
2.2 Mô hình phân tích tĩnh 17
2.3 Nghiên cứu kỹ thuật dịch ngược và công cụ 20
2.3.1 Công cụ 20
Trang 42.3.2 Kĩ thuật dịch ngược 24
2.4 Một số kĩ thuật phân tích tĩnh mã độc trên hệ điều hành Android 30
2.4.1 Phát hiện mã độc trên Android bằng cách phân tích tệp tinManifest 30
2.4.2 Phát hiện mã độc trên Android bằng phương pháp duyệt mãnguồn ứng dụng 40
2.5 Mã độc trên hệ điều hành Android 42
2.6 Hạn chế nguy cơ mất an toàn 48
2.6 Kết luận chương 2 53
Chương 3THỰC NGHIỆM3.1 Áp dụng các kĩ thuật phân tích tĩnh vào phân tích mã độc trênAndroid 54
Trang 5DANH MỤC HÌNH VẼ
Hình 1.1: Thị phần của các hệ điều hành di động quý 4 năm 2012 1
Hình 1.2: Thị phần của các hệ điều hành di động quý 4 năm 2016 1
Hình 1.3: Tác động của malware trên điện thoại thông minh 3
Hình 1.4: Quá trình đóng gói lại một ứng dụng 4
Hình 1.5: Kiến trúc hệ điều hành Android [4] 4
Hình 1.6: Cấu trúc một cây thư mục đơn giản 10
Hình 1.7: Mô hình bảo mật của Android 11
Hình 2.1: Mô hình phân tích tĩnh 17
Hình 2.2: Giao diện Android SDK Manager 22
Hình 2.3: Giao diện NotePad++ 23
Hình 2.4: Giao diện JD-GUI 24
Hình 2.5: Quá trình xây dựng và dịch ngược tệp tin APK 25
Hình 2.6: Lưu tệp tin ApkTool 25
Hình 2.7: Kết quả thực hiện của công cụ apktool 27
Hình 2.8: Các thành phần của tệp tin ứng dụng 30
Hình 2.9: Sơ đồ phương pháp phân tích 32
Hình 2.10: Biểu đồ thời gian phát triển của malware trên điện thoại thông minh .43Hình 3.1: Sử dụng SublineText để xem tệp tin manifest 54
Hình 3.2: Mô hình ứng dụng 66
Hình 3.3: Giao diện chương trình ban đầu cho phép người dùng tải lên tệp tin cầnphân tích 68
Hình 3.4: Giao diện kết quả phân tích của tệp tin chứa mã độc 69
Hình 3.5: Giao diện kết quả phân tích của tệp tin không chứa mã độc 69
Hình 3.6: Giao diện kết quả phân tích chi tiết của tệp tin 70
Hình 3.7: Giao diện hiển thị các tệp tin đã phân tích 70
Hình 3.8: Giao diện đánh giá quyền của ứng dụng 72
Hình 3.9: Giao diện các API được sử dụng trong ứng dụng 72
Hình 3.10: Giao diện kết quả phân tích mã nguồn ứng dụng 73
Trang 6DANH MỤC BẢNG
Bảng 1.1: Bảng liệt kê một số kiểu tệp tin trong Linux 9
Bảng 1.2: Một số quyền làm việc với tệp tin 9
Bảng 2.1: So sánh giữa hai kĩ phân tích 16
Bảng 2.2: Bảng kích thước trung bình các tệp tin 31
Bảng 2.3: Bảng số lượng tệp tin trung bình 31
Bảng 2.4: Danh sách các quyền yêu cầu trong ứng dụng lành tính 34
Bảng 2.5: Danh sách các quyền yêu cầu trong mã độc 35
Bảng 2.6: Các permission nguy hiểm 36
Bảng 2.7: Các Intent-filter (action) nguy hiểm 37
Bảng 2.8: Intent-filter (category) nguy hiểm 37
Bảng 2.9: Tên Process nguy hiểm 37
Bảng 2.10: Một số quyền cơ bản và mức độ nguy hiểm đối với hệ thống [8] 49
Bảng 2.11: Top 10 các Permission nguy hiểm mà các Spy sử dụng 51
Bảng 2.12: Top 10 các Permission nguy hiểm mà các Ransomware sử dụng 51
Bảng 2.13: Top 10 các Permission nguy hiểm mà các Trojan sử dụng 52
Trang 7LỜI CẢM ƠN
Tôi muốn nhân cơ hội này để gửi lời cảm ơn tới những người khác nhau đãgiúp đỡ tôi trong suốt thời gian hoàn thành đồ án của tôi Trước hết tôi xin cảm ơnsự giúp đỡ tận tình của cán bộ hướng dẫn tôi là ThS Lê Bá Cường – Giảng viênKhoa Công nghệ thông tin Học viện Kỹ thuật Mật mã đã hướng dẫn rất nhiệt tìnhvà cung cấp kiến thức có giá trị mà không có những kiến thức đó thì đồ án sẽkhông nhìn thấy một kết thúc thành công, xin cảm ơn sự động viên của người thânvà bạn bè Tôi đánh giá cao những người xung quanh đã góp phần đóng góp chođồ án của tôi bằng những cách khác nhau mà thậm chí họ không nhận ra.
Xin cảm ơn tất cả mọi người đã tạo những điều kiện tốt nhất để tôi hoànthành đồ án tốt nghiệp này!
SINH VIÊN THỰC HIỆN ĐỒ ÁN
Trịnh Doãn Mạnh
Trang 8LỜI CAM ĐOAN
Tôi xin cam đoan bản đồ án này do tôi tự nghiên cứu dưới sự hướng dẫn củathầy giáo ThS Lê Bá Cường.
Để hoàn thành đồ án này, tôi chỉ sử dụng những tài liệu đã ghi trong mục tàiliệu tham khảo, ngoài ra không sử dụng bất cứ tài liệu nào khác mà không đượcghi.
Nếu sai, tôi xin chịu mọi hình thức kỷ luật theo quy định của Học viện.Hà Nội, ngày 4 tháng 6 năm 2017
Học viên thực hiện
Trịnh Doãn Mạnh
Trang 9MỞ ĐẦU
Điện thoại thông minh đã trở nên rất phổ biến trong vài năm trở lại đây.Trong sự phát triển của thi trường di động thông minh, Android một nền tảng mãnguồn mở của Google đã trở thành một trong những hệ điều hành di động phổ biếnnhất Android chủ yếu được sử dụng trên điện thoại thông minh và máy tính bảng.Điện thoại thông minh ngày càng được chấp nhận và sử dụng bởi rất nhiều yếu tốnhư các thiết bị điện thoại thông minh có khả năng cung cấp các dịch vụ như ngânhàng, mạng xã hội, các ứng dụng văn phòng và hầu hết tất cả mọi thứ đều có thểlàm với điện thoại thông minh Điện thoại thông minh được trang bị một số tínhnăng như kết nối wifi, gọi điện, lưu trữ dữ liệu, định vị toàn cầu(GPS),
Đi đôi với sự phát triển của hệ điều hành Android thì số lượng mã độc pháttriển trên hệ điều hành này cũng ngày một tăng cao Năm 2012 số lượng mã độcphát hiện mới trên nền tảng Android là 214.327 mẫu đến năm 2016 đã tăng lên3.246.284 mẫu mã độc được phát hiện mới [6] Điều này dẫn đến các phần mềmphòng chống mã độc trên Android cũng cần cải tiến về phương pháp, kỹ thuật Đãcó rất nhiều nghiên cứu tập trung vào việc phát hiện phần mềm độc hại trênAndroid Một trong những phương pháp phổ biến bao gồm các phương pháp dựatrên chữ ký, trích chữ ký từ phần mềm độc hại mẫu Mặc dù nó có hiệu quả để pháthiện phần mềm độc hại đã biết, nhưng nó không đủ để phát hiện phần mềm độc hạichưa biết Ngoài ra còn một số phương pháp dựa trên việc phân tích hoạt độngmạng của các phần mềm Phương pháp này thực hiện giám sát lưu lượng truy cậpmạng của một ứng dụng mẫu và cố gắng phát hiện phần mềm độc hại bằng cách so
sánh với danh sách blacklist của DNS và địa chỉ IP Phương pháp này không thể
phát hiện phần mềm độc hại chưa được xác định, vì blacklist được tạo ra từ cáchoạt động của phần mềm độc hại đã được biết đến Isohara [3] trình bày mộtphương pháp để phát hiện phần mềm độc hại bằng cách phân tích các thuộc tínhcủa các tập tin trong các mẫu ứng dụng Mặc dù cách tiếp cận này có thể phát hiệnmột số phần mềm độc hại không xác định mà không bị phát hiện bởi blacklist hoặcphương pháp phân tích dựa trên chữ ký, chi phí phân tích phụ thuộc vào số lượngtệp trong mẫu phân tích Enck và cộng sự [9] đề xuất một phương pháp để ngănchặn việc cài đặt các ứng dụng có quyền nguy hiểm hoặc intent filter (một cơ chếđể thực hiện hợp tác giữa các ứng dụng Android) Tuy nhiên, phương pháp có thểdẫn đến phát hiện không chính xác, bởi vì thông tin được sử dụng trong phươngpháp không đủ để phân biệt phần mềm độc hại từ các ứng dụng lành tính Ngoài ra
Trang 10còn phương pháp phân tích mã độc dựa trên việc phân tích các lời gọi API trongtệp tin smali như trong nghiên cứu của Wu và cộng sự [14] Tuy nhiên, việc thựchiện phương pháp trên sẽ nảy sinh vấn đề đó là chi phí phân tích rất lớn nó tùythuộc vào số lượng tệp tin và kích thước của tệp tin trong ứng dụng ban đầu.
Đồ án được thực hiện nhằm mục đích tìm hiểu về các phương pháp phát hiệnmã độc dựa trên phân tích tĩnh
Mục tiêu đặt ra khi thực hiện đồ án là:
1 Hệ thống lại kiến thức về hệ điều hành Android.2 Hiểu được mã độc trên hệ điều hành Android.
3 Tìm hiểu các phương pháp phân tích tĩnh trên hệ điều hành Android.4 Viết chương trình cài đặt phát hiện mã độc trên hệ điều hành Android
nhằm củng cố kiến thức lý thuyết.
Sau thời gian khoảng ba tháng thực hiện đồ án, các mục tiêu về cơ bản đãđạt được Tuy nhiên chương trình phát hiện mã độc trên Android vẫn chưa có độchính xác cao Rất mong được sự góp ý của các thầy cô, cũng như các bạn họcviên để đồ án này được hoàn thiện hơn.
SINH VIÊN THỰC HIỆN ĐỒ ÁN
Trịnh Doãn Mạnh
Trang 11A) TỔNG QUAN VỀ HỆ ĐIỀU HÀNH ANDROIDa.1 Tổng quan về sự phát triển của hệ điều hành android
Điện thoại thông minh đã trở nên rất phổ biến trong vài năm trở lại đây Sốlượng người dùng smartphone trên toàn thế giới được dự báo sẽ tăng từ 3,4 tỷ vàonăm 2015 lên khoảng 6,4 tỷ trong năm 2021 [10] Trong sự phát triển của thitrường di động thông minh, Android một nền tảng mã nguồn mở của Google đã trởthành một trong những hệ điều hành di động phổ biến nhất
Hình 1.1 là thị phần thị trường di động của Android, iOS và các hệ điềuhành di động khác [20]:
Hình 1.1: Thị phần của các hệ điều hành di động quý 4 năm 2012
(Theo thống kê của Gartner vào quý 4 năm 2012) [20]
Hình 1.2: Thị phần của các hệ điều hành di động quý 4 năm 2016
(Theo thống kê của Gartner vào quý 4 năm 2016)
Sự gia tăng đột ngột của các ứng dụng trên điện thoại thông minh gây ra mốilo ngại về bảo mật cho người dùng Điện thoại di động đã trở thành mục tiêu củacác nhà phát triển các ứng dụng độc hại Android trở nên phổ biến bởi vì nó là hệđiều hành mã nguồn mở và có một số tính năng cơ bản như các middleware(làphần mềm có nhiệm vụ kết nối các thành phần của mềm hoặc ứng dụng lại với
Trang 12nhau ) giữa các máy ảo và một số ứng dụng cơ bản như máy tính, lịch, trìnhduyệt,
a.2 Vấn đề về mã độc trên hệ điều hành Android
Kiến trúc của Android được tạo thành từ bồn phần sau:
- Một hạt nhân Linux(Linux Kernel) có hỗ trợ multiprocess(nhiều tiến trình) và multuthreads(nhiều luồng) Mỗi ứng dụng có một Linux ID riêng và chạymột tiến trình riêng biệt Hai ứng dụng có cùng một ID có thể trao đổi dữ liệu với nhau.
- Một số thư viện mã nguồn mở
- Môi trường Android run-time, trong một máy ảo Dalvik chạy một ứng dụng với định dạng nhị phân dex.
- Application Framework bao gồm các Java interface Lớp này bao gồm Android NDK và SDK.
- Các ứng dụng được cài đặt
Các mô hình an toàn cho thiết bị android dựa trên cơ chế phân quyền vàsanbox Mỗi ứng dụng sẽ chạy trong máy ảo Dalvik riêng của mình với một IDduy nhất được gán cho ứng dụng đó Điều này ngăn cản các ứng dụng sẽ cản trởthông tin và dữ liệu của ứng dụng khác.
Các nhà phát triển phần mềm của bên thứ ba sẽ tạo ra các ứng dụng mới vàđưa chúng lên chợ ứng dụng của Android Điều này sẽ cho phép người dùng có thểtruy cập vào hàng ngàn ứng dụng, do đó cần để người sử dụng hoàn toàn tin tưởngvào ứng dụng trước khi cài đặt chúng Vì lí do đó mà mọi ứng dụng cần đưa ra cácquyền đòi hỏi trong quá trình cài đặt Người dùng có quyền chấp nhận hoặc từ chốitất cả các quyền đó, trong trường hợp này, quá trình cài đặt ứng dụng sẽ bị hủy.
Tuy nhiên, có nhiều ứng dụng độc hại vẫn có mặt trên chợ ứng dụng củaAndroid Do đó nó sẽ trở thành điều cần thiết cho Google kiểm tra các ứng dụngthường xuyên và làm sạch thị trường ứng dụng di động cho Android bằng cách xóabỏ phần mềm độc hại Ngoài phần mềm độc hại ra còn một số loại tấn công kháctrên các ứng dụng di động như: tấn công lừa đảo, kết nối http không an toàn, sửdụng dữ liệu local,
Dựa trên các mẫu mã độc đã được công bố, hình 1.3 dưới đây sẽ cho thấy sốlượng mã độc và tác động của chúng [5]:
Trang 13Hình 1.3: Tác động của malware trên điện thoại thông minh
Từ đồ thị trên ta có thể thấy hầu hết các mã độc trên di động đã thành côngtrong việc kiểm soát các tập tin và vô hiệu hóa ứng dụng khác Trong trường hợpcủa hệ điều hành Android, các ứng dụng được đăng trên chợ ứng dụng củaAndroid, các ứng dụng được xuất bản trên chợ ứng dụng Android là nơi ngườidùng có thể xem và tải các ứng dụng đó về và cài đặt trên máy Kẻ tấn côngthường xáo trộn lại ứng dụng và xuất bản lại chúng Người dùng tải về các ứngdụng đó mà không biết rằng ứng dụng đó không phải là bản gốc và phần mềm độchại đó đã được cài đặt trên thiết bị của họ.
Một trong những cách mà một kẻ tấn công có thể lôi kéo người dùng tải vềcác phần mềm độc lại là đóng gói lại các ứng dụng bằng cách sử dụng các công cụdịch ngược Kẻ tấn công sẽ thay đổi mã lệnh của chương trình kết hợp với các mãđộc hại và đóng gói lại ứng dụng sau đó phát hành ra thị trường ứng dụng di động.Người dùng thường không thể phân biệt giữa phần mềm độc hại và phần mềm hợppháp ban đầu Quá trình trên sẽ được mô tả ở sơ đồ sau [15]:
Trang 14Hình 1.4: Quá trình đóng gói lại một ứng dụng
Số lượng của mã độc và phần mềm gián điệp ngày càng tăng nhanh Do đóviệc phân tích một ứng dụng có an toàn hay không trước khi thực hiện cài đặt là rấtcần thiết Điều đó sẽ giúp bảo vệ cho sự an toàn cho dữ liệu của người dùng và tổchức.
a.3 Kiến trúc hệ điều hành android
Hình 1.5: Kiến trúc hệ điều hành Android [4]
Tôi sẽ nói về kiến trúc của hệ điều hành android Về cơ bản nó sẽ bao gồmba phần cụ thể là: Middleware, hệ điều hành và các ứng dụng chính Tính năng củanó bao gồm [20]:
- Bluetooth, EDGE, WiFi and 3G.
Trang 15- SQLite sử dụng để lưu trữ dữ liệu.- Application Framework
- Máy ảo Dalvik, v.v.
Kiến trúc của hệ điều hành android sẽ bao gồm:
Application(ứng dụng) [20]
Điện thoại android thường có một số ứng dụng mặc định như email client,trình duyệt, lịch, nhắn tin, bản đồ, v.v Ngoài ra, tầng này còn chứa toàn bộ ứngdụng được cài đặt bởi người dùng Các ứng dụng android được lập trình bằng Java.
Application Framework [20]
Các nhà phát triển ứng dụng Android được cung cấp việc truy cập và sửdụng thông tin như vị trí, thiết lập báo thức, thiết bị phần cứng, dịch vụ nềnchạy, v.v Các nhà phát triển ứng dụng Android cũng có quyền truy cập vào cácAPI trong khuôn khổ đó được sử dụng bởi các ứng dụng core Tái sử dụng cácthành phần được thực hiện bởi các thiết kế kiến trúc ứng dụng.
Tất cả các ứng dụng có một tập hợp các hệ thống và dịch vụ ở bên dướichúng:
- Views: chúng được sử dụng để xây dựng lên ứng dụng chẳng hạn như text box, button, grids,
- Content Providers: điều này sẽ cho phép ứng dụng chia sẽ dữ liệu của nó và truy cập thông tin từ các ứng dụng khác.
- Resource Manager: phần này sẽ cấp quyền truy cập vào các nguồn tài nguyên(không mã hóa) như các tệp tin đồ họa, layout file và localized string- Notification Manager: tùy chỉnh các cảnh báo được hiển thị trên thanh trạng
thái để đưa ra cảnh báo cho người dùng.
- Activity Manager: điều khiển vòng đời của ứng dụng và ngăn xếp các hành động.
Libraries và Android Runtime:
Trang 16Libraries [20]
Android cung cấp một số các API(Application program interface) cho pháttriển ứng dụng Danh sách các API cơ bản sau được cung cấp bởi tất cả các thiết bịtrên nền Android:
- android.util: Gói tiện ích cơ bản bao gồm nhiều lớp mức thấp như là các lớp quản lý (List, Stack…) lớp xử lý chuỗi, lớp xử lý XML
- android.os: Gói hệ điều hành cung cấp truy cập đến các dịch vụ cơ bản như là chuyển tin nhắn, thông tin chéo, đồng hồ và gỡ lỗi.
- android.graphics: Cung cấp các lớp đồ họa mức thấp thực hiện các chức năng đồ họa, màu, vẽ cơ bản.
- android.text: Công cụ hiển thị và xử lý văn bản
- android.database: Cung cấp các lớp mức thất bắt buộc cho việc điều khiển cursor khi làm việc với các cơ sở dữ liệu
- android.content: Các giao tiếp lập trình nội dung được dùng để quản lý truy cập dữ liệu và xuất bản bằng cách cung cấp các dịch vụ thao tác với tài nguyên, Content Provider, và các gói
- android.view: View là lớp giao diện người dùng cơ bản nhất Tất cả giao diện người dùng được tạo ra đều phải sử dụng một tập các View để cung cấpcho các thành phần tương tác người dùng.
- android.widget: Xây dựng dựa trên gói View Những lớp Widget những thành phần giao diện được tạo sẵn được sử dụng để tạo nên giao diện người dùng Các Widget bao gồm danh sách, nút bấm, hộp nhập, các kiểu trình bày(layout)
- com.google.android.maps: Bộ API mức cao cung cấp truy cập đến điều khiển bản đồ sẵn trong Androif từ ứng dụng được xây dựng Bao gồm cả lớpMapView cũng như Overlay và MapController để tương tác với bản đồ bên trong ứng dụng.
- android.app: Một gói thư viện bậc cao, cung cấp truy cập đến dữ liệu của ứng dụng Gói ứng dụng cũng bao gồm lớp Activity và Service là thành phần cơ bản của mọi ứng dụng Android.
- android.provider: Để tạo thuận lợi cho người phát triển truy cập đến các Content Provider tiêu chuẩn(như là dữ liệu danh bạ), gói Cung cấp(Provider)
Trang 17bao gồm các lớp cho phép truy cập đến cơ sở dữ liệu chuẩn trong tất cả các bản phân phối Android.
- android.telephony: Các API này cung cấp khả năng tương tác trực tiếp với tầng điện thoại trong các thiết bị, cho phép tạo, nhận, theo dõi các cuộc gọi, tình trạng các cuộc gọi và tin nhắn SMS.
- android.webkit: Gói WebKit cung cấp các API để làm việc với các nội dung Web-based bao gồm một lớp WebView để tạo ra giao diện web, nhúng trongứng dụng và một trình quản lý cookie.
Ngoài ra, Android được trang bị một bộ thư viện C/C++ để sử dụng cho mộtsố thành phần của hệ thống Các thư viện này cung cấp cho nhà phát triển ứngdụng thông qua Android Application Framework [20].
Dưới đây là một số thư viện chính và chức năng của chúng:
- System C Library: thư viện này được sử dụng cho các thiết bị nhúng based.
Linux Media Libraries: thư viện này sẽ hỗ trợ cho việc ghi âm và định dạng video, phát lại các tập tin như tệp tin ảnh với định dạng như JPG, PNG các tệp tin đa phương tiện như AMR, MP3, MPEG4, AAC
- SGL: thư viện này bao gồm các công cụ hỗ trợ đồ họa 2D.
- SQLite: đây là cơ sở dữ liệu quan hệ có thể truy cập vào tất cả các ứng dụng- Surface Manager: thư viện này kiểm soát quyền truy cập vào các lớp đồ họa
2D và 3D từ các ứng dụng khác nhau và để các hệ thống phụ hiển thị.- WebKit: trình duyệt web mã nguồn mở.
- SSL: là các thư viện đảm nhiệm cho quá trình kết nối trên mạng internet được an toàn
Android Runtime [20]
Android có một số thư viện core cung cấp hầu hết các chức năng cũng cósẵn trong các thư viện chính của Java Android Runtime: Bao gồm máy ảo Dalvikvà các thư viện Android
Tất cả các ứng dụng Android chạy trong tiến trình riêng với các máy ảoriêng DVM (Dalvik Virtual Machine) Dalvik cho phép một thiết bị có thể chạynhiều máy ảo một cách hiệu quả DVM thực thi các tập tin có định dạng dex.DVM phụ thuộc vào hạt nhân Linux cho các chức năng cơ bản như quản lý bộ nhớở mức độ thấp và luồng.
Các thư viện cơ bản: Các ứng dụng Android được phát triển trên môi trườngJava, nhưng Dalvik lại không phải là một máy ảo Java Các thư viện cơ bản củaAndroid cung cấp hầu hết các chức năng có trong thư viện cơ bản của Java cũngnhư là thư viện riêng của Android.
Trang 18Linux Kernel [20]
Dịch vụ android, giống như quy trình quản lí, mô hình điều khiển, quản líbộ nhớ, bảo mật và an ninh mạng, các hệ thống chính phụ thuộc vào phiên bảnLinux 2.6 Kernel như một lớp trừu tượng giữa software stack và phần cứng Đồngthời hạt nhân(kernel) còn làm tất cả những thứ mà Linux có thể làm tốt như kết nốimạng và tạo ra một chuỗi các trình điều khiển thiết bị, giúp cho việc giao tiếp vớicác thiết bị ngoại vi dễ dàng hơn.
Ứng dụng android chủ yếu được phát triển bằng ngôn ngữ lập trình Java, tuynhiên cũng có một số ứng dụng có thể được phát triển bằng C/C++(sử dụngandroid NDK) Một android package sẽ bao gồm các đoạn mã java đã biên soạn vàtất cả tài nguyên và các tệp tin dữ liệu theo yêu cầu của ứng dụng.
a.4 Cấu trúc tệp tin trong hệ điều hành Android
Hệ thống quản lý tập tin trong android là được phát triển từ linux nên cónhiều đặc điểm giống với hệ thống quản lý tập tin trên linux
1.4.1 Tổng quan về hệ thống tệp tin trên Android
Trong Android, các tệp tin được tổ chức thành các thư mục, theo mô hìnhphân cấp Tham chiếu đến một tệp tin bằng tên và đường dẫn Các câu lệnh thaotác tệp tin cho phép thực hiện các chức năng như dịch chuyển, sao chép toàn bộthư mục cùng với các thư mục con chứa trong nó.
Có thể sử dụng các ký tự, dấu gạch dưới, chữ số, dấu chấm và dấu phẩy dểđặt tên tệp tin Không duợc bắt đầu một tên tệp tin bằng dấu chấm hay chữ số.Những ký tự khác như ‘/’, ‘?’, ‘*’, là ký tự dặc biệt đuợc dành riêng cho hệ thống.Chiều dài của tên tệp tin có thể tới 256 ký tự Trong hệ diều hành Android có sựphân biệt tên tệp tin chữ hoa và chữ thuờng, điều dó có nghĩa là trong cùng 1 thưmục có thể tồn tại những tệp tin có tên là File, FILE, file và chúng là những tệptin khác nhau Tất cả các tệp tin trong Android có chung cấu trúc vật lý là chuỗicác byte (byte stream) Cấu trúc thống nhất này cho phép Android áp dụng kháiniệm tệp tin cho mọi thành phần dữ liệu trong hệ thống Thư mục cũng như cácthiết bị được xem như tệp tin Chính việc xem mọi thứ như các tệp tin cho phépAndroid quản lý và chuyển đổi dữ liệu một cách dễ dàng Một thư mục chứa các
Trang 19thông tin về thư mục, đuợc tổ chức theo một định dạng đặc biệt Các thành phầnđuợc xem như các tệp tin, chúng được phân biệt dựa trên kiểu tệp tin: tệp tin bìnhthường, tệp tin thư mục, tệp tin kiểu ký tự, và tệp tin kiểu khối.
1.4.2 Các kiểu tệp tin trên android
Trong nhiều hệ điều hành như window, người ta phân biệt rõ tập tin(file) vàthư mục (folder) hay directory là 2 thành phần khác hẳn nhau Tuy nhiên trên hệđiều hành Android (cũng như Linux) thì coi directory cũng là tệp tin và nó là mộtloại tệp tin đặc biệt Thực tế còn một số loại tệp tin nữa có thể liệt kê theo bảng sau[1]:
Bảng 1.1: Bảng liệt kê một số kiểu tệp tin trong Linux
D Thư mục (directory)
b Tệp tin kiểu khối (block-type special file)C Tệp tin kiểu ký tự (character-type special file)L Liên kết tượng trưng (symbolic link)
P Tệp tin đường ống (pipe)
- Tệp tin bình thường (regular file)
1.4.3 Tổ chức quyền sở hữu và quyền hạn trên tệp tin
Tương tự trên hệ thống linux, trên hệ điều hành android, một tệp tin có thểliên kết với một người sử dụng và một nhóm người sử dụng Sự liên kết đó là mộttập hợp các quyền hạn truy cập bao gồm quyền được phép đọc (read), được phépghi (write) và được phép thực thi (execute)
Cụ thể như sau: Một tệp tin sẽ có những quyền hạn tương ứng với 9 ký tựtheo mẫu sau : với 3 ký tự “r,w,x” nghĩa là có quyền tương ứng với ký tự viết tắtđó, “-” nghĩa là không có quyền hạn đó(bảng 1.2):
Bảng 1.2: Một số quyền làm việc với tệp tinChủ nhân tệp tin
Nhóm tài khoản sở hữutệp tin (Owner Group)
Những người khôngthuộc nhóm sở hữu
tệp tin( Other)
Trang 20x/- 3 ký tự đầu tiên là quyền hạn chủ nhân tệp tin
3 ký tự giữa là quyền hạn của nhóm tài khoản sở hữu tệp tin
3 ký tự cuối là quyền hạn của những người không thuộc nhóm sở hữu tệp tin
1.4.4 Cây thư mục trên hệ điều hành Android
Thư mục (hay có thể gọi là file) root là thư mục gốc của tất cả các tệp tin thưmục còn lại Dưới nó có chứa một số tệp tin thư mục hệ thống Mỗi thư mục (trừthư mục root) đều có một thư mục cha chứa nó, bản thân nó cũng có thể có nhiềutệp tin thư mục con Cấu trúc đó có thể mô tả bằng một cây thư mục có dạng nhưsau [1]:
Hình 1.6: Cấu trúc một cây thư mục đơn giảnGiới thiệu một vài thư mục tiêu biểu [18] :
/(root) : là thư mục gốc, là thư mục duy nhất không có thu mục cha. / mnt : thư mục chứa thiết bị lưu động (removeable).
/system : chứa những thành phần cơ bản nhất của hệ thống.
/ect : chứa những tệp tin cấu hình của hệ thống, nó cực kỳ quan trọng vì sự hoạt động của hệ thống đều bị chi phối ở những tệp tin cấu hình này.
/system/lost+found : chứa những tập tin bị mất lúc khởi động máy. /system/font : chứa những font chữ hiển thị đuợc.
/system/lib : chứa các thư viện để các phần mềm hoạt động (các phần mềm viết bằng ngôn ngữ java).
/system/app : chứa các tệp tin apk của phần mềm (Các tệp tin cài đặt ứng dụng, tương tự như MSI trong window hay dev trong Linux).
/system/bin : chứa các chương trình nội trú của hệ thống
Trang 21a.5 Mô hình bảo mật của android và các nguy cơ mất an toàn
Mô hình bảo mật trên Android được thiết kế để không cho ứng dụng đượcphép thực hiện bất kì hoạt động xấu nào làm ảnh hưởng đến các ứng dụng khác,người sử dụng hoặc hệ điều hành Mỗi ứng dụng chạy trong một tiến trình riêngcủa nó và do đó Android được coi là hệ thống đa xử lí Trong linux các nhóm vàngười dùng sử dụng ID gán cho các ứng dụng và thực hiện áp dụng an ninh cho hệthống và cho các ứng dụng ở mức tiến trình Một mức an ninh nữa là sử dụng cơchế cấp quyền để hạn chế về hoạt động của một tiến trình cụ thể [12].
Trong mô hình bảo mật của Android chủ yếu dựa trên cơ chế bảo vệ và chophép Mỗi ứng dụng sẽ chạy trong một máy ảo Dalvik cụ thể với một ID duy nhấtđược gán, có nghĩa là mã nguồn của ứng dụng này chạy độc lập với mã nguồn củaứng dụng khác Như vậy ứng dụng không được cấp quyền thì sẽ không thể truy cậpvào tập tin của ứng dụng khác [12].
Hình 1.7: Mô hình bảo mật của Android
Mỗi ứng dụng Android đã được ký kết với một chứng chỉ có khóa riêng đểbiết chủ sở hữu của các ứng dụng là duy nhất Điều này cho phép các tác giả củaứng dụng sẽ được xác định nếu cần thiết Khi một ứng dụng được cài đặt trongđiện thoại nó được gán một ID người dùng, do đó tránh được nó tự ảnh hưởng đếncác ứng dụng khác bằng cách tạo một sandbox cho nó ID người dùng này là vĩnhviễn trên đó thiết bị và các ứng dụng có cùng ID người dùng được phép chạy trongmột tiến trình duy nhất Đây là một cách để đảm bảo rằng một ứng dụng độc hại cóthể không truy cập/thỏa hiệp dữ liệu của ứng dụng chính hãng [17].
Nó là bắt buộc đối với một ứng dụng để liệt kê tất cả các tài nguyên nó sẽtruy cập trong khi cài đặt Các điều khoản được yêu cầu của một ứng dụng, trongquá trình cài đặt,cần được sự chấp thuận của người dùng tương tác hoặc dựa trênkiểm tra cùng với chữ ký của các ứng dụng [17].
Trang 22Quyền của ứng dụng Android là cần thiết ở các giai đoạn khác nhau trongvòng đời của một ứng dụng, cụ thể là [17]:
- Vào thời điểm một lời gọi hệ thống để ngăn chặn các ứng dụng từ việc thực hiện các chức năng cụ thể mà không mong muốn.
- Khởi đầu của một hoạt động để tránh các hoạt động của các ứng dụng khác khởi xướng.
- Quyền quản lí người có thể gửi, nhận tin nhắn.- Khởi động dịch vụ.
- Thực hiện hoạt động hoặc truy cập một nội dung trên máy.
Có thể chia mức độ an ninh trên thiết bị Android thành 4 cấp độ với tên cụthể như sau:
- Mức độ bình thường(Normal): trong trường hợp này không có quyền nào yêu cầu sự cho phép của người dùng, do đó các quyền bình thường sẽ được trao cho ứng dụng.
- Mức độ nguy hiểm(Dangerous): những quyền này theo yêu cầu của một ứngdụng tới người sử dụng trong quá trình cài đặt Người dùng có thể chấp nhậntất cả các quyền hoặc từ chối tất cả Sự từ chối của các quyền sẽ chấm dứt quá trình cài đặt.
- Signature: những điều khoản được thừa nhận bởi hệ thống cung cấp và các ứng dụng yêu cầu có chứng chỉ tương tự.
- Signature System: nó cũng tương tự như Signature nhưng chỉ áp dụng cho các ứng dụng hệ thống.
Vô số phương pháp bảo mật tích hợp cho Android làm cho nó an toàn chỉkhi nó được xử lý bởi người sử dụng có trách nhiệm và hiểu những ảnh hưởng củamột số quyền được yêu cầu bởi các ứng dụng khác nhau.
Bên cạnh đó hệ điều hành Android cũng bộc lộ ra một số lỗi của mình khiếncho người dùng có thể bị tấn công và bị đánh cắp thông tin cá nhân.
Một số lỗ hổng an ninh trên Android:
- Lộ thông tin qua các bản ghi log: Việc truy cập log trên Android được cung cấp thông qua Log API, nó có thể hiển thị thông tin qua câu lệnh “logcat” Ứng dụng với quyền READ_LOG có thể đọc thông tin log, trong log có thể chứ các thông tin nhạy cảm của người dùng [21].
- Sử dụng thẻ nhớ ngoài: một ứng dụng có quyền ĐỌC(READ) hoặc
GHI(WRITE) thẻ nhớ ngoài thì nó có khả năng đọc toàn bộ thông tin được lưu trên đó từ bất kì ứng dụng nào [21].
- Wi-Fi Sniffing: điều này có thể làm xáo trộn các dữ liệu đang được truyền từmột thiết bị như nhiều trang web và các ứng dụng không có các biện pháp an
Trang 23ninh nghiêm ngặt Ứng dụng không mã hóa dữ liệu và do đó nó có thể được chặn bởi một kẻ biết lắng nghe trên đường truyền không an toàn [21].
- Khai thác mạng: khai thác các lỗ hổng phần mềm hiện tại của hệ điều hành hoặc phần mềm đối với các mạng di động hoặc mạng địa phương(local) Những khai thác thường không yêu cầu bất kỳ sự can thiệp từ người sử dụngvì thế nó được coi là nguy hiểm nhất [21].
Các vấn đề an ninh lớn đối với điện thoại thông minh đang chạy trên hệ điềuhành Android là người sử dụng không có kiến thức hoặc bất cẩn cài đặt phần mềmđộc hại hoặc bị các cuộc tấn công khác như tấn công lừa đảo Các vấn đề an ninhquan trọng thứ hai là một số ứng dụng hợp pháp lại có lỗ hổng có thể bị khai thác.
a.6 Kết luận chương 1
Hệ điều hành Android là hệ điều hành trên mobile phổ biến nhất hiện nay.Trong chương một tôi đã đi tổng quan về hệ điều hành Android và các vấn đề liênquan đến sự mất an toàn trên hệ điều hành Android Vì vậy việc phân tích mã độctrên Android là rất cần thiết, việc phân tích sẽ giúp bảo vệ người dùng khi sử dụngđiện thoại chạy hệ điều hành Android Ta sẽ đi xem xét các cách phân tích để giữcho người dùng và dữ liệu của họ được an toàn.
Trang 24B) NGHIÊN CỨU KỸ THUẬT PHÁT HIỆN MÃ ĐỘC DỰA TRÊNPHÂN TÍCH TĨNH
b.1 Phân loại các kỹ thuật phân tích phát hiện mã độc
b.1.1 Một số phương pháp lây nhiễm mã độc vào thiết bị Android
Có một số phương pháp mà các thiết bị Android có thể bị nhiễm phần mềmđộc hại Sau đây là bốn phương pháp khác nhau mà phần mềm độc hại có thể đượccài đặt trên điện thoại:
- Đó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 ứ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 ứngdụng bị nhiễm mã độc Đã có khoảng 86,0% ứng dụng hợp pháp bị đóng góilạ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 [22].
- 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 đểthỏa hiệp đ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: Nó cũng đã được phát hiện ra rằng 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 ứngdụ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 Ứ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,
b.1.2 Các kĩ thuật phân tích mã độc trên Android
a) Kĩ thuật phân tích động
Phân tích động đôi khi cũng được gọi là phân tích hành vi, được sử dụng đểphân tích và nghiên cứu hành vi của phần mềm độc hại Sau đó nghiên cứu các
Trang 25cách phần mềm độc hại tương tác với hệ thống, dịch vụ, thu thập dữ liệu, thực hiệnkết nối mạng, mở cổng dịch vụ,
Trong giai đoạn này, các tập tin apk được cài đặt trên một thiết bị môphỏng(hoặc thiết bị thật) để quan sát hành vi của ứng dụng Một báo cáo được tạora và các hành vi được so sánh với các kết quả trong phần phân tích tĩnh.
Phân tích động được thực hiện bằng cách chạy các ứng dụng trên các thiết bịthực tế và giả lập Với các đầu vào khác nhau, chẳng hạn như lưu lượng mạng vàtruy cập tập tin được theo dõi Nexus S được sử dụng để thử nghiệm trực tiếp, vìnó là một thiết bị với hệ điều hành Android mặc định từ Google mà không cần bấtkỳ phần mềm nào của bên thứ ba Điều này sẽ cho một cái nhìn tổng quát hơn đểthử nghiệm Tcpdump được sử dụng để theo dõi lưu lượng mạng, và DDMS đượcsử dụng để phân tích tiến trình và số liệu khác.
b) Kĩ thuật phân tích tĩnh
Phân tích tĩnh được gọi là phân tích mã nguồn, được sử dụng để phân tíchmã nguồn của phần mềm độc hại Mục đích chính là để biết chính xác các đoạn mãđộc hại được nhúng trong mã nguồn của ứng dụng.
Giai đoạn này bao gồm việc phân tích các tập tin apk và tất cả các nội dungcủa tập tin đó Các nội dung được truy cập được bằng cách chuyển đổi chúng thànhmột hình thức có thể đọc được Các classes được chuyển đổi từ DEX thành cácclasses Java, và các tập tin nhị phân XML, AndroidManifest.xml, được chuyểnđổi sang XML có thể đọc được Sau khi chuyển đổi thành công, đang xem xét bấtkỳ hành vi đáng ngờ nào trong mã nguồn Điều này được thực hiện bằng cáchthông qua các quyền yêu cầu của các ứng dụng trong mã nguồn, sau đó, một nhậtký được lập ra để ghi lại tất cả các hành vi nhận thấy rằng có thể được coi là độchại.
Một số công cụ có thể được sử dụng trong quá trình phân tích này để xemmã nguồn chương trình:
- Dex2Jar
Trang 26- JD-GUI- ApkTool
Mã nguồn của ứng dụng ở dạng dex sẽ được chuyển đổi sang tập tin classcủa Java bằng cách sử dụng Dex2Jar JD-GUI sẽ giúp ta xem toàn bộ mã nguồnJava Đối với các tập tin XML ta có thể sử dụng Notepad++ để xem mã nguồn.
Khi tất cả các nội dung đã sẵn sàng, các mã nguồn ứng dụng sẽ được phântích Phân tích tập tin AndroidManifest.xml và chiết xuất các quyền được yêu cầucủa ứng dụng Các hoạt động trong ứng dụng cũng được ghi nhận Giai đoạn tiếptheo là xem xét mã nguồn của ứng dụng Để tìm ra các lời gọi hàm bất thường,nguy hiểm của ứng dụng
c) So sánh các kĩ thuật phân tích mã độc tren Android
Bảng 2.3: So sánh giữa hai kĩ phân tích
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 ứngdụng đang ở chế độ thực thi.Phân tích
mã độc
- Sử dụng các công cụ dịchngược để lấy mã nguồn của ứngdụng từ tệp tin APK(dex2jar,APKtool, ).
- Kiểm tra quyền của ứngdụng thông qua tệp tinAndroidManifest.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ôngqua API được phân tích nhằm phát
- Phân tích dựa trên cáctính năng, hành vi của cácứng dụng khi chạy các ứngdụng.
- Phân tích dựa trênviệc kiểm tra các cuộc gọihệ thống và đường dẫn thựcthi.
- Thông tin bị rò rỉtrong quá trình phân tích vàtiêu hao năng lượng đượcgiám sát để phát hiện hành
Trang 27hiện hành vi nguy hiểm của ứngdụng.
vi nguy hiểm của các ứngdụng.
Hạn chế - Trong trường hợp mã nguồnbị làm rối sẽ giảm hiệu quả củaphân tích.
- Mã nguồn không thể đượcphân tích trong trường hợp phântích bytecode.
- Không thể phát hiện ra mẫumã độc mới.
- Cần nhiều thời gianvà công sức để phân tíchứng dụng trong các khoảngthời gian chạy khác nhau.
Trang 28mà ứng dụng yêu cầu trong quá trình cài đặt Các dấu hiệu cần được theo dõi baogồm một số dấu hiệu nổi bật:
- Icon
- Các quyền ứng dụng yêu cầu khi cài đặt
- Theo dõi lưu lượng mạng khi ứng dụng được cài đặt
- Trên thiết bị thật ta có thể theo dõi sự hao hụt pin, tốc độ máy,
Hai dấu hiệu đầu tiên ta có thể dễ dàng quan sát khi thực hiện cài đặt ứngdụng lên môi trường thử nghiệm Vấn đề khó khăn duy nhất là giám sát lưu lượngmạng Bằng cách mã độc hại chỉ được lập trình để gửi thông tin về kẻ tấn côngtrong một khung thời gian nhất định.Kết thúc bước đầu tiên chúng ta cần lấy thôngtin trên biểu tượng để xem liệu có gì khác với ứng dụng gốc hay không (nếu mãđộc hại được chèn vào một số ứng dụng phổ biến), các quyền ứng dụng yêu cầukhi cài đặt, lưu lượng mạng trước và sau khi cài đặt ứng dụng.
Bước 2: Phân tích tệp tin apk
Sau khi hoàn thành bước thứ nhất Ta tiến hành phân tích tệp tin apk Tệp tinapk thực chất là một tệp tin nén chứa tài nguyên của ứng dụng Ta dễ dàng giải néntập tin apk và thu được thư mục chứa tài nguyên của ứng dụng Ngoài định dạngtệp vốn có của Android Trong tệp APK có thể chứa mã độc hại để thực thi khicuộc gọi được cài đặt hoặc chạy tệp đã được sửa đổi đuôi để đánh lừa hệ thống Vì
vậy, chúng ta phải xem xét cẩn thận các tập tin APK trong tập tin
Kết thúc bước 2 chúng ta cần có được danh sách các tệp nghi ngờ có trongtệp APK mẫu.
Bước 3: Thực hiện phân tích tệp tin AndroidManifest
Trong bước này, tôi tiến hành phân tích tệp tin AndroidManifest Trong tệpAndroidManifest, chúng ta cần lưu ý đến các đặc điểm sau:
- Permission- Activitives
Trang 29- Intent- Main
Trong bước này ta có thể sử dụng một số công cụ:- SmaliViewer
- ApkTool
Kết thúc bước 3 ta thu được một danh sách các đặc điểm được liệt kê ở trên.Chú ý đến quyền được yêu cầu trong tệp AndroidManifest và các quyền được yêucầu khi cài đặt (thu được trong bước 1) phân tích các quyền là nguy hiểm haykhông Cần phải đánh giá mức độ nguy hiểm của việc cho phép.
Bước 4: Thực hiện phân tích code java
Trong bước 4 đầu tiên ta phải chuyển code của chương trình về dạng ta cóthể đọc được Từ tệp với định dạng dex ta cần chuyển về dạng smali hoặc jar đểthực hiện phân tích code chương trình.
Để chuyển từ dạng tệp dex về dạng jar ta có thể sử dụng công cụ dex2jar.Chuyển về dạng smali ta có thể sử dụng công cụ ApkTool.
Để mở các dạng code đã được chuyển đổi ta có thể sử dụng:- JDGui
- MobSF
Trang 30- Nó có thể được sử dụng để gỡ lỗi cho code smali.
- Công cụ này có thể được sử dụng để bổ sung thêm một số hỗ trợ hoặc các tính năng cho các người dùng khác nhau.
- Công cụ cho phép sử dụng để làm việc với các ứng dụng một cách dễ dàng hơn vì nó cung cấp một số tác vụ tự động lặp và cấu trúc tập tin như cấu trúccủa dự án(project)
Như đã biết, mỗi ứng dụng Android thực hiện với một máy ảo Dalvik củariêng mình DVM hiện các tập tin ở định dạng dex hay còn được biết đến như làđịnh dạng Dalvik Executable Các định dạng dex được coi là một định dạng nhịphân các hướng dẫn của sản phẩm cho cho máy ảo Dalvik.
Các thành phần và chương trình logic của một ứng dụng Android nằm trongtập tin classes.dex mà người dùng không thể xem Do đó Dex2Jar công cụ đượcphát triển để chuyển đổi sang định dạng dex sang class Với sự giúp đỡ của côngcụ này bây giờ có thể xem mã nguồn của một ứng dụng như là một mã nguồn java.
Android SDK
Trang 31Android Software Development Kit (SDK) là một bộ sưu tập các công cụphát triển được sử dụng để tạo ra các ứng dụng Các thành phần/công cụ sau đâycó trong SDK:
- Debugger- Máy ảo
- Hướng dẫn của hệ điều hành Android- Các thư viện cần thiết
- Code mẫu
- Các tài liệu về API của Android
SDK có thể cài ở bất cứ hệ điều hành nào từ Window XP, Vista, 7, Linux vàMac OS Các thành phần của SDK có thể được tải về một cách độc lập hoặc bổsung từ bên thứ 3 Khi Google phát hành một phiên bản mới của hệ điều hànhAndroid, phiên bản mới của SDK cũng được phát hành trong đó có các tính năngmới nhất.
Android SDK có thể được sử dụng bơi các nhà phát triển ứng dụng để viết racác chương trình bằng cách sử dụng các lệnh, tuy nhiên nó sẽ khả thi hơn khi thựchiệ bằng các công cụ phát triển(Integrated Development Environment(IDE)) Córất nhiều IDE tương thích với SDK nhưng một số được ưu chuộng như: Eclipse,Android Studio, Hình 2.2 là giao diện của Android SDK Manager.
Trang 32Hình 2.9: Giao diện Android SDK Manager
Notepad++
Notepad++ cũng có thể được sử dụng như một công cụ phát triển ứng dụng(IDE) Notepad++ thường được sử dụng để chỉnh sửa mã nguồn Nó là một côngcụ miễn phí được viết bằng C++ sử dụng STL và WIn32 API Công cụ có thể giúpta nhanh chóng các chương trình có kích thước nhỏ Trong đồ án này tôi sử dụngNotepad++ để view các tệp tin.xml Hình 2.3 là giao diện của ứng dụng Notepad++.
Trang 33Hình 2.10: Giao diện NotePad++
Đây là công cụ Java Decompiler nó hoàn toafnn miễn phí Với giao diện đồhọa công cụ cho phép ta view mã nguồn Java của các tệp tin class Một số tínhnăng của công cụ:
Trang 34Hình 2.11: Giao diện JD-GUI
2.3.2 Kĩ thuật dịch ngược
Dịch ngược là quá trình phân tích mã code của phần mềm để kiểm tra vàphát hiện các lỗ hổng hoặc lỗi của phần mềm Dịch ngược là quá trình tạo ra mãnguồn từ mã thực thi Kĩ thuật này sử dụng để kiểm tra các chức năng của chươngtrình hoặc được thực hiện để bỏ qua các bước kiểm tra các cơ chế bảo mật, v.v Dođó kĩ thuật dịch ngược còn được sử dụng trong quá trình chỉnh sửa mã nguồnchương trình để chương trình thực hiện theo ý đồ của người dịch ngược mongmuốn.
Quá trình dịch ngược được sử dụng để phân tích mã độc cho các ứng dụngAndroid Đây là một quá trình dịch ngược một ứng dụng để hiểu cách làm việc vàchức năng của ứng dụng bằng cách phân tích mã nguồn và gỡ lỗi ứng dụng đó.Hình 2.5 là quá trình xây dựng và dịch ngược tệp tin APK.
Trang 35Hình 2.12: Quá trình xây dựng và dịch ngược tệp tin APK
Một khi ứng dụng khi được tải về trên điện thoại từ Google Market, tệptin apk có sẵn Vì vậy, trước hết, các tập tin nên được un-packaging bằng cách sửdụng lệnh như “unzip” Sau đó, các tập tin và thư mục sau đây sẽ được tìm thấytrong thư mục giải nén.
Trong phân tích tĩnh tôi sẽ sử dụng hai cách sau để phân tích một ứng dụngandroid:
- Sử dụng ApkTool để disassemble ứng dụng Android và thực hiện phân tích smali code bằng cách sử dụng Notepad++.
- Sử dụng Dex2Jar để chuyển mã nguồn từ tệp tin dex sang dạng code java vàsau đó sử dụng Notepad++ hoặc JDGui để phân tích code java.
Trang 36Ta có thể thực hiện download ApkTool ở địa chỉ:
Sau đó ta sẽ thực hiện phân tích tệp tin cần phân tích với ApkTool.Vào thư mục chứa ApkTool và chạy công cụ với lệnh:
java -jar apktool.jar
Ta thu được toàn bộ thông tin về các tùy chọn(option) mà Apktool cung cấp.Để dịch ngược một tệp tin apk ta thực hiện lệnh sau:
java -jar apktool.jar d <đường_dẫn_ tệp_tin _apk>
Tệp tin phân tích được lấy ở đường dẫn: https://drive.google.com/open?id=0B1Eckcvi1T6hbE94MG9KTHdkN1E
Output của lệnh sẽ như sau:
I: Using Apktool 2.2.2 on com.app.lotte.auth-1.apkI: Loading resource table
I: Decoding AndroidManifest.xml with resources
I: Loading resource table from file: C:\Users\manh\AppData\Local\apktool\framework\1.apk
Trang 37I: Regular manifest package I: Decoding file-resources I: Decoding values */* XMLs I: Baksmaling classes.dex I: Copying assets and libs I: Copying unknown files I: Copying original files
Hình ảnh thực thi của công cụ apktool được minh họa trong hình 2.7.
Hình 2.14: Kết quả thực hiện của công cụ apktool
Khi lệnh được thực thi thành công, không có lỗi, thư mục có tên ứng dụnghoặc trong trường hợp của tôi là tên phần mềm độc hại sẽ được tạo trong cùng mộtthư mục Thư mục này sẽ chứa các tệp như hình sau:
Thư mục res: Thư mục này chứa các thư mục XMLs định nghĩa các layout,drawables, thuộc tính(attributes), ngôn ngữ(langgues), v.v
Tệp tin Android Manifest: Tệp này là một trong những tệp XML quan trọngnhất chứa thông tin về các quyền mà ứng dụng cần hoặc truy cập Nói cách khác,tệp tin này chứa thông tin lớn liên quan đến ứng dụng.
Trang 38Thư mục smali: Thư mục này chứa mã nguồn của ứng dụng đã được chuyểnđổi về dạng smali Ta có thể sử dụng Notepad++ để xem mã nguồn này.
Đoạn mã sau khi được phân tích với sự trợ giúp của Notepad++ Một khi mãđã được phân tích và mã độc được phát hiện chúng ta có thể có sửa đổi cần thiết vàđóng gói lại ứng dụng.
Ta có thể đóng gói lại ứng dụng bằng sự trợ giúp của ApkTool với lệnh:
java -jar apktool.jar b <đường_dẫn_thư_mục_cần_đóng_gói>
Output của lệnh trên như sau:
I: Using Apktool 2.2.2
I: Checking whether sources has changed I: Smaling smali folder into classes.dex I: Checking whether resources has changed I: Building resources
I: Building apk file
I: Copying unknown files/dir
Trang 39Tải ứng dụng cần phân tích tại: https://drive.google.com/open?id=0B1Eckcvi1T6hbE94MG9KTHdkN1E
Lưu tệp tin cần phân tích trong thư mục của dex2jar Tệp tin apk thực chấtlà một tệp tin nén Ta có thể sử dụng WinZip hoặc phần mềm giải nén tệp tin nàokhác để giải nén tệp tin apk Trong trường hợp này tôi sử dụng tệp tin tải về theođường dẫn trên Giải nén một tệp tin.apk ta thu được:
Trong thư mục thu được ta quan tâm tới các thành phần chính:
- Thư mục META-INF: Thư mục này bao gồm thông tin cho phép người dùngđảm bảo tính an toàn của hệ thống và tính toàn vẹn của ứng dụng APK.- Thư mục res: Thư mục này bao gồm các tập tin tài nguyên như layout, âm
thanh, cài đặt, đồ họa, v.v
- Tệp tin Android Manifest: Đây là tệp XML chứa thông tin như các quyền
Trang 40truy cập được truy cập bởi ứng dụng, tên gói, phiên bản, v.v
- classes.dex: Tập tin này chứa tất cả mã nguồn Java được biên dịch Tập tin được chạy trên máy ảo Dalvik Tập tin này bao gồm bytecode đầy đủ mà máy ảo Dalvik sẽ sử dụng.
- Resources.arsc: Đây là tập tin nguồn nhị phân thu được sau biên dịch.
Bước tiếp theo là mở cửa sổ lệnh và chuyển đến thư mục gốc của Dex2Jar.Tệp classes.dex của phần mềm độc hại cũng phải có mặt trong cùng thư mục vớitệp tin dex2jar.bat Do đó ta sẽ sao chép tệp classes.dex vào thư mục chứa tệpdex2jar.bat Ta sẽ thực hiện lệnh sau:
d2j-dex2jar.bat classes.dex
Ta sẽ thu được tệp tin: classes-dex2jar.jar nếu quá trình thực hiện lệnhkhông xảy ra lỗi Ta sử dụng JD-Gui để mở tệp tin classes-dex2jar.jar.
b.4 Một số kĩ thuật phân tích tĩnh mã độc trên hệ điều hành Android
b.4.1 Phát hiện mã độc trên Android bằng cách phân tích tệp tin Manifest
a) Cơ sở lí thuyết
Một ứng dụng Android bao gồm các phần như sau:
Hình 2.15: Các thành phần của tệp tin ứng dụng
AndroidManifest.xml: tệp tin cung cấp thông tin cần thiết để ứng dụng hoạt
động bình thường với hệ thống Android, trong đó hệ thống sẽ đọc tệp tin này trước