Android Security AutoRepro

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.

AutoRepro Örneği'ni indirin

Ö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 (yani adb'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.
  • 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:

  1. Gradle eklentisi id("com.android.security.autorepro.javahosttest") ADB üzerinden cihazla etkileşime geçen tek ana makine tarafı Tradefed testi. Örnekte bu dosya submission/hostTest/ dizininde kullanılmaktadır.
  2. 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.
  3. 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 dosya submission/ndkTest/ dizininde kullanılmaktadır.

Tipik bir AutoRepro test akışı genellikle iki kalıptan birini izler:

  • Enstrümantasyonlu test uygulaması:

    1. Ana makine tarafı test, enstrümante edilmiş bir uygulama veya hizmetten oluşan bir APK'yı cihaza gönderir.
    2. Barındıran taraf testi, runDeviceTest() aracılığıyla APK ile birlikte paketlenen cihaz tarafı JUnit testlerini başlatır.
    3. 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.
    4. 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:

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