论文笔记:(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/593010.html

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

相关文章

C++多态特性详解

目录 概念: 定义及实现: 虚函数重写的两个例外: 1.协变: 2.析构函数的重写: final关键字: override关键字: 多态是如何实现的(底层): 面试题&#xff1…

图像识别及分类

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

【网络编程下】五种网络IO模型

目录 前言 一.I/O基本概念 1.同步和异步 2.阻塞和非阻塞 二.五种网络I/O模型 1.阻塞I/O模型 2.非阻塞式I/O模型 ​编辑 3.多路复用 4.信号驱动式I/O模型 5. 异步I/O模型 三.五种I/O模型比较​编辑 六.I/O代码示例 1. 阻塞IO 2.非阻塞I/O 3.多路复用 (1)select …

Rust web简单实战

一、使用async搭建简单的web服务 1、修改cargo.toml文件添加依赖 [dependencies] futures "0.3" tokio { version "1", features ["full"] } [dependencies.async-std] version "1.6" features ["attributes"]2、搭…

【Leetcode每日一题】 综合练习 - 全排列 II(难度⭐⭐)(71)

1. 题目解析 题目链接:47. 全排列 II 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 算法思路梳理 为了生成给定数组nums的全排列,同时避免由于重复元素导致的重复排列,我们可以遵…

刷代码随想录有感(56):二叉搜索树的最小绝对差

题干&#xff1a; 代码:中序遍历成有序数组逐一比较相邻两个数之间的差值&#xff0c;注意这里是取最小值所以定义的初始值应该是非常大的INT_MAX&#xff01;&#xff01;&#xff01; class Solution { public:void traversal(TreeNode* root, vector<int>&a){if(…

OpenCV 为轮廓创建边界框和圆(62)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV检测凸包(61) 下一篇 :OpenCV如何为等值线创建边界旋转框和椭圆(62) ​ 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 cv::boundingRect使用 OpenCV 函数 cv::mi…

c++多线程2小时速成

简介 c多线程基础需要掌握这三个标准库的使用&#xff1a;std::thread,std::mutex, andstd::async。 1. Hello, world #include <iostream> #include <thread>void hello() { std::cout << "Hello Concurrent World!\n"; }int main() {std::th…

轻松应对数据恢复挑战:雷神笔记本,不同情况不同策略

在数字化时代&#xff0c;数据无疑是我们生活中不可或缺的一部分。无论是重要的工作文件、珍贵的家庭照片&#xff0c;还是回忆满满的视频&#xff0c;一旦丢失&#xff0c;都可能给我们的生活带来诸多不便。雷神笔记本作为市场上备受欢迎的电脑品牌&#xff0c;用户在使用过程…

ubuntu使用Remmina远程连接Windows桌面

概况 目的&#xff1a; 远程连接公司电脑写一点代码 之前的方案&#xff1a; 安装Win10虚拟机&#xff0c;虚拟机里连接 VPN&#xff0c; 然后用 mstsc 命令连接。 新的方案&#xff1a;连接VPN后&#xff0c; 开启Remmina直接连接远程 Windows 桌面 新方案优点&#xff1a…

分布式锁之-mysql

使用mysql实现分布式锁的方式这里演示两种&#xff1a; 1:基于 MySQL 实现的乐观锁 2:基于 MySQL 实现的悲观锁 数据库脚本 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for product_stock -- -----------------------…

【Python】机器学习之Sklearn基础教程大纲

机器学习之Sklearn基础教程大纲 1. 引言 机器学习简介Scikit-learn&#xff08;Sklearn&#xff09;库介绍安装和配置Sklearn 2. 数据预处理 2.1 数据加载与查看 - 加载CSV、Excel等格式的数据- 查看数据的基本信息&#xff08;如形状、数据类型等&#xff09;2.2 数据清洗…

Vue 组件间的数据绑定

在Vue组件中&#xff0c;v-model指令可以用来实现双向数据绑定。它用于将组件的属性和父组件中的数据进行双向绑定&#xff0c;使得当属性的值改变时&#xff0c;父组件中的数据也会相应地改变&#xff0c;并且当父组件中的数据改变时&#xff0c;属性的值也会相应地改变。 目…

【软考高项】三十一、成本管理4个过程

一、规划成本管理 1、定义、作用 定义&#xff1a;确定如何估算、预算、管理、监督和控制项目成本的过程作用&#xff1a;在整个项目期间为如何管理项目成本提供指南和方向 应该在项目规划阶段的早期就对成本管理工作进行规划&#xff0c;建立各成本管理过程的基本框架&…

使用docker-compose编排lnmp(dockerfile) 完成Wordpress

实验环境&#xff1a; 在已有docker环境和nginx镜像的基础上进行编排。 1、准备mysql容器目录及文件 2、dockerfile文件内容 3、my.cnf文件内容 4、准备php容器目录及文件 5、dockerfile文件内容 6、准备其他文件 7、编写docker-compose.yml文件 8、Docker Compose环境的实现…

Redisson 分布式锁和同步器

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 redisson 是基于redis的扩展库,使得redis除了应用于缓存以外,还能做队列…

AI学习指南-人工智能概述

欢迎来到人工智能的奇妙世界&#xff01;如果你是初学者&#xff0c;那么你来对地方了。今天&#xff0c;我们将一起探索人工智能&#xff08;AI&#xff09;的基本概念&#xff0c;看看它是如何分类的&#xff0c;它的应用有哪些&#xff0c;以及未来可能的发展方向。准备好了…

Django之单文件上传(以图片为例)

一&#xff0c;创建项目 初始化&#xff0c;数据迁移&#xff0c;创建superuser&#xff0c;创建app等 二&#xff0c;配置settings.py 1&#xff0c;配置数据库&#xff08;本作者使用的mysql&#xff09;&#xff0c;以前文章有提到 2&#xff0c;配置静态文件存放路径 STAT…

Spring Cloud:探索它的核心组件,揭秘微服务生态

Spring Cloud简介 在我们的编程旅程中&#xff0c;我们会遇到各种各样的工具和技术&#xff0c;它们如同繁星般点缀在编程的天空中&#xff0c;而Spring Cloud就是其中一颗明亮的星。那么&#xff0c;什么是Spring Cloud呢&#xff1f; Spring Cloud&#xff0c;是一个基于Spr…

《尿不湿级》STM32 F103C8T6最小系统板搭建(五)BOOT

一、BOOT是什么&#xff1f; 大多数初学者第一次接触BOOT总是对这个词感到不解&#xff0c;从哪冒出一个奇奇怪怪的东西还要接跳线帽&#xff0c;为什么要配置它才能进行串口程序的下载&#xff1f;为什么不正确配置会导致单片机无法正常启动…… boot&#xff0c;及物动词&…