当前位置:   article > 正文

嵌入式设备和固件中的自动漏洞检测(三):静态分析技术_二进制固件检测误报率

二进制固件检测误报率

原文链接:Automatic Vulnerability Detection in Embedded Devices and Firmware: Survey and Layered Taxonomies: ACM Computing Surveys: Vol 54, No 2

Please Subscribe Wechat Official Account:信安科研人

发送“嵌入式设备和固件中的自动漏洞检测”,获取原文pdf
 

一 静态分析技术层次概览

       静态分析的方法在学术界使用得更频繁,因为它们提供了比较来自不同体系结构的代码的方法。在这些技术中,如果函数与存储库中已分析的易受攻击的函数之间存在匹配,则该函数被视为潜在易受攻击的函数。

     为了分析程序二进制文件,现有工作从不同的二进制代码表示或中间表示 (IR) 中提取广泛的特征,IR 是一种与处理器无关的形式,它表示具有中间抽象级别的二进制代码的操作语义。

        这些特征 (或它们的组合) 用于表示函数或程序二进制的语义,并最终帮助分析代码的结果。本文将特征分为四类。

        图3显示了建议的特征分类以及利用这些特征的相应方法:

1.1 指令级别的特征

        指令级特征可以直接从给定的二进制代码中提取。例如,n-gram 是二进制程序中的 n 个标记序列(例如,字节或指令)。 n-gram 的一个缺点是它们对指令的顺序很敏感,因为某些指令可以在保留语义的同时重新排序。

1.2 统计特征

        统计特征表示二进制代码的语义信息。例如,与将某些信息写入文件的函数相比,加密函数使用更多的算术和逻辑指令。为此,很多工作中使用了不同特征(如频率)的统计数据。

        例如,利用指令分组(例如,算术指令的数量),映射最可能的函数信息。又如操作码的分布向量,很多工作用其来检测恶意软件。

1.3 结构特征

        结构特征既代表了代码的语义信息,又代表了代码的结构特性。

  •  控制流图(CFGs)是用来表示执行的控制流的最常用的特征。同时,调用图是程序级别提取的内容,以获得更多关于调用者和被调用者之间的关系以及程序逻辑的信息。
  •  另外,一些图度量方法,如图能量和中间中心性(节点中心性),被用来提取关于图拓扑信息。 

1.4 语义特征

        此类别包括在更大程度上传达代码语义的特性。

  • 执行流图(EFG)保留CFG中指令之间的数据和控制依赖关系,因此,表示函数的内部结构。
  • 数据相关性和程序相关性图(PDGs)被用来推断控制和数据流,其中需要提取存储器和寄存器值。 
  • 结合路径切片和值集分析的数据流分析被用于构造条件公式,该公式描述给定程序行为何时将在哪个条件下发生,并可能捕获不正确的数据依赖和条件检查。

二 代码相似性检测

        本节将回顾识别固件映像中漏洞的代码相似性检测方法,将现有的工作分为基于图的、基于数据流的和基于距离的三类。

2.1 基于图的方法

概念:基于图的方法基于代码的图表示来执行分析,如控制流图(CFG)、子图、tracelets和调用图,每个图都传达特定的信息。 

现有工作:

(1)Discovre

        为了在交叉编译的跨体系结构固件映像中进行易损功能检测,Discovre提到它扩展了最大公共子图(MCS)距离,以根据几个特征(如函数中的拓扑顺序、字符串和常数)额外考虑基本块之间的相似性。

        MCS的执行时间是指数增长的,因此作者采用了基于集合函数(例如,指令数、参数数、局部变量大小和出/入边数)的数值滤波器和KNN算法,并在一定次数的迭代后终止该算法。

         Discovre在DD-WRT路由器、Netgear Readynas和Android ROM映像的固件映像上进行了测试。 

(2)Genius

        受Discovre的启发,Genius利用在多个CPU体系结构中一致的统计和结构特征,并用属性集标记CFG中的每个基本块来构造属性控制流图(ACFG)。

        为了执行有效的搜索过程,使用谱聚类将ACFGs转换成码本,并使用高级嵌入和局部敏感散列(LSH)进一步编码。 然而,作者指出,创建码本是烧钱的。

         其对来自26个不同供应商的8126个固件映像进行了bug搜索,这些供应商包括ATT、Verizon、Linksys、D-Link、Seiki、Polycom和TrendNet。 这包括不同的产品,如IP摄像机、路由器和接入点。

(3)BinARM

        基于从粗到细的检测方法的多级检测引擎BINARM,以有效地识别智能电网中智能电子设备的漏洞函数。

        在第一阶段,从给定函数中剔除具有一定欧氏距离(基于偏度、峰度和图能量)的候选函数。

        第二阶段通过利用概率密度函数和TLSH来删除具有不同执行路径的候选函数。

         最后,利用加权Jaccard相似度和匈牙利算法进行模糊图匹配来识别易损函数。

2.2 基于数据流的方法

        基于数据流的方法通常通过分析特定的读写、输入/输出对、变量位置等来观察数据流。 然而,现有的基于数据流的解决方案大多不能大规模应用。 

现有工作:

(1)Multimh

        Multimh从源代码和程序二进制文件中以子图的形式导出错误签名,以识别多个CPU架构上的易受攻击的功能。

        首先,使用 VEX-IR将汇编指令提升为类似 RISC 的表达式以获得赋值公式,然后利用 Z314 定理证明器将赋值公式简化为 S-Expressions。

        其次,通过使用随机的具体输入值对分配公式的输入/输出行为进行采样,以捕获基本块语义。

        之后,使用工具MinHash降低两个基本块之间的相似性度量的复杂度。

        最后,为了将整个签名与给定的目标函数匹配,提出了一种贪心但局部最优的图匹配算法,称为最佳命中扩展(BHB)。BHB 算法首先执行基本块匹配,并使用匈牙利方法(无回溯)进一步探索直接邻域节点,以识别额外的最佳匹配。 然而,所提出的方法在大规模上并不实用,因为 k-MinHash 会显着降低性能。

(2)FIRMUP

        另一种称为 FirmUp 的方法通过考虑函数之间的关系来识别固件映像中的漏洞该函数。

        首先将函数分解为基本块,然后对基本块进行切片以获得链。

        此外,编译器优化器和规范化器用于将语义等价的链转换为规范形式(句法形式)。

        函数共享相同的链越多,它们就越相似。

        为了提高准确性,利用称为 Ehrenfeucht-Fraïssé 的来回博弈算法来执行相邻函数的匹配,从而扩展更合适的部分匹配。  

(3) XMATCH

        XMATCH 从二进制代码函数构建条件公式,其中指令使用 McSema15 转换到 IR。 条件公式对 CFG 结构和 CPU 架构变化具有鲁棒性。  

        XMATCH 同时利用数据依赖和条件检查,可以检测错误的数据依赖和不存在或不正确的条件检查。

2.3 基于距离的方法

        基于距离的方法为一个函数提取不同的特征集,然后对所选特征应用各种相似度度量以找到匹配对。

现有工作:

(1)Gemini

        Gemini是一款基于神经网络模型的跨体系结构二进制码相似性方法。

        它首先提取带有手动选择特征的控制流图,称为属性控制流图(ACFG),然后使用Structure2vec结合连体结构来生成两个彼此接近的相似函数的图嵌入。

        Gemini通过深度学习引入嵌入,极大地改善了多平台CPU架构上的二进制函数指纹识别。

        然而,由Gemini生成的嵌入主要依赖于统计特征,而没有考虑它们之间的关系以及这些特征所表示的指令集。报告的漏洞识别准确率约为82%,反映了这些特征选择应用于漏洞检测问题的局限性。

(2)VulSeeker17

        该工具提取了标记的语义流图 (LSFG),该图将CFG与DFG相结合,然后提出了一种语义感知的深度神经网络模型来生成函数嵌入。最后,余弦相似度用于测量两个函数之间的相似度。

(3)αDIFF

        该方法提取函数代码(原始字节)、函数调用和函数的导入函数,以执行跨版本二进制代码相似性检测。

        然后使用卷积神经网络 (CNN) 和连体网络将函数代码转换为嵌入。 计算三个距离,包括函数间距离、函数内距离和模块间距离。

        最后,测量从给定函数到存储库中易受攻击函数的总距离。 

三 静态分析方法对比

        对现有作品的全面评估由于缺乏数据集和确切的固件图像很难进行。 但是,如果根据每个解决方案在方法、实施和评估方面提供的信息进行定性比较。

         表 5 和表 6 总结了本研究的结果:

 

 探讨

首先,文献中存在几个特征,这些特征被证明可以显著提高漏洞检测解决方案的效率和准确性。可以看出,语义和结构特征是最常用的特征。

第二,没有单一的解决方案来识别漏洞函数的。其中,基于数据流的方法是固件映像漏洞检测的最佳犯法。最近,使用DNN和NLP的基于距离的方法显示了跨体系结构漏洞检测的最佳结果。

第三,过滤过程是克服可伸缩性问题的一种很有前途的解决方案。然而,应仔细设计和全面评估这些滤波方法,以确保准确性。

第四,代码相似性解决方案都无法识别未知漏洞。

最后,尽管MinHashing和LSH被用于函数匹配,但由于其对于具有大而复杂的控制流图的函数的时间复杂度,该类别下的现有工作在大规模上是不实用的。

总之,大多数最近的基于静态的代码相似性解决方案在x86、ARM和MIPS架构上采用基于数据流的方法,用于使用GCC编译器编译的基于Linux的固件映像。

局限性

检测未知漏洞

        大多数静态解决方案为函数定义模式/签名,然后执行函数匹配。因此,已知的易受攻击的函数存储在存储库中,并通过识别与它们的任何匹配项,发现易受攻击的函数。但是,可能有一些具有未知漏洞的函数无法以这种方式识别。

        通过使用数据流和动态分析可以识别未知漏洞。

检测运行时漏洞

        静态方法无法检测到可以在执行期间被利用的漏洞。例如,由于缺乏执行语义检查或在网络活动的情况下,无法检测到运行时面向数据的漏洞利用,因为这些信息是在运行时过程中提供的。

使用过滤提高扩展性

        静态分析方法的可扩展性问题 已通过过滤过程得到一定程度的解决。 在此过程中,极有可能不相似或不相关的功能将被排除在分析之外。 因此,过滤过程最小化搜索空间以更有效地静态识别漏洞,并在动态分析的情况下提供更好的代码覆盖率。 但是,过滤过程可能会影响准确性。 因此,检查所提出的过滤过程有助于更好地了解每种方法的优缺点,并进一步提出新的高效和准确的过滤技术。

缺乏语义洞察力和重放漏洞

        静态方法提供了具有相对较高误报率的潜在易受攻击函数的列表。 因此,需要人工验证获得的漏洞结果。 这些技术不提供有关如何触发已发现漏洞以进行进一步调查和重放攻击的任何信息 。因此,可以采用其他方法(例如,符号执行)来产生可偿还的输入以验证错误并进一步提供有关执行原因和代码相应部分的语义洞察。 然而,可以采用静态方法来克服纯动态分析和符号执行技术的可扩展性问题。

生成漏洞签名

        现有的方法大多是为每个漏洞函数提供不同表示和语义层次的特定模式,然后采用匹配技术或相似性度量来识别它。为每个漏洞(例如,缓冲区溢出)提供通用签名,而不是与已经具有特定漏洞的函数进行匹配,这是未来的发展方向之一。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/331227
推荐阅读
相关标签
  

闽ICP备14008679号