论文笔记:(Security 22) 关于“二进制函数相似性检测”的调研

个人博客链接


注:部分内容参考自GPT生成的内容

[Security 22] 关于”二进制函数相似性检测“的调研(个人阅读笔记)

论文:《How Machine Learning Is Solving the Binary Function Similarity Problem》(Usenix Security 2022

仓库:https://github.com/Cisco-Talos/binary_function_similarity

动机

二进制函数相似性问题在系统安全研究领域扮演着重要角色,现有技术演变很快。但还没有研究能解答一些重要的研究问题,如:使用相同的数据集和相同的指标对不同的方法进行评估时,它们的比较结果如何?与简单的模糊哈希算法相比,新型机器学习解决方案的主要贡献是什么?不同特征集的作用是什么?不同的方法对不同的任务是否更有效?不同的方法对不同的任务是否更有效?跨架构比较是否比单一架构更难解决?在设计新技术的未来方向上,是否有任何特定的研究方向看起来更有前景?

要回答这些问题,有以下挑战:

  1. 现有研究难以复现或复制先前的结果
  2. 研究结果的不透明性:不同的解决方案通常针对不同的目标定制,使用不同的相似性概念和操作粒度。
  3. 研究方向的不确定性:该领域的研究方向和原因不清晰,研究方法多样且分散

另外,论文在第二章从度量函数相似性的方法和特征表示方法两方面探讨了二进制函数相似性问题

实现的方法

这篇论文挑选方法的标准

  1. 可扩展性和实际应用性
  2. 关注有代表性的方法,而不是具体的论文
  3. 覆盖不同社区:安全、程序语言和机器学习,也考虑工业界
  4. 优先考虑最新趋势

挑选出的方法,根据研究团队和功能相似性,划分如下:

image-20240121161933831

作者从中有些许发现

  1. 有些论文通过比较得到的结论是错误的,比如将跨架构、基于比对函数的方法与单一架构、比对二进制文件的方法进行比较。

  2. 不同领域的论文通常都很封闭,很少与其他领域的论文进行比较。

  3. 一个明显的趋势:随着时间的推移,解决方案的复杂性和机器学习的使用不断增加

从以上挑选的方法中,作者挑选了十个具有可扩展性、代表性和最新性的最先进方法,准备进行评估。方法包括:

  • Bytes fuzzy hashing: Catalog1
  • CFG fuzzy hashing: FunctionSimSearch
  • Attributed CFG and GNN: Gemini
  • Attributed CFG, GNN, and GMN: Li et al. 2019
  • IR, data flow analysis and neural network: Zeek
  • Assembly code embedding: Asm2Vec
  • Assembly code embedding and self-attentive encoder: SAFE
  • Assembly code embedding, CFG and GNN: Massarelli et al., 2019
  • CodeCMR/BinaryAI
  • Trex

以统一的方式实现了评估的各个阶段,包括:

  • 二进制分析(IDA Pro 7.3)

  • 特征提取(a set of Python scripts using the IDA Pro APIs, Capstone , and NetworkX )

  • 机器学习的实现(Tensorflow 1.14, with the only exception of Trex , which was built on top of Fairseq)

创建了两个新数据集:旨在捕捉现实世界软件的复杂性和可变性,同时涵盖二进制函数相似性的不同挑战:(i) 多种编译器系列和版本,(ii) 多种编译器优化,(iii) 多种体系结构和位宽,以及 (iv) 不同性质的软件(命令行实用程序与图形用户界面应用程序)。

确定了六种不同的评估任务:XO、XC、XC+XB、XA、XA+XO、XM。

O:Optimizations,C:Compiler and Compiler Versions,B:Bitness,A:Architecture,M:Mixed

结果与讨论

  1. 对Catalog1和FunctionSimSearch进行了Fuzzy-hashing Comparison:它们在面对多变量变化的任务时,表现有限。

  2. Machine-learning Models Comparison

    论文直接提供的结论如下:

    • 一种机器学习模型,来自 Li 等人的 GNN[40]在六个评估任务中优于所有其他变体,实现了与可扩展性较差的 GMN 版本类似的性能。
    • 其他基于嵌入的模型[45, 49, 60, 76]显示出较低但相似的准确性。
    • Zeek[67]采用直接比较方法,其在处理大型函数时的AUC表现更好。
    • Asm2Vec[14]模型在多个任务中的表现并不优于其他模型。

    此外还在4.5节进行了多方面的讨论。

  3. Vulnerability Discovery Use Case

    • 使用操作码特征的GMN模型表现最佳,但其可扩展性受限。

    • 同时,特定配置下的FSS模型也意外地显示了良好的实用性能,但这种性能并不一定适用于所有配置。

    • 表6包含了Netgear R7000固件中易受攻击函数的实际排名结果,显示即使MRR10值很高,实际排名可能仍然很低。

最后,在5 Discussion部分中,作者回答了开头提出的几个重要的研究问题,比如:

  • 机器学习解决方案与模糊散列方法相比的主要贡献:机器学习模型即使在多个编译变量同时改变时也能达到高准确率,并且能够从大型训练数据集中受益,这些数据集是基于由编译选项定义的可靠基准。

  • 不同特征集的作用

    • 使用基本块特征(例如,ACFG)提供更好的结果,但在精心手工设计的特征和更简单的特征(如基本块操作码的词袋)之间差异很小。
    • 令人惊讶的是,指令嵌入[45]并没有提高GNN模型的性能,但作者认为需要进行广泛测试来评估其他可能的组合。
  • 不同方法在不同任务中的表现

    • 大多数机器学习模型在所有评估任务中表现相似,无论是在相同架构还是跨架构中。
    • 不需要针对特定任务进行训练,因为使用最通用的任务数据(XM)就能达到接近每个任务最佳的性能。但这对于模糊散列方法并不适用。
  • 哪些研究方向更有前途:深度学习模型、GNN与汇编指令编码器的结合、结合中间表示和数据流信息、训练策略和损失函数等补充方面。

更多讨论详见论文


结论

本文进行了首次对超过五年来解决二进制函数相似性问题的研究工作的测量研究。作者识别了该研究领域中的一些挑战,以及这些挑战如何使得有意义的比较变得困难,甚至几乎不可能。本文工作旨在弥合这一差距,并帮助社区在这一研究领域获得更清晰的认识。作者希望通过发布所有的实现、数据集和原始结果,社区将拥有一个起点,以开始构建新的方法,并将其与一个共同的框架进行比较,以更好地辨别哪些新颖的方面实际上改进了现有技术状态,以及哪些方面只是看似如此。

附:部分概念解释

一些评估标准
  1. ROC曲线(Receiver Operating Characteristic Curve)
    • ROC曲线是一个图形工具,用于评估二元分类器的性能。
    • 它过将**真阳性率(True Positive Rate,TPR)假阳性率(False Positive Rate,FPR)**作为横纵坐标来描绘分类器在不同阈值下的性能。
    • ROC曲线下的面积(AUC)用于量化分类器的整体性能。AUC值越接近1,表明分类器的性能越好。
  2. top-n
    • top-n通常用于信息检索和推荐系统中,指的是从一系列项目中选择“最好”的n个项目。
    • 例如,在推荐系统中,如果你想推荐5个最相关的项目,那么这就是一个top-5的任务。
    • 在评估时,通常会查看这些top-n项目中有多少是真正相关或准确的。
  3. MRR10(Mean Reciprocal Rank at 10)
    • MRR是一种评估信息检索系统效果的指标,特别是当查询返回一个项目列表时。
    • MRR10指的是在前10个返回项目中找到第一个正确答案的倒数的平均值。
    • 例如,如果正确的答案在返回列表的第一个位置,其倒数排名是1;如果在第二个位置,其倒数排名是1/2,依此类推。计算所有查询的这个倒数排名的平均值即得到MRR10。
  4. 召回率 (Recall@K)
    • 这个度量标准关注的是模型能够在前K个结果中检索到多少相关项目。
    • 例如,如果一个模型能够在前10个返回的项目中找到所有相关项目,则Recall@10将是100%。
pipeline
  1. Pipeline:
    • 在计算机科学中,pipeline通常指的是一系列数据处理步骤或任务,这些步骤按照特定的顺序组织,每个步骤的输出成为下一个步骤的输入。
    • 在软件工程和数据科学的背景下,pipeline涉及到从原始数据提取、处理、分析到最终产出的整个过程。例如,一个机器学习pipeline可能包括数据清洗、特征提取、模型训练和预测评估等步骤。
  2. Non-trivial Pipelines:
    • “Non-trivial”这个词用来描述那些不简单、复杂或需求高的任务或过程。
    • 当文本中提到“non-trivial pipelines”,它指的是那些在设计和实现上具有一定复杂性和挑战性的数据处理流程。这些pipeline可能包含多个步骤,每个步骤都需要特别的注意,可能涉及复杂的算法或大量的数据处理。
    • 在二进制函数相似性问题的背景下,non-trivial pipelines可能包括诸如确定函数边界、反汇编代码、提取控制流图等复杂步骤。这些步骤在技术上可能很复杂,需要深入理解底层的计算机架构和编程原理。
“配对选择”(Pair Selection)
  • 配对选择是指如何选择正负样本对(即相似和不相似的函数对)进行模型训练和评估。
  • 这一方面对于适当的评估至关重要,因为它直接影响到训练任务的难度和评估结果的有效性。
“词袋”(Bag of Words)

词袋模型将文本(如句子或文档)转换为一个词的集合,忽略了文本中词的顺序和语法结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang中实现调用Windows API向指定目标发送ARP请求

简介 Go库中很多实现的arp都是支持osx/linux/bsd之类的, 但几乎没有支持windows的, 也试了一些方式, 目前还是选用调用windows的API, 记录一下这一次windows的API的调用经验。 实现 代码 package main/* #cgo CFLAGS: -I. #cgo …

Reactor模型详解

目录 1.概述 2.Single Reactor 3.muduo库的Multiple Reactors模型如下 1.概述 维基百科对Reactor模型的解释 The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a service handler by one or more inputs.…

OpenCV如何模板匹配(59)

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV如何实现背投(58) 下一篇 :OpenCV在图像中寻找轮廓(60) 目标 在本教程中,您将学习如何: 使用 OpenCV 函数 matchTemplate()搜索图像贴片和输入…

第四篇:记忆的迷宫:探索计算机存储结构的奥秘与创新

记忆的迷宫:探索计算机存储结构的奥秘与创新 1 引言 1.1 计算机存储系统的发展与重要性 在现代计算技术中,存储系统承担着非常关键的角色,它不仅负责信息的持久保存,同时确保高效的数据访问速度,影响着整体系统性能的…

《Fundamentals of Power Electronics》——基础交流建模方法

PWM整流器小信号交流模型建模的主要步骤为: (a)利用小纹波近似的动态版本,建立与电感和电容波形的低频平均值有关的方程; (b)平均方程的扰动和线性化; (c)交流等效电路模型的建立。 以下图buck-boost电路为例进行分析。 首先测…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑碳捕集和电转气的综合能源系统优化调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

SpringBoot与SpringMVC的区别

SpringBoot与SpringMVC的区别是什么? SpringBoot和SpringMVC是Java开发中常用的两个框架,它们都是由Spring框架所提供的,但在功能和使用方式上有着一些区别。本文将分别介绍SpringBoot和SpringMVC的特点和区别。 一、SpringBoot的特点&#…

Qt服务器端与客户端交互

Qt做客户端与服务器端交互第一步引入network 第一步引入network后继续编程首先界面设计 创建server和socket 引入QTcpServer&#xff0c;QTcpSocket MainWindow.h代码如下 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTcpServer&…

13_Qt中的快捷键

Qt Creator的一些快捷操作&#xff1a; 项目管理&#xff1a; Build&#xff1a;以增量方式构建项目。Rebuild&#xff1a;重新构建项目。Clearn&#xff1a;清除项目构建过程中产生的所有中间文件。Run qmake&#xff1a;使用qmake/cmake重新构建项目。会重新执行UIC、MOC、…

如何面对并发下的bug

整理总结自蒋炎岩老师的b站课程&#xff0c;https://jyywiki.cn/OS/2022/index.html 并发bug与应对 应对bug的方法 在代码里边增加很多检查(加断言) #include "thread.h"unsigned long balance 100;void Alipay_withdraw(int amt) {if (balance > amt) {usleep(…

迎接AI时代:智能科技的社会责任与未来展望

AI智能体的社会角色、伦理挑战与可持续发展路径 引言&#xff1a; 在技术的浪潮中&#xff0c;AI智能体正逐步成为我们生活的一部分。它们在医疗、教育、交通等领域的应用&#xff0c;预示着一个全新的时代即将到来。本文将结合实际案例和数据分析&#xff0c;深入探讨AI智能体…

农作物害虫分类数据集12846张27类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;12846 分类类别数&#xff1a;27 类别名称:["ants","aphids…

Cisco WLC 2504控制器重启后所有AP掉线故障-系统日期时间

1 故障描述 现场1台WLC 2504控制器掉电重启后&#xff0c;所有AP均无线上线&#xff0c; 正常时共有18个AP在线&#xff0c;而当前为0 AP在线数量为0 (Cisco Controller) >show ap sumNumber of APs.................................... 0Global AP User Name..........…

国内各种免费AI聊天机器人(ChatGPT)推荐(中)

作者主页&#xff1a;点击&#xff01; 国内免费AI推荐(ChatGPT)专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月29日15点20分 随着人工智能技术的不断发展&#xff0c;AI聊天机器人已经逐渐融入我们的日常生活。它们可以提供各种服务&#xff0c;例如聊天、…

关于win平台c语言引入开源库的问题与解决

许久不写博客&#xff0c;五一还在加班&#xff0c;就浅浅写一篇吧 最近除了做物联网平台 还对网关二次开发程序做了修改&#xff0c;网关的二次开发去年年底的时候做过&#xff0c;但是当时的逻辑不是十分完善&#xff0c;差不多已经过了半年了&#xff0c;很多细节已经忘记了…

一毛钱不到的FH8208C单节锂离子和锂聚合物电池一体保护芯片

前言 目前市场上电池保护板&#xff0c;多为分体方案&#xff0c;多数场合使用没有问题&#xff0c;部分场合对空间有进一步要求&#xff0c;或者你不想用那么多器件&#xff0c;想精简一些&#xff0c;那么这个芯片就很合适&#xff0c;对于充电电池来说&#xff0c;应在使用…

foobar2000 for Mac:卓越音乐播放器

当您在寻找一款音质卓越、功能丰富的音频播放器时&#xff0c;foobar2000 for Mac无疑是您的首选。它拥有简洁明了的界面设计&#xff0c;易于上手&#xff0c;同时支持多种音频格式&#xff0c;让您无需担心兼容性问题。 foobar2000 for Mac v2.6.4免激活版下载 foobar2000 fo…

3.3Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3框架-企业级应用-Vue组合式API

为什么要使用Composition API 一个Options API实例 在前面的课程中&#xff0c;我们都是采用 Options API&#xff08;基于选项的 API &#xff09; 来写一个组件的。下面是一个实例&#xff1a; <template> Count is: {{ count }}, doubleCount is: {{ doubleCount…

Python数据分析案例44——基于模态分解和深度学习的电负荷量预测(VMD+BiGRU+注意力)

案例背景 承接之前的案例&#xff0c;说要做模态分解加神经网络的模型的&#xff0c;前面纯神经网络的缝合模型参考数据分析案例41和数据分析案例42。 虽然我自己基于各种循环神经网络做时间序列的预测已经做烂了.....但是还是会有很多刚读研究生或者是别的领域过来的小白来问…

Elasticsearch 数据聚合

Bucket聚合&#xff08;桶聚合&#xff09; 对文档做分组&#xff0c;aggs 按照文档字段值或日期进行分组&#xff0c;能参与分词的字段不能做聚合&#xff0c;如text类型的字段 例如&#xff1a;根据城市名称做聚合&#xff0c;也就是城市名称对数据进行分组统计。可以加qu…