Ứng dụng kiểm thử an toàn: Hướng dẫn chi tiết từ cơ bản đến chuyên sâu

1. An toàn ứng dụng khách

1.1 Kiểm tra chữ ký gói cài đặt

Sử dụng công cụ jarsigner.exe trong JDK để xác minh tính hợp lệ của chữ ký trên file APK:

jarsigner.exe -verify đường_dẫn_file_apk -verbose -certs

Kết quả phân tích:

  • Nếu hiển thị CN=Tên nhà phát hành chính thức: Đánh giá là an toàn.
  • Nếu hiển thị CN=Chứng chỉ Debug hoặc chứng chỉ bên thứ ba: Xác định mức độ rủi ro cao, do có thể bị thay thế hoặc giả mạo.

1.2 Phát hiện bảo vệ chống decompile

Thao tác giải nén file APK như một file ZIP để trích xuất file classes.dex. Sử dụng công cụ dex2jar chuyển đổi sang file JAR:

dex2jar.bat đường_dẫn_classes.dex

Mở file JAR bằng JD-GUI để xem mã nguồn Java. Đánh giá rủi ro dựa trên mức độ bảo vệ:

  • Nếu mã đã được obfuscate (làm rối), không khôi phục được cấu trúc logic: An toàn.
  • Nếu phần lớn mã lõi vẫn đọc được rõ ràng: Rủi ro cao.
  • Nếu chỉ một số lớp được làm rối, nhưng mã chức năng quan trọng vẫn lộ diện: Rủi ro trung bình.

1.3 Kiểm tra tính toàn vẹn ứng dụng

Dùng ApkTool để giải nén ứng dụng:

java -jar apktool.jar d -f file_apk -o thư_mục_giải_nén

Sau khi sửa đổi một tài nguyên (ví dụ: thay ảnh nền), tiến hành đóng gói lại:

java -jar apktool.jar b -f thư_mục_sửa_đổi -o apk_chưa_ký.apk

Ký lại bằng SignApk:

java -jar signapk.jar testkey.x509.pem testkey.pk8 apk_chưa_ký.apk apk_đã_ký.apk

Cài đặt và kiểm tra hành vi ứng dụng:

  • Nếu cài đặt thành công, chạy bình thường → Không có cơ chế kiểm tra toàn vẹn: Rủi ro cao.
  • Nếu có cảnh báo "Ứng dụng bị sửa đổi" hoặc không khởi động được → Có kiểm tra toàn vẹn: An toàn.
  • Nếu chỉ kiểm tra file gốc qua MANIFEST.MF mà bỏ qua file mới → Rủi ro trung bình.

1.4 Bảo mật các thành phần Android

Phân tích file AndroidManifest.xml sau khi giải nén bằng ApkTool để xác định các thành phần có thể bị truy cập từ bên ngoài:

  • android:exported="true": Có thể bị gọi từ ứng dụng khác.
  • android:exported="false": Không thể bị truy cập từ bên ngoài.
  • Không khai báo exported:
    • Với Activity/Service: Nếu có <intent-filter> thì mặc định là true.
    • Với Content Provider: SDK < 17 thì mặc định là true.

Lưu ý: Việc thành phần có exported không đồng nghĩa với nguy cơ — cần xem xét logic xử lý bên trong. Một số trường hợp như Activity đăng nhập hay Provider chia sẻ dữ liệu là hợp lệ.

2. Bảo vệ thông tin nhạy cảm

2.1 Kiểm tra file dữ liệu nội bộ

Kết nối thiết bị qua ADB, truy cập vào thư mục ứng dụng:

adb shell
cd /data/data/[tên_package]
ls -al

Kiểm tra quyền truy cập:

  • File cấu hình: Quyền nên là rw-rw---- (chỉ ứng dụng sở hữu mới đọc/ghi).
  • Thư mục: rwxrwx--x là phù hợp.

Tiếp tục kiểm tra các thành phần:

  • SharedPreferences: Vào shared_prefs/, dùng cat tên_file.xml để xem nội dung.
  • Cơ sở dữ liệu: Truy cập databases/, dùng lệnh adb pull để lấy file SQLite về máy và phân tích bằng công cụ như DB Browser for SQLite.

Phát hiện mật khẩu, token, thông tin cá nhân → Rủi ro cao.

2.2 Kiểm tra log hệ thống (Logcat)

Xuất nhật ký ứng dụng:

adb shell logcat -d > log_app.txt

Phân tích nội dung log:

  • Nếu ghi lại mật khẩu, OTP, thông tin định danh → Rủi ro cao.
  • Nếu chỉ ghi sự kiện hệ thống không nhạy cảm → An toàn.

3. Bảo mật mật khẩu người dùng

3.1 Phòng chống đánh cắp bàn phím ảo

Cài đặt công cụ ghi nhật ký phím (ví dụ: ns_keylogger.apk) và kích hoạt làm bàn phím mặc định. Thử nhập mật khẩu trong ứng dụng kiểm thử.

Kiểm tra kết quả:

  • Nếu không thấy dữ liệu nhập trong log hệ thống hoặc công cụ ghi phím → An toàn.
  • Nếu dữ liệu mật khẩu bị ghi lại → Rủi ro cao.

3.2 Chống ghi màn hình (screen recording)

Dùng lệnh ADB để ghi lại thao tác người dùng:

adb shell screenrecord /sdcard/demo.mp4

Sau khi dừng ghi, kéo video về máy để kiểm tra:

  • Nếu mật khẩu (dạng dấu chấm) không hiện trong video → An toàn.
  • Nếu có thể suy luận vị trí nhấn phím từ video → Rủi ro trung bình.
  • Nếu ứng dụng chặn việc chụp/giấy màn hình (ảnh đen, lỗi) → An toàn.

4. Chính sách bảo mật ứng dụng

4.1 Phát hiện tấn công chiếm quyền giao diện (Activity Hijacking)

Sử dụng công cụ Drozer để kiểm tra khả năng bị chiếm đoạt màn hình:

adb forward tcp:31415 tcp:31415
drozer console connect

Thực hiện lệnh tấn công mô phỏng:

run app.activity.start --component com.muc_tieu com.muc_tieu.ActivityGoc

Đánh giá:

  • Nếu Activity của ứng dụng bị che khuất bởi cửa sổ lạ → Rủi ro trung bình.
  • Nếu ứng dụng phát hiện và cảnh báo → An toàn.

Các lĩnh vực khác như bảo mật truyền thông, an toàn nghiệp vụ, bảo vệ tiến trình cũng rất quan trọng, tuy nhiên sẽ được trình bày trong bài viết tiếp theo.

Thẻ: App security Android penetration testing APK analysis reverse engineering mobile security

Đăng vào ngày 20 tháng 6 lúc 11:46