Автовоспроизведение безопасности Android

Плагин AutoRepro Gradle создан на базе тестового пакета Android Trade Federation для проверки всех устройств Android на предмет наличия исправлений безопасности и уязвимостей, указанных в Бюллетене безопасности Android . Эти тесты предназначены исключительно для исправлений, которые связаны или будут связаны с общими уязвимостями и рисками (CVE).

Плагин позволяет разрабатывать тесты Tradefed вне дерева исходного кода Android, используя Android Studio или стандартный Android SDK. Он включает в себя все утилиты, необходимые для создания и запуска теста Tradefed.

В основном он используется для отправки автоматически воспроизводимых доказательств концепции для Программы вознаграждений за уязвимости Android .

пример автовоспроизведения

Предварительные условия

Инструкции приведены для ПК с 64-битной ОС Linux.

  • Android Studio Ladybug или новее — также можно установить из менеджера пакетов вашего дистрибутива.
  • Инструменты платформы Android SDK ( adb , fastboot ) — должны быть установлены и находиться в вашем $PATH (то есть вы должны иметь возможность запускать adb из командной строки). Самый простой способ установить инструменты платформы — использовать менеджер пакетов вашего дистрибутива.
    • Если вы используете менеджер SDK Android Studio вместо отдельных инструментов платформы, не забудьте добавить каталог platform-tools SDK в $PATH для разработки из командной строки.
  • ААПТ2 . - Также можно установить с помощью менеджера пакетов вашего дистрибутива.
  • Java JDK 21 или новее — совместим с Android SDK и Gradle.

Начните использовать Android Studio

После извлечения примера или шаблона откройте каталог в Android Studio как существующий проект и дождитесь завершения синхронизации Gradle. Существует несколько предварительно настроенных конфигураций запуска Android Studio.

Задачи Градла:

  • assembleSubmissionSources — собрать исходные файлы для zip-файла отправки.
  • assembleSubmissionZip — Соберите zip-архив для отправки.
  • copyInvocationResultsToSubmission — скопируйте результаты предыдущих вызовов Tradefed в каталог источников отправки AutoRepro, чтобы облегчить процесс проверки. Обратите внимание, что здесь содержатся журналы как с хоста, так и с устройства; просмотрите содержимое до или после запуска этого.

Конфигурации запуска Android Studio для вызова AutoRepro:

  • autorepro_nonroot_arm64
  • autorepro_nonroot_x86_64
  • autorepro_root_arm64
  • autorepro_root_x86_64

Конфигурации средства запуска имеют вид autorepro_{device_root}_{device_arch} . Обычно предпочтительнее использовать некорневой доступ, поскольку уязвимости, требующие root, менее серьезны. Однако использование root для выполнения установки или очистки может быть приемлемым, если оно четко документировано и обычно считается допустимым состоянием без root. Например, допустимо использовать root для имитации отправки текстовых сообщений на устройство, чтобы избежать необходимости использования второго устройства и нескольких SIM-карт.

Они запустят Tradefed для вашего тестирования. Tradefed ожидает подключения действительного устройства, поэтому убедитесь, что оно подключено и разрешена отладка ADB.

Напишите тест AutoRepro

Тест AutoRepro состоит из трех частей и трех соответствующих плагинов Gradle:

  1. id("com.android.security.autorepro.javahosttest") Единый тест Tradefed на стороне хоста, который взаимодействует с устройством через ADB. В примере он используется в каталоге submission/hostTest/ .
  2. id("com.android.security.autorepro.apptest") APK-файл приложения или службы, который устанавливается на устройство через adb install и запускается при тестировании на стороне хоста. Приложение или служба также может содержать собственный набор утверждений JUnit, о которых сообщается исполнителю на стороне хоста. В примере он используется в каталоге submission/appTest/ и.
  3. id("com.android.security.autorepro.ndktest") Дополнительная атака для проверки концепции на основе NDK, которая передается на устройство через adb push и выполняется тестом на стороне хоста. В примере он используется в каталоге submission/ndkTest/ .

Типичный процесс тестирования AutoRepro обычно следует одному из двух шаблонов:

  • Приложение для инструментального тестирования:

    1. Тест на стороне хоста передает на устройство APK, состоящий из инструментированного приложения или службы.
    2. Тест на стороне хоста запускает тесты JUnit на стороне устройства, которые включены в APK, с помощью runDeviceTest() .
    3. JUnit на стороне устройства тестирует нажатие кнопок и наблюдает за приложением с помощью UIAutomator или иным образом обращается к API-интерфейсам Android способами, выявляющими уязвимости безопасности.
    4. Успех или неудача тестов JUnit на стороне устройства возвращается тесту на стороне хоста, который можно использовать для определения того, пройден тест или нет. Сообщение об ошибке должно содержать подробную информацию о том, почему утверждение не удалось, а также любые конкретные объекты, значения, исключения, трассировки стека или другие артефакты, подтверждающие уязвимость.
  • Доказательство концепции NDK:

    1. Тест на стороне хоста отправляет и запускает исполняемый файл Linux на устройстве.
    2. Собственная программа аварийно завершает работу или возвращает определенный код выхода.
    3. Тест на стороне хоста проверяет наличие сбоев, просматривает обратную трассировку logcat или ищет конкретный код завершения, чтобы определить, была ли атака успешной. Сообщение об ошибке должно содержать подробную информацию о том, почему утверждение не удалось, а также любые конкретные структуры, значения, трассировки стека или другие артефакты, подтверждающие уязвимость.

Также возможна комбинация двух шаблонов (например, запуск собственной программы в сочетании с тестами на стороне устройства). Также доступны некоторые другие инструментальные платформы, такие как frida-inject . Подробные сведения см. в справочной документации Security Test Suite и справочной документации Tradefed .

Моя атака для проверки концепции не требует тестового приложения или собственного исполняемого файла.

Большинству тестов не потребуется одновременно приложение на стороне устройства и собственный исполняемый файл.

Если ваш тест не предполагает использование какой-либо функции, удалите ненужные каталоги подпроекта gradle.

Моя атака для проверки концепции включает второе приложение/сервис.

Добавьте столько подпроектов Gradle с плагинами AutoRepro, сколько захотите.

Отправьте тест AutoRepro

Чтобы включить результаты тестирования с вашего устройства в отправку:

  • При необходимости запустите задачу clean Gradle, чтобы удалить все старые тесты.
  • Запустите соответствующую конфигурацию запуска AutoRepro, чтобы вызвать Tradefed для вашего теста и собрать журналы и результаты.
  • Запустите задачу copyInvocationResultsToSubmission , чтобы скопировать журналы и результаты в каталог источников отправки.

Запустите assembleSubmissionZip , чтобы создать файл submission/build/autorepro-submission.zip . Загрузите этот файл вместе с вашим материалом в Программу вознаграждений за уязвимости Android. Убедитесь, что вложение соответствует шаблону *autorepro-submission*.zip и что оно загружено вместе с исходным отчетом. Поздняя загрузка материалов повлияет на нашу способность правильно рассмотреть ваш отчет.