
Fuzzer evolutivo guidato da grammatica per l'analisi dinamica delle interfacce dei comandi AT su smartphone Android tramite Bluetooth e USB, scoprendo vulnerabilità DoS, perdite di privacy e downgrade di protocollo.
"Opening Pandora's Box through ATFuzzer: Dynamic Analysis of AT Interface for Android Smartphones" è stato accettato per la 35a Conferenza Annuale sulle Applicazioni di Sicurezza Informatica (ACSAC) 2019. https://syed-rafiul-hussain.github.io/wp-content/uploads/2019/11/atfuzz.pdf
Questo articolo si concentra sulla verifica della correttezza e robustezza dell'interfaccia dei comandi AT esposta dal processore di banda base cellulare tramite Bluetooth e USB. Il processore applicativo del dispositivo utilizza questa interfaccia per emettere comandi di alto livello (o comandi AT) al processore di banda base per eseguire operazioni di rete cellulare (ad es., effettuare una chiamata). Le vulnerabilità in questa interfaccia possono essere sfruttate da periferiche Bluetooth maligne per lanciare vari attacchi, inclusi attacchi DoS e alla privacy. Per identificare tali vulnerabilità, proponiamo ATFuzzer che utilizza un approccio di fuzzing evolutivo guidato dalla grammatica che muta le regole di produzione della grammatica dei comandi AT anziché i comandi AT concreti. La valutazione empirica con ATFuzzer su 8 smartphone Android di 5 fornitori ha rivelato 4 grammatiche di comandi AT non valide su Bluetooth e 13 su USB con implicazioni che vanno da DoS, downgrade della versione del protocollo cellulare a gravi fughe di dati personali.
Python 2.7.15. Non utilizzare Python 3 a causa di incompatibilità di librerie. Le librerie richieste sono specificate nel file requirements.txt e possono essere installate eseguendo il comando:
pip install -r requirements.txt
Nota: il modulo pybluez per Python 2.7 non è compatibile con Windows. Per installare pybluez su Windows è necessario scaricare una versione precedente. Scaricare PyBluez‑0.22‑cp27 su pybluez e installarlo con il comando:
pip install <pybluez file.whl>
Per eseguire ATFuzzer, eseguire il seguente comando:
sudo python executeFuzzer.py <list_of_grammars> <device_name> <port (optional)>
In alternativa, è possibile eseguire ATFuzzer con più grammatiche scelte casualmente con il comando:
sudo python executeFuzzer.py multi <device_name> <port (optional)>
Il programma chiede quindi di scegliere tra 4 opzioni:
Queste opzioni consentono all'utente di scegliere quale tipo di ATFuzzer eseguire. Ciò è fondamentale per testare e valutare l'efficacia del nostro fuzzer.
Infine, ATFuzzer richiede di specificare quale canale verrà utilizzato per la trasmissione dei comandi AT. È possibile selezionare una tra tre opzioni:
Se si seleziona l'opzione Bluetooth, il programma chiede l'indirizzo Bluetooth del dispositivo di destinazione. L'utente può inserire l'indirizzo MAC Bluetooth del dispositivo nel formato specifico: XX:XX:XX:XX:XX:XX (ad es., 1A:2B:3C:4D:5E:6F).
L'esecuzione di test esegue ATFuzzer con parametri di valutazione fittizi e senza inviare alcun comando a un dispositivo. Questa opzione è solo per scopi di test, quindi non utilizzarla per fare fuzz su uno smartphone reale.
Nota: se si esegue ATFuzzer Bluetooth su Linux, potrebbe essere necessario eseguire il programma con sudo, a seconda della configurazione del sistema.
Di seguito forniamo una descrizione della struttura dell'implementazione di ATFuzzer.
commandGrammar.json: file json che contiene un insieme di grammatiche per oltre 80 comandi AT. Le grammatiche sono definite seguendo una struttura specifica che consente al programma di leggerle efficientemente.
executeFuzzer.py: programma principale che consente all'utente di eseguire ATFuzzer. Fornisce diverse opzioni di esecuzione (vedi Come eseguire).
grammarFuzzer.py: implementa il vero e proprio fuzzing. Legge le grammatiche per i comandi AT inviati dall'utente ed esegue il ciclo di fuzzing: generazione dell'input - invio dell'input - valutazione della grammatica - evoluzione della grammatica.
multiGrammarFuzzer.py: implementa il vero e proprio fuzzing. Legge le grammatiche per i comandi AT scelti casualmente ed esegue il ciclo di fuzzing: generazione dell'input - invio dell'input - valutazione della grammatica - evoluzione della grammatica.
grammarModifier.py: implementa le funzioni per la fase di evoluzione. Tali funzioni includono crossover della grammatica e mutazione della grammatica.
inputGen.py: genera un'istanza di comando AT casuale data una grammatica di input.
atCmdInterface.py: implementa le funzioni necessarie per interagire con l'interfaccia AT del dispositivo di destinazione. È responsabile della configurazione della comunicazione con il dispositivo, dell'invio delle istanze dei comandi AT e infine della raccolta e valutazione delle risposte.
afl_fuzzer.py: implementa le funzioni utilizzate per eseguire AFL fuzzer nel contesto dei comandi AT.
utilityFunctions.py: implementa funzioni di supporto per l'esecuzione del programma principale.
results: directory contenente i risultati di ogni esecuzione di ATFuzzer.
https://www.youtube.com/watch?v=qR4Pq5i0IRE
Se la vostra ricerca trova utile uno o più componenti di savior, citare il seguente articolo:
@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}
}