
Fuzzer evolutivo guiado por gramática para el análisis dinámico de interfaces de comandos AT en smartphones Android a través de Bluetooth y USB, descubriendo vulnerabilidades de denegación de servicio (DoS), filtraciones de privacidad y degradación de protocolo.
«Opening Pandora's Box through ATFuzzer: Dynamic Analysis of AT Interface for Android Smartphones» ha sido aceptado en la 35.ª Conferencia Anual de Aplicaciones de Seguridad Informática (ACSAC) 2019. https://syed-rafiul-hussain.github.io/wp-content/uploads/2019/11/atfuzz.pdf
Este artículo se centra en verificar la corrección y robustez de la interfaz de comandos AT expuesta por el procesador de banda base celular a través de Bluetooth y USB. El procesador de aplicaciones de un dispositivo utiliza esta interfaz para emitir comandos de alto nivel (o comandos AT) al procesador de banda base para realizar operaciones de red celular (por ejemplo, realizar una llamada telefónica). Las vulnerabilidades en esta interfaz pueden ser aprovechadas por periféricos Bluetooth maliciosos para lanzar varios ataques, incluidos ataques de denegación de servicio (DoS) y de privacidad. Para identificar estas vulnerabilidades, proponemos ATFuzzer, que utiliza un enfoque de fuzzing evolutivo guiado por gramática que muta las reglas de producción de la gramática de comandos AT en lugar de comandos AT concretos. La evaluación empírica con ATFuzzer en 8 teléfonos inteligentes Android de 5 proveedores reveló 4 gramáticas de comandos AT inválidas sobre Bluetooth y 13 sobre USB, con implicaciones que van desde DoS, degradación de la versión del protocolo celular hasta graves filtraciones de privacidad.
Python 2.7.15. No use Python 3 porque hay incompatibilidades de bibliotecas. Las bibliotecas requeridas se especifican en el archivo requirements.txt y se pueden instalar ejecutando el comando:
pip install -r requirements.txt
Nota: el módulo pybluez para python 2.7 no es compatible con Windows. Para instalar pybluez en Windows es necesario descargar una versión anterior. Descargue PyBluez‑0.22‑cp27 en pybluez e instálelo con el comando:
pip install <pybluez file.whl>
Para ejecutar ATFuzzer ejecute el siguiente comando:
sudo python executeFuzzer.py <list_of_grammars> <device_name> <port (optional)>
Alternativamente, es posible ejecutar ATFuzzer con múltiples gramáticas elegidas al azar con el comando:
sudo python executeFuzzer.py multi <device_name> <port (optional)>
El programa luego pide elegir entre 4 opciones:
Estas opciones permiten al usuario elegir qué tipo de ATFuzzer ejecutar. Esto es fundamental para probar y evaluar la efectividad de nuestro fuzzer.
Finalmente, ATFuzzer requiere especificar qué canal se utilizará para la transmisión de comandos AT. Es posible seleccionar una de tres opciones:
Si se selecciona la opción Bluetooth, el programa solicita la dirección Bluetooth del dispositivo objetivo. El usuario puede insertar la dirección MAC Bluetooth del dispositivo en el formato específico: XX:XX:XX:XX:XX:XX (por ejemplo, 1A:2B:3C:4D:5E:6F).
La ejecución de prueba ejecuta ATFuzzer con parámetros de evaluación falsos y sin enviar ningún comando a un dispositivo. Esta opción es solo para fines de prueba, por lo tanto, no la use para fuzzear un teléfono inteligente real.
Nota: si ejecuta ATFuzzer por Bluetooth en Linux, puede ser necesario ejecutar el programa con sudo, dependiendo de la configuración del sistema.
A continuación proporcionamos una descripción de la estructura de la implementación de ATFuzzer.
commandGrammar.json: archivo json que contiene un conjunto de gramáticas para más de 80 comandos AT. Las gramáticas se definen siguiendo una estructura específica que permite al programa leerlas de manera eficiente.
executeFuzzer.py: programa principal que permite al usuario ejecutar ATFuzzer. Proporciona diferentes opciones de ejecución (consulte Cómo ejecutar).
grammarFuzzer.py: implementa el fuzzing real. Lee las gramáticas de los comandos AT enviados por el usuario y realiza el bucle de fuzzing: generación de entrada - envío de entrada - evaluación de gramática - evolución de gramática.
multiGrammarFuzzer.py: implementa el fuzzing real. Lee las gramáticas de los comandos AT elegidos al azar y realiza el bucle de fuzzing: generación de entrada - envío de entrada - evaluación de gramática - evolución de gramática.
grammarModifier.py: implementa las funciones para la fase de evolución. Dichas funciones incluyen cruce de gramáticas y mutación de gramáticas.
inputGen.py: genera una instancia aleatoria de comando AT dada una gramática de entrada.
atCmdInterface.py: implementa las funciones necesarias para interactuar con la interfaz AT del dispositivo objetivo. Es responsable de configurar la comunicación con el dispositivo, enviar las instancias de comandos AT y finalmente recopilar y evaluar las respuestas.
afl_fuzzer.py: implementa las funciones utilizadas para ejecutar AFL fuzzer en el contexto de comandos AT.
utilityFunctions.py: implementa funciones de soporte para la ejecución del programa principal.
results: directorio que contiene los resultados de cada ejecución de ATFuzzer.
https://www.youtube.com/watch?v=qR4Pq5i0IRE
Si su investigación encuentra uno o varios componentes de savior útiles, por favor cite el siguiente artículo:
@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}
}