3.4.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来发现明显的固件崩溃。