FAT es un kit de herramientas construido para ayudar a los investigadores de seguridad a analizar e identificar vulnerabilidades en IoT y firmware de dispositivos integrados. Esto también se utiliza en la capacitación de " explotación ofensiva de IoT " realizada por Attify.
Nota:
A partir de ahora, es simplemente un script para automatizar Firmadyne , que es una herramienta utilizada para la emulación de firmware. En caso de problemas con la emulación real, publique sus problemas en los problemas de Firmadyne.
En caso de que se enfrente a problemas, puede probar AttifyOS que tiene un kit de herramientas de análisis de firmware y otras herramientas preinstaladas y listas para usar.
El kit de herramientas de análisis de firmware (grasa en adelante) se basa en Firmadyne con algunos cambios. Firmadyne utiliza una base de datos PostgreSQL para almacenar información sobre las imágenes emuladas. Sin embargo, solo para la funcionalidad central, es decir, emulando firmware, PostgreSQL no es realmente necesario. Por lo tanto, la grasa no lo usa.
La grasa se desarrolla en Python 3. Sin embargo, debe tener instaladas tanto Python 3 como Python 2, ya que las partes de Firmadyne y sus dependencias usan Python 2. Se recomienda instalar grasa dentro de una máquina virtual.
Para instalar Just Clone el repositorio y ejecute el script ./setup.sh .
git clone https://github.com/attify/firmware-analysis-toolkit
cd firmware-analysis-toolkit
./setup.sh
Después de completar la instalación, edite el archivo fat.config y proporcione la contraseña de sudo como se muestra a continuación. Firmadyne requiere privilegios de sudo para algunas de sus operaciones. Se proporciona la contraseña de sudo para automatizar el proceso.
[DEFAULT]
sudo_password=attify123
firmadyne_path=/home/attify/firmadyne
$ ./fat.py <firmware file>
Proporcione el nombre de archivo de firmware como argumento al script.
El script mostraría las direcciones IP asignadas a las interfaces de red creadas. Notlo abajo.
Finalmente, dirá que ejecutar el firmware. Presione ENTER y espere hasta que el firmware inicie. Ping la IP que se mostró en el paso anterior, o se abre en el navegador.
¡Felicitaciones! El firmware finalmente se emula.
Para eliminar todas las imágenes de firmware analizadas, ejecute
$ ./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
[+] Extracting the firmware...
[+] Image ID: 1
[+] Identifying architecture...
[+] Architecture: mipseb
[+] Building QEMU disk image...
[+] Setting up the network connection, please standby...
[+] Network interfaces: [('br0', '192.168.0.1')]
[+] All set! Press ENTER to run the firmware...
[+] When running, press Ctrl + A X to terminate 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
[+] Extracting the firmware...
[+] Image ID: 2
[+] Identifying architecture...
[+] Architecture: armel
[+] Building QEMU disk image...
[+] Setting up the network connection, please standby...
[+] Network interfaces: [('br0', '192.168.0.1'), ('br1', '192.168.7.1')]
[+] Using qemu-system-arm from /home/attify/firmware-analysis-toolkit/qemu-builds/2.5.0
[+] All set! Press ENTER to run the firmware...
[+] When running, press Ctrl + A X to terminate qemu
A partir de ahora, el brazo Firmadyne Kernel 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 funciona. Alternativamente, también puede usar el QEMU incluido (2.5.0) provisto de Firmadyne como se muestra en el Ejemplo 2.
Si no se detectan interfaces de red, intente aumentar el valor de tiempo de espera 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 una construcción estática de QEMU 2.0.0, 2.5.0 y 3.0.0 (en versiones) pero si desea construir sus propios, siga los pasos a continuación.
En una carrera limpia de Ubuntu 16.04 VM. (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 alpino, pero esto no se ha probado. En general, se prefiere la compilación de Alpine a Ubuntu, ya que el primero viene con Musl libc, que es mejor en el enlace estático que GLIBC en Ubuntu.