
Fuzzer evolucionário guiado por gramática para análise dinâmica de interfaces de comando AT em smartphones Android via Bluetooth e USB, revelando vulnerabilidades de DoS, vazamento de privacidade e downgrade de protocolo.
"Opening Pandora's Box through ATFuzzer: Dynamic Analysis of AT Interface for Android Smartphones" foi aceito na 35ª Conferência Anual de Aplicações de Segurança em Computadores (ACSAC) 2019. https://syed-rafiul-hussain.github.io/wp-content/uploads/2019/11/atfuzz.pdf
Este artigo foca na verificação da correção e robustez da interface de comandos AT exposta pelo processador de banda base do celular através de Bluetooth e USB. O processador de aplicação do dispositivo usa esta interface para emitir comandos de alto nível (ou comandos AT) ao processador de banda base para realizar operações na rede celular (por exemplo, fazer uma chamada telefônica). Vulnerabilidades nesta interface podem ser exploradas por periféricos Bluetooth maliciosos para lançar vários ataques, incluindo ataques de DoS e de privacidade. Para identificar tais vulnerabilidades, propomos o ATFuzzer, que utiliza uma abordagem de fuzzing evolucionário guiado por gramática, que muta regras de produção da gramática de comandos AT em vez de comandos AT concretos. A avaliação empírica com o ATFuzzer em 8 smartphones Android de 5 fornecedores revelou 4 gramáticas de comandos AT inválidas via Bluetooth e 13 via USB, com implicações que variam de DoS, rebaixamento da versão do protocolo celular a graves vazamentos de privacidade.
Python 2.7.15. Por favor, não use python 3 devido a incompatibilidades de bibliotecas. As bibliotecas necessárias estão especificadas no arquivo requirements.txt e podem ser instaladas executando o comando:
pip install -r requirements.txt
Nota: o módulo pybluez para python 2.7 não é compatível com Windows. Para instalar pybluez no Windows, é necessário baixar uma versão anterior. Baixe PyBluez‑0.22‑cp27 em pybluez e instale-o com o comando:
pip install <pybluez file.whl>
Para executar o ATFuzzer, execute o seguinte comando:
sudo python executeFuzzer.py <list_of_grammars> <device_name> <port (optional)>
Alternativamente, é possível executar o ATFuzzer com múltiplas gramáticas escolhidas aleatoriamente com o comando:
sudo python executeFuzzer.py multi <device_name> <port (optional)>
O programa então pede para escolher entre 4 opções:
Essas opções permitem ao usuário escolher qual tipo de ATFuzzer executar. Isso é fundamental para testar e avaliar a eficácia do nosso fuzzer.
Finalmente, o ATFuzzer requer especificar qual canal será usado para a transmissão dos comandos AT. É possível selecionar uma entre três opções:
Se a opção Bluetooth for selecionada, o programa pergunta pelo endereço Bluetooth do dispositivo alvo. O usuário pode inserir o endereço MAC Bluetooth do dispositivo no formato específico: XX:XX:XX:XX:XX:XX (por exemplo, 1A:2B:3C:4D:5E:6F).
A execução de teste executa o ATFuzzer com parâmetros de avaliação falsos e sem enviar nenhum comando a um dispositivo. Esta opção é apenas para fins de teste, portanto, não a use para fuzzear um smartphone real.
Nota: se você executar o ATFuzzer Bluetooth no Linux, pode ser necessário executar o programa com sudo, dependendo da configuração do sistema.
A seguir, fornecemos uma descrição da estrutura da implementação do ATFuzzer.
commandGrammar.json: arquivo json que contém um conjunto de gramáticas para mais de 80 comandos AT. As gramáticas são definidas seguindo uma estrutura específica que permite ao programa lê-las eficientemente.
executeFuzzer.py: programa principal que permite ao usuário executar o ATFuzzer. Ele fornece diferentes opções de execução (veja Como executar).
grammarFuzzer.py: implementa o fuzzing propriamente dito. Ele lê as gramáticas dos comandos AT enviados pelo usuário e realiza o loop de fuzzing: geração de entrada - envio de entrada - avaliação da gramática - evolução da gramática.
multiGrammarFuzzer.py: implementa o fuzzing propriamente dito. Ele lê as gramáticas dos comandos AT escolhidos aleatoriamente e realiza o loop de fuzzing: geração de entrada - envio de entrada - avaliação da gramática - evolução da gramática.
grammarModifier.py: implementa as funções para a fase de evolução. Tais funções incluem crossover de gramática e mutação de gramática.
inputGen.py: gera uma instância aleatória de comando AT a partir de uma gramática de entrada.
atCmdInterface.py: implementa as funções necessárias para interagir com a interface AT do dispositivo alvo. É responsável por configurar a comunicação com o dispositivo, enviar as instâncias de comando AT e, finalmente, coletar e avaliar as respostas.
afl_fuzzer.py: implementa as funções usadas para executar o fuzzer AFL no contexto de comandos AT.
utilityFunctions.py: implementa funções de suporte para a execução do programa principal.
results: diretório contendo os resultados de cada execução do ATFuzzer.
https://www.youtube.com/watch?v=qR4Pq5i0IRE
Se sua pesquisa achar um ou vários componentes do savior úteis, por favor cite o seguinte artigo:
@inproceedings{karim2019opening,
title={Opening Pandora's box through ATFuzzer: dynamic analysis of AT interface for Android smartphones},
author={Karim, Imtiaz and Cicala, Fabrizio and Hussain, Syed Rafiul and Chowdhury, Omar and Bertino, Elisa},
booktitle={Proceedings of the 35th Annual Computer Security Applications Conference},
pages={529--543},
year={2019}
}