【论文阅读笔记】关于“二进制函数相似性检测”的调研(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)

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ 模拟实现 priority_queue(优先队列)

目录 一,优先队列简介 二,priority_queue 的内部实现原理 三,模拟实现 priority_queue 1,模板参数与数据结构 2,构造 3,辅助功能(堆的有序化,建立堆) 4&#xff0…

嵌入式学习69-C++(Opencv)

知识零碎: QT的两种编译模式 1.debug 调试模式 …

springboot整合rabbitmq的不同工作模式详解

前提是已经安装并启动了rabbitmq,并且项目已经引入rabbitmq,完成了配置。 不同模式所需参数不同,生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。 不同的交换机是实现不同工作模式的关键组件.每种交换…

泛微E9开发 选择项目类型,自动带出该类项目的预计金额(即下拉框联动浮点型数据)

1、功能背景 在用户进行项目类型选择时,自动带出其余的标准数据(样例中的预计金额),如对员工进行表彰奖励时,不同的表彰有不同的奖励金额,那么我们就可以使用以下的方式来进行操作。 2、展示效果 3、实现…

WiFine通信与Wi-sun通信对比

调制速率 WiFine通信:(G)FSK 50Kbps~500Kbps ;LoRa 5Kbps~37.5Kbps Wi-Sun通信:(G)FSK 50Kbps~300Kbps ;QPSK/OFDM 计划中… 2、协议简介 WiFine通信:为低成本、低功耗、移动设备倾力打造 的轻量级、分布式无线移动…

英语新概念2-回译法-lesson13

The Greenwood Boys 绿林少年是一组流行歌手们。现在他们正在参观城市里的所有公园,他们明天就要到这。他们将坐火车到并且大多数小镇上的年轻人将要欢迎他们,明天晚上他们将要在工人俱乐部唱歌。绿林少年将在这待五天,在这期间,…

我独自升级崛起加速器推荐 我独自升级免费加速器

近期,《我独自升级》这部动画凭借爆棚的人气,在各大平台上掀起了一阵观看热潮,其影响力不容小觑。借此时机,韩国游戏巨头网石集团敏捷响应,顺势推出了同名游戏《我独自升级:ARISE》,为粉丝们搭建…

如何让vim支持python3

首先删除旧的vim。 sudo apt-get remove vim //输入re按下tab直接显示remove sudo apt-get remove vim-runtime sudo apt-get remove vim -tiny sudo apt-get remove vim-common 然后下载vim8源码: git clone https://github.com/vim/vim.git 进行编译安装…

鸿蒙开发全攻略:华为应用系统如何携手嵌入式技术开启新篇章~

鸿蒙操作系统是华为自主创新的成果,打破了传统操作系统的局限。通过结合嵌入式技术,鸿蒙实现了跨平台、跨设备的高度融合,提供了流畅、智能的体验。华为应用系统与嵌入式技术的结合,提升了性能,丰富了用户体验。鸿蒙与…

【stm-4】PWM驱动LED呼吸灯 PWM驱动舵机PWM驱动直流电机

1.PWM驱动LED呼吸灯 void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); //结构体初始化输出比较单元 void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef*…

RabbitMQ的五种模式

一、简单模式 简单模式(Simple):一个生产者,一个消费者 package com.qiangesoft.rabbitmq.mode.simple;import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.Queue; import org.springframe…

mysql集群cluster引擎在写入数据时报错 (1114, “The table ‘ads‘ is full“)

问题描述:mysql集群在写入数据时,出现上述报错 问题原因:表数据已满,一般是在集群的管理节点设置里面datamemory的值太小,当数据量超过该值时就会出现该问题 解决方案: 修改集群管理节点的config.ini里面…

JUC下的ScheduledThreadPoolExecutor详解

ScheduledThreadPoolExecutor是Java并发编程框架中一个强大且灵活的线程池实现,专为定时与周期性任务而设计。作为ThreadPoolExecutor的子类,它不仅继承了线程池管理的高效与灵活性,还内置了基于优先级队列的延迟任务调度机制,支持…

商务分析方法与工具(五):Python的趣味快捷-文件和文件夹操作自动化

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

pytest教程-41-钩子函数-pytest_runtest_teardown

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_runtest_call钩子函数的使用方法,本小节我们讲解一下pytest_runtest_teardown钩子函数的使用方法。 pytest_runtest_teardown 钩子函数在每个测试用例执行完成后被调用&…

游戏辅助 -- 三种分析角色坐标方法(CE、xdbg、龙龙遍历工具)

所用工具下载地址: https://pan.quark.cn/s/d54e7cdc55e6 在上次课程中,我们成功获取了人物对象的基址:[[[0xd75db8]1C]28],而人物血量的地址则是基址再加上偏移量278。 接下来,我们需要执行以下步骤来进一步操作&a…

JSP技术讲解

目录 1、JSP简介 2、JSP体验 3、JSP运行原理 4、JSP基本语法 5、JSP指令 6、JSP内置九大对象 7、JSP标签 8、JSP配置 9、JSP排错 10、总结 在前面的Servlet学习中发现Servlet本质是一个java程序,因此Servlet更加擅长编写程序的业务逻辑,而如果要…

BACnet到OPC UA的楼宇自动化系统与生产执行系统(MES)整合

在智能制造的浪潮下,一家位于深圳的精密电子制造企业面临着前所未有的挑战:如何高效地将楼宇自动化系统与生产执行系统(MES)整合,实现能源管理与生产流程的精细化控制。这家企业的楼宇控制系统使用的是BACnet协议&…

牛客NC97 字符串出现次数的TopK问题【中等 哈希+优先级队列 Java/Go】

题目 题目链接: https://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee 核心 哈希,优先级队列Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返…

思维导图网页版哪个好?2024年值得推荐的8个在线思维导图软件!

思维导图如今已成为一种常用的工具,帮助我们清晰地组织和整理信息。随着科技的发展,思维导图的产品形态也经过多轮迭代,从最初的本地客户端过渡到基于云的 Web 端,各类网页版思维导图软件应运而生,它们方便快捷&#x…