AutoRepro Gradle eklentisi, tüm Android cihazları Android Güvenlik Bültenindeki güvenlik yaması testleri için Android Trade Federation test donanımının üzerine inşa edilmiştir. Bu testler yalnızca Common Vulnerabilities and Exposures (CVE) ile ilişkilendirilmiş veya ilişkilendirilecek düzeltmeler içindir.
Eklenti, Android Studio veya standart Android SDK'sı kullanılarak Android kaynak ağacının 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.
Bu araç, öncelikle Android Güvenlik Ödülleri Programı için otomatik olarak yeniden üretilebilir kavram kanıtları göndermek amacıyla kullanılır.
Ön koşullar
Talimatlar 64 bit Linux PC için verilmiştir.
- Android Studio Ladybug veya daha yeni sürümler: Dağıtımınızın paket yöneticisinden de yüklenebilir.
- Android SDK platform araçları (
adb
,fastboot
): Yüklü ve$PATH
'inizde bulunması gerekir (yaniadb
'yi komut satırından çalıştırabilmeniz gerekir). 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
dizinine 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'sı 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ış birkaç Android Studio çalıştırma yapılandırması vardır.
Gradle görevleri:
assembleSubmissionSources
- Gönderim için kaynak dosyaları bir ZIP dosyasında toplayın.assembleSubmissionZip
- Yükleme için gönderim ZIP dosyasını oluşturun.copyInvocationResultsToSubmission
: İnceleme sürecine yardımcı olmak için önceki Tradefed çağrılarının sonuçlarını AutoRepro gönderim kaynakları dizinine kopyalayın. Bu komutun hem ana makineden hem de cihazdan gelen günlükleri içerdiğini unutmayın. Bu komutu çalıştırmadan önce veya sonra içeriği inceleyin.
AutoRepro çağrısı 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. Kök erişimi gerektiren güvenlik açıkları daha az ciddi olduğu için genellikle kök erişimi olmayan kullanıcıların kullanılması tercih edilir. Ancak, kurulum veya temizleme işlemini gerçekleştirmek için root kullanılması, açıkça belgelendiği ve genellikle geçerli bir root olmayan durum olarak kabul edildiği sürece kabul edilebilir. Örneğin, ikinci bir cihaz ve birden fazla SIM kart kullanma zorunluluğunu ortadan kaldırmak için cihaza sahte kısa mesaj göndermek amacıyla root erişimi kullanmak kabul edilebilir.
Bu komutlar, 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ıklama işleminin yetkilendirildiğinden emin olun.
AutoRepro testi yazma
AutoRepro testinin üç bölümü ve buna karşılık gelen üç Gradle eklentisi vardır:
- Gradle eklentisi
id("com.android.security.autorepro.javahosttest")
ADB üzerinden cihazla etkileşime geçen tek ana makine tarafı Tradefed testi. Örnekte bu dosyasubmission/hostTest/
dizininde kullanılmaktadır. - Gradle eklentisi
id("com.android.security.autorepro.apptest")
adb install
aracılığıyla cihaza yüklenen ve ana makine tarafı test tarafından başlatılan bir uygulama veya hizmet APK'sı. Uygulama veya hizmet, ana makine tarafındaki çalıştırıcıya bildirilen kendi JUnit iddialarını da içerebilir. Örnekte,submission/appTest/
ve dizininde kullanılmaktadır. - Gradle eklentisi
id("com.android.security.autorepro.ndktest")
adb push
üzerinden cihaza gönderilen ve ana makine tarafı test tarafından yürütülen isteğe bağlı NDK tabanlı bir kavram kanıtı saldırısı. Örnekte bu dosyasubmission/ndkTest/
dizininde kullanılmaktadır.
Tipik bir AutoRepro test akışı genellikle iki kalıptan birini izler:
Enstrümantasyonlu test uygulaması:
- Ana makine tarafı test, enstrümante edilmiş bir uygulama veya hizmetten oluşan bir APK'yı cihaza gönderir.
- Barındıran taraf testi,
runDeviceTest()
aracılığıyla APK ile birlikte paketlenen cihaz tarafı JUnit testlerini başlatır. - Cihaz tarafındaki JUnit testleri, UIAutomator'ı kullanarak düğmelere dokunur ve uygulamayı izler ya da güvenlik açıklarını ortaya çıkaracak şekilde Android API'lerine başka bir şekilde erişir.
- Cihaz tarafındaki JUnit testlerinin başarısı veya başarısızlığı, ana makine tarafındaki teste döndürülür. Bu test, testin geçip geçmediğini belirlemek için kullanılabilir. Başarısızlık mesajı, iddianın neden başarısız olduğu ve güvenlik açığının kanıtı olarak belirli nesneler, değerler, istisnalar, yığın izlemeleri veya diğer yapıların ayrıntılı bilgilerini içermelidir.
NDK kavram kanıtlama:
- Ana makine tarafı test, cihaza bir Linux yürütülebilir dosyası gönderip başlatır.
- Yerel program çöker veya belirli bir çıkış kodu döndürür.
- Ana makine tarafı test, saldırının başarılı olup olmadığını belirlemek için kilitlenmeleri kontrol eder, logcat geri izlemesini inceler veya belirli çıkış kodunu arar. Hata mesajı, iddianın neden başarısız olduğu ve güvenlik açığının kanıtı olarak belirli yapıların, değerlerin, yığın izlemelerinin veya diğer yapıların ayrıntılı bilgilerini içermelidir.
İki kalıbın bir kombinasyonu (ör. cihaz taraflı testlerle birlikte yerel bir programın çalıştırılması) da mümkündür. frida-inject
gibi başka bazı enstrümantasyon çerçeveleri de kullanılabilir. Ayrıntılar için Security Test Suite referans dokümanlarını ve Tradefed referans dokümanlarını inceleyin.
Kavram kanıtı saldırım için test uygulamasına veya yerel yürütülebilir dosyaya gerek yok
Çoğu test için hem cihaz tarafında bir uygulamaya hem de yerel bir yürütülebilir dosyaya gerek yoktur.
Testiniz bir özelliğin kullanımını içermiyorsa gereksiz gradle alt proje dizinlerini silin.
Kavram kanıtı saldırım ikinci bir uygulama/hizmet içeriyor
AutoRepro eklentileriyle istediğiniz kadar Gradle alt projesi ekleyin.
AutoRepro testini gönderme
Gönderimin bir parçası olarak cihazınızdaki test sonuçlarını eklemek 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, 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.
submission/build/autorepro-submission.zip
dosyasını oluşturmak için assembleSubmissionZip
dosyasını çalıştırın. Bu dosyayı, Android Güvenlik Açığı Ödül Programı'na gönderiminizle birlikte yükleyin. Ekin, *autorepro-submission*.zip
kalıbıyla eşleşmeli ve ilk raporla birlikte yüklenmelidir. Gönderimlerin geç yüklenmesi, raporunuzu gerektiği gibi incelememizi etkiler.