
Kit de herramientas para emular firmware y analizarlo en busca de vulnerabilidades de seguridad.
FAT es un conjunto de herramientas diseñado para ayudar a los investigadores de seguridad a analizar e identificar vulnerabilidades en firmware de IoT y dispositivos embebidos. También se utiliza en el entrenamiento "Explotación Ofensiva de IoT" impartido por Attify.
Nota:
Por ahora, es simplemente un script para automatizar Firmadyne, una herramienta utilizada para la emulación de firmware. En caso de cualquier problema con la emulación real, por favor publica tus problemas en los issues de firmadyne.
En caso de tener problemas, puedes probar AttifyOS que tiene el Firmware analysis toolkit y otras herramientas preinstaladas y listas para usar.
Firmware Analysis Toolkit (FAT en adelante) está basado en Firmadyne con algunos cambios. Firmadyne usa una base de datos PostgreSQL para almacenar información sobre las imágenes emuladas. Sin embargo, solo para la funcionalidad principal, es decir, emular firmware, PostgreSQL no es realmente necesario. Por lo tanto, FAT no lo usa.
FAT está desarrollado en Python 3. Sin embargo, necesitas tener tanto Python 3 como Python 2 instalados, ya que partes de Firmadyne y sus dependencias usan Python 2. Se recomienda encarecidamente instalar FAT dentro de una Máquina Virtual.
Para instalar, simplemente clona el repositorio y ejecuta el script ./setup.sh.
git clone https://github.com/attify/firmware-analysis-toolkit
cd firmware-analysis-toolkit
./setup.sh
Una vez completada la instalación, edita el archivo fat.config y proporciona la contraseña de sudo como se muestra a continuación. Firmadyne requiere privilegios de sudo para algunas de sus operaciones. La contraseña de sudo se proporciona para automatizar el proceso.
[DEFAULT]
sudo_password=attify123
firmadyne_path=/home/attify/firmadyne
$ ./fat.py <archivo de firmware>
Proporciona el nombre del archivo de firmware como argumento al script.
El script mostrará las direcciones IP asignadas a las interfaces de red creadas. Anótalas.
Finalmente, dirá que está ejecutando el firmware. Presiona ENTER y espera hasta que el firmware arranque. Haz ping a la IP que se mostró en el paso anterior, o ábrela en el navegador.
¡Felicidades! El firmware finalmente se ha emulado.
Para eliminar todas las imágenes de firmware analizadas, ejecuta
$ ./reset.py
$ ./fat.py DIR-601_REVB_FIRMWARE_2.01.BIN
__ _
/ _| | |
| |_ __ _ | |_
| _| / _` | | __|
| | | (_| | | |_
|_| \__,_| \__|
Welcome to the Firmware Analysis Toolkit - v0.3
Offensive IoT Exploitation Training http://bit.do/offensiveiotexploitation
By Attify - https://attify.com | @attifyme
[+] Firmware: DIR-601_REVB_FIRMWARE_2.01.BIN
[+] Extrayendo el firmware...
[+] Image ID: 1
[+] Identificando la arquitectura...
[+] Architecture: mipseb
[+] Construyendo imagen de disco QEMU...
[+] Configurando la conexión de red, por favor espera...
[+] Network interfaces: [('br0', '192.168.0.1')]
[+] ¡Todo listo! Presiona ENTER para ejecutar el firmware...
[+] Cuando se esté ejecutando, presiona Ctrl + A X para terminar qemu
Asciicast
$ ./fat.py DIR890A1_FW103b07.bin --qemu 2.5.0
__ _
/ _| | |
| |_ __ _ | |_
| _| / _` | | __|
| | | (_| | | |_
|_| \__,_| \__|
Welcome to the Firmware Analysis Toolkit - v0.3
Offensive IoT Exploitation Training http://bit.do/offensiveiotexploitation
By Attify - https://attify.com | @attifyme
[+] Firmware: DIR890A1_FW103b07.bin
[+] Extrayendo el firmware...
[+] Image ID: 2
[+] Identificando la arquitectura...
[+] Architecture: armel
[+] Construyendo imagen de disco QEMU...
[+] Configurando la conexión de red, por favor espera...
[+] Network interfaces: [('br0', '192.168.0.1'), ('br1', '192.168.7.1')]
[+] Usando qemu-system-arm desde /home/attify/firmware-analysis-toolkit/qemu-builds/2.5.0
[+] ¡Todo listo! Presiona ENTER para ejecutar el firmware...
[+] Cuando se esté ejecutando, presiona Ctrl + A X para terminar qemu
Por ahora, el kernel ARM de firmadyne no funciona con la última versión de Qemu (2.11.1) disponible en el repositorio oficial de Ubuntu 18.04. Sin embargo, Qemu (2.5.0) en Ubuntu 16.04 sí funciona. Alternativamente, también puedes usar el Qemu (2.5.0) incluido con firmadyne como se muestra en el ejemplo 2.
Si no se detectan interfaces de red, intenta aumentar el valor de timeout de 60 en scripts/inferNetwork.sh como se muestra a continuación
echo "Running firmware ${IID}: terminating after 60 secs..."
timeout --preserve-status --signal SIGINT 60 "${SCRIPT_DIR}/run.${ARCH}.sh" "${IID}"
El repositorio ya incluye compilaciones estáticas de qemu 2.0.0, 2.5.0 y 3.0.0 (en las versiones) pero si quieres construir las tuyas propias, sigue los pasos a continuación.
En una VM Ubuntu 16.04 limpia ejecuta. (Es importante usar 16.04, las versiones posteriores tienen problemas con la compilación estática).
sudo apt update && sudo apt build-dep qemu -y
wget https://download.qemu.org/qemu-2.0.0.tar.bz2
tar xf qemu-2.0.0.tar.bz2
mkdir qemu-2.0.0-build
cd qemu-2.0.0
./configure --prefix=$(realpath ../qemu-2.0.0-build) --static --target-list=arm-softmmu,mips-softmmu,mipsel-softmmu --disable-smartcard-nss --disable-spice --disable-libusb --disable-usb-redir
make
make install
Los binarios compilados se pueden encontrar en el directorio qemu-2.0.0-build.
sudo apt update && sudo apt build-dep qemu -y
wget https://download.qemu.org/qemu-2.5.0.tar.bz2
tar xf qemu-2.5.0.tar.bz2
mkdir qemu-2.5.0-build
cd qemu-2.5.0
./configure --prefix=$(realpath ../qemu-2.5.0-build) --static --target-list=arm-softmmu,mips-softmmu,mipsel-softmmu --disable-smartcard --disable-libusb --disable-usb-redir
make
make install
Los binarios compilados se pueden encontrar en el directorio qemu-2.5.0-build.
sudo apt update && sudo apt build-dep qemu -y
wget https://download.qemu.org/qemu-3.0.0.tar.bz2
tar xf qemu-3.0.0.tar.bz2
mkdir qemu-3.0.0-build
cd qemu-3.0.0
./configure --prefix=$(realpath ../qemu-3.0.0-build) --static --target-list=arm-softmmu,mips-softmmu,mipsel-softmmu --disable-smartcard --disable-libusb --disable-usb-redir
make
make install
Los binarios compilados se pueden encontrar en el directorio qemu-3.0.0-build.
Nota: También debería ser posible compilar qemu estáticamente en un sistema alpine, pero esto no ha sido probado. En general, compilar en alpine es preferible a Ubuntu, ya que el primero viene con musl libc que es mejor para el enlace estático que glibc en Ubuntu.