基于固件的漏洞挖掘方法梳理
基于固件的漏洞挖掘方法梳理
相关论文
方案
2013
Fie on firmware: Finding vulnerabilities in embedded systems using symbolic execution, USENIX 2013
- 方案:Fie
- 技术:符号执行,静态分析,基于C源码,KLEE,基于MSP430系列微控制器
- 点评:对于某些固件,完整的分析是难以处理的,分析中的各种不精确来源可能会导致误报或漏报。改进符号执行技术来适应固件特定的功能。结果表明Fie可以发现许多内存错误。FIE anticipates and describes the peripherals symbolically using symbolic execution。使用符号执行符号化的描述外围设备?
- 资源:https://www.usenix.org/conference/usenixsecurity13/technical-sessions/paper/davidson
2014
A Large-scale Analysis of the Security of Embedded Firmwares, USENIX 2014
- 技术:静态分析(其实没有进行任何静态代码分析,只是简单的通过关键字等进行分析),基于解包后的文件
- 点评:一项大规模的嵌入式设备固件安全分析。自动识别固件发行版中漏洞,解包为可分析的组件,分析所有组件。比较文件和模块。
- 资源:https://www.usenix.org/conference/usenixsecurity14/technical-sessions/presentation/costin
- 五个挑战:构建代表性的数据集;正确识别单个固件镜像;解压自定义的存档格式;限制所需的计算资源;自动的分析方法。
Avatar: A framework to support dynamic security analysis of embedded systems’ firmwares, NDSS 2014
- 方案:Avatar
- 技术:半模拟,动态分析,符号执行,施加了强假设或依赖调试端口,白盒模糊测试
- 点评:一个框架,通过将固件仿真与真实硬件一起编排,可以对嵌入式设备进行复杂的动态分析。指令在模拟器执行,外围设备IO被转发到真实设备,允许研究者应用高级动态分析技术,如跟踪,污染,符号执行等。
- 资源:https://www.ndss-symposium.org/ndss2014/programme/avatar-framework-support-dynamic-security-analysis-embedded-systems-firmwares/
2015
Firmalice-Automatic Detection of Authentication Bypass Vulnerabilities in Binary Firmware, NDSS 2015
- 方案:Firmalice(和angr有啥关系???)
- 技术:静态分析,单独分析,黑盒,二进制,基于符号执行和程序切片
- 点评:提供了一个框架,用于检测基于符号执行和程序切片的二进制固件中的身份验证绕过漏洞(后门)。 然而,它受到约束求解器的压倒性影响。一个通用模型来描述二进制固件中的后门,并结合动态符号执行来识别它们。先使用静态分析提取数据依赖图,然后提取从入口点到手动确定的特权操作位置的程序切片,应用符号执行引擎找到可能成功的路径。支持多个架构。
- 资源:https://www.ndss-symposium.org/ndss2015/ndss-2015-programme/firmalice-automatic-detection-authentication-bypass-vulnerabilities-binary-firmware/
2016
Towards Automated Dynamic Analysis for Linux-based Embedded Firmware, NDSS 2016
- 方案:FIRMADYNE
- 技术:动态分析,基于固件模拟,全模拟,分析所有组件
- 点评:依靠基于软件的完整系统仿真和检测内核来实现自动分析数千个固件二进制文件所需的可扩展性。FIRMADYNE 实施了一种自动化方法来评估大量嵌入式设备固件映像中新发现的安全漏洞的普遍性。自动化方法只是运行已知的漏洞利用作为 Metasploit 模块和他们自己的概念验证 (PoC) 来手动发现漏洞。尽管运行一组预定义的漏洞利用有助于发现已知漏洞,但它不能有效地发现新漏洞,因为同一漏洞在不同类别的设备和供应商中调用不同漏洞的可能性很低。
- 资源:https://www.researchgate.net/publication/316904631_Towards_Automated_Dynamic_Analysis_for_Linux-based_Embedded_Firmware
Automated dynamic firmware analysis at scale: A case study on embedded web interfaces, ACM ASIACCS 2016
- 技术:基于全模拟,静态和动态分析工具(应用级别模拟qemu),强假设,分析所有组件
点评:用于发现嵌入式固件web中的漏洞。任何给定的功能通常都依赖于多个程序的执行,分析所有组件。提供了一个混合静态分析和仿真来分析嵌入式 Web 界面的框架。 然而,他们的技术不是通用的,不能检测以前未知的内存损坏漏洞,并且依赖于各种启发式模拟。
技术改进
Driller: Augmenting Fuzzing Through Selective Symbolic Execution, NDSS 2016 - 方案:Driller
- 技术:模糊测试和选择性混合执行(符号执行),避免了模糊测试的不完整和混合分析中的路径爆炸,单个模块或二进制
- 点评:严格来说不算固件漏洞挖掘,改进了软件漏洞挖掘方法。只关注一个程序或模块的程序分析,关注内存破坏漏洞。在AFL的基础上加入了动态符号执行引擎
Scalable graph-based bug search for firmware images, ACM CCS 2016
- 方案:Genius
技术:基于代码分析;基于模式匹配(代码相似性)的静态分析方法
点评:将CFG转换为高级数字特征向量,对跨架构的代码鲁棒性更强
2017
BootStomp: On the Security of Bootloaders in Mobile Devices, USENIX 2017
- 方案:BootStomp
- 技术:单独分析,污点分析,多标签的污点追踪,KARONTE基于这个做的,静态分析
- 点评:探讨移动引导加载程序设计和实现中的漏洞,静态分析和动态符号执行的新颖组合产生的多标签污点分析
2018
IoTFuzzer: Discovering Memory Corruptions in IoT Through App-based Fuzzing, NDSS 2018
- 方案:IoTFuzzer
- 技术:动态分析,基于生成的模糊测试,只关注面向网络的二进制文件,黑盒fuzz,通过配套app指导fuzz
- 点评:通过应用程序来指导fuzz,会遗漏其他组件中包含的错误。IoTFuzzer 缺乏对生成输入质量的了解,导致对低质量输入的资源浪费。分析 Android 应用程序以检测物联网设备中与内存相关的漏洞。 IoTFuzzer 采用基于污点的方法并改变用于生成协议消息的数据流。因此,IoTFuzzer 不需要协议模板。通过改变应用程序中的数据流,IoTFuzzer 跳过了协议分析。此外,变异策略不仅可以触发内存损坏,还可以触发逻辑损坏。由于设备监控困难,使用IoTFuzzer来发现明显的固件崩溃。
DTaint: Detecting the Taint-style Vulnerability in Embedded Device Firmware, IEEE DSN 2018
- 方案:DTaint
- 技术:静态二进制分析,污点追踪
- 点评:第一个提出不依赖于源码或模拟固件运行的;专注于recv等类似函数生成的数据,但忽略了前端文件的语义。
2019
SRFuzzer: an automatic fuzzing framework for physical SOHO router devices to discover multi-type vulnerabilities, ACSAC 2019
- 方案:SRFuzzer
- 技术:动态分析,模糊测试,对web输入语义进行建模
FirmFuzz: Automated IoT Firmware Introspection and Analysis, IEEE IoT S&P 2019
- 方案:FirmFuzz
- 技术:动态分析,基于输入生成的模糊测试,
- 点评:FirmFuzz 通过 Web 界面检测物联网设备漏洞。它是一种用于语法合法输入生成的分代模糊器,它利用静态分析来帮助对仿真固件图像进行模糊测试,同时监控固件运行时间。 FirmFuzz 通过收集可触发漏洞的有效载荷来改变通信消息。但是,它没有考虑变异策略,因此检测到漏洞的机会相对较低。
FIRM-AFL: High-Throughput Greybox Fuzzing of IoT Firmware via Augmented Process Emulation, USENIX 2019
- 方案:FIRM-AFL
- 技术:动态分析,基于变异的fuzz,结合了AFL和Firmadyne
- 点评:一种基于变异的物联网固件灰盒模糊测试平台。 Firm-AFL 采用增强过程仿真来最小化每次模糊迭代的开销。它通过在用户模式模拟器中运行目标程序并在目标程序调用具有特定硬件依赖性的系统调用时切换到全系统模拟器来实现高吞吐量模糊测试。这项工作解决了性能瓶颈。但是,Firm-AFL 侧重于单个程序的覆盖范围,并没有考虑沟通过程。单一程序覆盖范围的增加使得程序间漏洞难以触发。
- 资源:Firm-AFL:高效的IoT固件灰盒fuzz - 看雪学院
2020
KARONTE: Detecting Insecure Multi-binary Interactions in Embedded Firmware, IEEE S&P 2020
- 方案:KARONTE
- 技术:静态分析,关联考虑跨二进制
- 点评:关注跨二进制,后端,忽略了前端可能会漏报。 Web 服务器和二进制文件之间的通用进程间通信 (IPC) 范式作为分析的起点。然而,大量的IPC接口带来了大量的过度分析,从而导致许多误报。
P2IM: Scalable and hardware-independent firmware testing via automatic peripheral interface modeling
- 方案:P2IM
- 技术:动态分析,固件模拟,模糊测试
- 点评:实现独立于硬件和可扩展的固件测试。抽象了各种外设,并基于自动生成的模型动态处理固件 I/O。 P2IM 无视外设设计和固件实现的通用性,因此适用于各种嵌入式设备。
技术改进
GREYONE: Data Flow Sensitive Fuzzing, USENIX 2020
- 方案:GREYONE
- 技术:使用污点分析更好的利用数据流来指导fuzz,基于静态代码检测
- 点评:严格来说不算固件漏洞挖掘,改进了模糊测试。一种模糊测试驱动的污点推理解决方案 FTI,用于获取更多污点属性以及输入偏移和分支之间的精确关系。根据FTI提供的污点分析结果来确定要突变的字节和要探索的分支的优先级及如何突变。GREYONE补充了数据流特征来调整fuzzing的方向,使用另一种基于数据流特征的约束一致性,即污染变量与未接触分支中期望值的距离,向种子队列中添加一致性更高的测试用例从而提升突变效率。
- 资源:https://blog.csdn.net/Eastmount/article/details/107825286,https://blog.csdn.net/zhang14916/article/details/102802713
Neutaint: Efficient Dynamic Taint Analysis with Neural Networks, IEEE S&P 2020
- 方案:Neutaint
- 技术:基于神经网络的高效动态污点分析
- 点评:严格来说不算固件漏洞挖掘,改进了动态污点分析。使用神经程序嵌入来跟踪信息流,并利用符号执行生成高质量的训练数据以提高流覆盖率。然而,累积的错误和巨大的开销仍然是 Dynamic Taint Track 的一大挑战。
2021
Sharing More and Checking Less: Leveraging Common Input Keywords to Detect Bugs in Embedded Systems, USENIX 2021
- 方案:SaTC
- 技术:利用前后端共享关键字作为污点分析开始位置,降低符号执行复杂度
- 点评:基于前后端共享关键字来指导漏洞挖掘
DIANE: Identifying Fuzzing Triggers in Apps to Generate Under-constrained Inputs for IoT Devices, IEEE S&P 2021
- 方案:DIANE
- 技术:利用静态+动态方法找到fuzzing triggers,利用fuzzing triggers生成输入对IoT设备做检测’
- 点评:通过使用网络流量和控制目标物联网设备的应用程序的混合分析来解决输入生成问题。与IoTFuzzer很像,在第二节说了IoTFuzzer的缺点
- 资源:Gossip - DIANE笔记,雪溯 - 论文笔记
综述
Automatic Vulnerability Detection in Embedded Devices and Firmware: Survey and Layered Taxonomies, ACM Computing Surveys 2021
物联网固件安全缺陷检测研究进展, 信息安全学报 2021
嵌入式设备固件安全分析技术研究, 计算机学报 2021
物联网设备漏洞挖掘技术研究综述, 信息安全学报 2021
物联网设备软件安全综述, 广州大学学报 2019
对比
这部分记录一些文章中出现的各种方案对比的话术:
- 受限于物联网生态碎片化问题,很难有统一、高效的动态分析方法
- 静态分析主要基于语义相似性
- 覆盖引导的模糊测试很难在真实设备上执行,因为它需要在对分析的固件进行模糊测试时跟踪到达的代码位置。可以使用硬件调试功能来执行这种跟踪,但不幸的是,它们通常在消费设备中被禁用
- 静态分析比动态分析放缩性更好,因为无需访问物理设备
- 动态解决方案无法保证覆盖所有程序状态,可能错过很多bug
- 动态分析可以利用执行时的信息,
- 数据流分析(例如,动态污点分析)被证明对指导模糊化是有用的。TaintScope[40]利用它来定位校验和。vuzzer[30]使用它来标识分支指令中使用的字节和值。angora[10]使用它来绘制与路径约束相关的输入字节的形状。这些解决方案利用污点来确定在哪里以及如何以不同的方式变异,并在一些应用程序中显示出良好的性能。
相关工作分类方法
karonte:按动态污点追踪;模糊测试;静态分析
fuzz相关的方法:基于变异的分析;基于生成的fuzz
前后端共享:动态分析;静态分析;污点追踪
一般的分类方法:静态分析,动态分析(模糊测试,动态污点分析,基于模拟),符号执行