A Security Test Suite Trade Federation (sts-tradefed) foi criada com base no equipamento de teste da Android Trade Federation para testar todos os dispositivos Android em busca de testes de patch de segurança que não se enquadram no Compatibility Test Suite. Esses testes são exclusivamente para correções associadas (ou serão associadas) a Vulnerabilidades e Exposições Comuns (CVE).
O SDK permite o desenvolvimento de testes STS fora da árvore de origem do Android usando o Android Studio ou o Android SDK padrão. Inclui todos os utilitários necessários para construir e executar um teste STS.
Obtenha o SDK STS mais recente
Pré-requisitos
- Computador Linux de 64 bits.
- Android Studio (também pode ser instalado a partir do gerenciador de pacotes da sua distribuição.
- As ferramentas da plataforma Android (
adb
,fastboot
) precisam estar instaladas e estar em seu$PATH
(ou seja, você deve ser capaz de executaradb
na linha de comando). A maneira mais fácil de instalar as ferramentas da plataforma é através do gerenciador de pacotes da sua distribuição.- Se estiver usando o gerenciador SDK do Android Studio em vez de ferramentas de plataforma independentes, lembre-se de adicionar o diretório
platform-tools
do SDK ao $PATH.
- Se estiver usando o gerenciador SDK do Android Studio em vez de ferramentas de plataforma independentes, lembre-se de adicionar o diretório
- aapt , que também pode ser instalado através do gerenciador de pacotes da sua distribuição.
Comece a usar o Android Studio
Após extrair o arquivo, abra o diretório no Android Studio como um projeto existente. Execute o destino de compilação assembleSTSARM
ou assembleSTSx86
para criar o teste de esqueleto, dependendo da arquitetura do dispositivo Android de destino. Execute o destino de construção runSTS
para executar o teste de esqueleto no dispositivo conectado (o ADB deve ser autorizado).
Comece a usar o Gradle
Depois de extrair o arquivo, defina a propriedade sdk.dir
no arquivo local.properties
na raiz do projeto Gradle e, em seguida, execute a tarefa assembleSTSARM
Gradle para construir o teste de esqueleto. Após a conclusão da compilação, o teste pode ser executado navegando ( cd
) em build/android-sts/tools
e executando o wrapper sts-tradefed
.
$ echo 'sdk.dir=/home/<myusername>/Android/Sdk' > local.properties
$ ./gradlew assembleSTSARM
$ cd build/android-sts/tools
$ ./sts-tradefed run sts-dynamic-develop -m hostsidetest
Escreva um teste STS
Existem três partes em um teste STS:
- Um teste Tradefed do lado do host que interage com o dispositivo por meio de adb, no subdiretório
sts-test
. - Um ataque de prova de conceito nativo opcional que é enviado ao dispositivo por meio
adb push
e executado pelo teste do lado do host no subdiretórionative-poc
. - Um APK de aplicativo ou serviço opcional que é instalado no dispositivo por meio
adb install
e também iniciado pelo teste do host. O aplicativo ou serviço também pode conter seu próprio conjunto de asserções JUnit que são relatadas ao executor do lado do host. Isso está no subdiretóriotest-app
.
Um fluxo de teste STS típico geralmente segue um de dois padrões:
Prova de conceito nativa:
- O teste do lado do host envia e inicia um executável nativo no dispositivo.
- O programa nativo trava ou retorna um código de saída específico.
- O teste do lado 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.
Aplicativo de teste instrumentado:
- O teste do lado do host envia um APK que consiste em um aplicativo ou serviço para o dispositivo.
- O teste do lado do host inicia os testes JUnit do lado do dispositivo que acompanham o APK por meio de
runDeviceTest()
- O JUnit do lado do dispositivo testa toques em botões e observa o aplicativo usando o UIAutomator ou acessa o sistema Android de maneiras que revelam vulnerabilidades de segurança.
- O sucesso ou falha dos testes JUnit do lado do dispositivo é retornado ao teste do lado do host, que pode ser usado para determinar se o teste foi aprovado ou não.
Uma combinação dos dois padrões (por exemplo, execução de um programa nativo em conjunto com testes do lado do dispositivo) também é possível. Algumas outras estruturas de instrumentação, como frida-inject
, também estão disponíveis. Para obter 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 aplicativo de teste e/ou executável nativo
A maioria dos testes não precisará de um aplicativo do lado do dispositivo e de um executável nativo.
Se o seu teste não envolver o uso de um aplicativo/serviço no dispositivo, simplesmente exclua o subdiretório test-app
. Da mesma forma, se o seu teste não usar um executável nativo, exclua o subdiretório native-poc
e sincronize o projeto com Gradle. O projeto está configurado para ignorar automaticamente a construção desses módulos quando eles não existirem.
Meu ataque de prova de conceito envolve um segundo aplicativo/serviço
Primeiro, adicione um novo módulo ao seu projeto para seu segundo aplicativo/serviço e escreva-o como faria com qualquer outro APK.
Em seguida, edite build.gradle
na raiz deste diretório e adicione seu módulo seguindo as instruções em copyArtifacts
, assembleStsARM
e assembleStsx86
. Isso garantirá que o APK compilado seja copiado para o diretório de saída do STS e permitirá a instalação/chamada do novo aplicativo a partir do teste.
Por fim, sincronize o projeto com Gradle.
Enviando o teste STS
Execute a tarefa zipForSubmission
(com Android Studio ou com Gradle na linha de comando). Um novo arquivo, codesubmission.zip
, deve ser criado no diretório build
na raiz do projeto. Faça upload desse arquivo junto com seu envio para o Programa de recompensa por vulnerabilidade do Android.