Reverse Malware on Android
1. Introduction
- Android là hệ điều hành dành cho các thiết bị di động phát triển bởi Google trên nền tảng Linux. Android được xây dựng mở cho phép người dùng tự tạo ứng dụng dựa trên các thư viện sẵn có.
- Các ứng dụng có thể upload lên Android Market để chia sẻ với người dùng khác theo hình thức miễn phí hoặc thu phí.
- Thị trường ứng dụng Android phát triển nhanh chóng kéo theo hàng loạt mối nguy hại có thể xảy ra đổi với các thiết bị sử dụng android và điển hình là Malware.
- Malware trên android là những đoạn mã độc được nhúng vào các ứng dụng bình thường, có khả năng xâm nhập ăn cắp thông tin của người dùng hoặc tự động thực thi các tác vụ không mong muốn.
- Malware trên Android đầu tiên phải kể đến DroidDream, sau đó là một loại các malware nguy hiểm khác như Zitmo, HippoSMS … và gần đây là biến thể DroidDreamLight.
- Theo thống kê Malware DroidDream phát hiện vào tháng 3/2011 đã tấn công vào 400.000 thiết bị, biến thể DroidDreamLight được phát hiện gần đây cũng đã tấn công vào trên 120.000 thiết bị.
- Bài nghiên cứu tập trung phân tích các kỹ thuật :
2. Android Architecture
Đầu tiên chúng ta cùng nhìn lại tổng quan kiến trúc Android.
Kiến trúc Android bao gồm 4 phần :
Figure 1 : Architecture of Android Operating System
- Libraries : Là các thư viện được viết bằng ngôn ngữ C/C++ sẽ được các developer phát triển ứng dụng android thông qua tầng Android Framework. VD : SQLite – quản lý database của ứng dụng.
- Android Runtime :
Figure 2 : Android Security Model
- Mô hình bảo mật như vậy khiến cho việc virus hoạt động trong hệ thống android khá khó khăn.
- Chính vì vậy hướng phát triển trên android chủ yếu là malware và spyware.
3 . Reverse Malware on Android
Figure 3 : Repackaging Applications Process
- Mô hình trên mô tả quá trình kẻ tấn công chèn malware vào ứng dụng bình thường với mục đích tấn công người sử dụng. Vậy làm điều đó như thế nào???
- Như đã giới thiệu ở trên, ứng dụng Android được biên dịch ra dạng mã máy (file .dex) để chạy trên máy ảo dalvik. Năm 2009, các nhà nghiên cứ đã tìm ra cách dịch ngược Dalvik Bytecode sang dạng mã java bytecode.
- Sử dụng tool Dex2Jar được viết bởi 1 sinh viên Trung Quốc, có thể chuyển từ dalvik bytecode sang java bytecode sau đó sử dụng một số chương trình Java Decompiler là có thể đọc được mã java của ứng dụng :
Figure 4 : Sử dụng JD-gui và Dex2Jar decompile chương trình Twitter 2.1.1
- Tuy nhiên phương pháp này có vấn đề khi decompile chương trình phức tạp và khó khăn trong việc compile lại chương trình.
- Giải pháp được đưa ra đó là dịch ngược mã dalvik bytecode sang một dạng mã dễ đọc hơn và từ đó chỉnh sửa và biên dịch lại. Tool smali và baksmali được phát triển để thực hiện việc này.
- Các công cụ cần thiết để reverse một ứng dụng android :
- Ứng dụng được chọn để khai thác là Twitter 2.1.1, bản mới nhất được tải trên Android Market.
- Đầu tiên sử dụng apktool để decompile file Twitter211.apk
Figure 5 : Decompile application using apktool
- Kết quả thu được là folder Twitter221 chứa toàn bộ mã nguồn của chương trình
Figure 6 : Danh sách file mã nguồn của chương trình
- Với mã nguồn này, ta tiến hành đọc và tìm cách sửa phù hợp. Ở đây mình tiến hành sửa trong file LoginActivity.java với mục đích chèn 1 package có chức năng hiện thị một message box khi người dùng đăng nhập vào twitter.
Figure 7 : Chèn mã thực thi vào trong ứng dụng.
- Trong đoạn mã chèn thêm, Lp/str/Str_i trỏ đến một package srt_i.java được viết ra với mục đích hiện thị một message box và được copy trực tiếp vào trong folder /smali của chương trình nguồn.
- Tác dụng của đoạn code chèn thêm vào là khởi tạo một new-instance trỏ đến package str_i sau đó gọi thực thi package này.
- Sau khi sửa code ta tiến hành biên dịch và ký lại chương trình
Figure 8 : Re-Compile and Re-Sign application
- Và kết quả thu được :
Figure 9 : Chương trình sau khi bị chèn thêm mã độc
4 . Conclusion
Với sự phát triển bùng nổ của các ứng dụng android thời gian gần đây kéo theo sự xuất hiện đa dạng của các malware, spyware trên hệ máy này. Nội dung bài phân nghiên cứu là giới thiệu cơ bản về cách thức chèn malware vào các chương trình android.
- Android là hệ điều hành dành cho các thiết bị di động phát triển bởi Google trên nền tảng Linux. Android được xây dựng mở cho phép người dùng tự tạo ứng dụng dựa trên các thư viện sẵn có.
- Các ứng dụng có thể upload lên Android Market để chia sẻ với người dùng khác theo hình thức miễn phí hoặc thu phí.
- Thị trường ứng dụng Android phát triển nhanh chóng kéo theo hàng loạt mối nguy hại có thể xảy ra đổi với các thiết bị sử dụng android và điển hình là Malware.
- Malware trên android là những đoạn mã độc được nhúng vào các ứng dụng bình thường, có khả năng xâm nhập ăn cắp thông tin của người dùng hoặc tự động thực thi các tác vụ không mong muốn.
- Malware trên Android đầu tiên phải kể đến DroidDream, sau đó là một loại các malware nguy hiểm khác như Zitmo, HippoSMS … và gần đây là biến thể DroidDreamLight.
- Theo thống kê Malware DroidDream phát hiện vào tháng 3/2011 đã tấn công vào 400.000 thiết bị, biến thể DroidDreamLight được phát hiện gần đây cũng đã tấn công vào trên 120.000 thiết bị.
- Bài nghiên cứu tập trung phân tích các kỹ thuật :
+ Decompile apps Android.
+ Edit.
+ Compile and Sign Apps.
+ Edit.
+ Compile and Sign Apps.
2. Android Architecture
Đầu tiên chúng ta cùng nhìn lại tổng quan kiến trúc Android.
Kiến trúc Android bao gồm 4 phần :
Figure 1 : Architecture of Android Operating System
- Linux Kernel
Cung cấp các trình điều khiển các thiết bị phần cứng(driver), quản lý tiến trình, quản lý tài nguyên, bảo mật,...
- Libraries và Android Runtime
- Libraries : Là các thư viện được viết bằng ngôn ngữ C/C++ sẽ được các developer phát triển ứng dụng android thông qua tầng Android Framework. VD : SQLite – quản lý database của ứng dụng.
- Android Runtime :
+gồm một tập hợp các thư viện Java Core.
+Máy ảo Dalvik thực thi các file định dạng .dex (Dalvik Excutable) .
+Máy ảo Dalvik thực thi các file định dạng .dex (Dalvik Excutable) .
- Application Framework
Google xây dựng cho các developer để phát triển các ứng dụng của họ trên Android chỉ bằng cách gọi các API . VD :
+ View UI - để xây dựng layout của ứng dụng bao gồm: list view, text field, button, dialog, form…
+ Notification Manager - cho phép tất cả các ứng dụng hiển thị thông báo của mình trên hệ điều hành.
+ Resource Manager - cung cấp cách thức truy cập đến non-code resources như các asset, graphic, image, music, video …
+ Activity Manager - quản lý vòng đời của các ứng dụng.
+ ….
+ View UI - để xây dựng layout của ứng dụng bao gồm: list view, text field, button, dialog, form…
+ Notification Manager - cho phép tất cả các ứng dụng hiển thị thông báo của mình trên hệ điều hành.
+ Resource Manager - cung cấp cách thức truy cập đến non-code resources như các asset, graphic, image, music, video …
+ Activity Manager - quản lý vòng đời của các ứng dụng.
+ ….
- Applications
Là các ứng dụng mà lập trình viên phát triển.
- Mô hình bảo mật trong Android được thiết kế sao cho không ứng dụng nào có thể gây ảnh hưởng xấu tới ứng dụng khác cũng như hệ thống. Sandbox và cơ chế phân quyền là cơ sở của mô hình bảo mật trong android.
- Theo đó mỗi ứng dụng được cấp ID và chạy trong một tiến trình riêng của máy ảo Dalvik.
- Mô hình bảo mật trong Android được thiết kế sao cho không ứng dụng nào có thể gây ảnh hưởng xấu tới ứng dụng khác cũng như hệ thống. Sandbox và cơ chế phân quyền là cơ sở của mô hình bảo mật trong android.
- Theo đó mỗi ứng dụng được cấp ID và chạy trong một tiến trình riêng của máy ảo Dalvik.
Figure 2 : Android Security Model
- Mô hình bảo mật như vậy khiến cho việc virus hoạt động trong hệ thống android khá khó khăn.
- Chính vì vậy hướng phát triển trên android chủ yếu là malware và spyware.
3 . Reverse Malware on Android
Figure 3 : Repackaging Applications Process
- Mô hình trên mô tả quá trình kẻ tấn công chèn malware vào ứng dụng bình thường với mục đích tấn công người sử dụng. Vậy làm điều đó như thế nào???
- Như đã giới thiệu ở trên, ứng dụng Android được biên dịch ra dạng mã máy (file .dex) để chạy trên máy ảo dalvik. Năm 2009, các nhà nghiên cứ đã tìm ra cách dịch ngược Dalvik Bytecode sang dạng mã java bytecode.
- Sử dụng tool Dex2Jar được viết bởi 1 sinh viên Trung Quốc, có thể chuyển từ dalvik bytecode sang java bytecode sau đó sử dụng một số chương trình Java Decompiler là có thể đọc được mã java của ứng dụng :
Figure 4 : Sử dụng JD-gui và Dex2Jar decompile chương trình Twitter 2.1.1
- Tuy nhiên phương pháp này có vấn đề khi decompile chương trình phức tạp và khó khăn trong việc compile lại chương trình.
- Giải pháp được đưa ra đó là dịch ngược mã dalvik bytecode sang một dạng mã dễ đọc hơn và từ đó chỉnh sửa và biên dịch lại. Tool smali và baksmali được phát triển để thực hiện việc này.
- Các công cụ cần thiết để reverse một ứng dụng android :
+ APKTOOL : Là công cụ sử dụng smali/baksmali để phân tích ứng dụng android. Có khả năng decompile sau đó compile lại ứng dụng.
+ Sign tool : tool dùng để ký một ứng dụng android.
+ Android SDK và AVD Manager : dùng để giả lập máy ảo android để cài đặt ứng dụng
+ Công cụ lập trình android : VD eclipse.
+ Sign tool : tool dùng để ký một ứng dụng android.
+ Android SDK và AVD Manager : dùng để giả lập máy ảo android để cài đặt ứng dụng
+ Công cụ lập trình android : VD eclipse.
- Ứng dụng được chọn để khai thác là Twitter 2.1.1, bản mới nhất được tải trên Android Market.
- Đầu tiên sử dụng apktool để decompile file Twitter211.apk
Figure 5 : Decompile application using apktool
- Kết quả thu được là folder Twitter221 chứa toàn bộ mã nguồn của chương trình
Figure 6 : Danh sách file mã nguồn của chương trình
- Với mã nguồn này, ta tiến hành đọc và tìm cách sửa phù hợp. Ở đây mình tiến hành sửa trong file LoginActivity.java với mục đích chèn 1 package có chức năng hiện thị một message box khi người dùng đăng nhập vào twitter.
Figure 7 : Chèn mã thực thi vào trong ứng dụng.
- Trong đoạn mã chèn thêm, Lp/str/Str_i trỏ đến một package srt_i.java được viết ra với mục đích hiện thị một message box và được copy trực tiếp vào trong folder /smali của chương trình nguồn.
- Tác dụng của đoạn code chèn thêm vào là khởi tạo một new-instance trỏ đến package str_i sau đó gọi thực thi package này.
- Sau khi sửa code ta tiến hành biên dịch và ký lại chương trình
Figure 8 : Re-Compile and Re-Sign application
- Và kết quả thu được :
Figure 9 : Chương trình sau khi bị chèn thêm mã độc
4 . Conclusion
Với sự phát triển bùng nổ của các ứng dụng android thời gian gần đây kéo theo sự xuất hiện đa dạng của các malware, spyware trên hệ máy này. Nội dung bài phân nghiên cứu là giới thiệu cơ bản về cách thức chèn malware vào các chương trình android.
Chỉnh sửa lần cuối bởi người điều hành: