O FAT é um kit de ferramentas construído para ajudar os pesquisadores de segurança a analisar e identificar vulnerabilidades na IoT e no firmware incorporado de dispositivos. Isso também é usado no treinamento " Exploração ofensivo da IoT ", realizada por Attify.
Observação:
A partir de agora, é simplesmente um script para automatizar o Firmadyne , que é uma ferramenta usada para a emulação de firmware. Em caso de qualquer problema com a emulação real, publique seus problemas nos problemas firmes.
Caso você esteja enfrentando problemas, você pode tentar o Attifyos, que possui kit de ferramentas de análise de firmware e outras ferramentas pré-instaladas e prontas para uso.
A Análise de Firmware do kit de ferramentas (a partir de agora e diante) é baseada no Firmadyne com algumas alterações. A Firmadyne usa um banco de dados PostGresql para armazenar informações sobre as imagens emuladas. No entanto, apenas para a funcionalidade principal, ou seja, o firmware emulador, o PostgreSQL não é realmente necessário. Portanto, a gordura não o usa.
A gordura é desenvolvida no Python 3. No entanto, você precisa ter o Python 3 e o Python 2 instalados desde que partes do Firmadyne e suas dependências usam o Python 2. É altamente recomendável instalar a gordura dentro de uma máquina virtual.
Para instalar apenas clone o repositório e execute o script ./setup.sh .
git clone https://github.com/attify/firmware-analysis-toolkit
cd firmware-analysis-toolkit
./setup.sh
Após a conclusão da instalação, edite o arquivo fat.config e forneça a senha do sudo, como mostrado abaixo. A Firmadyne requer privilégios do sudo para algumas de suas operações. A senha do sudo é fornecida para automatizar o processo.
[DEFAULT]
sudo_password=attify123
firmadyne_path=/home/attify/firmadyne
$ ./fat.py <firmware file>
Forneça o nome do Firmware como um argumento para o script.
O script exibiria os endereços IP atribuídos às interfaces de rede criadas. Observe -o para baixo.
Finalmente, ele dirá que executar o firmware. Pressione Enter e aguarde até que o firmware inicialize. Ping o IP que foi mostrado na etapa anterior ou aberto no navegador.
Parabéns! O firmware é finalmente emulado.
Para remover todas as imagens de firmware analisadas, execute
$ ./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 agora, o Kernel Firmadyne do ARM não funciona com a versão mais recente do Qemu (2.11.1) disponível no Ubuntu 18.04 Official Repository. No entanto, o Qemu (2.5.0) no Ubuntu 16.04 funciona. Como alternativa, você também pode usar o Qemu (2.5.0), fornecido com firmadyne, conforme mostrado no Exemplo 2.
Se nenhuma interfaces de rede forem detectadas, tente aumentar o valor do tempo limite de 60 em scripts/inferNetwork.sh como mostrado abaixo
echo "Running firmware ${IID}: terminating after 60 secs..."
timeout --preserve-status --signal SIGINT 60 "${SCRIPT_DIR}/run.${ARCH}.sh" "${IID}"
O repositório já inclui uma construção estática de Qemu 2.0.0, 2.5.0 e 3.0.0 (em lançamentos), mas se você quiser construir o seu próprio, siga as etapas abaixo.
Em um Ubuntu limpo 16.04 VM RUN. (É importante usar 16.04, versões posteriores têm problemas com compilação 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 Os binários compilados podem ser encontrados no diretório 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 Os binários compilados podem ser encontrados no diretório 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 Os binários compilados podem ser encontrados no diretório qemu-3.0.0-build .
Nota: Também deve ser possível compilar o QEMU estaticamente em um sistema alpino, mas isso não foi testado. Em geral, a compilação em alpina é preferida ao Ubuntu, pois o primeiro vem com Musl Libc, o que é melhor na ligação estática do que o Glibc no Ubuntu.