Trong phần 1 và phần 2 của series mình đã hướng dẫn về cách cài đặt môi trường cơ bản và cài root certificate. Với các cài đặt này chúng ta đã có đủ hầu hết điều kiện để tiến hành kiểm thử xâm nhập ứng dụng Android. Trong bài viết này mình sẽ giới thiệu thêm các công cụ để hỗ trợ và tăng tốc cho quá trình kiểm thử xâm nhập.
MobSF - Mobile Security Framework
MobSF là một framework được tích hợp rất nhiều công cụ nhằm hỗ trợ cho quá trình phân tích và đánh giá mức độ bảo mật của ứng dụng Android. MobSF có thể phân tích các thông tin sau:
- Thông tin tổng quát về ứng dụng, thông tin trên play store, số lượng các exported activity,... Trong đó có cả điểm đánh giá về mức độ an toàn, tuy nhiên độ tin cậy không cao lắm.
- Chứng chỉ ký ứng dụng
- Các quyền của ứng ụng
- Các API
- Các host và scheme
- Phân tích an toàn thông tin
- Các phân tích malware
- Các url, string, firebase database thu thập được
- Danh sách các component
Các thông tin trên đều được phân tích tự động, chỉ cần tải tệp tin apk lên là được.
Ngoài phân tích tự động, MobSF còn có thể thực hiện phân tích động và xuất báo cáo dưới dạng PDF.
Thông tin chi tiết về cách sử dụng và cài đặt MobSF có thể xem tại link: https://github.com/MobSF/Mobile-Security-Framework-MobSF
Trong các thông tin mà MobSF cung cấp thì thông tin về các exported component, địa chỉ cơ sở dữ liệu Firebase, danh sách các API, url là những thông tin có tác dụng rất lớn. Với các exported component thì MobSF cho phép đọc source code java, các thông tin còn lại thì có thể giúp chúng ta mở rộng phạm vi tìm kiếm lỗ hổng.
Mình đánh giá đây là một công cụ cực kỳ hiệu quả trong việc recon các thông tin hỗ trợ cho quá trình kiểm thử xâm nhập ứng dụng Android. Đây là công cụ đứng đầu trong các công cụ không thể thiếu trong quá trình làm việc của mình.
Apktool
Apktool là một công cụ hỗ trợ quá trình phân tích các ứng dụng trên thiết bị di động Android bằng cách dịch ngược tệp tin apk. Apktool có thể giải mã các tài nguyên của ứng dụng, các dữ liệu,… và các tệp tin chứa mã nguồn trở về gần như nguyên gốc. Apktool cũng có khả năng xây dựng tại tệp tin apk từ các tài nguyên đã được giải mã này.
Nhờ các tính năng này, chúng ta có thể tiến hành chỉnh sửa trên các tài nguyên đã được giải mã, sau đó tiến hành xây dựng ra một ứng dụng khác gần như giống hệt ứng dụng gốc ban đầu. Toàn bộ các quá trình trên đều được tiến hành tự động.
Link tải: https://github.com/iBotPeaches/Apktool/releases
Mình thường sử dụng apktool khi cần chỉnh sửa code để bypass 1 số đoạn kiểm tra. Tuy để sửa code thì sẽ không sửa trên code java được mà bắt buộc phải đọc và sửa code smali, nhưng đây vẫn là 1 công cụ rất hữu ích.
Bytecode Viewer
Bytecode viewer là công cụ cho phép chúng ta đồng thời xem được code java và code smali. Khi mở tệp tin apk bằng bytecode viewer, công cụ sẽ tiến hành dịch ngược và biểu diễn code theo cấu trúc thư mục. Tuy nhiên nếu mã nguồn đã được làm rối (obfuscate) thì việc tìm đúng tệp tin mình cần sẽ khó khăn hơn nhiều.
Cái hay của Bytecode Viewer là nó cho biết code smali nào ứng với code java. Bằng cách này chúng ta có thể biết chính xác tệp tin code smali nếu muốn sửa code bằng apktool.
Bytecode Viewer cũng có chức năng tìm kiếm nội dung code java theo regex hoặc theo string. Chúng ta có thể sử dụng chức năng này để tìm kiếm các điểm có khả năng tồn tại lỗ hổng SQLite injection, XSS,...
Link tải: https://github.com/Konloch/bytecode-viewer/releases
SQlite DB Browser
Khi có giao diện thì nhiều thứ tiện hơn hẳn
Với việc các ứng dụng Android sử dụng cơ sở dữ liệu SQLite thì SQLite DB Brower là một công cụ nên cài đặt. Chúng ta có thể query vào cơ cở dữ liệu SQLite của từng ứng dụng khi truy cập bằng ADB. Nhưng tại sao phải làm thế khi có thể pull hết local storage của ứng dụng về máy thật?
Mỗi khi thực hiện kiểm thử xâm nhập một ứng dụng Android, sau khi sử dụng và tìm hiểu toàn bộ các chức năng thì mình sẽ pull toàn bộ local storage của ứng dụng về máy thật. Mục đích của việc này là để tìm hiểu xem ứng dụng sẽ lưu trữ những gì ở local.
Những nơi mình thường kiểm tra gồm: các tệp tin XML, các tệp tin chứa log của ứng dụng và trong đó có cơ sở dữ liệu SQLite. Với SQLite DB browser, việc duyệt từng bảng và sửa dữ liệu rất tiện lợi và dễ dàng.
Link tải: https://sqlitebrowser.org/dl/
Insecure Firebase Exploit
Bên cạnh việc lưu trữ dữ liệu vào local storage thì các ứng dụng Android cũng có thể lưu trữ dữ liệu trên cơ sở dữ liệu Firebase của google. Google cũng đã cung cấp các tính năng bảo mật rất tốt cho Firebase để bảo mật dữ liệu của người dùng. Nhưng trong trường hợp người dùng cấu hình sai quyền read thì sẽ tạo ra lỗ hổng cho phép đọc cơ sở dữ liệu, còn nếu cấu hình sai quyền write thì sẽ tạo ra lỗ hổng cho phép thêm/sửa/xóa.
Tìm kiếm lỗ hổng với quyền đọc thì rất đơn giản rồi, chỉ cần thêm .json
vào sau đường dẫn là được, nếu không có thông báo "permission denied" thì tức là đã có lỗ hổng do cấu hình quyền read.
Nhưng trong trường hợp có lỗi cấu hình quyền write thì việc kiểm tra sẽ khó hơn, Insecure Firebase Exploit sẽ hỗ trợ chúng ta trong trường hợp này. Việc sử dụng rất đơn giản, chỉ cần điền các dữ liệu tùy ý và script sẽ tiến hành ghi thêm vào cơ sở dữ liệu Firebase, sau đó hiển thị thông báo cho biết đã khai thác lỗ hổng thành công hay chưa.
Các lỗ hổng về quyền truy cập cơ sở dữ liệu Firebase hiện nay hầu như không còn mấy nữa. Nhưng mình vẫn tiến hành kiểm tra với mọi ứng dụng Android. Biết đâu vẫn còn các dịch vụ cấu hình sai thì sao
Thực tế, hồi đầu năm nay 1 người em cùng chỗ làm với mình đã tìm ra lỗ hổng cấu hình sai cơ sở dữ liệu Firebase cho phép đọc toàn bộ dữ liệu của Vin Mart và báo cáo lại luôn cho họ. Hiện tại lỗ hổng đã được vá.
Link tải: https://github.com/MuhammadKhizerJaved/Insecure-Firebase-Exploit