I. Giới thiệu

Tài liệu này được biên soạn nhằm cung cấp một hướng dẫn thực hành chi tiết dựa trên các khái niệm cốt lõi của “Android Hacking 101”, tập trung vào việc xây dựng kỹ năng cần thiết cho kỳ thi CEH Master. Mục tiêu là trang bị cho người học kiến thức và kinh nghiệm thực tế trong việc phân tích, phát hiện và khai thác lỗ hổng trên nền tảng Android. Việc thành thạo các kỹ thuật này không chỉ quan trọng đối với kỳ thi CEH Master, vốn yêu cầu khả năng áp dụng kiến thức vào các tình huống thực tế 1, mà còn thiết yếu cho bất kỳ chuyên gia bảo mật nào muốn đánh giá và cải thiện mức độ an toàn của ứng dụng di động. Tài liệu sẽ tập trung vào việc thiết lập một môi trường lab ảo, sử dụng các công cụ phổ biến và thực hành trên một ứng dụng dễ bị tấn công được chỉ định.

Các bài học chính bao gồm:

  • Hiểu biết về cấu trúc ứng dụng Android và các thành phần của nó.
  • Thiết lập môi trường lab ảo để thực hành pentest Android một cách an toàn.
  • Thực hiện phân tích tĩnh ứng dụng Android để tìm kiếm thông tin nhạy cảm và lỗ hổng tiềm ẩn.
  • Thực hiện phân tích động để kiểm tra hành vi ứng dụng trong thời gian chạy, bao gồm lưu trữ dữ liệu không an toàn và giao tiếp mạng.
  • Sử dụng các công cụ như ADB, JADX, Burp Suite và Frida để hỗ trợ quá trình pentest.
  • Tìm hiểu các kỹ thuật bypass cơ bản cho các biện pháp bảo vệ phía máy khách.

Việc xây dựng một môi trường lab ảo cô lập là cực kỳ quan trọng. Nó không chỉ đảm bảo các hoạt động thực hành không ảnh hưởng đến hệ thống chính mà còn cho phép người học tự do thử nghiệm các kỹ thuật tấn công và phòng thủ mà không có rủi ro pháp lý hay thiệt hại ngoài ý muốn. Môi trường này cung cấp một nền tảng ổn định và có thể tái tạo để thực hành lặp đi lặp lại, một yếu tố then chốt để thành thạo các kỹ năng thực tế cần thiết cho các chứng chỉ như CEH Master.1

II. Các kiến thức và kỹ năng sẽ học được từ lab này

Thông qua việc hoàn thành các bài thực hành trong tài liệu này, người học sẽ nắm vững các kiến thức và kỹ năng sau, phù hợp với yêu cầu của CEH Master 1:

  • Hiểu biết sâu sắc về Kiến trúc Android và Bảo mật Ứng dụng:
  • Nắm vững cấu trúc của một tệp APK (Android Package Kit), bao gồm các thành phần chính như AndroidManifest.xml, classes.dex, thư mục res, assets, lib, và META-INF.3 Hiểu rõ vai trò của từng thành phần là bước đầu tiên để giải quyết các thách thức CTF liên quan đến Android và thực hiện pentest hiệu quả.
  • Nhận diện và hiểu chức năng của các thành phần ứng dụng Android cốt lõi: Activities (quản lý giao diện người dùng), Services (chạy nền), Broadcast Receivers (xử lý sự kiện hệ thống) và Content Providers (quản lý dữ liệu).3
  • Hiểu các cơ chế lưu trữ dữ liệu phổ biến trên Android: Internal Storage, External Storage, SharedPreferences và SQLite Databases.3 Kiến thức này rất quan trọng để xác định các lỗ hổng lưu trữ dữ liệu không an toàn.
  • Kỹ năng Thiết lập Môi trường Pentest Chuyên nghiệp:
  • Cài đặt và cấu hình máy ảo Kali Linux trên VMware, một bản phân phối Linux phổ biến cho pentest và hacking có đạo đức.4 Kali Linux được ưa chuộng vì nó tích hợp sẵn một bộ lớn các công cụ hacking, giúp người dùng không mất thời gian cài đặt riêng lẻ từng công cụ.
  • Cài đặt và cấu hình máy ảo Android (Android-x86) trên VMware để tạo môi trường đích cho việc kiểm thử.5 Android-x86 là một lựa chọn tốt cho môi trường ảo hóa do nó được port để chạy trên kiến trúc x86, tương thích tốt với các hypervisor như VMware.
  • Thiết lập kết nối mạng giữa máy ảo Kali Linux và máy ảo Android, cho phép tương tác và tấn công từ Kali sang Android.
  • Thành thạo các Công cụ Pentest Android phổ biến:
  • Sử dụng Android Debug Bridge (ADB) để tương tác với thiết bị/máy ảo Android, quản lý tệp, cài đặt ứng dụng và thực thi lệnh shell.3
  • Sử dụng JADX-GUI để dịch ngược tệp APK thành mã Java dễ đọc, hỗ trợ phân tích tĩnh mã nguồn ứng dụng.6 Việc xem mã Java thường trực quan hơn so với mã Smali, giúp nhanh chóng hiểu logic ứng dụng và phát hiện các đoạn mã đáng ngờ.
  • Sử dụng Burp Suite để chặn và phân tích lưu lượng HTTP/HTTPS của ứng dụng, phát hiện các lỗ hổng truyền tải dữ liệu không an toàn.8
  • Sử dụng Frida để thực hiện phân tích động, hooking vào các hàm trong thời gian chạy, và bypass các cơ chế bảo vệ phía client như root detection hay SSL pinning.3 Frida là một công cụ cực kỳ mạnh mẽ cho phép can thiệp sâu vào hành vi của ứng dụng mà không cần sửa đổi mã nguồn gốc, điều này rất hữu ích trong các tình huống kiểm thử thực tế.
  • Kỹ năng Phân tích Tĩnh và Động Ứng dụng Android:
  • Phân tích tệp AndroidManifest.xml để xác định quyền hạn, activities, services, broadcast receivers, content providers, và các thông tin cấu hình quan trọng khác.3 Đây thường là điểm khởi đầu cho việc đánh giá bề mặt tấn công của một ứng dụng.
  • Kiểm tra mã nguồn đã dịch ngược để tìm kiếm thông tin nhạy cảm bị hardcode (ví dụ: API keys, mật khẩu), logic nghiệp vụ không an toàn, và các lỗ hổng lập trình phổ biến.6
  • Kiểm tra các vị trí lưu trữ dữ liệu (SharedPreferences, SQLite databases, Internal/External storage) để tìm kiếm thông tin nhạy cảm được lưu trữ không an toàn.11 ADB là công cụ không thể thiếu trong giai đoạn này, cho phép truy cập trực tiếp vào hệ thống tệp của thiết bị đã root.
  • Phân tích lưu lượng mạng để phát hiện việc truyền tải thông tin nhạy cảm qua HTTP hoặc các cấu hình SSL/TLS yếu kém.8 Khả năng cấu hình đúng đắn proxy và cài đặt chứng chỉ CA là nền tảng để phân tích lưu lượng HTTPS.
  • Kỹ năng Khai thác Lỗ hổng và Bypass Cơ bản:
  • Khai thác các lỗ hổng lưu trữ dữ liệu không an toàn để truy cập thông tin nhạy cảm.
  • Thực hành các kỹ thuật bypass root detection và SSL pinning cơ bản bằng Frida.14 Việc này cho thấy sức mạnh của dynamic instrumentation trong việc vượt qua các rào cản phân tích phổ biến.

Những kỹ năng này tạo thành một bộ công cụ và phương pháp luận toàn diện, giúp người học chuẩn bị hiệu quả cho các tình huống thực tế trong kỳ thi CEH Master và trong công việc pentest ứng dụng di động sau này.

III. Chuẩn bị môi trường Lab ảo

Môi trường lab ảo sẽ bao gồm máy chủ Windows cài đặt VMware Workstation/Player, bên trong VMware sẽ có một máy ảo Kali Linux (máy tấn công) và một máy ảo Android-x86 (máy mục tiêu).

  • Yêu cầu phần cứng tối thiểu cho máy chủ Windows:
  • CPU: Intel Core i5 hoặc tương đương hỗ trợ ảo hóa (VT-x/AMD-V)
  • RAM: 8GB (khuyến nghị 16GB để chạy mượt mà nhiều máy ảo)
  • Dung lượng ổ cứng trống: Tối thiểu 100GB (SSD khuyến nghị)
  • Phần mềm cần thiết:
  • VMware Workstation Pro hoặc VMware Workstation Player (phiên bản mới nhất).
  • Tệp ISO cài đặt Kali Linux (tải từ trang chủ Kali Linux).
  • Tệp ISO cài đặt Android-x86 (tải từ trang chủ Android-x86.org).
  • Ứng dụng Android dễ bị tấn công để thực hành, ví dụ: DIVA (Damn Insecure and Vulnerable App for Android).17 DIVA được thiết kế đặc biệt cho mục đích học tập, chứa nhiều lỗ hổng phổ biến, giúp người học thực hành một cách an toàn và hợp pháp.

A. Cài đặt Máy ảo Kali Linux trên VMware (Máy tấn công)

Kali Linux là một bản phân phối Linux dựa trên Debian, được thiết kế đặc biệt cho các chuyên gia bảo mật và pentester, với hàng trăm công cụ được cài đặt sẵn.4 Việc sử dụng Kali Linux giúp chuẩn hóa môi trường tấn công và tiết kiệm thời gian cài đặt công cụ.

  • 1. Tải tệp ISO Kali Linux:
  • Truy cập trang web chính thức của Kali Linux (https://www.kali.org/get-kali/#kali-installer-images).
  • Tải xuống phiên bản “Installer” phù hợp với kiến trúc máy tính của bạn (thường là 64-bit).
  • 2. Tạo Máy ảo mới trong VMware 4:
  • Mở VMware Workstation/Player.
  • Chọn “Create a New Virtual Machine”.
  • Chọn “Typical (recommended)” và nhấn Next.
  • Chọn “Installer disc image file (iso)”, duyệt đến tệp ISO Kali Linux đã tải về và nhấn Next.
  • Trong mục “Guest operating system”, chọn “Linux”. Trong mục “Version”, chọn “Debian 10.x 64-bit” (hoặc phiên bản Debian tương ứng với nền tảng của Kali Linux bạn tải về) và nhấn Next.18
  • Đặt tên cho máy ảo (ví dụ: “Kali Linux CEH Lab”) và chọn vị trí lưu trữ. Nhấn Next.
  • Chỉ định dung lượng đĩa cho máy ảo. Tối thiểu 20GB được khuyến nghị, nhưng 30-40GB sẽ thoải mái hơn. Chọn “Store virtual disk as a single file” để có hiệu suất tốt hơn một chút.18 Nhấn Next.
  • Nhấn “Customize Hardware…”:
  • Memory: Phân bổ RAM cho máy ảo. Tối thiểu 2GB, khuyến nghị 4GB hoặc hơn để chạy mượt các công cụ.18
  • Processors: Phân bổ số lượng nhân CPU. 2 cores là một khởi đầu tốt.18
  • Network Adapter: Chọn “NAT” để máy ảo có thể truy cập Internet dễ dàng qua địa chỉ IP của máy chủ. Chúng ta sẽ điều chỉnh cài đặt này sau để kết nối với máy ảo Android.
  • Nhấn Close, sau đó nhấn Finish.
  • 3. Cài đặt Hệ điều hành Kali Linux 4:
  • Chọn máy ảo Kali Linux vừa tạo và nhấn “Power on this virtual machine”.
  • Trong menu boot của Kali, chọn “Graphical install” hoặc “Install” (text-based). “Graphical install” thân thiện hơn với người mới.
  • Làm theo các hướng dẫn trên màn hình:
  • Chọn ngôn ngữ, vị trí, kiểu bàn phím.
  • Đặt tên máy (hostname), ví dụ: kali-lab.
  • Để trống tên miền (domain name).
  • Thiết lập mật khẩu cho người dùng root (phiên bản cũ) hoặc tạo người dùng mới và mật khẩu (phiên bản mới, ví dụ user kali, pass kali).18 Ghi nhớ mật khẩu này.
  • Chọn múi giờ.
  • Phân vùng đĩa: Chọn “Guided – use entire disk” là lựa chọn đơn giản nhất cho người mới. Xác nhận các lựa chọn phân vùng.
  • Chờ quá trình cài đặt hệ thống cơ sở.
  • Cấu hình trình quản lý gói: Chọn “Yes” để sử dụng network mirror nếu được hỏi (để tải các gói phần mềm).
  • Lựa chọn phần mềm: Để mặc định các lựa chọn (desktop environment, collection of tools).
  • Cài đặt GRUB boot loader: Chọn “Yes” khi được hỏi và chọn ổ đĩa ảo của bạn (thường là /dev/sda).
  • Hoàn tất cài đặt và khởi động lại máy ảo.
  • 4. Cấu hình Sau Cài đặt:
  • Đăng nhập vào Kali Linux bằng tài khoản và mật khẩu đã tạo.
  • Mở Terminal và cập nhật hệ thống:
    Bash
    sudo apt update
    sudo apt full-upgrade -y
    sudo apt autoremove -y
    sudo apt clean
  • (Tùy chọn) Cài đặt VMware Tools (nếu chưa tự động cài hoặc muốn các tính năng nâng cao như copy-paste, chia sẻ thư mục tốt hơn):
  • Trong VMware, chọn VM -> Install VMware Tools.
  • Một ổ đĩa ảo sẽ được mount trong Kali. Mở nó ra, giải nén tệp VMwareTools-x.x.x-xxxx.tar.gz.
  • Mở terminal, di chuyển vào thư mục đã giải nén và chạy sudo./vmware-install.pl -d (cờ -d để chấp nhận các giá trị mặc định).
  • Khởi động lại máy ảo.

B. Cài đặt Máy ảo Android-x86 trên VMware (Máy mục tiêu)

Android-x86 là một dự án port hệ điều hành Android mã nguồn mở để chạy trên các thiết bị sử dụng bộ xử lý kiến trúc x86, bao gồm cả máy tính cá nhân và máy ảo.5 Điều này cho phép chúng ta tạo một môi trường Android đầy đủ chức năng để thử nghiệm.

  • 1. Tải tệp ISO Android-x86:
  • Truy cập trang web chính thức của Android-x86 (https://www.android-x86.org/download).
  • Chọn một phiên bản Android ổn định (ví dụ: Android 9.0-r2 hoặc một phiên bản LTS nếu có). Tải tệp ISO 64-bit hoặc 32-bit tùy thuộc vào lựa chọn của bạn (64-bit thường được ưu tiên).
  • 2. Tạo Máy ảo mới trong VMware 5:
  • Mở VMware Workstation/Player.
  • Chọn “Create a New Virtual Machine”.
  • Chọn “Typical (recommended)” và nhấn Next.
  • Chọn “Installer disc image file (iso)”, duyệt đến tệp ISO Android-x86 đã tải về và nhấn Next.
  • Trong mục “Guest operating system”, chọn “Linux”. Trong mục “Version”, chọn một phiên bản Linux chung chung, ví dụ “Other Linux 5.x or later kernel 64-bit” (hoặc phiên bản phù hợp với ISO bạn tải). Nhấn Next.
  • Lưu ý quan trọng về loại đĩa ảo: Android-x86 có thể gặp vấn đề với loại đĩa SCSI mặc định của VMware. Để đảm bảo tương thích, sau khi tạo VM (trước khi bật nguồn lần đầu), vào “Edit virtual machine settings”, chọn “Hard Disk (SCSI)”, nhấn “Remove”. Sau đó nhấn “Add…”, chọn “Hard Disk”, nhấn Next. Chọn “IDE” làm loại đĩa ảo, nhấn Next. Chọn “Create a new virtual disk”, nhấn Next. Chỉ định dung lượng (ví dụ 16GB), chọn “Store virtual disk as a single file”, nhấn Next, rồi Finish.5
  • Đặt tên cho máy ảo (ví dụ: “Android x86 Target”) và chọn vị trí lưu trữ. Nhấn Next.
  • Nhấn “Customize Hardware…”:
  • Memory: Phân bổ RAM cho máy ảo. Tối thiểu 2GB, khuyến nghị 2-4GB.
  • Processors: Phân bổ 1-2 cores.
  • Network Adapter: Ban đầu, có thể để “NAT”. Chúng ta sẽ điều chỉnh sau.
  • Display: Đảm bảo “Accelerate 3D graphics” được chọn nếu có. Một số phiên bản Android-x86 có thể yêu cầu tắt tùy chọn này nếu gặp vấn đề hiển thị.
  • Nhấn Close, sau đó nhấn Finish.
  • 3. Cài đặt Hệ điều hành Android-x86 5:
  • Chọn máy ảo Android-x86 vừa tạo và nhấn “Power on this virtual machine”.
  • Trong menu boot của Android-x86:
  • Chọn “Installation – Install Android-x86 to harddisk”.
  • Partition Selection:
  • Chọn “Create/Modify partitions”.
  • Nếu được hỏi về GPT, chọn “No” (trừ khi bạn có lý do cụ thể để dùng GPT).
  • Màn hình cfdisk sẽ xuất hiện.
  • Chọn “[ New ]” để tạo phân vùng mới.
  • Chọn “[ Primary ]”.
  • Chấp nhận kích thước mặc định (toàn bộ đĩa).
  • Đảm bảo phân vùng mới được chọn, sau đó chọn “” để đặt cờ boot.
  • Chọn “[ Write ]”, gõ “yes” để xác nhận.
  • Chọn “[ Quit ]”.
  • Bây giờ bạn sẽ thấy phân vùng vừa tạo (ví dụ sda1). Chọn nó và nhấn OK.
  • Format Partition:
  • Chọn hệ thống tệp “ext4” để định dạng phân vùng.
  • Xác nhận “Yes” để định dạng.
  • Install Boot Loader GRUB:
  • Chọn “Yes” để cài đặt GRUB.
  • Install /system directory as read-write:
  • Chọn “Yes”. Điều này quan trọng để có thể sửa đổi hệ thống sau này (ví dụ: cài đặt chứng chỉ CA của Burp Suite vào system trust store).
  • Chờ quá trình cài đặt hoàn tất.
  • Khi cài đặt xong, chọn “Run Android-x86” để khởi động vào Android hoặc “Reboot”.
  • 4. Cấu hình Sau Cài đặt Android-x86:
  • Lần khởi động đầu tiên có thể mất một chút thời gian.
  • Hoàn thành các bước thiết lập Android ban đầu (ngôn ngữ, Wi-Fi – bạn có thể bỏ qua Wi-Fi nếu dùng mạng NAT và máy chủ có Internet).
  • Kích hoạt “Developer options” và “USB debugging”:
  • Vào Settings -> About phone (hoặc About tablet).
  • Nhấn liên tục vào “Build number” khoảng 7 lần cho đến khi có thông báo “You are now a developer!”.
  • Quay lại Settings, vào System -> Advanced -> Developer options.
  • Bật “USB debugging” (hoặc “Android debugging”). Xác nhận nếu có cảnh báo.
  • (Tùy chọn) Cài đặt ứng dụng Termux từ F-Droid hoặc nguồn khác để có terminal trực tiếp trên Android.
  • (Tùy chọn) Root thiết bị: Nhiều phiên bản Android-x86 đã được root sẵn hoặc có tùy chọn root trong quá trình cài đặt/boot. Nếu không, có thể cần tìm các phương pháp root cụ thể cho phiên bản Android-x86 bạn đang dùng. Đối với pentest, quyền root trên thiết bị mục tiêu là rất cần thiết.

C. Cấu hình Mạng giữa Kali Linux và Android-x86 VM

Để Kali Linux có thể “thấy” và tương tác với Android VM, chúng cần ở trên cùng một mạng ảo. Sử dụng chế độ “Host-only” hoặc “Custom Virtual Network” của VMware là một lựa chọn tốt để tạo một mạng riêng biệt cho lab.

  • 1. Tạo một Mạng Ảo Riêng (Host-only hoặc Custom):
  • Trong VMware Workstation, vào Edit -> Virtual Network Editor.
  • Nếu không thấy các mạng như VMnet1 (Host-only), nhấn “Change Settings” (yêu cầu quyền admin).
  • Chọn một mạng không sử dụng (ví dụ: VMnet2) hoặc sử dụng VMnet1 (Host-only).
  • Cấu hình mạng này:
  • Chọn “Host-only” (nếu muốn máy chủ có thể giao tiếp với mạng này) hoặc để “Connect a host virtual adapter to this network” được chọn.
  • Bỏ chọn “Use local DHCP service to distribute IP address to VMs” nếu bạn muốn cấu hình IP tĩnh hoặc sẽ cấu hình DHCP sau. Hoặc, để DHCP được bật và ghi lại dải IP mà nó cung cấp (ví dụ: 192.168.X.0/24).
  • Ví dụ, nếu bạn muốn dải mạng là 192.168.70.0, nhập 192.168.70.0 vào Subnet IP và 255.255.255.0 vào Subnet mask.
  • Nhấn Apply và OK.
  • 2. Gán Máy ảo vào Mạng Vừa Tạo:
  • Tắt cả hai máy ảo (Kali và Android).
  • Với máy ảo Kali Linux:
  • Vào Settings -> Network Adapter.
  • Chọn “Custom: Specific virtual network” và chọn mạng bạn vừa cấu hình (ví dụ: VMnet2). Hoặc chọn “Host-only”.
  • Nhấn OK.
  • Với máy ảo Android-x86:
  • Vào Settings -> Network Adapter.
  • Chọn “Custom: Specific virtual network” và chọn cùng mạng với Kali (ví dụ: VMnet2). Hoặc chọn “Host-only”.
  • Nhấn OK.
  • 3. Cấu hình Địa chỉ IP (Nếu không dùng DHCP của VMware):
  • Trên Kali Linux:
  • Khởi động Kali.
  • Cấu hình IP tĩnh, ví dụ: 192.168.70.10 (nếu dải mạng là 192.168.70.0/24).
  • Mở trình quản lý mạng (thường ở góc trên bên phải), chọn “Edit Connections…”, chọn kết nối có dây, Edit, tab IPv4 Settings.
  • Method: Manual. Address: 192.168.70.10, Netmask: 255.255.255.0. Gateway có thể để trống hoặc trỏ đến IP của máy chủ trên mạng host-only nếu có.
  • Lưu lại và khởi động lại mạng hoặc máy ảo.
  • Trên Android-x86:
  • Khởi động Android.
  • Vào Settings -> Network & internet -> Wi-Fi (dù là mạng có dây, Android-x86 thường hiển thị nó như Wi-Fi “VirtWifi”).
  • Nhấn giữ vào “VirtWifi”, chọn “Modify network”.
  • Advanced options -> IP settings: Static.
  • IP address: 192.168.70.20. Gateway: 192.168.70.1 (nếu máy chủ có IP này trên mạng host-only, hoặc IP của Kali nếu Kali làm gateway). Netmask: 255.255.255.0 (thường được gọi là Network prefix length: 24). DNS 1: 8.8.8.8 (nếu muốn có internet qua NAT trên máy chủ).
  • Lưu lại.
  • 4. Kiểm tra Kết nối:
  • Trên Kali, mở Terminal và ping địa chỉ IP của Android: ping 192.168.70.20.
  • Trên Android (nếu có Termux hoặc qua adb shell), ping địa chỉ IP của Kali: ping 192.168.70.10.
  • Nếu ping thành công, mạng đã được cấu hình đúng.

Một cách khác để thiết lập mạng giữa hai máy ảo mà không cần cấu hình IP tĩnh phức tạp là sử dụng “NAT Network” trong Virtual Network Editor của VMware.20 Tạo một NAT Network mới (ví dụ

VMnetX), bật DHCP cho mạng đó. Sau đó, gán cả Kali VM và Android VM vào cùng NAT Network này. Chúng sẽ tự động nhận IP từ DHCP server của VMware trên cùng một subnet và có thể giao tiếp với nhau cũng như ra internet.

D. Cài đặt các Công cụ cần thiết trên Kali Linux

Kali Linux đã có sẵn nhiều công cụ, nhưng một số công cụ hoặc phiên bản cụ thể có thể cần được cài đặt hoặc cập nhật.

  • 1. Android Debug Bridge (ADB) 8:
  • ADB thường đã có sẵn trong Kali. Kiểm tra bằng lệnh: adb version.
  • Nếu chưa có hoặc muốn phiên bản mới nhất từ Google:
    Bash
    sudo apt update
    sudo apt install android-tools-adb android-tools-fastboot
  • Kết nối ADB với Android VM:
  • Trên Kali, chạy lệnh: adb connect <IP_Android_VM>:5555 (ví dụ: adb connect 192.168.70.20:5555).
  • Trên Android VM, sẽ có một popup yêu cầu “Allow USB debugging?”. Chọn “Always allow from this computer” và OK.
  • Trên Kali, chạy adb devices. Bạn sẽ thấy thiết bị được liệt kê với trạng thái “device”.
  • 2. JADX 3:
  • JADX là công cụ dịch ngược DEX sang mã Java.
  • Tải phiên bản mới nhất từ GitHub releases của JADX (https://github.com/skylot/jadx/releases). Tải tệp zip (ví dụ jadx-1.x.x.zip).
  • Giải nén: unzip jadx-1.x.x.zip -d /opt/jadx (hoặc vị trí bạn muốn).
  • Thêm vào PATH (tùy chọn, để tiện sử dụng):
    echo ‘export PATH=$PATH:/opt/jadx/bin’ >> ~/.bashrc (hoặc ~/.zshrc nếu dùng Zsh)
    source ~/.bashrc (hoặc ~/.zshrc)
  • Chạy JADX GUI: jadx-gui
  • 3. Burp Suite 8:
  • Kali Linux thường có sẵn Burp Suite Community Edition.
  • Để chạy: Tìm trong menu ứng dụng hoặc gõ burpsuite trong terminal.
  • Nếu muốn phiên bản Professional hoặc cập nhật, tải từ trang chủ PortSwigger (https://portswigger.net/burp/releases).
  • 4. Frida 3:
  • Frida là một bộ công cụ dynamic instrumentation.
  • Cài đặt Frida tools trên Kali (yêu cầu Python và pip):
    Bash
    sudo apt install python3-pip
    pip install frida-tools
  • Kiểm tra cài đặt: frida –version.
  • Frida server sẽ được cài đặt trên Android VM (xem phần sau).

E. Cài đặt Ứng dụng Mục tiêu (DIVA) trên Android VM

DIVA (Damn Insecure and Vulnerable App) là một ứng dụng được thiết kế cố ý có lỗ hổng để thực hành pentest.17

  • 1. Tải tệp APK của DIVA:
  • Tìm kiếm “DIVA Android APK download” hoặc truy cập trực tiếp link từ các nguồn hướng dẫn (ví dụ: http://www.payatu.com/damn-insecure-and-vulnerable-app/ được đề cập trong 17). Tải tệp
    diva-beta.apk hoặc phiên bản tương tự.
  • 2. Cài đặt APK lên Android VM bằng ADB:
  • Đảm bảo ADB đã kết nối với Android VM (xem bước III.D.1).
  • Trên Kali, di chuyển đến thư mục chứa tệp APK đã tải.
  • Chạy lệnh:
    Bash
    adb install diva-beta.apk
  • Nếu thành công, bạn sẽ thấy thông báo “Success”. Ứng dụng DIVA sẽ xuất hiện trong danh sách ứng dụng trên Android VM.

Bảng III-E-1: Tổng hợp các công cụ chính và mục đích sử dụng

| Công cụ | Mục đích chính | Tham khảo Snippet |

|—————–|——————————————————————————–|——————-|

| VMware | Tạo và quản lý môi trường máy ảo | 4 |

| Kali Linux | Hệ điều hành tấn công với các công cụ pentest cài sẵn | 4 |

| Android-x86 | Hệ điều hành Android mục tiêu chạy trên máy ảo | 5 |

| ADB | Giao tiếp, quản lý tệp, gỡ lỗi trên thiết bị/máy ảo Android | 3 |

| JADX | Dịch ngược APK sang mã Java, phân tích tĩnh | 3 |

| Burp Suite | Chặn, phân tích, sửa đổi lưu lượng HTTP/HTTPS | 8 |

| Frida | Dynamic instrumentation, hooking hàm, bypass client-side protections | 3 |

| DIVA | Ứng dụng Android dễ bị tấn công để thực hành | 17 |

Việc thiết lập một chuỗi công cụ (toolchain) tích hợp và hiểu rõ vai trò của từng công cụ là nền tảng cho việc thực hiện pentest hiệu quả. ADB cho phép tương tác cơ bản, JADX giúp hiểu mã nguồn, Burp Suite theo dõi giao tiếp mạng, và Frida cho phép can thiệp sâu vào hành vi ứng dụng. Sự kết hợp này tạo nên một quy trình làm việc mạnh mẽ.

IV. Hướng dẫn Thực hành Chi tiết

Sau khi đã thiết lập xong môi trường lab, chúng ta sẽ tiến hành thực hành các kỹ thuật pentest trên ứng dụng DIVA.

A. Phân tích Tĩnh với JADX-GUI

Phân tích tĩnh bao gồm việc kiểm tra mã nguồn và tài nguyên của ứng dụng mà không cần thực thi nó. Mục tiêu là tìm kiếm thông tin nhạy cảm, logic dễ bị tổn thương, và hiểu cấu trúc ứng dụng.

  • 1. Tải APK từ thiết bị (nếu cần) và mở bằng JADX-GUI:
  • Nếu bạn đã có tệp diva-beta.apk trên Kali, bạn có thể mở trực tiếp.
  • Nếu muốn lấy APK từ một ứng dụng đã cài trên Android VM:
  • Tìm package name của ứng dụng: adb shell pm list packages | grep diva (sẽ ra jakhar.aseem.diva).
  • Lấy đường dẫn APK: adb shell pm path jakhar.aseem.diva (sẽ ra dạng /data/app/jakhar.aseem.diva-XXXX/base.apk).
  • Kéo APK về Kali: adb pull /data/app/jakhar.aseem.diva-XXXX/base.apk./diva.apk.
  • Mở JADX-GUI:
    Bash
    jadx-gui./diva.apk

    JADX sẽ dịch ngược APK và hiển thị cấu trúc thư mục cùng mã nguồn Java.6
  • 2. Phân tích AndroidManifest.xml:
  • Trong JADX-GUI, tìm và mở tệp AndroidManifest.xml trong phần “Resources”.
  • Kiểm tra các thành phần chính:
  • Permissions (Quyền hạn): Xem ứng dụng yêu cầu những quyền gì (ví dụ: android.permission.INTERNET, android.permission.READ_EXTERNAL_STORAGE, android.permission.WRITE_EXTERNAL_STORAGE). Quyền hạn quá mức cần thiết có thể là một rủi ro.
  • Activities, Services, Receivers, Providers: Xác định các thành phần được export (android:exported=”true”). Các thành phần được export có thể được gọi bởi các ứng dụng khác, tiềm ẩn nguy cơ nếu không được bảo vệ đúng cách.3
  • application tag attributes:
  • android:debuggable=”true”: Nếu thuộc tính này là true trong phiên bản release, đây là một lỗ hổng nghiêm trọng, cho phép bất kỳ ai cũng có thể debug ứng dụng, truy cập dữ liệu và thực thi mã.
  • android:allowBackup=”true”: Nếu true, dữ liệu ứng dụng có thể được sao lưu bằng adb backup. Nếu dữ liệu nhạy cảm được lưu trữ không mã hóa, nó có thể bị lộ qua bản backup này.11
  • Tệp AndroidManifest.xml là “bản đồ” của ứng dụng, cung cấp cái nhìn tổng quan về cấu trúc, quyền hạn yêu cầu và các điểm tương tác tiềm năng. Việc phân tích kỹ lưỡng tệp này là bước đầu tiên và quan trọng trong mọi cuộc kiểm thử thâm nhập ứng dụng Android.
  • 3. Tìm kiếm thông tin nhạy cảm trong mã nguồn (Hardcoded secrets):
  • JADX-GUI có chức năng tìm kiếm văn bản (Text search) rất hữu ích.7
  • Sử dụng tính năng tìm kiếm (Ctrl+Shift+F hoặc qua menu) để tìm các từ khóa như: password, secret, key, token, api_key, admin, debug.
  • Trong DIVA, hãy thử tìm các chuỗi liên quan đến các thử thách, ví dụ, thử thách “Hardcoding Issues”. Mở lớp jakhar.aseem.diva.HardcodeActivity và jakhar.aseem.diva.HardcodeActivity2.
  • Trong HardcodeActivity.java, bạn sẽ thấy một biến vendorsecretkey được hardcode.21
    Java
    // Trích đoạn từ HardcodeActivity.java (qua JADX)
    if (((EditText) findViewById(R.id.hcKey)).getText().toString().equals(“vendorsecretkey”)) {
        // Access granted
    }
  • Việc hardcode thông tin nhạy cảm là một lỗi phổ biến và nghiêm trọng, vì bất kỳ ai có thể dịch ngược ứng dụng đều có thể tìm thấy chúng.22
  • 4. Phân tích logic nghiệp vụ để tìm lỗ hổng:
  • Đọc hiểu mã nguồn các Activity, Service quan trọng để hiểu cách ứng dụng xử lý dữ liệu, xác thực người dùng, và tương tác với các thành phần khác.
  • Ví dụ, trong DIVA, xem xét jakhar.aseem.diva.InsecureDataStorage1Activity.java. Bạn sẽ thấy ứng dụng lưu trữ thông tin người dùng vào SharedPreferences mà không mã hóa.
    Java
    // Trích đoạn từ InsecureDataStorage1Activity.java (qua JADX)
    SharedPreferences sp = getSharedPreferences(“ids1”, 0); // MODE_PRIVATE = 0
    SharedPreferences.Editor editor = sp.edit();
    editor.putString(“user”, ((EditText) findViewById(R.id.ids1User)).getText().toString());
    editor.putString(“password”, ((EditText) findViewById(R.id.ids1Password)).getText().toString());
    editor.commit();
  • JADX giúp chuyển đổi mã Dalvik bytecode (trong classes.dex) thành mã Java dễ đọc hơn nhiều so với mã Smali, giúp việc phân tích logic trở nên trực quan và nhanh chóng hơn.6 Tuy nhiên, cần lưu ý rằng mã Java do JADX tạo ra là mã đã được dịch ngược và có thể không hoàn toàn giống 100% với mã nguồn gốc, nhưng đủ tốt cho việc phân tích.

B. Phân tích Động: Lưu trữ Dữ liệu Không An Toàn với ADB

Phân tích động bao gồm việc chạy ứng dụng và quan sát hành vi của nó, đặc biệt là cách nó lưu trữ và truyền tải dữ liệu. ADB là công cụ không thể thiếu cho việc này, đặc biệt trên thiết bị đã root.

  • 1. Kiểm tra SharedPreferences:
  • Trong DIVA, vào mục “01. INSECURE DATA STORAGE PART 1”. Nhập username và password bất kỳ, sau đó nhấn “SAVE”.
  • Trên Kali, sử dụng ADB shell để truy cập vào thư mục lưu trữ SharedPreferences của DIVA:
    Bash
    adb shell
    su # Nếu chưa có quyền root
    cd /data/data/jakhar.aseem.diva/shared_prefs/
    ls
    cat ids1.xml # Tên tệp có thể khác tùy thuộc vào cách ứng dụng đặt tên
  • Bạn sẽ thấy username và password được lưu dưới dạng cleartext trong tệp XML.11
    XML
    <?xml version=’1.0′ encoding=’utf-8′ standalone=’yes’?>
    <map>
        <string name=”user”>testuser</string>
        <string name=”password”>testpass</string>
    </map>
  • SharedPreferences thường được dùng để lưu trữ các cài đặt đơn giản hoặc dữ liệu nhỏ. Tuy nhiên, nếu dữ liệu nhạy cảm được lưu ở đây mà không mã hóa, nó rất dễ bị đánh cắp trên thiết bị đã root hoặc qua backup.12
  • 2. Kiểm tra SQLite Databases:
  • Trong DIVA, vào mục “02. INSECURE DATA STORAGE PART 2”. Nhập thông tin và lưu lại.
  • Trên Kali, sử dụng ADB shell:
    Bash
    adb shell
    su
    cd /data/data/jakhar.aseem.diva/databases/
    ls # Liệt kê các tệp database, ví dụ ids2.db
    sqlite3 ids2.db # Mở database bằng sqlite3 client
  • Trong sqlite3 prompt:

.tables — Liệt kê các bảngSELECT * FROM your_table_name; — Truy vấn dữ liệu từ bảng (thay your_table_name bằng tên bảng thực tế).quit“`

  • Bạn sẽ thấy dữ liệu được lưu trữ không mã hóa. Các ứng dụng thường sử dụng SQLite để lưu trữ dữ liệu có cấu trúc. Nếu không có biện pháp mã hóa phù hợp, dữ liệu này cũng dễ bị lộ.3
  • 3. Kiểm tra Internal/External Storage:
  • Trong DIVA, vào mục “03. INSECURE DATA STORAGE PART 3” và “04. INSECURE DATA STORAGE PART 4”. Các mục này có thể lưu tệp vào bộ nhớ trong hoặc ngoài.
  • Internal Storage: Thường là /data/data/<package_name>/files/.
  • External Storage: Thường là /sdcard/ hoặc /mnt/sdcard/. Dữ liệu trên external storage có thể bị truy cập bởi bất kỳ ứng dụng nào có quyền READ_EXTERNAL_STORAGE.3
  • Sử dụng adb shell, ls, cd, cat để tìm và xem nội dung các tệp do DIVA tạo ra.
  • Ví dụ, nếu DIVA tạo một tệp trong /sdcard/:
    Bash
    adb shell
    su
    ls /sdcard/
    # Tìm tệp do DIVA tạo, ví dụ:.uinfo.txt
    cat /sdcard/.uinfo.txt
  • Việc lưu trữ dữ liệu nhạy cảm, dù là trong bộ nhớ trong hay ngoài, mà không mã hóa đều là một rủi ro bảo mật đáng kể.13 ADB cung cấp khả năng truy cập trực tiếp vào hệ thống tệp của thiết bị Android (đặc biệt khi đã root), cho phép kiểm tra viên dễ dàng tìm thấy và trích xuất những dữ liệu này.
  • 4. Kiểm tra Logcat Output:
  • Một số ứng dụng có thể ghi thông tin nhạy cảm ra Logcat, đặc biệt trong quá trình debug.
  • Trong DIVA, thử thách “05. Insecure Logging”.
  • Trên Kali, chạy: adb logcat | grep jakhar.aseem.diva (hoặc chỉ adb logcat và tìm kiếm thủ công).
  • Quay lại ứng dụng DIVA, vào mục “05. INSECURE LOGGING”, nhập một chuỗi và nhấn nút.
  • Quan sát output của Logcat trên Kali. Bạn có thể thấy thông tin đã nhập bị log ra.21
    D/diva-log: User input: [dữ liệu bạn đã nhập]
  • Logcat là một công cụ gỡ lỗi mạnh mẽ, nhưng nếu thông tin nhạy cảm bị ghi vào đó trong môi trường production, nó có thể bị các ứng dụng độc hại khác đọc được nếu chúng có quyền READ_LOGS (trên các phiên bản Android cũ hơn) hoặc bị thu thập qua các công cụ gỡ lỗi.

Bảng IV-B-1: Các vị trí lưu trữ dữ liệu phổ biến và cách kiểm tra bằng ADB

| Vị trí lưu trữ | Đường dẫn ví dụ trên thiết bị (qua ADB shell) | Lệnh kiểm tra ví dụ (sau khi cd vào thư mục) |

|———————|—————————————————-|———————————————–|

| SharedPreferences | /data/data/<package_name>/shared_prefs/ | cat <filename>.xml |

| SQLite Databases | /data/data/<package_name>/databases/ | sqlite3 <dbname>.db rồi dùng lệnh SQL |

| Internal Storage | /data/data/<package_name>/files/ | ls -l, cat <filename> |

| External Storage | /sdcard/ hoặc /mnt/sdcard/ | ls -l, cat <filename> |

| Logcat | (Không phải tệp) | adb logcat |

C. Phân tích Lưu lượng Mạng với Burp Suite

Phân tích lưu lượng mạng giúp phát hiện việc truyền tải thông tin nhạy cảm không được mã hóa hoặc các lỗ hổng giao tiếp khác.

  • 1. Cấu hình Burp Suite làm Proxy:
  • Mở Burp Suite trên Kali.
  • Vào tab “Proxy” -> “Options”.
  • Trong “Proxy Listeners”, đảm bảo có một listener đang chạy, ví dụ trên 127.0.0.1:8080. Nhấn “Edit”, trong tab “Binding”, chọn “Specific address” và chọn địa chỉ IP của máy Kali trên mạng lab (ví dụ: 192.168.70.10) và port (ví dụ: 8080).8 Điều này cho phép các thiết bị khác trong mạng lab kết nối đến proxy của Burp.
  • Nhấn OK.
  • 2. Cấu hình Android VM để sử dụng Proxy của Burp Suite:
  • Trên Android VM, vào Settings -> Network & internet -> Wi-Fi (hoặc “VirtWifi”).
  • Nhấn giữ vào mạng đang kết nối, chọn “Modify network”.
  • Advanced options -> Proxy: Manual.
  • Proxy hostname: Nhập IP của máy Kali (ví dụ: 192.168.70.10).
  • Proxy port: Nhập port của Burp Suite (ví dụ: 8080).
  • Nhấn Save.
  • Cài đặt Chứng chỉ CA của Burp Suite trên Android (để chặn HTTPS) 8:
  • Để Burp Suite có thể giải mã và chặn lưu lượng HTTPS mà không bị lỗi chứng chỉ, bạn cần cài đặt chứng chỉ CA của Burp vào Android VM như một “Trusted CA”.
  • Trên Kali, mở trình duyệt và truy cập http://<IP_Kali&gt;:<Port_Burp> (ví dụ: http://192.168.70.10:8080) hoặc http://burp.
  • Nhấn vào “CA Certificate” để tải về tệp cacert.der.
  • Đổi tên tệp thành một dạng hash đặc biệt để Android nhận diện (cần OpenSSL):
    Bash
    openssl x509 -inform DER -in cacert.der -out cacert.pem
    openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1
    # Giả sử hash là 9a5ba575
    mv cacert.pem 9a5ba575.0
  • Push chứng chỉ lên Android và đặt quyền (yêu cầu root) 8:
    Bash
    adb root # Đảm bảo adb có quyền root
    adb remount # Remount /system ở chế độ writable
    adb push 9a5ba575.0 /system/etc/security/cacerts/
    adb shell chmod 644 /system/etc/security/cacerts/9a5ba575.0
    adb reboot # Khởi động lại để thay đổi có hiệu lực
  • Sau khi Android khởi động lại, kiểm tra trong Settings -> Security -> Encryption & Credentials -> Trusted credentials -> System. Chứng chỉ “PortSwigger CA” nên được liệt kê.
  • Việc cài đặt chứng chỉ CA của proxy vào system trust store là một bước quan trọng. Nếu không, ứng dụng sẽ từ chối kết nối HTTPS qua proxy do lỗi chứng chỉ không tin cậy. Điều này nhấn mạnh tầm quan trọng của việc quản lý chứng chỉ tin cậy trên thiết bị; nếu kẻ tấn công có thể khiến thiết bị tin tưởng vào CA của họ, họ có thể thực hiện tấn công Man-in-the-Middle (MITM) đối với lưu lượng HTTPS.13
  • 3. Chặn và Phân tích Lưu lượng HTTP/HTTPS 9:
  • Trong Burp Suite, vào tab “Proxy” -> “Intercept”. Bật “Intercept is on”.
  • Trên Android VM, mở ứng dụng DIVA, vào mục “07. INPUT VALIDATION ISSUES PART 1” (đây là một webview). Thử truy cập một trang web hoặc thực hiện hành động gây ra request mạng.
  • Quan sát các request bị chặn trong Burp. Bạn có thể “Forward” (chuyển tiếp), “Drop” (hủy), hoặc sửa đổi request trước khi gửi đi.
  • Xem lịch sử các request/response trong tab “Proxy” -> “HTTP history”.
  • 4. Xác định Lỗ hổng qua Phân tích Lưu lượng:
  • Tìm kiếm thông tin nhạy cảm (username, password, token) được gửi qua HTTP (không mã hóa) hoặc trong tham số GET của request HTTPS.
  • Kiểm tra headers để tìm rò rỉ thông tin (ví dụ: phiên bản server, framework).
  • Nếu ứng dụng sử dụng WebView hoặc giao tiếp với API web, kiểm tra các lỗ hổng web phổ biến như Parameter Tampering, Cross-Site Scripting (XSS) nếu nội dung được phản chiếu trong WebView.1
  • Trong DIVA, thử thách “06. Access Control Issues Part 1” liên quan đến việc API key bị lộ. Nếu API key này được gửi trong request, Burp sẽ bắt được.

D. Phân tích Động và Can thiệp Runtime với Frida

Frida là một công cụ cực kỳ mạnh mẽ cho phép bạn “tiêm” mã JavaScript của mình vào các tiến trình đang chạy, cho phép hooking (móc nối) vào các hàm, theo dõi lời gọi hàm, sửa đổi tham số và giá trị trả về, và nhiều hơn nữa. Điều này rất hữu ích để bypass các cơ chế bảo vệ phía client.

  • 1. Cài đặt Frida Server trên Android VM 10:
  • Tải Frida server cho Android từ trang GitHub releases của Frida (https://github.com/frida/frida/releases). Chọn phiên bản phù hợp với kiến trúc của Android VM (thường là x86 hoặc x86_64 cho emulator, ví dụ: frida-server-16.x.x-android-x86_64.xz).
  • Giải nén tệp server (ví dụ, dùng xz -d frida-server-….xz rồi tar xvf frida-server-….tar nếu là.tar.xz, hoặc chỉ unxz nếu là.xz). Bạn sẽ nhận được một tệp binary.
  • Đẩy tệp server lên Android VM và chạy (yêu cầu root):
    Bash
    adb root
    adb push frida-server-16.x.x-android-x86_64 /data/local/tmp/frida-server # Thay tên tệp cho đúng
    adb shell “chmod 755 /data/local/tmp/frida-server”
    adb shell “/data/local/tmp/frida-server &” # Chạy server ở chế độ nền
  • Kiểm tra trên Kali: frida-ps -U. Lệnh này sẽ liệt kê các tiến trình đang chạy trên thiết bị Android nếu Frida server hoạt động đúng.10
  • 2. Scripting Frida Cơ bản: Hooking hàm, sửa đổi giá trị trả về:
  • Frida sử dụng JavaScript để viết các script can thiệp.
  • Ví dụ: Tạo một script Frida đơn giản (hook_diva.js) để theo dõi hàm access() trong HardcodeActivity của DIVA.
    JavaScript
    // hook_diva.js
    Java.perform(function() {
        console.log(“[*] Frida script loaded and running…”);

        var HardcodeActivity = Java.use(“jakhar.aseem.diva.HardcodeActivity”);

        HardcodeActivity.access.implementation = function(s) {
            console.log(“[+] Original argument to access(): ” + s);

            // Gọi hàm gốc
            var original_return_value = this.access(s);
            console.log(“[+] Original return value: ” + original_return_value);

            // Ví dụ: Sửa đổi giá trị trả về
            // var modified_return_value = true;
            // console.log(“[+] Modified return value to: ” + modified_return_value);
            // return modified_return_value;

            return original_return_value;
        };
    });
  • Chạy script trên Kali, nhắm vào ứng dụng DIVA (package name jakhar.aseem.diva):
  • Để Frida tự khởi chạy ứng dụng:
    Bash
    frida -U -l hook_diva.js -f jakhar.aseem.diva
  • Hoặc, nếu ứng dụng đã chạy, tìm PID của nó (frida-ps -Ua | grep diva) rồi attach:
    Bash
    frida -U -l hook_diva.js -p <PID>
  • Khi bạn tương tác với chức năng “Hardcoding Issues – Part 1” trong DIVA, bạn sẽ thấy output từ script Frida trên terminal Kali.
  • 3. Bypass các Cơ chế Bảo vệ Phía Client (Khái niệm, sử dụng Frida):
  • Nhiều ứng dụng triển khai các biện pháp bảo vệ phía client như phát hiện root hoặc SSL pinning để ngăn chặn phân tích. Frida rất hiệu quả trong việc bypass các biện pháp này trong thời gian chạy, thường nhanh hơn so với việc vá tĩnh mã Smali.
  • Bypass Root Detection 14:
  • Ứng dụng có thể kiểm tra root bằng nhiều cách: tìm sự tồn tại của tệp su, kiểm tra các gói ứng dụng quản lý root, kiểm tra quyền ghi trên các đường dẫn hệ thống.
  • 1415 cung cấp ví dụ chi tiết về việc sử dụng JADX để tìm logic phát hiện root (ví dụ trong OWASP Uncrackable hoặc thư viện RootBeer) và sau đó sử dụng Frida để hook các phương thức liên quan, buộc chúng trả về
    false (nghĩa là “không phát hiện root”).
  • Script Frida khái niệm để bypass root detection (giả sử DIVA có hàm isDeviceRooted() trong lớp jakhar.aseem.diva.Utils):
    JavaScript
    // conceptual_root_bypass.js
    Java.perform(function() {
        try {
            var Utils = Java.use(“jakhar.aseem.diva.Utils”); // Giả sử có lớp này
            Utils.isDeviceRooted.implementation = function() {
                console.log(“[*] Root check (isDeviceRooted) called, returning false.”);
                return false;
            };
        } catch (err) {
            console.log(“[!] Error hooking isDeviceRooted: ” + err.message);
        }

        // Thêm các hook cho các phương thức kiểm tra root phổ biến khác nếu cần
        // Ví dụ từ RootBeer [15]
        try {
            var RootBeer = Java.use(“com.scottyab.rootbeer.RootBeer”);
            if (RootBeer.checkForSuBinary) {
                RootBeer.checkForSuBinary.implementation = function() {
                    console.log(“[*] RootBeer.checkForSuBinary called, returning false.”);
                    return false;
                };
            }
            // Hook các hàm khác của RootBeer tương tự…
        } catch (err) {
            console.log(“[!] Error hooking RootBeer: ” + err.message);
        }
    });
  • Bypass SSL Pinning 16:
  • SSL pinning là một kỹ thuật bảo mật trong đó ứng dụng chỉ tin tưởng vào một hoặc một vài chứng chỉ máy chủ cụ thể, thay vì tin tưởng bất kỳ CA nào có trong trust store của hệ thống (như chứng chỉ của Burp).
  • 16 cung cấp một script bypass SSL pinning phổ biến cho Android bằng Frida. 23 cũng thảo luận về việc sử dụng Frida cho mục đích này.
  • Việc bypass SSL pinning thường bao gồm việc hook các hàm trong các thư viện SSL/TLS phổ biến (ví dụ: SSLContext.init, TrustManagerFactory.getTrustManagers, các phương thức trong X509TrustManager như checkServerTrusted) để vô hiệu hóa các kiểm tra hoặc buộc ứng dụng tin tưởng vào CA do người dùng cài đặt (như CA của Burp).
  • Có nhiều script Frida bypass SSL pinning có sẵn trên frida-codeshare hoặc GitHub. Một ví dụ là script “Universal Android SSL Pinning Bypass” (thường được tìm thấy với tên frida-multiple-unpinning.js hoặc tương tự).
  • Để sử dụng một script như vậy:
  1. Tải script về máy Kali.
  2. Chạy Frida với script đó, nhắm vào ứng dụng mục tiêu:
    Bash
    frida -U -l android-ssl-pinning-bypass.js -f com.example.app_with_pinning

Sau khi script được tiêm, ứng dụng sẽ chấp nhận chứng chỉ của Burp Suite, cho phép bạn chặn và phân tích lưu lượng HTTPS.

Bảng IV-D-1: Ví dụ Snippet Frida cho các Kỹ thuật Bypass Phổ biến

| Loại Bypass | Kịch bản Mục tiêu | Snippet Code Frida Khái niệm (JavaScript) |

|——————-|————————————————————————————|————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-|

| Hooking Hàm | Theo dõi/sửa đổi đối số, giá trị trả về của một hàm cụ thể. | Java.perform(function() { var TargetClass = Java.use(“com.example.TargetClass”); TargetClass.targetMethod.implementation = function(arg1, arg2) { console.log(“targetMethod called with: ” + arg1 + “, ” + arg2); var retVal = this.targetMethod(arg1, arg2); console.log(“Original return: ” + retVal); return “modified_value”; }; }); |

| Root Detection | Vô hiệu hóa kiểm tra root bằng cách buộc hàm kiểm tra trả về false. | Java.perform(function() { var RootCheckUtil = Java.use(“com.example.security.RootCheckUtil”); RootCheckUtil.isRooted.implementation = function() { console.log(“isRooted check bypassed, returning false.”); return false; }; }); |

| SSL Pinning | Vô hiệu hóa kiểm tra pinning chứng chỉ, thường bằng cách hook các hàm TrustManager. | (Sử dụng script frida-multiple-unpinning.js hoặc tương tự từ cộng đồng). Một đoạn code khái niệm có thể là: Java.perform(function () { var X509TrustManager = Java.use(‘javax.net.ssl.X509TrustManager’); var SSLContext = Java.use(‘javax.net.ssl.SSLContext’); /*… logic để tạo TrustManager giả mạo chấp nhận mọi chứng chỉ… */ SSLContext.init.overload(‘, secureRandom); }; }); |

Frida thực sự thay đổi cuộc chơi trong phân tích động và bypass các kiểm soát phía client. Khả năng can thiệp vào thời gian chạy giúp tiết kiệm đáng kể thời gian và công sức so với các phương pháp vá tĩnh truyền thống, đồng thời cung cấp một cái nhìn sâu sắc hơn về hành vi của ứng dụng.

E. (Bài tập Nâng cao Tùy chọn) Kiểm tra Xác thực Đầu vào Cơ bản & Khai thác Activity

  • 1. Xác định và Khai thác các Trường Đầu vào Không An Toàn:
  • Trong DIVA, tìm các trường nhập liệu có thể dễ bị tấn công nếu được xử lý không an toàn bởi backend hoặc WebView. Ví dụ, thử thách “07. INPUT VALIDATION ISSUES PART 1” sử dụng một WebView.
  • Nếu ứng dụng gửi dữ liệu đầu vào đến server, sử dụng Burp Suite để sửa đổi các tham số.
  • Nếu ứng dụng xử lý đầu vào cục bộ và hiển thị trong WebView, thử các payload XSS đơn giản. Ví dụ, trong mục “Input Validation Issues Part 1” của DIVA, nhập <h1>Test</h1> hoặc <script>alert(‘XSS’)</script> vào ô tìm kiếm và xem kết quả.
  • Mục “11. SQL INJECTION” trong DIVA cho phép thực hành SQL Injection vào một cơ sở dữ liệu cục bộ.
  • Nhập admin’ OR ‘1’=’1 vào trường username để thử bypass đăng nhập.
  • Phân tích mã nguồn jakhar.aseem.diva.SQLInjectionActivity.java bằng JADX để hiểu câu lệnh SQL dễ bị tấn công:
    Java
    // Trích đoạn
    Cursor localCursor = DivaJni.getReadableDatabase(HardcodeActivity.class).rawQuery(“SELECT * FROM sqliuser WHERE user = ‘” + str1 + “‘ AND password = ‘” + str2 + “‘”, null);
  • 2. Khởi chạy các Activity bị ẩn hoặc được bảo vệ bằng ADB hoặc Drozer:
  • Trong quá trình phân tích tĩnh AndroidManifest.xml, bạn có thể tìm thấy các activity không được export (android:exported=”false”) hoặc được bảo vệ bởi quyền hạn mà người dùng thông thường không có.
  • Thử khởi chạy chúng bằng ADB (yêu cầu quyền root để khởi chạy các activity không được export của ứng dụng khác, hoặc các activity không được export của chính ứng dụng nếu bạn có quyền root trên thiết bị):
    Bash
    adb shell am start -n <package_name>/<activity_name>
    # Ví dụ cho DIVA, thử thách “Access Control Issues Part 2”
    adb shell am start -n jakhar.aseem.diva/.APICredsActivity # Activity này có thể được export
    # Thử thách “Access Control Issues Part 3” có một activity không được export
    adb shell am start -n jakhar.aseem.diva/.PrivateDataActivity # Sẽ thất bại nếu không có quyền phù hợp hoặc activity không được export và không có root
  • Drozer (được đề cập trong 3) là một công cụ mạnh mẽ hơn cho việc này, với các module như
    run app.activity.info -a jakhar.aseem.diva để liệt kê activities và run app.activity.start –component jakhar.aseem.diva jakhar.aseem.diva.SomeHiddenActivity để khởi chạy. Tuy nhiên, việc cài đặt và sử dụng Drozer đầy đủ nằm ngoài phạm vi của hướng dẫn cơ bản này.

V. Khuyến nghị cho Thành công CEH Master và Học tập Liên tục

A. Tận dụng Hướng dẫn này cho Kỳ thi CEH Master Thực hành

Kỳ thi CEH Master kiểm tra khả năng áp dụng thực tế các kỹ thuật ethical hacking.1 Hướng dẫn này cung cấp các kỹ năng Android nền tảng, nhưng để thành công, cần:

  • Thành thạo bộ công cụ: Nắm vững việc sử dụng ADB, JADX, Frida và Burp Suite. Sự thành thạo giúp tiết kiệm thời gian quý báu trong kỳ thi.
  • Luyện tập phương pháp luận: Thực hành quy trình: phân tích tĩnh -> phân tích động -> khai thác.
  • Quản lý thời gian: Kỳ thi có giới hạn thời gian. Thực hành thường xuyên giúp tăng tốc độ và hiệu quả.
  • Hiểu các kịch bản phổ biến: Các tình huống như lưu trữ không an toàn, chặn bắt lưu lượng, và bypass cơ bản là các mẫu thường gặp trong CTF và các kỳ thi thực hành.

B. Thực hành Thêm: Khám phá các Ứng dụng Android Dễ bị Tấn công khác và CTF

DIVA là một điểm khởi đầu tốt. Để nâng cao kỹ năng, hãy khám phá các ứng dụng khác:

  • OWASP Uncrackables: Các thử thách này tập trung vào việc bypass các biện pháp bảo vệ như root detection và anti-tampering, rất tốt để luyện tập với Frida.14
  • InsecureBankv2: Một ứng dụng Android khác được thiết kế để thực hành pentest.
  • Các ứng dụng từ danh sách như 30 (mặc dù nhiều ứng dụng trong danh sách này tập trung vào web, nhưng nó cho thấy khái niệm về các lab thực hành dễ bị tấn công).
  • Tham gia các cuộc thi Capture The Flag (CTF) có các thử thách về di động.3 CTF là một cách tuyệt vời để áp dụng kiến thức vào các kịch bản đa dạng và học hỏi từ cộng đồng.

C. Luôn Cập nhật: OWASP Mobile Security Testing Guide (MSTG) và Các Mối đe dọa Mới nổi

  • OWASP Mobile Security Testing Guide (MSTG): Đây là một tài liệu toàn diện, được cộng đồng đóng góp, về kiểm thử bảo mật ứng dụng di động.25 MSTG cung cấp kiến thức sâu rộng, các kỹ thuật kiểm thử chi tiết và là một nguồn tài liệu vô giá để học tập và cập nhật kiến thức. 26 nhấn mạnh vai trò của MSTG trong giáo dục, chuẩn hóa việc kiểm thử và cung cấp hướng dẫn thực tế.
  • Cập nhật về mối đe dọa: Bối cảnh mối đe dọa di động liên tục phát triển.13 Theo dõi các blog bảo mật, nghiên cứu và hội nghị chuyên ngành để nắm bắt các kỹ thuật tấn công và phòng thủ mới nhất.

D. Cân nhắc về Đạo đức và Tiết lộ Có Trách nhiệm

Ethical hacking đòi hỏi sự tuân thủ nghiêm ngặt các giới hạn pháp lý và đạo đức.2

  • Luôn có sự cho phép rõ ràng: Chỉ kiểm thử các ứng dụng và hệ thống mà bạn được phép (như DIVA, các nền tảng CTF công khai, hoặc hệ thống của khách hàng với hợp đồng rõ ràng).
  • Tiết lộ có trách nhiệm: Nếu phát hiện lỗ hổng trong các ứng dụng thực tế (ngoài phạm vi lab), hãy tuân theo các quy trình tiết lộ có trách nhiệm cho nhà phát triển hoặc chủ sở hữu hệ thống.

E. Mẹo cuối cùng cho việc Chuẩn bị Thi

  • Thực hành, Thực hành, Thực hành: Nhấn mạnh tầm quan trọng của việc thực hành thực tế.1 Càng thực hành nhiều, bạn càng trở nên thành thạo và tự tin.
  • Hiểu rõ các Vector Tấn công: CEH Practical yêu cầu chứng minh sự hiểu biết về các vector tấn công.1 Hướng dẫn này đã bao gồm một số vector phổ biến cho Android.
  • Tài liệu hóa và Báo cáo: Mặc dù hướng dẫn này tập trung vào các bước thực hành, hãy nhớ rằng các cuộc pentest thực tế (và có thể cả một phần của CEH Master hoặc các vai trò sau này) yêu cầu báo cáo rõ ràng.22 Tập cách ghi lại các phát hiện của bạn một cách chi tiết và dễ hiểu.
  • Giữ bình tĩnh dưới áp lực: Kỳ thi có giới hạn thời gian. Hãy thực hành trong điều kiện tương tự để làm quen với áp lực.

Lĩnh vực an ninh mạng, đặc biệt là bảo mật di động, không ngừng thay đổi. Việc học tập liên tục, thực hành có đạo đức và tham khảo các nguồn tài liệu uy tín như OWASP MSTG là rất quan trọng để duy trì và nâng cao kiến thức, kỹ năng, cũng như để thành công trong các kỳ thi chứng chỉ nâng cao như CEH Master và trong sự nghiệp chuyên gia bảo mật.28 Chứng chỉ CEH Master là một bước tiến quan trọng, khẳng định khả năng thực hành và làm chủ các kỹ thuật hacking chuyên sâu.1

Bình luận về bài viết này

Thịnh hành