3.4 单架构结合
3.4.1 单架构算法
3.4.1.1 ARM
在ARM构架下重点介绍Firmalice2015,主要技术包含静态分析,单独分析,黑盒二进制,基于符号执行和程序切片。提出了固件恶意,一个二进制分析框架,以支持在嵌入式设备上运行的固件的分析。构建在符号执行引擎和程序切片等技术之上,以提高其可伸缩性。此外,该方法利用了一种新的身份验证绕过缺陷模型,基于攻击者确定执行特权操作所需输入的能力,能够更加准确的进行分析和检测。
Firmalice2015提供了一个框架,用于检测基于符号执行和程序切片的二进制固件中的身份验证绕过漏洞即后门。 然而,它受到约束求解器的压倒性影响。一个通用模型来描述二进制固件中的后门,并结合动态符号执行来识别它们。先使用静态分析提取数据依赖图,然后提取从入口点到手动确定的特权操作位置的程序切片,应用符号执行引擎找到可能成功的路径。主要支持ARM构架。
3.4.1.2 MIPS
在MIPS构架下重点介绍Dtaint2018。物联网设备由于硬件结构各异,难以对其固件进行动态分析。因此在本文中,提出了一种静态二进制分析方法DTaint,主要用于检测taint-style漏洞即输入数据通过某种不安全的路径到达了陷入点,例如缓冲区溢出等。DTaint能够识别指针别名,快进程数据流,数据结构相似性实际数据结构布局。
图3-11 Dtaint的设计
主要分为四个步骤:函数分析,指针别名识别,数据结构相似性识别,跨进程数据流恢复。函数分析阶段,DTaint每个函数通过静态符号执行单独分析,主要是完成提取内存描述变量、数据类型推断,以及定义对;指针别名分析阶段通过定义对以及数据类型推断指针别名;利用数据结构相似性推断两个进程、函数间的数据流;使用自底向上的方式遍历调用流生成过程内和过程间数据流。即在拿到一个bin时,最先将其转化为IR语言,并且对每个函数单独进行分析,分析的内容有使用内存地址描述变量,推断函数所使用的参数数量和类型,生成每个函数的DU链和UD链。接下来,需要进行指针别名的搜索和匹配,以及数据结构相似度的匹配,检查间接调用还原CFG,最后再自底向下地生成数据流。
此外还有一种动态分析技术IoTFuzzer2018,基于生成的模糊测试,只关注面向网络的二进制文件,通过配套app指导fuzz。IoTFuzzer2018通过应用程序来指导fuzz,会遗漏其他组件中包含的错误。IoTFuzzer 缺乏对生成输入质量的了解,导致对低质量输入的资源浪费。分析 Android 应用程序以检测物联网设备中与内存相关的漏洞。 IoTFuzzer 采用基于污点的方法并改变用于生成协议消息的数据流。因此,IoTFuzzer 不需要协议模板。通过改变应用程序中的数据流,IoTFuzzer 跳过了协议分析。此外,变异策略不仅可以触发内存损坏,还可以触发逻辑损坏。由于设备监控困难,使用IoTFuzzer来发现明显的固件崩溃。