Плагин 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
для разработки из командной строки.
- При использовании менеджера SDK Android Studio вместо автономных инструментов платформы не забудьте добавить каталог
- 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}
. Как правило, предпочтительнее использовать режим без прав root, поскольку уязвимости, требующие прав root, менее серьёзны. Тем не менее, использование прав root для настройки или очистки может быть приемлемым, если это чётко документировано и общепринято как допустимое состояние без прав root. Например, допустимо использовать права root для имитации отправки SMS на устройство, чтобы избежать необходимости использования второго устройства и нескольких SIM-карт.
Это запустит Tradefed для вашего теста. Tradefed ожидает подключения допустимого устройства, поэтому убедитесь, что оно подключено и отладка ADB разрешена.
Напишите тест AutoRepro
Тест AutoRepro состоит из трех частей и трех соответствующих плагинов Gradle:
- Плагин Gradle
id("com.android.security.autorepro.javahosttest")
единственный тест Tradefed на стороне хоста, взаимодействующий с устройством через ADB. В примере он используется в каталогеsubmission/hostTest/
. - Gradle plugin
id("com.android.security.autorepro.apptest")
APK-файл приложения или службы, устанавливаемый на устройство черезadb install
и запускаемый тестом на стороне хоста. Приложение или служба также могут содержать собственный набор утверждений JUnit, который передается в исполняющий процесс на стороне хоста. В примере он используется в каталогеsubmission/appTest/
. - Плагин Gradle
id("com.android.security.autorepro.ndktest")
— опциональная атака на основе NDK, которая отправляется на устройство черезadb push
и выполняется тестом на стороне хоста. В примере она используется в каталогеsubmission/ndkTest/
.
Типичный поток тестирования AutoRepro обычно следует одному из двух шаблонов:
Приложение для инструментированного тестирования:
- Тест на стороне хоста отправляет на устройство APK, состоящий из инструментированного приложения или службы.
- Тест на стороне хоста запускает тесты JUnit на стороне устройства, которые связаны с APK через
runDeviceTest()
. - JUnit на стороне устройства тестирует нажатия кнопок и следит за приложением с помощью UIAutomator или иным образом обращается к API Android способами, выявляющими уязвимости безопасности.
- Успешность или неуспешность JUnit-тестов на стороне устройства возвращается тесту на стороне хоста, который может быть использован для определения успешности теста. Сообщение об ошибке должно содержать подробную информацию о причине сбоя утверждения, а также любые конкретные объекты, значения, исключения, трассировки стека или другие артефакты, подтверждающие уязвимость.
Доказательство концепции NDK:
- Тест на стороне хоста отправляет и запускает исполняемый файл Linux на устройстве.
- Собственная программа аварийно завершает работу или возвращает определенный код выхода.
- Тест на стороне хоста проверяет наличие сбоев, анализирует обратную трассировку 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
и загружено вместе с исходным отчётом. Поздняя загрузка отчёта может повлиять на нашу способность должным образом рассмотреть ваш отчёт.