Android Security AutoRepro

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.

AutoRepro örneğini indirin

Ö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ından adb 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.
  • 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:

  1. 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.
  2. 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.
  3. 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ı:

    1. Ana makine tarafındaki test, cihazda enstrümanlı bir uygulama veya hizmetten oluşan bir APK'yı zorlar.
    2. Ana makine tarafındaki test, runDeviceTest() aracılığıyla APK ile birlikte paketlenmiş cihaz tarafındaki JUnit testlerini başlatır.
    3. 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.
    4. 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:

    1. Ana makine tarafındaki test, cihazda bir yürütülebilir Linux dosyası gönderip başlatır.
    2. Yerel program çöker veya belirli bir çıkış kodu döndürür.
    3. 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.