AutoRepro Keamanan Android

Plugin Gradle AutoRepro dibuat berdasarkan harness pengujian Android Trade Federation untuk menguji semua perangkat Android untuk pengujian patch keamanan terhadap kerentanan dalam Android Security Bulletin. Pengujian ini khusus untuk perbaikan yang terkait atau akan dikaitkan dengan Common Vulnerabilities and Exposures (CVE).

Plugin ini memungkinkan pengembangan pengujian Tradefed di luar hierarki sumber Android menggunakan Android Studio atau Android SDK standar. Library ini mencakup semua utilitas yang diperlukan untuk mem-build dan menjalankan pengujian Tradefed.

Alat ini terutama digunakan untuk mengirimkan bukti konsep yang dapat direproduksi secara otomatis untuk Program Reward Kerentanan Android.

Download Contoh AutoRepro

Prasyarat

Petunjuk diberikan untuk PC Linux 64-bit.

  • Android Studio Ladybug atau yang lebih baru - Juga dapat diinstal dari pengelola paket distro Anda.
  • Alat platform Android SDK (adb, fastboot) - Perlu diinstal dan berada di $PATH (Artinya, Anda harus dapat menjalankan adb dari command line). Cara termudah untuk menginstal alat platform adalah menggunakan pengelola paket distro Anda.
    • Jika menggunakan SDK manager Android Studio, bukan alat platform mandiri, jangan lupa untuk menambahkan direktori platform-tools SDK ke $PATH untuk pengembangan command line.
  • AAPT2. - Juga dapat diinstal menggunakan pengelola paket distro Anda.
  • Java JDK 21 atau yang lebih baru - kompatibel dengan Android SDK dan Gradle.

Mulai menggunakan Android Studio

Setelah mengekstrak contoh atau template, buka direktori di Android Studio sebagai project yang ada dan tunggu sinkronisasi Gradle selesai. Ada beberapa konfigurasi run Android Studio yang telah dikonfigurasi sebelumnya.

Tugas Gradle:

  • assembleSubmissionSources - Menggabungkan file sumber untuk zip pengiriman.
  • assembleSubmissionZip - Membuat file zip kiriman untuk diupload.
  • copyInvocationResultsToSubmission - Salin hasil dari pemanggilan Tradefed sebelumnya ke direktori sumber pengiriman AutoRepro untuk membantu proses peninjauan. Perhatikan bahwa file ini berisi log dari host dan perangkat; tinjau konten sebelum atau setelah menjalankannya.

Konfigurasi run Android Studio pemanggilan AutoRepro:

  • autorepro_nonroot_arm64
  • autorepro_nonroot_x86_64
  • autorepro_root_arm64
  • autorepro_root_x86_64

Konfigurasi peluncur dalam bentuk autorepro_{device_root}_{device_arch}. Sebaiknya gunakan non-root karena kerentanan yang memerlukan root kurang parah. Namun, penggunaan root untuk melakukan penyiapan atau pembersihan dapat diterima selama didokumentasikan dengan jelas dan umumnya diterima sebagai status nonroot yang valid. Misalnya, Anda dapat menggunakan root untuk mengirim SMS palsu ke perangkat agar tidak memerlukan perangkat kedua dan beberapa kartu SIM.

Tindakan ini akan meluncurkan Tradefed untuk pengujian Anda. Tradefed menunggu perangkat yang valid terhubung, jadi pastikan perangkat terhubung dan proses debug ADB diotorisasi.

Menulis pengujian AutoRepro

Ada tiga bagian untuk pengujian AutoRepro dan tiga plugin Gradle yang sesuai:

  1. Plugin Gradle id("com.android.security.autorepro.javahosttest") Satu pengujian Tradefed sisi host yang berinteraksi dengan perangkat melalui ADB. Contoh ini menggunakannya di direktori submission/hostTest/.
  2. Plugin Gradle id("com.android.security.autorepro.apptest") APK aplikasi atau layanan yang diinstal ke perangkat melalui adb install dan diluncurkan oleh pengujian sisi host. Aplikasi atau layanan juga dapat berisi kumpulan pernyataan JUnit-nya sendiri yang dilaporkan ke runner sisi host. Contoh ini menggunakannya di submission/appTest/ dan direktori.
  3. Plugin Gradle id("com.android.security.autorepro.ndktest") Serangan proof-of-concept berbasis NDK opsional yang didorong ke perangkat melalui adb push dan dijalankan oleh pengujian sisi host. Contoh ini menggunakannya di direktori submission/ndkTest/.

Alur pengujian AutoRepro standar biasanya mengikuti salah satu dari dua pola berikut:

  • Aplikasi pengujian berinstrumen:

    1. Pengujian sisi host mendorong APK yang terdiri dari aplikasi atau layanan berinstrumen ke perangkat.
    2. Pengujian sisi host memulai pengujian JUnit sisi perangkat yang dipaketkan dengan APK melalui runDeviceTest().
    3. Pengujian JUnit sisi perangkat mengetuk tombol dan memantau aplikasi menggunakan UIAutomator, atau mengakses Android API dengan cara yang mengungkapkan kerentanan keamanan.
    4. Keberhasilan atau kegagalan pengujian JUnit sisi perangkat ditampilkan ke pengujian sisi host, yang dapat digunakan untuk menentukan apakah pengujian lulus atau tidak. Pesan kegagalan harus berisi informasi mendetail tentang alasan pernyataan gagal dan objek, nilai, pengecualian, stacktrace, atau artefak tertentu sebagai bukti kerentanan.
  • Bukti konsep NDK:

    1. Pengujian sisi host mendorong dan meluncurkan file yang dapat dieksekusi Linux di perangkat.
    2. Program native mengalami error atau menampilkan kode keluar tertentu.
    3. Pengujian sisi host memeriksa error, melihat pelacakan balik logcat, atau mencari kode keluar tertentu untuk menentukan apakah serangan berhasil. Pesan kegagalan harus berisi informasi mendetail tentang alasan pernyataan gagal dan struct, nilai, stacktrace, atau artefak tertentu sebagai bukti kerentanan.

Kombinasi dari kedua pola tersebut (misalnya, menjalankan program native bersama dengan pengujian sisi perangkat) juga dapat dilakukan. Beberapa framework instrumentasi lain, seperti frida-inject, juga tersedia. Untuk mengetahui detailnya, lihat dokumen referensi Security Test Suite dan dokumen referensi Tradefed.

Serangan proof-of-concept saya tidak memerlukan aplikasi pengujian atau file yang dapat dieksekusi native

Sebagian besar pengujian tidak akan memerlukan aplikasi sisi perangkat dan file yang dapat dieksekusi secara native.

Jika pengujian Anda tidak melibatkan penggunaan fitur, hapus direktori subproject gradle yang tidak diperlukan.

Serangan proof of concept saya melibatkan aplikasi/layanan kedua

Tambahkan subproject Gradle sebanyak mungkin dengan plugin AutoRepro sesuai keinginan Anda.

Mengirim pengujian AutoRepro

Untuk menyertakan hasil pengujian dari perangkat Anda sebagai bagian dari pengiriman:

  • Secara opsional, jalankan tugas clean Gradle untuk menghapus pengujian lama yang dijalankan.
  • Jalankan konfigurasi run AutoRepro yang sesuai untuk memanggil Tradefed untuk pengujian Anda dan mengumpulkan log serta hasil.
  • Jalankan tugas copyInvocationResultsToSubmission untuk menyalin log dan hasil ke direktori sumber pengiriman.

Jalankan assembleSubmissionZip untuk membuat file submission/build/autorepro-submission.zip. Upload file tersebut beserta pengiriman Anda ke Android Vulnerability Reward Program. Pastikan lampiran cocok dengan pola *autorepro-submission*.zip dan diupload dengan laporan awal. Mengupload kiriman terlambat akan memengaruhi kemampuan kami untuk meninjau laporan Anda dengan benar.