init
Firmware Dynamic Taint Analysis Framework(FDTAF) is a cross-platform, full-system simulation dynamic taint analysis framework for IoT firmware, including real-time Virtual Machine Introspection(VMI), precise and comprehensive taint propagation, and asynchronous analysis tools.
compiler:gcc/g++ version 7 or higher
需要先安装ninja:
git clone git://github.com/ninja-build/ninja.git && cd ninja ./configure.py --bootstrap cp ninja /usr/bin/ ninja --version
然后到fdtaf目录下进行安装:
cd fdtaf .install_depends.sh ./configure --enable-debug --target-list=i386-softmmu,mips-softmmu,arm-softmmu,mipsel-softmmu make -j3
编译时会在fdtaf/下自动创建build文件夹,编译完成后可以在该文件夹下找到qemu-system-i386、qemu-system-arm、qemu-system-mips、qemu-system-mipsel
在使用firmadyne或者firmAE成功仿真固件后,会得到一个启动文件run.sh,其中启动固件的命令一般为:
${QEMU} -m 256 -M ${QEMU_MACHINE} -kernel ${KERNEL} \ -drive if=ide,format=raw,file=${IMAGE} -append "root=${QEMU_ROOTFS} console=ttyS0 nandsim.parts=64,64,64,64,64,64,64,64,64,64 rdinit=/firmadyne/preInit.sh rw debug ignore_loglevel print-fatal-signals=1 user_debug=31 firmadyne.syscall=0" \ -nographic \ -netdev tap,id=nettap0,ifname=${TAPDEV_0},script=no -device e1000,netdev=nettap0 -netdev socket,id=net1,listen=:2001 -device e1000,netdev=net1 -netdev socket,id=net2,listen=:2002 -device e1000,netdev=net2 -netdev socket,id=net3,listen=:2003 -device e1000,netdev=net3 | tee ${WORK_DIR}/qemu.final.serial.log
我们替换掉其中的变量:
/fdtaf/build/qemu-system-mips -m 1024 -M malta -kernel ./vmlinux.mipseb_3.2.1 \ -drive if=ide,format=raw,file=./image.raw -append "root=/dev/sda1 console=ttyS0 nandsim.parts=64,64,64,64,64,64,64,64,64,64 rdinit=/firmadyne/preInit.sh rw debug ignore_loglevel print-fatal-signals=1 user_debug=31 firmadyne.syscall=0" \ -monitor stdio \ -netdev tap,id=net0,ifname=tap11_0,script=no -device e1000,netdev=net0 -netdev socket,id=net1,listen=:2001 -device e1000,netdev=net1 -netdev socket,id=net2,listen=:2002 -device e1000,netdev=net2 -netdev socket,id=net3,listen=:2003 -device e1000,netdev=net3 | tee ./qemu.final.serial.log
这样就可以使用fdtaf启动固件。
FDTAF提供了三条hmp指令来查看当前系统的进程和模块信息:
list_all_proc //查看当前系统的所有进程的信息,包括pid,name,pgd list_kernel_modules //查看kernel进程的模块信息,包括name,base,size list_modules_by_pid //根据pid查看某进程的模块信息,包括name,base,size
FDTAF在e1000.c文件里内联了污染标记模块,但目前还不成熟,需要手动去该文件下对目标url等信息进行手动修改。
FDTAF提供了污点传播功能的开启和关闭指令:
enable_taint disable_taint
允许使用者根据情况自行开启或关闭污点传播功能。
FDTAF在TCG的跳转处理函数部分进行污点检测,若存有跳转地址的寄存器被污染,在monitor界面将会打印:
PC HAS BEEN TAINTED!
污点传播会自动停止。相关日志默认在/home/下,有三个文件guest_ins_flow_log、guest_taint_log、guest_tcg_log。
FDTAF提供了对污染信息的回溯追踪,相关工具在/fdtaf/shared/analysis_tools中,目前有两个工具:
fireware_elf_parser.py taint_ana.py
使用方法如下:
binwalk -Me fireware sudo cp -rf fireware_extracted /fdtaf/shared/analysis_tools/ python fireware_elf_parser.py fireware_extracted sudo cp /home/guest_ins_flow_log /home/guest_taint_log /home/guest_tcg_log /fdtaf/shared/analysis_tools/ python taint_ana.py
fireware_elf_parser.py会生成符号表文件symbol_table。这个文件会在taint_ana.py中用到,所以要先生成。
taint_ana.py会生成一个污点传播轨迹图,记录了污点信息在各个进程之间的传播流程。
tips:标记的污点信息最好不要过多,否则递归回溯的过程会很慢。
We propose a cross-platform, full-system simulation dynamic taint analysis framework for IoT firmware, Firmware Dynamic Taint Analysis Framework(FDTAF) . FDTAF provides a novel real-time Virtual Machi
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
FDTAF
Introduction
Firmware Dynamic Taint Analysis Framework(FDTAF) is a cross-platform, full-system simulation dynamic taint analysis framework for IoT firmware, including real-time Virtual Machine Introspection(VMI), precise and comprehensive taint propagation, and asynchronous analysis tools.
Building
compiler:gcc/g++ version 7 or higher
需要先安装ninja:
然后到fdtaf目录下进行安装:
编译时会在fdtaf/下自动创建build文件夹,编译完成后可以在该文件夹下找到qemu-system-i386、qemu-system-arm、qemu-system-mips、qemu-system-mipsel
Usage
在使用firmadyne或者firmAE成功仿真固件后,会得到一个启动文件run.sh,其中启动固件的命令一般为:
我们替换掉其中的变量:
这样就可以使用fdtaf启动固件。
VMI
FDTAF提供了三条hmp指令来查看当前系统的进程和模块信息:
Taint mark
FDTAF在e1000.c文件里内联了污染标记模块,但目前还不成熟,需要手动去该文件下对目标url等信息进行手动修改。
Taint propagation
FDTAF提供了污点传播功能的开启和关闭指令:
允许使用者根据情况自行开启或关闭污点传播功能。
Taint log
FDTAF在TCG的跳转处理函数部分进行污点检测,若存有跳转地址的寄存器被污染,在monitor界面将会打印:
污点传播会自动停止。相关日志默认在/home/下,有三个文件guest_ins_flow_log、guest_taint_log、guest_tcg_log。
Taint analysis
FDTAF提供了对污染信息的回溯追踪,相关工具在/fdtaf/shared/analysis_tools中,目前有两个工具:
使用方法如下:
fireware_elf_parser.py会生成符号表文件symbol_table。这个文件会在taint_ana.py中用到,所以要先生成。
taint_ana.py会生成一个污点传播轨迹图,记录了污点信息在各个进程之间的传播流程。
tips:标记的污点信息最好不要过多,否则递归回溯的过程会很慢。