[论文笔记] How Machine Learning Is Solving the Binary Function Similarity Problem(机器学习如何解决二进制函数相似性问题)

标题: How Machine Learning Is Solving the Binary Function Similarity Problem 作者: Andrea Marcelli, Mariano Graziano, Xabier Ugarte-Pedrero, and Yanick Fratantonio, Cisco Systems, Inc.; Mohamad Mansouri and Davide Balzarotti, EURECOM 关键字: 二进制安全 来源: SEC'22 链接: https://www.usenix.org/conference/usenixsecurity22/presentation/marcelli 本文是关于二进制函数相似性问题的Measurement研究,这是一个在系统安全领域非常重要和具有挑战性的问题。作者对现有的研究进行了系统化的分析,并重新实现了一些代表性的方法,然后在一个新的数据集上进行了公平和有意义的比较。他们发现当前的研究存在一些主要的挑战,例如可重复性、评估结果的不透明性和研究方向的不清晰。他们希望通过发布他们的整个模块化框架和数据集来激励未来在这个研究领域的工作。 Measuring Function Similarity 函数相似性对比技术的分类。 相似性对比技术 首先介绍了两种测量函数相似度的技术:直接对比和间接对比技术。直接对比是指给定一对函数的特征,用机器学习模型输出一个相似度分数。间接对比是指将输入特征映射到一个"压缩"的低维空间,然后用简单的距离度量计算相似度。这两种技术都需要实现索引策略来提高搜索效率。 其中模糊哈希是低维表示方法的典型代表。模糊哈希是由与传统密码哈希不同的算法产生的,因为它们故意设计成将相似的输入值映射到相似的哈希值。Pagani等人研究了在原始可执行文件上计算传统模糊/局部敏感哈希的局限性,得出结论:输入字节的微小变化会显著影响生成的哈希值。然而,即使普通模糊哈希可能不适合函数相似度,一些方法(如FunctionSimSearch)提出了更专业的哈希技术来比较两个函数。 另一种低维表示形式是基于嵌入。嵌入指的是将高维样本映射到一个低维空间,其中语义上相似的输入被映射到彼此接近的点,而不管它们在原始表示中看起来有多么不同。机器学习模型的目标是学习如何产生嵌入,使得相似函数之间的相似度最大化,而不同函数之间的相似度最小化。在文献中包括两种主要类型的嵌入:函数代码级嵌入和图结构嵌入。 代码嵌入。利用自然语言处理(NLP)技术来解决二进制函数相似性问题,把汇编代码当作文本来处理。代码嵌入根据不同的标记(例如指令、助记符、操作数、规范化指令)生成代码块或指令的嵌入向量。有三类方法:一类是基于word2vec的方法,如Asm2Vec,可以在不同的指令集上训练,但不能跨架构映射语义;一类是基于seq2seq编码器-解码器模型的方法,可以将不同架构的语义映射到同一个嵌入空间;一类是基于BERT的方法,如OrderMatters和Trex,使用预训练的变换器模型来学习近似程序执行语义,并用于识别语义相似的函数。 汇编代码嵌入通常受到它们能够处理的不同指令数量(所谓的词汇外问题)和能够作为模型输入的最大指令数量的影响。因此,某些方法计算指令级嵌入、基本块嵌入或函数级嵌入。 图嵌入。图嵌入是一种为图中的每个实体(通常是节点)确定固定长度向量表示的方法,这些嵌入是图的低维表示,保留了图的拓扑结构。基于函数控制流图的图嵌入方法具有跨架构的特点。这些嵌入可以由定制算法 或更复杂的机器学习技术,如图神经网络(GNN) 生成。一些最新的机器学习方法提出了GNN的变体,如GMN,这些变体能够在向量空间中产生可比较的嵌入 ,这些嵌入包含了从输入模型的两个图中提取的信息。 图嵌入方法还经常为每个基本块在其对应的图节点中编码信息,以增加表达能力。例如,一些解决方案为每个节点计算一组属性,从而导致具有属性的控制流图(ACFG),这些属性可以是手工设计的 或以无监督方式自动学习的。其他作者利用其他嵌入计算层使用前面讨论过的一些技术(例如,在基本块级别)。 函数表示技术 从二进制中提取信息的技术。 raw bytes 原始二进制 直接使用原始二进制信息作为相似性对比的输入(Catalog1 [74]),或者将原始字节与与从控制流图(CFG)或调用图(CG)[44]获取的其他信息结合起来 Assembly 汇编 汇编指令作为输入、使用汇编指令的数量作为输入来计算函数的相似性 Normalized assembly 标准化汇编 由于汇编代码经常编码常量值,导致操作和操作数的组合非常多。汇编规范化是可以抽象掉一些变化,减少词汇量,把同一操作的不同变体统一成一个表示。 Intermediate representations 中间表示 中间表示是一种将二进制代码提升到更高抽象层次的技术,可以统一不同指令的语义,消除不同架构的差异,以及应用程序分析技术来简化代码结构。常用的中间表示有LLVM、VEX和IDA微码等。 structure 结构特征 结构是一种反映函数内部或者在程序中的作用的特征。许多方法提取函数的控制流图(CFG),并且根据基本块的数据或者其他信息对其进行扩展,形成属性控制流图(ACFG)或者其他类型的图。还有一些方法利用CFG的结构来计算其他特征,例如tracelets(CFG中连续基本块的序列)。 Data flow analysis 数据流分析 数据流分析是一种处理汇编级别的算术表达式的不同形式的方法。一些方法通过计算基于数据流依赖的程序切片,并将它们标准化和作为特征来反映函数的行为。另一些方法,例如Vulseeker,使用块之间的数据流边作为额外的特征。 Dynamic analysis 动态分析。 动态分析通过运行函数对并根据输入输出关系提取特征,或者根据执行轨迹提取语义特征,或者使用模拟或混合技术。 Symbolic execution and analysis 符号执行 用符号执行来完全捕获待分析函数的行为,并确定其输入和输出之间的关系,涵盖所有可能的路径。 本文选择的方法 选择标准 可扩展性和实际应用能力 关注具有代表性的方法,而不是特定的论文 涵盖不同的研究领域 优先考虑最新的趋势 二进制代码相似性技术的演变: 根据时间的分类: 实验 关于实验的一点补充说明。 实验中涉及了两种基于神经网络的方法,分别是Order Matters和CodeCMR,它们都是由腾讯安全科恩实验室提出的。Order Matters是一种利用图神经网络和注意力机制来捕捉二进制函数的语义信息,并生成函数嵌入向量的方法。CodeCMR是一种利用多模态检索技术来实现二进制函数和源代码之间的匹配的方法。这两种方法都在BinaryAI平台上进行了实现,BinaryAI是一个免费在线的软件成分分析平台,可以帮助用户检测二进制程序中的漏洞、克隆代码、第三方库等。这段文字还说明了作者没有公开他们的模型实现,但是他们同意在我们提供的数据集上重新训练和测试他们的模型,并与我们分享测试数据的函数嵌入向量。为了计算函数之间的相似度,Order Matters和CodeCMR使用余弦距离作为相似度度量。...

三月 19, 2023 · 1 分钟 · M2kar

如何把Issue博客自动同步到github page中

这个问题我问了chatgpt: 问题1 生成一段github的workflows配置文档,当有新issue的时候,自动将issue的内容同步到该GitHub项目的blog分支的content/post文件夹中的新Markdown文件中。文件名为"{YYYYMMDD}-{Title}.md",其中{YYYYMMDD}为issue的日期,"{Title}“为issue的标题。文件开头加上 --- title: data: lastmod: draft: false tags: --- 它给我回复了一个GitHub Workflows 配置文档。 name: Sync Issue to Blog on: issues: types: [opened, edited] jobs: sync-issue-to-blog: runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v2 - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: "latest" - name: Create Blog Post id: create_post run: | issue_title=$(echo "${{ github.event.issue.title }}" | sed 's/[[:space:]]/-/g') issue_date=$(echo "${{ github.event.issue.created_at }}" | cut -c1-10 | sed 's/-//g') post_path="content/post/${issue_date}-${issue_title}....

三月 17, 2023 · 5 分钟 · M2kar

用Docker定制Ubuntu启动光盘镜像

用Docker定制Ubuntu启动光盘镜像 ubuntu 启动光盘镜像通常用于安装Ubuntu,但也可以用于其他一些情况,包括没有持久性的预配置桌面和用于安装的自定义iso。传统上,这些都是用chroots制作的。还有一些图形化工具也可以制作,比如Cubic,这使得这个过程更容易。 但是,这个过程没有任何内置的“检查点”,所以很难迭代。不过,Docker的镜像创建系统是其中一个做得很好的工具. 本文将介绍如何使用该系统创建ubuntu 启动光盘镜像。 构建环境 本工具需要一个支持squashfs-tools-ng工具的Linux发行版,用来解包和重打包ISO镜像。截止本文创作时,Ubuntu 20.04LTS时是最好的支持该工具的Ubuntu发行版。因此本工具采取了一个Ubuntu 20.04LTS的虚拟机作为构建环境。 Docker 当然是必不可少的. # 安装docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh ./get-docker.sh 用下面的命令安装其他的依赖包。 sudo apt-get install p7zip-full grub2-common mtools xorriso squashfs-tools-ng 最后,需要下载基础的Ubuntu启动光盘镜像。下载地址在https://ubuntu.com/download/desktop。 (此过程可能也适用于其他Ubuntu版本(例如服务器版本),但是通常有更好的方法来部署服务器。) 创建Docker基础映像 ISO通过引导Linux内核,挂载squashfs映像并从中启动Ubuntu来工作。 因此,我们需要从ISO中获取该squashfs映像并从中创建一个Docker基础映像。 运行以下命令以从ISO中提取squashfs映像: # UBUNTU_ISO_PATH=path to the Ubuntu live ISO downloaded earlier 7z e -o. "$UBUNTU_ISO_PATH" casper/filesystem.squashfs 然后将该squashfs映像导入Docker: sqfs2tar filesystem.squashfs | sudo docker import - "ubuntulive:base" 这将需要几分钟才能完成。 Customising using a Dockerfile 现在,squashfs映像可作为Docker中的映像使用,我们可以构建一个对其进行修改的Dockerfile。 # 在上一节中,我们将squashfs映像导入Docker中,镜像名为'ubuntulive:base' FROM ubuntulive:base # 设置环境变量,以便apt非交互地安装软件包 # 这些变量将仅在Docker中设置,而不在安装镜像中设置 ENV DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical # 进行一些修改,例如 安装谷歌浏览器 RUN wget -q -O - https://dl-ssl....

十二月 21, 2020 · 3 分钟 · M2kar

【论文笔记】FIRMSCOPE:自动化发现安卓系统应用的提权漏洞

标题: FIRMSCOPE: Automatic Uncovering of Privilege-Escalation Vulnerabilities in Pre-Installed Apps in Android Firmware 作者: Mohamed Elsabagh, Ryan Johnson,..,Chaoshun Zuo 关键字: 论文笔记, 系统安全, 安卓应用, 提权漏洞 来源: sec20 链接: 引用: Elsabagh, Mohamed, Ryan Johnson, Angelos Stavrou, Chaoshun Zuo, Qingchuan Zhao, and Zhiqiang Lin. “FIRMSCOPE: Automatic Uncovering of Privilege-Escalation Vulnerabilities in Pre-Installed Apps in Android Firmware.” In 29th USENIX Security Symposium (USENIX Security 20), 2379–96, 2020. https://www.usenix.org/conference/usenixsecurity20/presentation/elsabagh. 摘要 Android设备在固件中预装了特权应用程序——其中一些是必不可少的系统组件,另一些则提供了用户无法禁用的独特用户体验。这些预安装的应用程序被认为是安全的,因为它们是由设备供应商自己而不是第三方亲自挑选或开发的。不幸的是,我们发现大量Android固件在预装的应用程序中存在权限提升漏洞,使得攻击者能够执行未经授权的操作,如执行任意命令、录制设备音频和屏幕以及访问个人数据等等。为了发现这些漏洞,我们构建了FIRMSCOPE,这是一个新的静态分析系统,它通过高效实用的上下文敏感、流敏感、字段敏感和部分对象敏感的污染分析来分析Android固件,以暴露预安装应用程序中不需要的功能。我们的实验结果表明,FIRMSCOPE在检测能力和运行时性能方面都明显优于最先进的Android污点分析解决方案。我们使用FIRMSCOPE扫描了来自100多家Android厂商的2017年Android固件映像331342个预装应用程序,从v4.0到v9.0。其中,FIRMSCOPE发现了850个独特的权限提升漏洞,其中许多漏洞是可利用的,且为0 day。 介绍 现实问题 预安装的应用程序具有预批准的敏感权限和功能,这些权限和功能对于从应用程序商店下载的用户级应用程序不可用,并且通常不需要用户批准或同意才能运行。在大多数情况下,即使是被预装的应用程序也无法被用户预先安装,或者被系统发现是恶意的。当用户面临这些威胁时,他们的选择是有限的:等待更新,希望能修复易受攻击的预装应用程序;或者通过对设备进行根目录删除应用程序,从而可能使其保修失效并损害其安全性。...

十二月 1, 2020 · 1 分钟 · M2kar

【论文笔记】针对已部署的物联网设备漏洞的大规模研究-NESA实验室-浙江大学

标题: A Large-scale Empirical Study on the Vulnerability of Deployed IoT Devices **作者:**Binbin Zhao, Shouling Ji, Wei-Han Lee, Changting Lin, Haiqin Weng, Jingzheng Wu, Pan Zhou, Liming Fang, Raheem Beyah 关键字: IoT Search Engine, Vulnerable Device Assessment. 来源: IEEE Trans. Dependable and Secure Comput. **链接:**https://ieeexplore.ieee.org/document/9259111/ **引用:**Zhao, Binbin, Shouling Ji, Wei-Han Lee, Changting Lin, Haiqin Weng, Jingzheng Wu, Pan Zhou, Liming Fang, and Raheem Beyah. “A Large-Scale Empirical Study on the Vulnerability of Deployed IoT Devices....

十一月 18, 2020 · 2 分钟 · M2kar