
펌웨어를 에뮬레이션하고 보안 취약점을 분석하기 위한 툴킷
FAT는 보안 연구원들이 IoT 및 임베디드 장치 펌웨어의 취약점을 분석하고 식별하는 데 도움을 주기 위해 구축된 툴킷입니다. 이는 또한 Attify에서 진행하는 'Offensive IoT Exploitation' 교육에도 사용됩니다.
참고:
현재로서는 펌웨어 에뮬레이션에 사용되는 도구인 **Firmadyne**을 자동화하는 스크립트일 뿐입니다. 실제 에뮬레이션에 문제가 있을 경우 firmadyne 이슈에 게시해 주세요.
문제가 발생하는 경우, 펌웨어 분석 툴킷 및 기타 도구가 사전 설치되어 바로 사용할 수 있는 AttifyOS를 시도해 볼 수 있습니다.
펌웨어 분석 툴킷(이하 FAT)은 약간의 변경 사항을 적용한 Firmadyne을 기반으로 합니다. Firmadyne은 에뮬레이션된 이미지에 대한 정보를 저장하기 위해 PostgreSQL 데이터베이스를 사용합니다. 그러나 핵심 기능, 즉 펌웨어 에뮬레이션만을 위해서는 PostgreSQL이 실제로 필요하지 않습니다. 따라서 FAT는 이를 사용하지 않습니다.
FAT는 Python 3로 개발되었습니다. 그러나 Firmadyne 및 해당 종속성의 일부가 Python 2를 사용하므로 Python 3와 Python 2를 모두 설치해야 합니다. FAT를 가상 머신 내에 설치하는 것을 강력히 권장합니다.
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
현재로서는 ARM firmadyne 커널이 Ubuntu 18.04 공식 저장소에서 제공되는 최신 버전의 Qemu (2.11.1)와 호환되지 않습니다. 그러나 Ubuntu 16.04의 Qemu (2.5.0)는 작동합니다. 또는 예제 2에 표시된 대로 firmadyne에 포함된 Qemu (2.5.0)를 사용할 수도 있습니다.
네트워크 인터페이스가 감지되지 않으면 아래와 같이 scripts/inferNetwork.sh에서 타임아웃 값을 60에서 늘려 보십시오.
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 VM에서 실행하십시오. (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 디렉토리에서 찾을 수 있습니다.
참고: alpine 시스템에서 qemu를 정적으로 컴파일하는 것도 가능해야 하지만 테스트되지 않았습니다. 일반적으로 Ubuntu보다 alpine에서 컴파일하는 것이 선호되는데, 전자는 musl libc를 제공하여 Ubuntu의 glibc보다 정적 링크에 더 적합하기 때문입니다.