
Инструментарий для эмуляции прошивки и анализа на предмет уязвимостей безопасности.
FAT — это набор инструментов, созданный для помощи исследователям безопасности в анализе и выявлении уязвимостей в прошивках IoT и встраиваемых устройств. Он также используется в обучении "Offensive IoT Exploitation", проводимом компанией Attify.
Примечание:
На данный момент это просто скрипт для автоматизации Firmadyne — инструмента, используемого для эмуляции прошивок. В случае возникновения проблем с самой эмуляцией, пожалуйста, сообщайте о них в раздел проблем firmadyne.
Если у вас возникли проблемы, вы можете попробовать AttifyOS, в который предустановлены Firmware analysis toolkit и другие инструменты, готовые к использованию.
Firmware Analysis Toolkit (далее FAT) основан на Firmadyne с некоторыми изменениями. Firmadyne использует базу данных PostgreSQL для хранения информации об эмулируемых образах. Однако для основной функциональности, то есть эмуляции прошивок, PostgreSQL на самом деле не требуется. Поэтому FAT не использует её.
FAT разработан на Python 3. Однако вам необходимо установить как Python 3, так и Python 2, поскольку части Firmadyne и его зависимости используют Python 2. Настоятельно рекомендуется устанавливать FAT внутри виртуальной машины.
Для установки просто клонируйте репозиторий и запустите скрипт ./setup.sh.
git clone https://github.com/attify/firmware-analysis-toolkit
cd firmware-analysis-toolkit
./setup.sh
После завершения установки отредактируйте файл fat.config и укажите пароль sudo, как показано ниже. Firmadyne требует привилегий sudo для некоторых своих операций. Пароль sudo указывается для автоматизации процесса.
[DEFAULT]
sudo_password=attify123
firmadyne_path=/home/attify/firmadyne
$ ./fat.py <firmware file>
Укажите имя файла прошивки в качестве аргумента скрипта.
Скрипт отобразит IP-адреса, назначенные созданным сетевым интерфейсам. Запомните их.
Наконец, будет сказано, что прошивка запускается. Нажмите ENTER и ждите, пока прошивка загрузится. Пингуйте IP-адрес, который был показан на предыдущем шаге, или откройте его в браузере.
Поздравляем! Прошивка наконец эмулирована.
Чтобы удалить все проанализированные образы прошивок, выполните
$ ./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
На данный момент ядро firmadyne для ARM не работает с последней версией Qemu (2.11.1), доступной в официальном репозитории Ubuntu 18.04. Однако Qemu (2.5.0) на Ubuntu 16.04 работает. В качестве альтернативы вы можете использовать встроенный Qemu (2.5.0), поставляемый с firmadyne, как показано в примере 2.
Если сетевые интерфейсы не обнаружены, попробуйте увеличить значение таймаута с 60 в scripts/inferNetwork.sh, как показано ниже
echo "Running firmware ${IID}: terminating after 60 secs..."
timeout --preserve-status --signal SIGINT 60 "${SCRIPT_DIR}/run.${ARCH}.sh" "${IID}"
Репозиторий уже включает статические сборки qemu 2.0.0, 2.5.0 и 3.0.0 (в релизах), но если вы хотите собрать свою собственную, следуйте инструкциям ниже.
На чистой виртуальной машине Ubuntu 16.04 выполните. (Важно использовать 16.04, более поздние версии имеют проблемы со статической компиляцией).
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
Скомпилированные бинарные файлы можно найти в каталоге 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
Скомпилированные бинарные файлы можно найти в каталоге 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
Скомпилированные бинарные файлы можно найти в каталоге qemu-3.0.0-build.
Примечание: Также должно быть возможно статически скомпилировать qemu в системе Alpine, но это не проверено. В целом, компиляция в Alpine предпочтительнее, чем в Ubuntu, поскольку в Alpine используется musl libc, который лучше подходит для статической линковки, чем glibc в Ubuntu.