
Grammar-guided evolutionary fuzzer for dynamic analysis of AT command interfaces on Android smartphones via Bluetooth and USB, uncovering DoS, privacy leaks, and protocol downgrade vulnerabilities.
"Ouvrir la boîte de Pandore avec ATFuzzer : Analyse dynamique de l'interface AT pour smartphones Android" est accepté à la 35e Conférence annuelle sur les applications en sécurité informatique (ACSAC) 2019. https://syed-rafiul-hussain.github.io/wp-content/uploads/2019/11/atfuzz.pdf
Cet article se concentre sur la vérification de l'exactitude et de la robustesse de l'interface de commandes AT exposée par le processeur de bande de base cellulaire via Bluetooth et USB. Le processeur applicatif d'un appareil utilise cette interface pour émettre des commandes de haut niveau (ou commandes AT) vers le processeur de bande de base afin d'effectuer des opérations réseau cellulaires (par exemple, passer un appel téléphonique). Des vulnérabilités dans cette interface peuvent être exploitées par des périphériques Bluetooth malveillants pour lancer diverses attaques, y compris des attaques par déni de service (DoS) et des atteintes à la vie privée. Pour identifier ces vulnérabilités, nous proposons ATFuzzer, qui utilise une approche de fuzzing évolutionnaire guidé par grammaire et qui mute les règles de production de la grammaire des commandes AT plutôt que les commandes AT concrètes. L'évaluation empirique d'ATFuzzer sur 8 smartphones Android de 5 fournisseurs a révélé 4 grammaires de commandes AT invalides via Bluetooth et 13 via USB, avec des conséquences allant du DoS, de la rétrogradation de la version du protocole cellulaire à de graves fuites de confidentialité.
Python 2.7.15. Veuillez ne pas utiliser Python 3 en raison d'incompatibilités de bibliothèques. Les bibliothèques nécessaires sont spécifiées dans le fichier requirements.txt et peuvent être installées en exécutant la commande :
pip install -r requirements.txt
Remarque : le module pybluez pour Python 2.7 n'est pas compatible avec Windows. Pour installer pybluez sur Windows, il est nécessaire de télécharger une version antérieure. Téléchargez PyBluez‑0.22‑cp27 sur pybluez et installez-le avec la commande :
pip install <fichier pybluez.whl>
Pour exécuter ATFuzzer, lancez la commande suivante :
sudo python executeFuzzer.py <liste_de_grammaires> <nom_de_l'appareil> <port (optionnel)>
Alternativement, il est possible d'exécuter ATFuzzer avec plusieurs grammaires choisies aléatoirement avec la commande :
sudo python executeFuzzer.py multi <nom_de_l'appareil> <port (optionnel)>
Le programme demande ensuite de choisir parmi 4 options :
Ces options permettent à l'utilisateur de choisir le type d'ATFuzzer à exécuter. Ceci est fondamental pour tester et évaluer l'efficacité de notre fuzzer.
Enfin, ATFuzzer demande de spécifier le canal utilisé pour la transmission des commandes AT. Il est possible de sélectionner une option parmi trois :
Si l'option Bluetooth est sélectionnée, le programme demande l'adresse Bluetooth de l'appareil cible. L'utilisateur peut saisir l'adresse MAC Bluetooth de l'appareil au format spécifique : XX:XX:XX:XX:XX:XX (ex. 1A:2B:3C:4D:5E:6F).
L'exécution de test exécute ATFuzzer avec des paramètres d'évaluation factices et sans soumettre aucune commande à un appareil. Cette option est uniquement à des fins de test, ne l'utilisez donc pas pour fuzzer un véritable smartphone.
Remarque : si vous exécutez ATFuzzer Bluetooth sur Linux, il peut être nécessaire d'exécuter le programme avec sudo, selon la configuration système.
Nous fournissons ci-dessous une description de la structure de l'implémentation d'ATFuzzer.
commandGrammar.json : fichier JSON contenant un ensemble de grammaires pour plus de 80 commandes AT. Les grammaires sont définies selon une structure spécifique permettant au programme de les lire efficacement.
executeFuzzer.py : programme principal permettant à l'utilisateur d'exécuter ATFuzzer. Il propose différentes options d'exécution (voir Comment exécuter).
grammarFuzzer.py : implémente le fuzzing proprement dit. Il lit les grammaires des commandes AT soumises par l'utilisateur et effectue la boucle de fuzzing : génération d'entrée - soumission d'entrée - évaluation de grammaire - évolution de grammaire.
multiGrammarFuzzer.py : implémente le fuzzing proprement dit. Il lit les grammaires des commandes AT choisies aléatoirement et effectue la boucle de fuzzing : génération d'entrée - soumission d'entrée - évaluation de grammaire - évolution de grammaire.
grammarModifier.py : implémente les fonctions pour la phase d'évolution. Ces fonctions incluent le croisement de grammaire et la mutation de grammaire.
inputGen.py : génère une instance de commande AT aléatoire à partir d'une grammaire d'entrée.
atCmdInterface.py : implémente les fonctions nécessaires pour interagir avec l'interface AT de l'appareil cible. Il est responsable de l'établissement de la communication avec l'appareil, de la soumission des instances de commande AT, et enfin de la collecte et de l'évaluation des réponses.
afl_fuzzer.py : implémente les fonctions utilisées pour exécuter AFL fuzzer dans le contexte des commandes AT.
utilityFunctions.py : implémente des fonctions de support pour l'exécution du programme principal.
results : répertoire contenant les résultats de chaque exécution d'ATFuzzer.
https://www.youtube.com/watch?v=qR4Pq5i0IRE
Si votre recherche trouve un ou plusieurs composants de savior utiles, veuillez citer l'article suivant :
@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}
}