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

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

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

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

Загрузить Пример AutoRepro

Предпосылки

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

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

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

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

Задачи Gradle:

  • 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} . Обычно предпочтительнее использовать non-root, поскольку уязвимости, требующие root, менее серьезны. Однако использование root для выполнения настройки или очистки может быть приемлемым, если оно четко документировано и общепринято как допустимое non-root состояние. Например, допустимо использовать root для поддельной отправки текстовых сообщений на устройство, чтобы избежать необходимости использования второго устройства и нескольких SIM-карт.

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

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

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

  1. Gradle plugin id("com.android.security.autorepro.javahosttest") Тест Tradefed на стороне хоста, который взаимодействует с устройством через ADB. В примере он используется в каталоге submission/hostTest/ .
  2. Gradle plugin id("com.android.security.autorepro.apptest") APK приложения или службы, который устанавливается на устройство через adb install и запускается тестом на стороне хоста. Приложение или служба также могут содержать собственный набор утверждений JUnit, который сообщается обработчику на стороне хоста. В примере он используется в каталоге submission/appTest/ и .
  3. Gradle plugin id("com.android.security.autorepro.ndktest") Необязательная атака proof-of-concept на основе 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 reference docs .

Для моей атаки с целью проверки концепции не требуется тестовое приложение или собственный исполняемый файл.

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

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

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

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

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

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

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

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