Plugin Gradle AutoRepro dibangun di atas platform pengujian Android Trade Federation untuk menguji semua perangkat Android terkait pengujian patch keamanan terhadap kerentanan dalam Buletin Keamanan Android. Pengujian ini secara eksklusif ditujukan 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. Ini mencakup semua utilitas yang diperlukan untuk membuat dan menjalankan pengujian Tradefed.
Fitur ini terutama digunakan untuk mengirimkan bukti konsep yang dapat direproduksi secara otomatis untuk Program Penghargaan Kerentanan Android.
Prasyarat
Petunjuk disediakan untuk PC Linux 64-bit.
- Android Studio Ladybug atau yang lebih baru - Dapat juga diinstal dari pengelola paket distro Anda.
- Android SDK platform tools
(
adb
,fastboot
) - Harus diinstal dan ada di$PATH
Anda (Artinya, Anda harus dapat menjalankanadb
dari command line). Cara termudah untuk menginstal alat platform adalah dengan menggunakan pengelola paket distro Anda.- Jika menggunakan pengelola SDK Android Studio, bukan alat platform mandiri, jangan lupa untuk menambahkan direktori
platform-tools
SDK ke$PATH
Anda untuk pengembangan command line.
- Jika menggunakan pengelola SDK 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 hingga sinkronisasi Gradle selesai. Ada beberapa konfigurasi run Android Studio yang telah dikonfigurasi sebelumnya.
Tugas Gradle:
assembleSubmissionSources
- Merakit file sumber untuk pengiriman zip.assembleSubmissionZip
- Kumpulkan zip pengiriman untuk diupload.copyInvocationResultsToSubmission
- Salin hasil dari pemanggilan Tradefed sebelumnya ke direktori sumber pengiriman AutoRepro untuk membantu proses peninjauan. Perhatikan bahwa ini berisi log dari host dan perangkat; tinjau isinya sebelum atau setelah menjalankan ini.
Konfigurasi eksekusi Android Studio pemanggilan AutoRepro:
autorepro_nonroot_arm64
autorepro_nonroot_x86_64
autorepro_root_arm64
autorepro_root_x86_64
Konfigurasi peluncur berbentuk
autorepro_{device_root}_{device_arch}
. Umumnya lebih baik menggunakan
non-root karena kerentanan yang memerlukan akses root lebih tidak parah. Namun, penggunaan
root untuk melakukan penyiapan atau pembersihan dapat diterima selama didokumentasikan
dengan jelas dan umumnya diterima sebagai status non-root yang valid. Misalnya, Anda dapat menggunakan akses root untuk mengirim pesan teks palsu ke perangkat agar tidak memerlukan perangkat kedua dan beberapa kartu SIM.
Perintah ini akan meluncurkan Tradefed untuk pengujian Anda. Tradefed menunggu perangkat yang valid terhubung, jadi pastikan perangkat terhubung dan proses debug ADB diizinkan.
Menulis pengujian AutoRepro
Ada tiga bagian dalam pengujian AutoRepro dan tiga plugin Gradle yang sesuai:
- Plugin Gradle
id("com.android.security.autorepro.javahosttest")
Satu-satunya pengujian Tradefed sisi host yang berinteraksi dengan perangkat melalui ADB. Contoh 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 serangkaian pernyataan JUnit-nya sendiri yang dilaporkan ke peluncur sisi host. Contoh menggunakannya di direktorisubmission/appTest/
dan. - Plugin Gradle
id("com.android.security.autorepro.ndktest")
Serangan proof-of-concept berbasis NDK opsional yang dikirim ke perangkat melaluiadb push
dan dieksekusi oleh pengujian sisi host. Contoh ini menggunakannya di direktorisubmission/ndkTest/
.
Alur pengujian AutoRepro yang umum biasanya mengikuti salah satu dari dua pola berikut:
Aplikasi pengujian berinstrumen:
- Pengujian sisi host mengirimkan APK yang terdiri dari aplikasi atau layanan yang diinstrumentasi ke perangkat.
- Pengujian sisi host memulai pengujian JUnit sisi perangkat yang di-bundle 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 kegagalan pernyataan dan objek, nilai, pengecualian, stacktrace, atau artefak spesifik lainnya 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 backtrace logcat, atau mencari kode keluar tertentu untuk menentukan apakah serangan berhasil. Pesan kegagalan harus berisi informasi mendetail tentang alasan pernyataan gagal dan struktur, nilai, stacktrace, atau artefak spesifik lainnya sebagai bukti kerentanan.
Kombinasi kedua pola (misalnya, menjalankan program native bersama dengan pengujian sisi perangkat) juga memungkinkan. Framework instrumentasi lainnya, 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 memerlukan aplikasi sisi perangkat dan file executable 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 sebanyak mungkin subproject Gradle dengan plugin AutoRepro yang Anda inginkan.
Mengirimkan pengujian AutoRepro
Untuk menyertakan hasil pengujian dari perangkat Anda sebagai bagian dari pengiriman:
- Jalankan tugas Gradle
clean
secara opsional untuk menghapus semua proses pengujian lama. - Jalankan konfigurasi eksekusi AutoRepro yang sesuai untuk memanggil Tradefed untuk pengujian Anda dan mengumpulkan log dan 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 kiriman Anda ke Program Penghargaan Kerentanan Android. Pastikan lampiran sesuai dengan pola *autorepro-submission*.zip
dan diupload bersama laporan awal. Mengupload kiriman terlambat akan memengaruhi kemampuan kami untuk meninjau laporan Anda dengan benar.