文献综述或调研报告通用漏洞挖掘技术根据分析对象主要分为两大类: 基于源代码的漏洞挖掘和基于二进制的漏洞挖掘[1]。基于源代码的分析通常采用静态分析方案, 先建立特定漏洞检测规则, 并采用数据流分析、污点分析、符号执行等技术完成相应规则检测, 从而实现漏洞的挖掘。由于二进制代码通常是可执行的, 因此基于二进制的方案分为静态、动态、动静结合的。静态二进制分析方案需要首先将二进制代码转换成汇编代码, 或是进一步转换成统一表示的中间语言。之后可以通过基于模式的漏洞分析或是二进制代码比对技术实现静态的漏洞挖掘。动态二进制分析方案主要是采用模糊测技术。根据输入制导的方式可分为白盒、灰盒以及黑盒测试。动静结合的方案主要将静态分析的结果用于辅助动态测试。由于物联网设备存在硬件资源受限、硬件复杂异构, 代码、文档未公开的问题, 物联网设备的漏洞挖掘存在较大的挑战硬件资源受限性: 通用动态二进分析技术需要在运行程序外围实施监控分析。由于物联网设备存储资源(存储)的受限性, 无法部署相关的分析模块,导致动态分析技术无法适用。同时硬件 CPU 的计算能力有限, 会造成动态分析性能下降。硬件的复杂异构: 一方面, 物联网设备 CPU 架构与通用平台不同, 导致程序指令集上存在差异性。通用软件的指令架构通常是 X86 或 X86_64。而物联网程序通常采用 ARM、MIPS、PowerPC 等嵌入式架构。因此直接基于通用 CPU 指令汇编的静态分析方案不再适用。另一方面, 物联网设备外围 I/O 硬件存在多样化, 增加动态分析技术的适配难度。代码、文档未公开: 对于通用软件, 可以对源代码或者二进制程序进行分析以挖掘漏洞。而对于物联网设备而言, 大多数程序均为定制的商业化程序, 通常只能将设备固件作为分析对象, 只有少量设备有相应的源代码以用于分析。因此, 大量源代码分析技术不再适用于物联网设备漏洞挖掘。另外固件的组织形式和数据内容也区别于通用程序, 因此基于二进制的静态分析技术也不能直接使用。物联网设备自身的特点不仅为漏洞挖掘带来挑战, 同时也带来新的机遇系统交互的丰富性: 虽然是对物联网设备进行漏洞挖掘, 但物联网设备通常会与终端、云等系统进行交互, 因此设备本身存在更多的攻击面。对于动态二进制分析方案, 可以充分利用外部交互系统的信息, 对新的攻击面的进行测试分析。组件代码的大量复用: 物联网设备程序在开发的过程中, 为了节省开发成本, 大量使用开源的第三方库, 致使大量第三方组件的漏洞也存在于物联网设备中。之前基于二进制比对的静态分析技术主要是通过不同层次信息(控制流、程序块、指令级)的差异性来发现安全漏洞, 而现在可以通过不同层次信息的相似性来挖掘同源漏洞。漏洞类型的趋同性: 通用软件漏洞类型包含内存破坏类(栈溢出、堆溢出、空指针应用、二次释放等)、输入验证类(命令注入等)、配置错误类等。漏洞存在的位置可以是在内核、驱动、用户态服务程序中。而对于含有操作系统的物联网设备固件来说, 同样存在这些类型的漏洞。因此无论是静态二进制还是动态二进制分析技术, 通用的漏洞检测规则仍然适用于物联网设备固件和程序。[2]通用静态程序分析技术的分析对象是源代码或二进制代码。然而, 由于物联网设备程序是商业程序, 很少有厂商公开源代码和文档, 通常只能获取固件以用于静态分析。固件是物联网设备中的软件系统, 实现对设备特定硬件底层的控制。固件通常包含操作系统、文件系统、用户程序, 或者本身就是一个可执行程序。而本项目中我们所采用的是有奇安信所提供的一百个固件数据集。因此, 静态程序分析技术从物联网设备固件开始, 通过逆向设备固件, 建立漏洞模型, 并利用程序分析技术完成漏洞挖掘。在物联网设备数量和种类呈爆炸式增长的趋势下, 静态漏洞挖掘方法对设备固件代码采用统一的中间表达, 能够有效规避硬件复杂性、架构多样性带来的挑战。根据当前的静态分析工作, 整个分析流程可以分为两个步骤: 目标程序提取与信息恢复和基于程序分析的漏洞发现。 步骤一是从固件中提取出待分析的目标程序, 并恢复出目标程序的语法、结构信息。步骤二是建立漏洞分析规则, 基于已获得的程序信息, 通过程序分析技术, 实现漏洞的发现。此外, 符号执行技术能够有效辅助静态分析。从固件获取开始, 根据固件的不同类型, 需要选择性的完成程序集提取、目标程序提取、程序表示、执行信息恢复等分析步骤。固件获取: 该步骤通过多种方式获得固件以用于后续分析。获取方式主要分为两大类: 直接从物联网设备中提取, 或是从厂商的官网进行下载。对于第一大类, Vasile 等[3]总结了两种方式。第一种是通过UART 或 JTAG 硬件调试接口登入系统并读取内存, 从而恢复出固件内容; 第二种是直接利用读写器完成 flash 芯片内固件的直接提取。固件格式分析: 该步骤分析固件的组织形式和数据内容。固件按照组织形式通常分为两类: 包含操作系统的固件和不包含操作系统的固件。在包含操作系统的固件中, 大部分设备功能由用户程序完成, 系统调用操作、程序加载过程、库函数调用均有规范的定义。其中, 操作系统可以是通用操作系统(如定制化的 Linux), 也可以是特定嵌入式操作系统(如实时操作系统 VxWorks)。在不包含特定操作系统的固件中, 固件直接工作在设备上, 包含了简单的任务调度等类操作系统功能。无论是哪一类型的固件, 首先需要判断固件是否被压缩。若固件压缩, 需先解压, 然后再进一步分析。固件程序提取技术: 该步骤是从包含操作系统的固件中提取所有的文件和程序。对包含操作系统的固件, 由于操作系统和文件系统通常都在头部含有特征码或特征字符串, 因此可以通过基于签名匹配的方式识别出操作系统镜像和文件系统, 并进一步对文件系统进行解压, 提取出所有文件和程序。目标程序分析提取: 对含有操作系统的固件, 该步骤对提取出的所有程序和文件集合, 进一步提取出待分析的目标程序。当前, 目标程序的提取主要是通过搜寻特定文件名实现。若目标程序是 Web 服务程序, 只需搜索文件名包含 http 的文件, 即可找到目标程序。这种方法通常直接且有效, 但对于大规模固件的目标程序提取, 具有较低的召回率。Thomas[4]等提出基于半监督学习的固件中二进制程序功能的分类器, 能够对 cron、dhcp、ftp、ntp-client、nvramget-set、ping、tcp、telnet、upnp、web-server 十类服务程序在零误报率的条件下实现96.45%的识别精确率。该工作的数据集仅包含100个固件, 无法证明在大规模数据集上的有效性。因此, 大规模固件的特定目标服务程序提取技术仍需深入研究。程序表示技术: 该步骤是将二进制代码以中间语言或汇编等形式表示。无论是对于无操作系统的固件或是待分析的目标服务程序, 均需将二进制转换成汇编代码。有时为了屏蔽汇编指令格式的差异性, 需进一步转化为统一的中间语言。此外, 还需提取出程序的控制流、函数调用、字串常量信息等信息。目前IDA pro[5]可以支持 X86、ARM、MIPS、PowerPC等多种指令格式二进制汇编代码的转换, 涵盖大量物联网设备的指令集。同时可以恢复出物联网设备服务程序和无操作系统固件的控制流, 提取函数调用关系、字符串引用、地址访问等信息。Shoshitaishvili等提出的Angr工具[6], 可以将目标程序转化为统一的 VEX 中间语言用于进一步分析。执行信息恢复技术: 该步骤将恢复程序的加载地址、入口地址等执行信息。对于包含操作系统的固件, 其目标服务程序的文件格式(如广泛采用Linux 下的 ELF 可执行文件格式)通常是标准、公开的, 逆向技术已经相当成熟。而对于无操作系统的固件程序, 由于缺少固件执行的描述信息, 导致程序信息恢复不完整, 无法进一步实现精准的程序分析。缺失的信息包括: (1)固件运行时的加载地址。这将导致很多跳转无法被解析; 即使已恢复出指令信息, 控制流信息仍不完整。(2)程序入口地址。这将导致无法深入分析。目前, 目标程序提取与信息恢复技术能够有效解决包含操作系统的物联网设备固件的分析。从固件解压, 文件系统解析, 可执行程序解析到可执行程序的逆向, 技术基本上已经成熟。而对于无操作系统设备固件分析, 整个固件就是特殊的可执行程序, 对该类固件的分析仍处于起步阶段。在目标程序提取与信息恢复之后, 通过建立漏洞分析规则, 并结合静态程序分析技术, 实现漏洞的挖掘。除了通用漏洞类型(如污点类漏洞), 物联网设备漏洞挖掘更关注特定漏洞类型和模块, 如硬编码、认证绕过等后门漏洞。该漏洞类型属于物联网设备特定漏洞, 通常为了方便设备调试人员进入系统或进行特权操作。其在物联网设备上普遍存在, 而在通用程序上较为少见。针对硬编码漏洞类型, Thomas[7]等提出基于静态数据分析的漏洞挖掘方法。该工作首先识别出程序中的静态数据比对函数, 通过提取函数特征并对静态数据比对函数进行建模来识别。接着通过程序控制流分析技术来判定静态数据比对的重要性(根据它影响代码块的独特性), 之后进一步评估出函数的重要性。通过进一步对重要性函数的静态分析, 发现了硬编码的认证后门漏洞, 并恢复出 FTP、SOAP 协议的重要指令集。该工作具有很强的实用性, 然而在后门漏洞挖掘与基于文本的协议指令恢复的这两个应用中, 均不能保证准确性和召回率。因此, 该方案在大规模测试中的适用性无法得到保证。为了进一步识别物联网设备固件程序中的后门, Thomas[8]利用半监督学习的方法, 构造了识别固件中二进制功能的分类器。并通过自定义二进制函数功能描述语言, 识别二进制中的非预期功能(后门)。实验表明有96.45%的二进制功能的识别准确率, 并在Tenda设备中挖掘出后门漏洞。针对认证绕过漏洞类型, Shoshitaishvili等[9]提出基于程序分析的物联网设备认证绕过漏洞的挖掘方法。首先, 该工作人为定义程序特权点(包括未认证的情况下不能输出的数据、未认证情况下不可执行的系统操作、对内存绝对地址的访问、人工分析出的相关特权函数)。在此基础上, 构建固件代码的控制流、数据依赖、控制依赖图, 然后基于切片技术生成到特权点的路径, 并采用符号执行技术求解路径条件, 从而发现物联网设备认证绕过漏洞。该工作采用切片技术对程序路径进行简化, 使符号执行分析有较高的分析性能。然而, 该工作无法解决程序被混淆之后的分析难题。针对通用污点类漏洞类型, Cheng等[10]提出物联网设备固件污点类漏洞的检测方法, 主要通过函数分析提取变量描述、定义对、数据类型等信息, 并解决函数数据流分析、指针别名分析、数据结构恢复等难题。该工作发现了8个已知漏洞和13个 0day漏洞, 且在时间开销上优于Angr。针对协议解析模块, Cojocar等[11]首次提出基于协议解析模块识别的物联网设备漏洞挖掘方法。该工作通过协议解析模块离散特征的提取以及分类器的构造, 实现协议解析模块的精确识别, 并聚焦于该类模块的漏洞挖掘, 发现 GPS 接收器、电表、硬盘驱动、程序逻辑控制器(PLC)多类型物联网设备的漏洞。目前基于程序分析的漏洞发现技术能够有效的针对特定漏洞类型(硬编码、认证绕过、污点类)和模块(协议解析模块)。然而这些研究工作大多需要人工辅助, 自动化程度不足。此外, 研究工作的分析对象仍然是用户程序。在针对物联网设备特定实时操作系统方面, 仍然缺少相应的漏洞挖掘工作。当前的物联网设备的漏洞挖掘技术在静态分析、动态模糊测试、同源性分析技术上都有一定的进展。其中, 静态分析技术能够有效解决固件的解析, 以及固件中通用漏洞的分析问题。但对于物联网设备特定漏洞的高效分析, 仍然缺乏深入的思考和探究。此外, 对于无操作系统和包含特定嵌入式操作系统的固件, 仍然缺少系统性的分析和研究。对于模糊测试技术, 目前能够实现部分设备(如路由器、网络摄像头)固件的高效仿真和灰盒测试, 从而快速发现漏洞。但对于整个物联网设备生态, 目前的模糊测试技术和工具仍然在输入生成、仿真、监控、异常检测等各个方面存在局限性。对于同源性分析技术, 目前的技术已支持大规模固件的多层次关联, 从而实现同源漏洞的发现。之后的发展方向应该是针对特定漏洞类型, 有效提取特征并进行编码, 从而实现特定类型同源漏洞的精准, 快速发现。在这里总结以前解决二进制代码相似性检测问题的主要方法特别是依赖于控制流图的跨架构方法Pewny等人提出了第一个有效的基于图匹配的跨架构相似性检测技术[12]。他们的方法是通过跟踪二元函数中的输入/输出操作并将它们用作控制流图中的节点特征来工作的。然后它使用图形匹配来单独比较图形。为了提供一种更有效的方法埃施韦勒等人提出依靠简单的特征——因此提取更快——如指令总数和算术指令数[13]。然而他们的方法仍然依赖于缓慢的图形匹配算法。冯等人借用了图像处理的技术并将其应用到图形中进行缺陷检测[14]。他们的方法被称为Genius依靠无监督技术从图中提取嵌入并使用位置敏感哈希LSH在可扩展的时间内执行嵌入搜索。这种方法的主要缺点是它依赖于二分图匹配来学习它的嵌入函数。这仍然是非常低效的并且在能够计算嵌入之前需要离线阶段的训练。这防止了模型被频繁地更新例如考虑新发现的漏洞。Phan等人[15]提出除了最大池以外还可以使用基于图形的CNN来计算图形嵌入。他们的方法使用在CFG中有固定感受野的CNN。在他们的方法中感受域内的节点被不同地对待无论它们是传出、传入还是当前节点因为它们被分配了不同的过滤器。这增加了参数的数量并导致潜在的过拟合。他们想要分类一个程序是否可以无错误地运行或者它不能编译或者它有语法问题。与上述方法类似Massarelli等人[16]提出了一种基于消息传递神经网络的图嵌入模型。这是基于word2vec完成的其中每个指令被视为一个单词整个函数被视为一个文档。SimInspector[17]是另一种旨在了解CFG节点特征的方法。他们的方法包括三个步骤。首先指令嵌入的构造类似于。第二步使用BiLSTM构建CFG节点的特征其中输入是指令嵌入。最后作者使用structure2vec[18]从BiLSTM获得的节点特征构建图嵌入。丁等人[19]旨在构建“段落”嵌入其中段落嵌入捕获汇编函数及其CFG的语义和结构。首先从每个CFG他们识别可能的执行路径例如通过使用CFG上的随机执行。CFG的执行路径被认为是句子它们一起构成一个段落。然后可以使用word2vec的改进版本构建段落嵌入该版本可以为段落构建嵌入。因为他们的方法不使用图嵌入模型所以它不能直接捕获CFG中节点之间的关系。虽然执行路径在某种程度上可以捕捉到这些关系但它们只是近似值。Xu等人使用监督学习技术和深度神经网络来获得嵌入该嵌入在数据上学习一些相似性的概念[20]。他们的方法称为Gemini依赖于神经网络并使用structure2vec计算图形嵌入。使用暹罗网络对模型进行端到端训练。FuncNe[21]是一种类似于Gemini的方法因为它使用structure2vec 作为底层图形嵌入模型。然而FuncNet使用三重损失以端到端的方式学习模型。与Genius相比Gemini不依赖昂贵的图匹配这使得它的训练速度更快(以小时为单位)。此外嵌入函数是一个神经网络可以快速重新训练以便考虑新数据或相似图形定义的差异。它还对相同的数据给出了更准确的结果并且计算图形嵌入的速度是Genius的380倍以上。李等人提出扩展图形神经网络(GNN)模型进行相似性学习[22]。他们的新图形匹配网络通过跨图形注意机制获得相似性分数以关联跨图形的节点并识别差异。它在一个流行的开源视频处理软件生成的数据集上提供了非常好的准确性。然而它只按对匹配图即将一对图作为输入并返回相似性得分作为输出这显著地降低了该方法的可扩展性。宋等人[23]想从正在运行的系统的内存快照中对内核对象进行分类。识别内核对象对于识别攻击是否正在发生非常重要。他们构建了一个内存图该图捕捉内存段的指向关系及其相邻关系。他们专门为内存图设计了一个GNN架构用于捕获节点特征、节点关系和时间信息。除了前面提到的相关学术研究Google Project Zero团队的一篇博客文章展示了二进制代码相似性检测对于支持bug猎人的实用价值。在他们的工作中谷歌的团队开发了一个Apache许可的C工具包以在二进制可执行文件中找到(易受攻击的)第三方库函数的静态链接副本。所提出的方法使用线性函数(基于SimHashing)来散列分解的函数保留了函数相似性的一些概念。[24]参考文献吴世忠, 郭涛, 董国伟, 张普含, “软件漏洞分析技术, ”科学出版社, 2014.郑尧文,文辉,程凯,等. 物联网设备漏洞挖掘技术研究综述[J]. 信息安全学报,2019,4(5):61-75. DOI:10.19363/J.cnki.cn10-1380/tn.2019.09.06.Sebastian Vasile, David Oswald, and Tom Chothia, “Breaking All the Things—A Systematic Survey of Firmware Extraction Techniques for IoT Devices,” inSeventeenth Smart Card Research and Advanced Application Conference (CARDIS’18), pp. 171-185, 2018.Tool for Hidden Functionality Detection in Firmware,” inInternational conference on detection of intrusions and malware, and vulnerability assessment(DIMVA’17), pp. 279-300, 2017.“Ida: About - hex-ray,” https://www.hex-rays.com/products/ida/ index.shtml.Yan Shoshitaishvili, Ruoyu Wang, Christopher Salls, Nick Stephens, Mario Polino, Audrey Dutcher, John Grosen, Siji Feng, Christophe Hauser, Christopher Kruegel, and Giovanni Vigna, “SoK: (State of) The Art of War: Offensive Techniques in Binary Analysis,” inProc. of IEEE Symposium on Security and Privacy (SP’16), pp. 138-157, 2016.Sam L. Thomas, Tom Chothia, Flavio D. Garcia, Stringer: Measuring the Importance of Static Data Comparisons to Detect Backdoors and Undocumented Functionality.European Symposium on Research in Computer Security (ESORICS‘17), pp. 513-531, 2017.Sam L. Thomas, Flavio D. Garcia, Tom Chothia, “HumIDIFy: A Tool for Hidden Functionality Detection in Firmware,” inInternational conference on detection of intrusions and malware, and vulnerability assessment(DIMVA’17), pp. 279-300, 2017.Yan Shoshitaishvili, Ruoyu Wang, Christophe Hauser, Christopher Kruegel, and Giovanni Vigna, “Firmalice-automatic detection of authentication bypass vulnerabilities in binary fifirmware,” inNetwork and Distributed System Security Symposium (NDSS’15), 2015.Kai Cheng, Qiang Li, Lei Wang, Qian Chen, Yaowen Zheng, Limin Sun, and Zhenkai Liang, “DTaint: Detecting the Taint-Style Vulnerability in Embedded Device Firmware,” inIEEE/IFIP International Conference on Dependable Systems and Networks (DSN’18), pp. 430-441, 2018.Lucian Cojocar, Jonas Zaddach, Roel Verdult, Herbert Bos, Auré-lien Francillon, and Davide Balzarotti, “PIE: Parser identifification in embedded systems,” inAnnual Computer Security Applications Conference (ACSAC’15), 2015.J. Pewny, B. Garmany, R. Gawlik, C. Rossow, and T. Holz, “Cross-Architecture Bug Search in Binary Executables,” in2015 IEEE Symposium on Security and Privacy. San Jose, CA: IEEE, May 2015, pp. 709–724. [Online]. Available: https://ieeexplore.ieee.org/document/7163056/S. Eschweiler, K. Yakdan, and E. Gerhards-Padilla, “discovRE: Effificient Cross-Architecture Identifification of Bugs in Binary Code,” inProceedings 2016 Network and Distributed System Security Symposium. San Diego, CA: Internet Society, 2016. [Online]. Available: https://www.ndss-symposium.org/wp-content/uploads/2017/09/ discovre-effificient-cross-architecture-identifification-bugs-binary-code. PdfQ. Feng, R. Zhou, C. Xu, Y. Cheng, B. Testa, and H. Yin, “Scalable Graph-based Bug Search for Firmware Images,” inProceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. Vienna Austria: ACM, Oct. 2016, pp. 480–491. [Online]. Available: https://dl.acm.org/doi/10.1145/2976749.2978370A. V. Phan, M. Le Nguyen, and L. T. Bui, “Convolutional neural networks over control flflow graphs for software defect prediction,” in2017 IEEE 29th International Conference on Tools with Artifificial Intelligence (ICTAI). IEEE, 2017, pp. 45–52.L. Massarelli, G. A. Di Luna, F. Petroni, L. Querzoni, and R. Baldoni, “Investigating graph embedding neural networks with unsupervised features extraction for binary analysis,” inProceedings of the 2nd Workshop on Binary Analysis Research (BAR), 2019.X. Zhu, L. Jiang, and Z. Chen, “Cross-platform binary code similarity detection based on nmt and graph embedding,”Mathematical Biosciences and Engineering, vol. 18, no. 4, pp. 4528–4551, 2021.H. Dai, B. Dai, and L. Song, “Discriminative Embeddings of Latent Variable Models for Structured Data,” p. 10, 2016.S. H. Ding, B. C. Fung, and P. Charland, “Asm2vec: Boosting static representation robustness for binary clone search against code obfuscation and compiler optimization,” in2019 IEEE Symposium on Security and Privacy (SP). IEEE, 2019, pp. 472–489.X. Xu, C. Liu, Q. Feng, H. Yin, L. Song, and D. Song, “Neural Network-based Graph Embedding for Cross-Platform Binary Code Similarity Detection,” inProceedings of the 2017 ACM SIGSAC “ Conference on Computer and Communications Security. Dallas Texas USA: ACM, Oct. 2017, pp. 363–376. [Online]. Available: https://dl.acm.org/doi/10.1145/3133956.3134018M. Luo, C. Yang, X. Gong, and L. Yu, “Funcnet: A euclidean embedding approach for lightweight cross-platform binary recog[1]nition,” inInternational Conference on Security and Privacy in Communication Systems. Springer, 2019, pp. 319–337.Y. Li, C. Gu, T. Dullien, O. Vinyals, and P. Kohli, “Graph matching networks for learning the similarity of graph structured objects,” inInternational conference on machine learning. PMLR, 2019, pp. 3835–3845.W. Song, H. Yin, C. Liu, and D. Song, “Deepmem: Learning graph neural network models for fast and robust memory forensic analysis,” inProceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security, 2018, pp. 606–618.V. Cochard, D. Pfammatter, C. T. Duong and M. Humbert, Investigating Graph Embedding Methods for Cross-Platform Binary Code Similarity Detection, 2022 IEEE 7th European Symposium on Security and Privacy (EuroSP), Genoa, Italy, 2022, pp. 60-73, doi: 10.1109/EuroSP53844.2022.00012.
本科毕设开题报告 文献综述(或调研报告)
文献综述或调研报告通用漏洞挖掘技术根据分析对象主要分为两大类: 基于源代码的漏洞挖掘和基于二进制的漏洞挖掘[1]。基于源代码的分析通常采用静态分析方案, 先建立特定漏洞检测规则, 并采用数据流分析、污点分析、符号执行等技术完成相应规则检测, 从而实现漏洞的挖掘。由于二进制代码通常是可执行的, 因此基于二进制的方案分为静态、动态、动静结合的。静态二进制分析方案需要首先将二进制代码转换成汇编代码, 或是进一步转换成统一表示的中间语言。之后可以通过基于模式的漏洞分析或是二进制代码比对技术实现静态的漏洞挖掘。动态二进制分析方案主要是采用模糊测技术。根据输入制导的方式可分为白盒、灰盒以及黑盒测试。动静结合的方案主要将静态分析的结果用于辅助动态测试。由于物联网设备存在硬件资源受限、硬件复杂异构, 代码、文档未公开的问题, 物联网设备的漏洞挖掘存在较大的挑战硬件资源受限性: 通用动态二进分析技术需要在运行程序外围实施监控分析。由于物联网设备存储资源(存储)的受限性, 无法部署相关的分析模块,导致动态分析技术无法适用。同时硬件 CPU 的计算能力有限, 会造成动态分析性能下降。硬件的复杂异构: 一方面, 物联网设备 CPU 架构与通用平台不同, 导致程序指令集上存在差异性。通用软件的指令架构通常是 X86 或 X86_64。而物联网程序通常采用 ARM、MIPS、PowerPC 等嵌入式架构。因此直接基于通用 CPU 指令汇编的静态分析方案不再适用。另一方面, 物联网设备外围 I/O 硬件存在多样化, 增加动态分析技术的适配难度。代码、文档未公开: 对于通用软件, 可以对源代码或者二进制程序进行分析以挖掘漏洞。而对于物联网设备而言, 大多数程序均为定制的商业化程序, 通常只能将设备固件作为分析对象, 只有少量设备有相应的源代码以用于分析。因此, 大量源代码分析技术不再适用于物联网设备漏洞挖掘。另外固件的组织形式和数据内容也区别于通用程序, 因此基于二进制的静态分析技术也不能直接使用。物联网设备自身的特点不仅为漏洞挖掘带来挑战, 同时也带来新的机遇系统交互的丰富性: 虽然是对物联网设备进行漏洞挖掘, 但物联网设备通常会与终端、云等系统进行交互, 因此设备本身存在更多的攻击面。对于动态二进制分析方案, 可以充分利用外部交互系统的信息, 对新的攻击面的进行测试分析。组件代码的大量复用: 物联网设备程序在开发的过程中, 为了节省开发成本, 大量使用开源的第三方库, 致使大量第三方组件的漏洞也存在于物联网设备中。之前基于二进制比对的静态分析技术主要是通过不同层次信息(控制流、程序块、指令级)的差异性来发现安全漏洞, 而现在可以通过不同层次信息的相似性来挖掘同源漏洞。漏洞类型的趋同性: 通用软件漏洞类型包含内存破坏类(栈溢出、堆溢出、空指针应用、二次释放等)、输入验证类(命令注入等)、配置错误类等。漏洞存在的位置可以是在内核、驱动、用户态服务程序中。而对于含有操作系统的物联网设备固件来说, 同样存在这些类型的漏洞。因此无论是静态二进制还是动态二进制分析技术, 通用的漏洞检测规则仍然适用于物联网设备固件和程序。[2]通用静态程序分析技术的分析对象是源代码或二进制代码。然而, 由于物联网设备程序是商业程序, 很少有厂商公开源代码和文档, 通常只能获取固件以用于静态分析。固件是物联网设备中的软件系统, 实现对设备特定硬件底层的控制。固件通常包含操作系统、文件系统、用户程序, 或者本身就是一个可执行程序。而本项目中我们所采用的是有奇安信所提供的一百个固件数据集。因此, 静态程序分析技术从物联网设备固件开始, 通过逆向设备固件, 建立漏洞模型, 并利用程序分析技术完成漏洞挖掘。在物联网设备数量和种类呈爆炸式增长的趋势下, 静态漏洞挖掘方法对设备固件代码采用统一的中间表达, 能够有效规避硬件复杂性、架构多样性带来的挑战。根据当前的静态分析工作, 整个分析流程可以分为两个步骤: 目标程序提取与信息恢复和基于程序分析的漏洞发现。 步骤一是从固件中提取出待分析的目标程序, 并恢复出目标程序的语法、结构信息。步骤二是建立漏洞分析规则, 基于已获得的程序信息, 通过程序分析技术, 实现漏洞的发现。此外, 符号执行技术能够有效辅助静态分析。从固件获取开始, 根据固件的不同类型, 需要选择性的完成程序集提取、目标程序提取、程序表示、执行信息恢复等分析步骤。固件获取: 该步骤通过多种方式获得固件以用于后续分析。获取方式主要分为两大类: 直接从物联网设备中提取, 或是从厂商的官网进行下载。对于第一大类, Vasile 等[3]总结了两种方式。第一种是通过UART 或 JTAG 硬件调试接口登入系统并读取内存, 从而恢复出固件内容; 第二种是直接利用读写器完成 flash 芯片内固件的直接提取。固件格式分析: 该步骤分析固件的组织形式和数据内容。固件按照组织形式通常分为两类: 包含操作系统的固件和不包含操作系统的固件。在包含操作系统的固件中, 大部分设备功能由用户程序完成, 系统调用操作、程序加载过程、库函数调用均有规范的定义。其中, 操作系统可以是通用操作系统(如定制化的 Linux), 也可以是特定嵌入式操作系统(如实时操作系统 VxWorks)。在不包含特定操作系统的固件中, 固件直接工作在设备上, 包含了简单的任务调度等类操作系统功能。无论是哪一类型的固件, 首先需要判断固件是否被压缩。若固件压缩, 需先解压, 然后再进一步分析。固件程序提取技术: 该步骤是从包含操作系统的固件中提取所有的文件和程序。对包含操作系统的固件, 由于操作系统和文件系统通常都在头部含有特征码或特征字符串, 因此可以通过基于签名匹配的方式识别出操作系统镜像和文件系统, 并进一步对文件系统进行解压, 提取出所有文件和程序。目标程序分析提取: 对含有操作系统的固件, 该步骤对提取出的所有程序和文件集合, 进一步提取出待分析的目标程序。当前, 目标程序的提取主要是通过搜寻特定文件名实现。若目标程序是 Web 服务程序, 只需搜索文件名包含 http 的文件, 即可找到目标程序。这种方法通常直接且有效, 但对于大规模固件的目标程序提取, 具有较低的召回率。Thomas[4]等提出基于半监督学习的固件中二进制程序功能的分类器, 能够对 cron、dhcp、ftp、ntp-client、nvramget-set、ping、tcp、telnet、upnp、web-server 十类服务程序在零误报率的条件下实现96.45%的识别精确率。该工作的数据集仅包含100个固件, 无法证明在大规模数据集上的有效性。因此, 大规模固件的特定目标服务程序提取技术仍需深入研究。程序表示技术: 该步骤是将二进制代码以中间语言或汇编等形式表示。无论是对于无操作系统的固件或是待分析的目标服务程序, 均需将二进制转换成汇编代码。有时为了屏蔽汇编指令格式的差异性, 需进一步转化为统一的中间语言。此外, 还需提取出程序的控制流、函数调用、字串常量信息等信息。目前IDA pro[5]可以支持 X86、ARM、MIPS、PowerPC等多种指令格式二进制汇编代码的转换, 涵盖大量物联网设备的指令集。同时可以恢复出物联网设备服务程序和无操作系统固件的控制流, 提取函数调用关系、字符串引用、地址访问等信息。Shoshitaishvili等提出的Angr工具[6], 可以将目标程序转化为统一的 VEX 中间语言用于进一步分析。执行信息恢复技术: 该步骤将恢复程序的加载地址、入口地址等执行信息。对于包含操作系统的固件, 其目标服务程序的文件格式(如广泛采用Linux 下的 ELF 可执行文件格式)通常是标准、公开的, 逆向技术已经相当成熟。而对于无操作系统的固件程序, 由于缺少固件执行的描述信息, 导致程序信息恢复不完整, 无法进一步实现精准的程序分析。缺失的信息包括: (1)固件运行时的加载地址。这将导致很多跳转无法被解析; 即使已恢复出指令信息, 控制流信息仍不完整。(2)程序入口地址。这将导致无法深入分析。目前, 目标程序提取与信息恢复技术能够有效解决包含操作系统的物联网设备固件的分析。从固件解压, 文件系统解析, 可执行程序解析到可执行程序的逆向, 技术基本上已经成熟。而对于无操作系统设备固件分析, 整个固件就是特殊的可执行程序, 对该类固件的分析仍处于起步阶段。在目标程序提取与信息恢复之后, 通过建立漏洞分析规则, 并结合静态程序分析技术, 实现漏洞的挖掘。除了通用漏洞类型(如污点类漏洞), 物联网设备漏洞挖掘更关注特定漏洞类型和模块, 如硬编码、认证绕过等后门漏洞。该漏洞类型属于物联网设备特定漏洞, 通常为了方便设备调试人员进入系统或进行特权操作。其在物联网设备上普遍存在, 而在通用程序上较为少见。针对硬编码漏洞类型, Thomas[7]等提出基于静态数据分析的漏洞挖掘方法。该工作首先识别出程序中的静态数据比对函数, 通过提取函数特征并对静态数据比对函数进行建模来识别。接着通过程序控制流分析技术来判定静态数据比对的重要性(根据它影响代码块的独特性), 之后进一步评估出函数的重要性。通过进一步对重要性函数的静态分析, 发现了硬编码的认证后门漏洞, 并恢复出 FTP、SOAP 协议的重要指令集。该工作具有很强的实用性, 然而在后门漏洞挖掘与基于文本的协议指令恢复的这两个应用中, 均不能保证准确性和召回率。因此, 该方案在大规模测试中的适用性无法得到保证。为了进一步识别物联网设备固件程序中的后门, Thomas[8]利用半监督学习的方法, 构造了识别固件中二进制功能的分类器。并通过自定义二进制函数功能描述语言, 识别二进制中的非预期功能(后门)。实验表明有96.45%的二进制功能的识别准确率, 并在Tenda设备中挖掘出后门漏洞。针对认证绕过漏洞类型, Shoshitaishvili等[9]提出基于程序分析的物联网设备认证绕过漏洞的挖掘方法。首先, 该工作人为定义程序特权点(包括未认证的情况下不能输出的数据、未认证情况下不可执行的系统操作、对内存绝对地址的访问、人工分析出的相关特权函数)。在此基础上, 构建固件代码的控制流、数据依赖、控制依赖图, 然后基于切片技术生成到特权点的路径, 并采用符号执行技术求解路径条件, 从而发现物联网设备认证绕过漏洞。该工作采用切片技术对程序路径进行简化, 使符号执行分析有较高的分析性能。然而, 该工作无法解决程序被混淆之后的分析难题。针对通用污点类漏洞类型, Cheng等[10]提出物联网设备固件污点类漏洞的检测方法, 主要通过函数分析提取变量描述、定义对、数据类型等信息, 并解决函数数据流分析、指针别名分析、数据结构恢复等难题。该工作发现了8个已知漏洞和13个 0day漏洞, 且在时间开销上优于Angr。针对协议解析模块, Cojocar等[11]首次提出基于协议解析模块识别的物联网设备漏洞挖掘方法。该工作通过协议解析模块离散特征的提取以及分类器的构造, 实现协议解析模块的精确识别, 并聚焦于该类模块的漏洞挖掘, 发现 GPS 接收器、电表、硬盘驱动、程序逻辑控制器(PLC)多类型物联网设备的漏洞。目前基于程序分析的漏洞发现技术能够有效的针对特定漏洞类型(硬编码、认证绕过、污点类)和模块(协议解析模块)。然而这些研究工作大多需要人工辅助, 自动化程度不足。此外, 研究工作的分析对象仍然是用户程序。在针对物联网设备特定实时操作系统方面, 仍然缺少相应的漏洞挖掘工作。当前的物联网设备的漏洞挖掘技术在静态分析、动态模糊测试、同源性分析技术上都有一定的进展。其中, 静态分析技术能够有效解决固件的解析, 以及固件中通用漏洞的分析问题。但对于物联网设备特定漏洞的高效分析, 仍然缺乏深入的思考和探究。此外, 对于无操作系统和包含特定嵌入式操作系统的固件, 仍然缺少系统性的分析和研究。对于模糊测试技术, 目前能够实现部分设备(如路由器、网络摄像头)固件的高效仿真和灰盒测试, 从而快速发现漏洞。但对于整个物联网设备生态, 目前的模糊测试技术和工具仍然在输入生成、仿真、监控、异常检测等各个方面存在局限性。对于同源性分析技术, 目前的技术已支持大规模固件的多层次关联, 从而实现同源漏洞的发现。之后的发展方向应该是针对特定漏洞类型, 有效提取特征并进行编码, 从而实现特定类型同源漏洞的精准, 快速发现。在这里总结以前解决二进制代码相似性检测问题的主要方法特别是依赖于控制流图的跨架构方法Pewny等人提出了第一个有效的基于图匹配的跨架构相似性检测技术[12]。他们的方法是通过跟踪二元函数中的输入/输出操作并将它们用作控制流图中的节点特征来工作的。然后它使用图形匹配来单独比较图形。为了提供一种更有效的方法埃施韦勒等人提出依靠简单的特征——因此提取更快——如指令总数和算术指令数[13]。然而他们的方法仍然依赖于缓慢的图形匹配算法。冯等人借用了图像处理的技术并将其应用到图形中进行缺陷检测[14]。他们的方法被称为Genius依靠无监督技术从图中提取嵌入并使用位置敏感哈希LSH在可扩展的时间内执行嵌入搜索。这种方法的主要缺点是它依赖于二分图匹配来学习它的嵌入函数。这仍然是非常低效的并且在能够计算嵌入之前需要离线阶段的训练。这防止了模型被频繁地更新例如考虑新发现的漏洞。Phan等人[15]提出除了最大池以外还可以使用基于图形的CNN来计算图形嵌入。他们的方法使用在CFG中有固定感受野的CNN。在他们的方法中感受域内的节点被不同地对待无论它们是传出、传入还是当前节点因为它们被分配了不同的过滤器。这增加了参数的数量并导致潜在的过拟合。他们想要分类一个程序是否可以无错误地运行或者它不能编译或者它有语法问题。与上述方法类似Massarelli等人[16]提出了一种基于消息传递神经网络的图嵌入模型。这是基于word2vec完成的其中每个指令被视为一个单词整个函数被视为一个文档。SimInspector[17]是另一种旨在了解CFG节点特征的方法。他们的方法包括三个步骤。首先指令嵌入的构造类似于。第二步使用BiLSTM构建CFG节点的特征其中输入是指令嵌入。最后作者使用structure2vec[18]从BiLSTM获得的节点特征构建图嵌入。丁等人[19]旨在构建“段落”嵌入其中段落嵌入捕获汇编函数及其CFG的语义和结构。首先从每个CFG他们识别可能的执行路径例如通过使用CFG上的随机执行。CFG的执行路径被认为是句子它们一起构成一个段落。然后可以使用word2vec的改进版本构建段落嵌入该版本可以为段落构建嵌入。因为他们的方法不使用图嵌入模型所以它不能直接捕获CFG中节点之间的关系。虽然执行路径在某种程度上可以捕捉到这些关系但它们只是近似值。Xu等人使用监督学习技术和深度神经网络来获得嵌入该嵌入在数据上学习一些相似性的概念[20]。他们的方法称为Gemini依赖于神经网络并使用structure2vec计算图形嵌入。使用暹罗网络对模型进行端到端训练。FuncNe[21]是一种类似于Gemini的方法因为它使用structure2vec 作为底层图形嵌入模型。然而FuncNet使用三重损失以端到端的方式学习模型。与Genius相比Gemini不依赖昂贵的图匹配这使得它的训练速度更快(以小时为单位)。此外嵌入函数是一个神经网络可以快速重新训练以便考虑新数据或相似图形定义的差异。它还对相同的数据给出了更准确的结果并且计算图形嵌入的速度是Genius的380倍以上。李等人提出扩展图形神经网络(GNN)模型进行相似性学习[22]。他们的新图形匹配网络通过跨图形注意机制获得相似性分数以关联跨图形的节点并识别差异。它在一个流行的开源视频处理软件生成的数据集上提供了非常好的准确性。然而它只按对匹配图即将一对图作为输入并返回相似性得分作为输出这显著地降低了该方法的可扩展性。宋等人[23]想从正在运行的系统的内存快照中对内核对象进行分类。识别内核对象对于识别攻击是否正在发生非常重要。他们构建了一个内存图该图捕捉内存段的指向关系及其相邻关系。他们专门为内存图设计了一个GNN架构用于捕获节点特征、节点关系和时间信息。除了前面提到的相关学术研究Google Project Zero团队的一篇博客文章展示了二进制代码相似性检测对于支持bug猎人的实用价值。在他们的工作中谷歌的团队开发了一个Apache许可的C工具包以在二进制可执行文件中找到(易受攻击的)第三方库函数的静态链接副本。所提出的方法使用线性函数(基于SimHashing)来散列分解的函数保留了函数相似性的一些概念。[24]参考文献吴世忠, 郭涛, 董国伟, 张普含, “软件漏洞分析技术, ”科学出版社, 2014.郑尧文,文辉,程凯,等. 物联网设备漏洞挖掘技术研究综述[J]. 信息安全学报,2019,4(5):61-75. DOI:10.19363/J.cnki.cn10-1380/tn.2019.09.06.Sebastian Vasile, David Oswald, and Tom Chothia, “Breaking All the Things—A Systematic Survey of Firmware Extraction Techniques for IoT Devices,” inSeventeenth Smart Card Research and Advanced Application Conference (CARDIS’18), pp. 171-185, 2018.Tool for Hidden Functionality Detection in Firmware,” inInternational conference on detection of intrusions and malware, and vulnerability assessment(DIMVA’17), pp. 279-300, 2017.“Ida: About - hex-ray,” https://www.hex-rays.com/products/ida/ index.shtml.Yan Shoshitaishvili, Ruoyu Wang, Christopher Salls, Nick Stephens, Mario Polino, Audrey Dutcher, John Grosen, Siji Feng, Christophe Hauser, Christopher Kruegel, and Giovanni Vigna, “SoK: (State of) The Art of War: Offensive Techniques in Binary Analysis,” inProc. of IEEE Symposium on Security and Privacy (SP’16), pp. 138-157, 2016.Sam L. Thomas, Tom Chothia, Flavio D. Garcia, Stringer: Measuring the Importance of Static Data Comparisons to Detect Backdoors and Undocumented Functionality.European Symposium on Research in Computer Security (ESORICS‘17), pp. 513-531, 2017.Sam L. Thomas, Flavio D. Garcia, Tom Chothia, “HumIDIFy: A Tool for Hidden Functionality Detection in Firmware,” inInternational conference on detection of intrusions and malware, and vulnerability assessment(DIMVA’17), pp. 279-300, 2017.Yan Shoshitaishvili, Ruoyu Wang, Christophe Hauser, Christopher Kruegel, and Giovanni Vigna, “Firmalice-automatic detection of authentication bypass vulnerabilities in binary fifirmware,” inNetwork and Distributed System Security Symposium (NDSS’15), 2015.Kai Cheng, Qiang Li, Lei Wang, Qian Chen, Yaowen Zheng, Limin Sun, and Zhenkai Liang, “DTaint: Detecting the Taint-Style Vulnerability in Embedded Device Firmware,” inIEEE/IFIP International Conference on Dependable Systems and Networks (DSN’18), pp. 430-441, 2018.Lucian Cojocar, Jonas Zaddach, Roel Verdult, Herbert Bos, Auré-lien Francillon, and Davide Balzarotti, “PIE: Parser identifification in embedded systems,” inAnnual Computer Security Applications Conference (ACSAC’15), 2015.J. Pewny, B. Garmany, R. Gawlik, C. Rossow, and T. Holz, “Cross-Architecture Bug Search in Binary Executables,” in2015 IEEE Symposium on Security and Privacy. San Jose, CA: IEEE, May 2015, pp. 709–724. [Online]. Available: https://ieeexplore.ieee.org/document/7163056/S. Eschweiler, K. Yakdan, and E. Gerhards-Padilla, “discovRE: Effificient Cross-Architecture Identifification of Bugs in Binary Code,” inProceedings 2016 Network and Distributed System Security Symposium. San Diego, CA: Internet Society, 2016. [Online]. Available: https://www.ndss-symposium.org/wp-content/uploads/2017/09/ discovre-effificient-cross-architecture-identifification-bugs-binary-code. PdfQ. Feng, R. Zhou, C. Xu, Y. Cheng, B. Testa, and H. Yin, “Scalable Graph-based Bug Search for Firmware Images,” inProceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. Vienna Austria: ACM, Oct. 2016, pp. 480–491. [Online]. Available: https://dl.acm.org/doi/10.1145/2976749.2978370A. V. Phan, M. Le Nguyen, and L. T. Bui, “Convolutional neural networks over control flflow graphs for software defect prediction,” in2017 IEEE 29th International Conference on Tools with Artifificial Intelligence (ICTAI). IEEE, 2017, pp. 45–52.L. Massarelli, G. A. Di Luna, F. Petroni, L. Querzoni, and R. Baldoni, “Investigating graph embedding neural networks with unsupervised features extraction for binary analysis,” inProceedings of the 2nd Workshop on Binary Analysis Research (BAR), 2019.X. Zhu, L. Jiang, and Z. Chen, “Cross-platform binary code similarity detection based on nmt and graph embedding,”Mathematical Biosciences and Engineering, vol. 18, no. 4, pp. 4528–4551, 2021.H. Dai, B. Dai, and L. Song, “Discriminative Embeddings of Latent Variable Models for Structured Data,” p. 10, 2016.S. H. Ding, B. C. Fung, and P. Charland, “Asm2vec: Boosting static representation robustness for binary clone search against code obfuscation and compiler optimization,” in2019 IEEE Symposium on Security and Privacy (SP). IEEE, 2019, pp. 472–489.X. Xu, C. Liu, Q. Feng, H. Yin, L. Song, and D. Song, “Neural Network-based Graph Embedding for Cross-Platform Binary Code Similarity Detection,” inProceedings of the 2017 ACM SIGSAC “ Conference on Computer and Communications Security. Dallas Texas USA: ACM, Oct. 2017, pp. 363–376. [Online]. Available: https://dl.acm.org/doi/10.1145/3133956.3134018M. Luo, C. Yang, X. Gong, and L. Yu, “Funcnet: A euclidean embedding approach for lightweight cross-platform binary recog[1]nition,” inInternational Conference on Security and Privacy in Communication Systems. Springer, 2019, pp. 319–337.Y. Li, C. Gu, T. Dullien, O. Vinyals, and P. Kohli, “Graph matching networks for learning the similarity of graph structured objects,” inInternational conference on machine learning. PMLR, 2019, pp. 3835–3845.W. Song, H. Yin, C. Liu, and D. Song, “Deepmem: Learning graph neural network models for fast and robust memory forensic analysis,” inProceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security, 2018, pp. 606–618.V. Cochard, D. Pfammatter, C. T. Duong and M. Humbert, Investigating Graph Embedding Methods for Cross-Platform Binary Code Similarity Detection, 2022 IEEE 7th European Symposium on Security and Privacy (EuroSP), Genoa, Italy, 2022, pp. 60-73, doi: 10.1109/EuroSP53844.2022.00012.