AutoRepro Gradle eklentisi, Android Trade Federation test düzeneğinin üzerine kurulmuştur. Bu eklenti, Android Güvenlik Bülteni'ndeki güvenlik açıklarına karşı güvenlik yaması testleri için tüm Android cihazları test eder. Bu testler yalnızca Common Vulnerabilities and Exposures (CVE) ile ilişkili olan veya olacak düzeltmeler için yapılır.
Eklenti, Android Studio veya standart Android SDK kullanılarak Android kaynak ağacı dışında Tradefed testlerinin geliştirilmesine olanak tanır. Tradefed testi oluşturmak ve çalıştırmak için gereken tüm yardımcı programları içerir.
Öncelikli olarak Android Güvenlik Açığı Ödül Programı için otomatik olarak yeniden üretilebilen kavram kanıtlarını göndermek amacıyla kullanılır.
Ön koşullar
Talimatlar, 64 bit Linux PC için sağlanır.
- Android Studio Ladybug veya daha yeni bir sürüm - Dağıtımınızın paket yöneticisinden de yüklenebilir.
- Android SDK platform araçları
(
adb
,fastboot
) - Yüklenmeli ve$PATH
içinde olmalıdır (Yani, komut satırındanadb
komutunu çalıştırabilmelisiniz). Platform araçlarını yüklemenin en kolay yolu, dağıtımınızın paket yöneticisini kullanmaktır.- Bağımsız platform araçları yerine Android Studio'nun SDK yöneticisini kullanıyorsanız komut satırı geliştirme için SDK'nın
platform-tools
dizinini$PATH
dizininize eklemeyi unutmayın.
- Bağımsız platform araçları yerine Android Studio'nun SDK yöneticisini kullanıyorsanız komut satırı geliştirme için SDK'nın
- AAPT2. - Dağıtımınızın paket yöneticisi kullanılarak da yüklenebilir.
- Java JDK 21 veya daha yeni sürümler: Android SDK ve Gradle ile uyumludur.
Android Studio'yu kullanmaya başlama
Örneği veya şablonu çıkardıktan sonra dizini Android Studio'da mevcut bir proje olarak açın ve Gradle senkronizasyonunun tamamlanmasını bekleyin. Önceden yapılandırılmış çeşitli Android Studio çalıştırma yapılandırmaları vardır.
Gradle görevleri:
assembleSubmissionSources
- Gönderim için kaynak dosyaları bir araya getirin zip.assembleSubmissionZip
- Yüklemek için gönderim ZIP dosyasını oluşturun.copyInvocationResultsToSubmission
- İnceleme sürecine yardımcı olmak için önceki Tradefed çağrılarından elde edilen sonuçları AutoRepro gönderim kaynakları dizinine kopyalayın. Bunun hem ana makine hem de cihaz günlüklerini içerdiğini unutmayın. Bu komutu çalıştırmadan önce veya sonra içeriği inceleyin.
AutoRepro çağırma Android Studio çalıştırma yapılandırmaları:
autorepro_nonroot_arm64
autorepro_nonroot_x86_64
autorepro_root_arm64
autorepro_root_x86_64
Başlatıcı yapılandırmaları autorepro_{device_root}_{device_arch}
biçimindedir. Genel olarak root olmayan cihazların kullanılması tercih edilir. Çünkü root gerektiren güvenlik açıkları daha az ciddi olur. Ancak, kurulum veya temizleme işlemlerini gerçekleştirmek için root kullanmak, açıkça belgelenmesi ve genellikle geçerli bir root olmayan durum olarak kabul edilmesi koşuluyla kabul edilebilir. Örneğin, ikinci bir cihaz ve birden fazla SIM kart gerektirmemek için cihazda sahte kısa mesaj göndermek amacıyla root erişimi kullanmak kabul edilebilir.
Bunlar, testiniz için Tradefed'i başlatır. Tradefed, geçerli bir cihazın bağlanmasını bekler. Bu nedenle, bir cihazın bağlı olduğundan ve ADB hata ayıklamasının yetkilendirildiğinden emin olun.
AutoRepro testi yazma
AutoRepro testi üç bölümden ve üç ilgili Gradle eklentisinden oluşur:
- Gradle eklentisi
id("com.android.security.autorepro.javahosttest")
ADB aracılığıyla cihazla etkileşime giren tek ana makine tarafı Tradefed testi. Örnekte,submission/hostTest/
dizininde kullanılıyor. - Gradle eklentisi
id("com.android.security.autorepro.apptest")
adb install
aracılığıyla cihaza yüklenen ve ana tarafındaki test tarafından başlatılan bir uygulama veya hizmet APK'sı. Uygulama veya hizmet, ana taraf koşucusuna bildirilen kendi JUnit onaylamaları kümesini de içerebilir. Örnekte,submission/appTest/
ve dizinde kullanılır. - Gradle eklentisi
id("com.android.security.autorepro.ndktest")
adb push
aracılığıyla cihaza gönderilen ve ana bilgisayar tarafındaki test tarafından yürütülen, NDK tabanlı isteğe bağlı bir kavram kanıtı saldırısı. Örnekte,submission/ndkTest/
dizininde kullanılmaktadır.
Tipik bir AutoRepro test akışı genellikle iki kalıptan birini izler:
Enstrümantasyon testi uygulaması:
- Ana makine tarafındaki test, cihazda enstrümanlı bir uygulama veya hizmetten oluşan bir APK'yı zorlar.
- Ana makine tarafındaki test,
runDeviceTest()
aracılığıyla APK ile birlikte paketlenmiş cihaz tarafındaki JUnit testlerini başlatır. - Cihaz tarafındaki JUnit testleri, UIAutomator'ı kullanarak düğmelere dokunur ve uygulamayı izler ya da Android API'lerine güvenlik açıklarını ortaya çıkaracak şekilde erişir.
- Cihaz tarafındaki JUnit testlerinin başarılı veya başarısız olması, testin geçip geçmediğini belirlemek için kullanılabilecek ana makine tarafı testine döndürülür. Başarısızlık mesajı, onaylamanın neden başarısız olduğu ve güvenlik açığına dair kanıt olarak kullanılan belirli nesneler, değerler, istisnalar, yığın izleri veya diğer yapılar hakkında ayrıntılı bilgiler içermelidir.
NDK kavram kanıtlama:
- Ana makine tarafındaki test, cihazda bir yürütülebilir Linux dosyası gönderip başlatır.
- Yerel program çöker veya belirli bir çıkış kodu döndürür.
- Ana makine tarafındaki test, kilitlenmeleri kontrol eder, logcat geri izlemesine bakar veya saldırının başarılı olup olmadığını belirlemek için belirli çıkış kodunu arar. Hata mesajı, onaylamanın neden başarısız olduğu ve güvenlik açığına dair kanıt olarak kullanılan belirli yapılar, değerler, yığın izlemeleri veya diğer yapılar hakkında ayrıntılı bilgi içermelidir.
İki kalıbın birleşimi (ör. cihaz tarafı testleriyle birlikte yerel bir programın çalıştırılması) de mümkündür. frida-inject
gibi başka enstrümantasyon çerçeveleri de mevcuttur. Ayrıntılar için Security Test Suite referans belgeleri ve Tradefed referans belgeleri'ne bakın.
Kavram kanıtı saldırım için test uygulaması veya yerel yürütülebilir dosya gerekmiyor
Çoğu test için hem cihaz tarafı uygulaması hem de yerel yürütülebilir dosya gerekmez.
Testinizde bir özellik kullanılmıyorsa gereksiz gradle alt proje dizinlerini silin.
Kavram kanıtı saldırım ikinci bir uygulama/hizmet içeriyor
İstediğiniz kadar Gradle alt projesi ekleyin.
AutoRepro testini gönderin
Cihazınızdaki test sonuçlarını gönderime dahil etmek için:
- İsteğe bağlı olarak, eski test çalıştırmalarını silmek için Gradle
clean
görevini çalıştırın. - Testiniz için Tradefed'i çağırmak ve günlükleri ve sonuçları toplamak üzere uygun AutoRepro çalıştırma yapılandırmasını çalıştırın.
- Günlükleri ve sonuçları gönderim kaynakları dizinine kopyalamak için
copyInvocationResultsToSubmission
görevini çalıştırın.
assembleSubmissionZip
komutunu çalıştırarak submission/build/autorepro-submission.zip
dosyasını oluşturun. Bu dosyayı, Android Güvenlik Açığı Ödül Programı'na gönderdiğiniz dosya ile birlikte yükleyin. Ekin *autorepro-submission*.zip
kalıbına uygun olduğundan ve ilk raporla birlikte yüklendiğinden emin olun. Gönderimlerin geç yüklenmesi, raporunuzu düzgün bir şekilde inceleme olanağımızı etkiler.