Плагин 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 вместо отдельных инструментов платформы, не забудьте добавить каталог
- ААПТ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:
-
id("com.android.security.autorepro.javahosttest")
Единый тест Tradefed на стороне хоста, который взаимодействует с устройством через ADB. В примере он используется в каталогеsubmission/hostTest/
. -
id("com.android.security.autorepro.apptest")
APK-файл приложения или службы, который устанавливается на устройство черезadb install
и запускается при тестировании на стороне хоста. Приложение или служба также может содержать собственный набор утверждений JUnit, о которых сообщается исполнителю на стороне хоста. В примере он используется в каталогеsubmission/appTest/
и. -
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
и что оно загружено вместе с исходным отчетом. Поздняя загрузка материалов повлияет на нашу способность правильно рассмотреть ваш отчет.