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.
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 menjalankanadb
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.
- Jika menggunakan SDK manager Android Studio, bukan alat platform mandiri,
jangan lupa untuk menambahkan direktori
- 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:
- Plugin Gradle
id("com.android.security.autorepro.javahosttest")
Satu pengujian Tradefed sisi host yang berinteraksi dengan perangkat melalui ADB. Contoh ini menggunakannya di direktorisubmission/hostTest/
. - Plugin Gradle
id("com.android.security.autorepro.apptest")
APK aplikasi atau layanan yang diinstal ke perangkat melaluiadb 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 disubmission/appTest/
dan direktori. - Plugin Gradle
id("com.android.security.autorepro.ndktest")
Serangan proof-of-concept berbasis NDK opsional yang didorong ke perangkat melaluiadb push
dan dijalankan oleh pengujian sisi host. Contoh ini menggunakannya di direktorisubmission/ndkTest/
.
Alur pengujian AutoRepro standar biasanya mengikuti salah satu dari dua pola berikut:
Aplikasi pengujian berinstrumen:
- Pengujian sisi host mendorong APK yang terdiri dari aplikasi atau layanan berinstrumen ke perangkat.
- Pengujian sisi host memulai pengujian JUnit sisi perangkat yang dipaketkan
dengan APK melalui
runDeviceTest()
. - Pengujian JUnit sisi perangkat mengetuk tombol dan memantau aplikasi menggunakan UIAutomator, atau mengakses Android API dengan cara yang mengungkapkan kerentanan keamanan.
- 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:
- Pengujian sisi host mendorong dan meluncurkan file yang dapat dieksekusi Linux di perangkat.
- Program native mengalami error atau menampilkan kode keluar tertentu.
- 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.