O plug-in AutoRepro Gradle é criado com base no arcabouço de teste da Trade Federation do Android para testar todos os dispositivos Android em testes de patch de segurança contra vulnerabilidades no boletim de segurança do Android. Esses testes são exclusivos para correções associadas ou que serão associadas a vulnerabilidades e exposições comuns (CVEs).
O plug-in permite o desenvolvimento de testes Tradefed fora da árvore de origem do Android usando o Android Studio ou o SDK padrão do Android. Ele inclui todos os utilitários necessários para criar e executar um teste do Tradefed.
Ele é usado principalmente para enviar provas de conceito reproduzíveis automaticamente para o Programa de recompensa para descobertas de vulnerabilidades do Android.
Faça o download do exemplo do AutoRepro
Pré-requisitos
As instruções são fornecidas para um PC Linux de 64 bits.
- Android Studio Ladybug ou mais recente: também pode ser instalado pelo gerenciador de pacotes da distro.
- Ferramentas da plataforma do SDK do Android
(
adb
,fastboot
): precisam ser instaladas e estar no$PATH
. Ou seja, você precisa poder executaradb
na linha de comando. A maneira mais fácil de instalar as ferramentas da plataforma é usando o gerenciador de pacotes da sua distro.- Se você estiver usando o gerenciador de SDK do Android Studio em vez de ferramentas de plataforma
independentes, não se esqueça de adicionar o diretório
platform-tools
do SDK ao$PATH
para desenvolvimento de linha de comando.
- Se você estiver usando o gerenciador de SDK do Android Studio em vez de ferramentas de plataforma
independentes, não se esqueça de adicionar o diretório
- AAPT2. - Também pode ser instalado usando o gerenciador de pacotes da sua distro.
- Java JDK 21 ou mais recente: compatível com o SDK do Android e o Gradle.
Começar a usar o Android Studio
Depois de extrair o exemplo ou modelo, abra o diretório no Android Studio como um projeto existente e aguarde a conclusão da sincronização do Gradle. Há várias configurações de execução predefinidas do Android Studio.
Tarefas do Gradle:
assembleSubmissionSources
: monta os arquivos de origem do zip de envio.assembleSubmissionZip
: monte o ZIP do envio para upload.copyInvocationResultsToSubmission
: copie os resultados de invocações Tradefed anteriores para o diretório de origens de envio do AutoRepro para ajudar no processo de análise. Ele contém registros do host e do dispositivo. Revise o conteúdo antes ou depois de executar isso.
Configurações de execução do Android Studio para invocação do AutoRepro:
autorepro_nonroot_arm64
autorepro_nonroot_x86_64
autorepro_root_arm64
autorepro_root_x86_64
As configurações do iniciador estão no formato
autorepro_{device_root}_{device_arch}
. Geralmente, é preferível usar
não raiz, porque as vulnerabilidades que exigem raiz são menos graves. No entanto, o uso
de raiz para realizar a configuração ou limpeza pode ser aceitável, desde que seja claramente
documentado e geralmente aceito como um estado válido sem raiz. Por exemplo, é
aceitável usar a raiz para fingir o envio de mensagens de texto para o dispositivo para evitar
a necessidade de um segundo dispositivo e vários chips.
Elas vão iniciar o Tradefed para seu teste. O Tradefed espera que um dispositivo válido seja conectado. Portanto, verifique se um está conectado e se a depuração do ADB está autorizada.
Criar um teste de AutoRepro
Há três partes em um teste AutoRepro e três plug-ins do Gradle correspondentes:
- Plug-in do Gradle
id("com.android.security.autorepro.javahosttest")
O único teste Tradefed do host que interage com o dispositivo pelo ADB. O exemplo usa o diretóriosubmission/hostTest/
. - Plug-in do Gradle
id("com.android.security.autorepro.apptest")
Um APK de app ou serviço que é instalado no dispositivo poradb install
e iniciado pelo teste do host. O app ou serviço também pode conter o próprio conjunto de declarações do JUnit que são informadas ao executor do lado do host. O exemplo usa osubmission/appTest/
e o diretório. - Plug-in do Gradle
id("com.android.security.autorepro.ndktest")
Um ataque de prova de conceito baseado em NDK opcional que é enviado ao dispositivo peloadb push
e executado pelo teste do lado do host. O exemplo usa o diretóriosubmission/ndkTest/
.
Um fluxo de teste típico de AutoRepro geralmente segue um destes dois padrões:
App de teste instrumentado:
- O teste do host envia um APK que consiste em um app ou serviço instrumentado para o dispositivo.
- O teste do host inicia os testes JUnit do dispositivo que são agrupados
com o APK por
runDeviceTest()
. - Os testes JUnit do lado do dispositivo tocam botões e observam o app usando o UI Automator ou acessam as APIs do Android de maneiras que revelam vulnerabilidades de segurança.
- O sucesso ou a falha dos testes JUnit do lado do dispositivo são retornados ao teste do lado do host, que pode ser usado para determinar se o teste foi bem-sucedido ou não. A mensagem de falha precisa conter informações detalhadas sobre por que a asserção falhou e objetos, valores, exceções, stacktraces ou outros artefatos específicos como prova de vulnerabilidade.
Prova de conceito do NDK:
- O teste do host envia e inicia um executável do Linux no dispositivo.
- O programa nativo falha ou retorna um código de saída específico.
- O teste do host verifica falhas, analisa o backtrace do logcat ou procura o código de saída específico para determinar se o ataque foi bem-sucedido. A mensagem de falha precisa conter informações detalhadas sobre por que a declaração falhou e quais estruturas, valores, stacktraces ou outros artefatos específicos são provas de vulnerabilidade.
Uma combinação dos dois padrões (por exemplo, a execução de um programa nativo em
conjunto com testes no dispositivo) também é possível. Alguns outros frameworks
de instrumentação, como frida-inject
, também estão disponíveis. Para mais detalhes, consulte os
documentos de referência do Security Test Suite e os
documentos de referência do Tradefed.
Meu ataque de prova de conceito não precisa de um app de teste ou de um executável nativo.
A maioria dos testes não precisa de um app no dispositivo e de um executável nativo.
Se o teste não envolver o uso de um recurso, exclua os diretórios de subprojeto do Gradle desnecessários.
Meu ataque de prova de conceito envolve um segundo app/serviço
Adicione quantos subprojetos do Gradle com plug-ins do AutoRepro quiser.
Enviar o teste AutoRepro
Para incluir os resultados do teste do seu dispositivo como parte do envio:
- Opcionalmente, execute a tarefa
clean
do Gradle para excluir as execuções de teste antigas. - Execute a configuração de execução do AutoRepro adequada para invocar o Tradefed no seu teste e coletar registros e resultados.
- Execute a tarefa
copyInvocationResultsToSubmission
para copiar os registros e resultados para o diretório de origens de envio.
Execute assembleSubmissionZip
para criar o
arquivo submission/build/autorepro-submission.zip
. Faça upload desse arquivo junto com
seu envio para o Programa de recompensa para descobertas de vulnerabilidades do Android. Verifique se o
anexo corresponde ao padrão *autorepro-submission*.zip
e se ele foi
enviado com o relatório inicial. O envio tardio de envios vai afetar nossa
capacidade de analisar corretamente sua denúncia.