O Security Test Suite Trade Federation (sts-tradefed) é criado com base no arcabouço de testes da Trade Federation do Android para testar todos os dispositivos Android em busca de patches de segurança que não se enquadram no conjunto de teste de compatibilidade. Esses testes são exclusivamente para correções associadas (ou que serão associadas) a vulnerabilidades e exposições comuns (CVE, na sigla em inglês).
O SDK permite o desenvolvimento de testes STS fora da árvore de origem do Android usando o Android Studio ou o SDK Android padrão. Ela inclui todos os utilitários necessários para criar e executar um teste STS.
Instalar o SDK do STS mais recente
Pré-requisitos
- PC Linux de 64 bits.
- Android Studio (também pode ser instalado no gerenciador de pacotes da sua distro.
- As ferramentas da plataforma Android
(
adb
,fastboot
) precisam ser instaladas e estar no$PATH
. Ou seja, você precisa conseguir executaradb
na linha de comando. A maneira mais fácil de instalar as ferramentas da plataforma é pelo gerenciador de pacotes da sua distribuição.- Se você estiver usando o SDK Manager do Android Studio em vez de ferramentas de plataforma
independentes, adicione o diretório
platform-tools
do SDK ao $PATH.
- Se você estiver usando o SDK Manager do Android Studio em vez de ferramentas de plataforma
independentes, adicione o diretório
- aapt, que também pode ser instalado pelo gerenciador de pacotes da sua distribuição.
Começar a usar o Android Studio
Depois de extrair o arquivo, abra o diretório no Android Studio como um
projeto existente. Execute o destino de build assembleSTSARM
ou assembleSTSx86
para
criar o teste de esqueleto, dependendo da arquitetura do dispositivo
Android de destino. Execute o destino de build runSTS
para executar o teste de esqueleto no dispositivo
conectado (o ADB precisa ser autorizado).
Começar a usar o Gradle
Depois de extrair o arquivo, defina a propriedade sdk.dir
no arquivo
local.properties
na raiz do projeto do Gradle e execute a tarefa
assembleSTSARM
do Gradle para criar o teste esqueleto. Depois que o build for
concluído, o teste poderá ser executado navegando (cd
) para
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
Criar um teste STS
Um teste de STS tem três partes:
- Um teste Tradefed do lado do host que interage com o dispositivo por meio do adb, no
subdiretório
sts-test
. - Um ataque de prova de conceito nativo opcional que é enviado ao
dispositivo por
adb push
e executado pelo teste do lado do host no subdiretórionative-poc
. - Um APK de app ou serviço opcional que é instalado no dispositivo por meio de
adb install
e também iniciado pelo teste do lado do host. O app ou serviço também pode conter o próprio conjunto de declarações do JUnit informado ao executor do lado do host. Ele está no subdiretóriotest-app
.
Um fluxo de teste STS típico geralmente segue um destes dois padrões:
Prova de conceito nativa:
- O teste no lado do host envia e inicia um executável nativo 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.
App de teste instrumentado:
- O teste do host envia um APK que consiste em um app ou serviço para o dispositivo.
- O teste do lado do host inicia os testes JUnit do lado do dispositivo que são empacotados
com o APK por
runDeviceTest()
. - Os testes JUnit no lado do dispositivo tocam em botões e observam o app usando o UIAutomator ou acessa o sistema Android de maneiras que revelam vulnerabilidades de segurança.
- O sucesso ou a falha dos testes JUnit do dispositivo são retornados ao teste do host, que pode ser usado para determinar se o teste foi bem-sucedido ou não.
Uma combinação dos dois padrões (por exemplo, a execução de um programa nativo com
testes no lado do 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 pacote de testes de segurança e os documentos de referência do Tradefed.
Meu ataque de prova de conceito não precisa de um app de teste ou 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 app/serviço no dispositivo, basta excluir
o subdiretório test-app
. Da mesma forma, se o teste não usar um executável
nativo, exclua o subdiretório native-poc
e sincronize o projeto com o Gradle.
O projeto é configurado para pular automaticamente a criação desses módulos quando eles
não existirem.
Meu ataque de prova de conceito envolve um segundo app/serviço
Primeiro, adicione um novo módulo ao projeto para o segundo app/serviço e escreva como faria com qualquer outro APK.
Em seguida, edite build.gradle
na raiz desse 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 permite a instalação/chamada do novo app do teste.
Por fim, sincronize o projeto com o Gradle.
Enviar o teste STS
Execute a tarefa zipForSubmission
com o Android Studio ou o Gradle na
linha de comando. Um novo arquivo, codesubmission.zip
, precisa ser criado no diretório
build
na raiz do projeto. Faça o upload desse arquivo junto com seu
envio para o Programa de recompensa para descobertas de vulnerabilidades do Android.