Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization
用于理解恶意软件的内部工作原理,并发现系统中的漏洞,逆向工程是一种耗费人工的却很重要的技术。汇编克隆搜索引擎是通过识别那些重复的或者已知的部件来帮助逆向工程师的工作,要想设计健壮的克隆搜索引擎是一项挑战,因为存在各种编译器的优化和代码混熊技术。
一个实用的克隆搜索引擎依赖于汇编代码的健壮向量表示,现有的方法依赖于人工特征提取过程从现有的汇编函数中提取特征向量,没有考虑到特征之间的关系,没有确定出能够静态区分汇编函数的这种独特模式。为了解决这个问题,基于汇编代码的汇编函数的词法语义关系和向量表示模型Asm2Vec诞生了,此模型用来汇编代码表示学习。
这个模型只需要汇编代码作为程序的输入,可以发现和合并在汇编代码中出现的token之间的丰富语义关系。利用最先进的静态方法和动态克隆搜索方法,进行了大量的实验和检测了这模型,展示了模型学到表示形式更加健壮,并且在对抗混淆和优化的引入方面。其性能更加优于现有的方法。
汇编代码克隆搜索是一种新兴的信息检索技术,有助于解决安全相关的问题。它已经被用来通过定位改变的部分来区别不同的二进制文件[4],识别已知的库函数[5],在现有的软件或者IoT设备固件中寻找已知的编程错误或者zero-day漏洞[6][7],以及当源代码不可获取时检测软件剽窃或GNU许可侵权行为。
困难点:因为各种编译器优化和混淆技术使得逻辑上相似的汇编函数看起来有很大的不同,优化或者混淆汇编函数破坏了控制流程和基本块的完整性,将这些语义相似但结构和语法不同的汇编函数作为克隆来识别是具有挑战性的。
开发克隆搜索解决方案需要汇编代码的健壮向量表示,通过这种表示可以度量查询和索引函数之间的相似性。根据人工工程的特点,相关研究可以分为静态研究和动态研究。动态方法通过动态分析汇编代码[10][11][12]的I/O行为来建模语义相似性。静态方法通过查找汇编代码在语法或描述性统计信息[6][7][8][14][15][16][17][18]方面的静态差异来为它们之间的相似性建模。静态方法比动态方法更具可伸缩性并提供更好的覆盖率,动态方法在语法变化时更健壮,但可伸缩性更差。这篇文章确定了两个可以减轻的问题,以提高静态特性的语义丰富性和鲁棒性。实验结果表明,考虑这两个因素,静态方法能够获得比最先进的动态方法更好的性能。
P1:现有的最先进的静态方法没有考虑到特征之间的关系。LSH-S[16],ngram[8],n-perm[8],BinClone[15]和Kam1n0[17]将汇编代码片段建模为操作频率值和分类操作数;Tracelet[14]将汇编代码建模为指令之间的编辑距离;Discovre[7]和Genius[6]构造描述性特征,如算术汇编指令的比例,传输指令的的数量,基本块的数量等。所有这些方法都假设每个特性或类别都是一个独立的维度。然而,SSE寄存器和SSE操作数相关;fclose libc函数调用与其他文件相关的libc调用(如fopen)相关;可以用memcpy替换strcpy libc调用。这些关系提供的语义信息比单个tokens或描述性统计信息更多。为了解决这个问题,提出将词汇语义关系奶如刀特征工程过程中。在实践中,从汇编语言的先验知识中手动指定所有可能的关系是费时的,这是不可行的。相反,直接从普通汇编代码中学习这些关系。
Asm2Vec探索了tokens之间的共生关系,并发现了tokens之间丰富的词汇语义关系,Asm2Vec在训练过程中不需要任何先验知识。
P2:现有的静态方法假设特征是同等重要的[14][15][16][17],或者需要一个等效汇编函数的映射来学习权重[6][7]。所选的权重可能不包含区分一个汇编函数和另一个汇编函数的重要模式和多样性。一个有经验的逆向工程师不会通过平等地查看整个内容或逻辑来识别一个已知的函数,而是根据二进制分析的过去经验来确定识别特定函数的关键点和重要模式,还不需要等效汇编函数的映射。为了解决这个问题,可以模拟一个有经验的逆向工程师的工作方式。受近年来表示学习[19][20],提出训练一个神经网络模型来读取许多汇编代码数据,并让模型确定区分一个函数和其他函数的最佳表示形式。
本文贡献:
1.提出了一种新的汇编克隆检测的方法。这是第一个使用表示学习为汇编代码构造特征向量的工作,作为减轻当前手工特性中的P1和P2问题的一种方法。
2.开发了一个用于汇编代码语法和控制流程图的表示学习模型,即Asm2Vec。该模型学习了tokens之间潜在词汇语义,并将汇编函数表示为内部加权混合的集合语义。学习过程不需要任何关于汇编代码的先验知识,只需要将汇编代码函数作为输入即可。
3.证明了Asm2Vec比最先进的静态特征和动态方法更能适应代码混淆和编译器优化。事宜按包括不同编译器配置和一个强大的混淆器,它替换指令,分割基本块,添加为逻辑,并完全破坏原始的控制流图。在对一个公开的漏洞数据集进行了漏洞搜索案例研究,其中Asm2Vec实现了零误报和100%召回。它的性能优于动态最先进的漏洞搜索方法。
Asm2Vec作为一种静态方法不能完全消除代码混淆。然而,它比最先进的静态特性更能适应代码混淆。
Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization的更多相关文章
- Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization(二)
接着上篇Asm2Vec神经网络模型流程继续,接下来探讨具体过程和细节. 一.为汇编函数建模 二.训练,评估 先来看第一部分为汇编函数建模,这个过程是将存储库中的每一个汇编函数建模为多个序列.由于 ...
- Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization(一)
接着上一篇,现在明确问题:在汇编克隆搜索文献中,有四种类型的克隆[15][16][17]:Type1.literally identical(字面相同):Type2.syntactically equ ...
- 【Code clone】Distributed Code Clone Detection Based on Index
1 摘要 随着软件产业的发展,代码克隆现象越来越常见,随之带来的安全漏洞.可维护性.产权等问题也引起人们重视.代码克隆按照复制程度分为4类:完全复制.修改名称.更换顺序和自实现.现有的代码克隆检测工 ...
- 机器学习&恶意代码检测简介
Malware detection 目录 可执行文件简介 检测方法概述 资源及参考文献 可执行文件简介 ELF(Executable Linkable Format) linux下的可执行文件格式,按 ...
- 3. Dubbo原理解析-Dubbo内核实现之动态编译 (转)
转载自 斩秋的专栏 http://blog.csdn.net/quhongwei_zhanqiu/article/details/41577159 我们运行的Java代码,一般都是编译之后的字节码 ...
- 将百分制转换为5分制的算法 Binary Search Tree ordered binary tree sorted binary tree Huffman Tree
1.二叉搜索树:去一个陌生的城市问路到目的地: for each node, all elements in its left subtree are less-or-equal to the nod ...
- binary heap
In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...
- state-of-the-art implementations related to visual recognition and search
http://rogerioferis.com/VisualRecognitionAndSearch2014/Resources.html Source Code Non-exhaustive lis ...
- Top 40 Static Code Analysis Tools
https://www.softwaretestinghelp.com/tools/top-40-static-code-analysis-tools/ In this article, I have ...
随机推荐
- qt 坐标变换
原文链接:Qt学习之路(28): 坐标变换 同很多坐标系统一样,QPainter的默认坐标的原点(0, 0)位于屏幕的左上角,X轴正方向是水平向右,Y轴正方向是竖直向下.在这个坐标系统中,每个像素 ...
- asp.net core 系列 15 中间件
一.概述 中间件(也叫中间件组件)是一种装配到应用管道以处理请求和响应的软件. 每个组件:(1)选择是否将请求传递到管道中的下一个组件;(2)可以在管道中的下一个组件之前和之后执行工作. 请求委托用于 ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- -1-7 java 网络编程基本知识点 计算机网络 TCP/IP协议栈 通信必备 tcp udp
计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来, 在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网络编程 ...
- 痞子衡嵌入式:常用的数据差错控制技术(3)- 和校验(Checksum)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式里数据差错控制技术-和校验. 在系列前一篇文章里,痞子衡给大家介绍了比较简单的校验法-奇偶校验,该校验法主要是针对byte传输校验而 ...
- 痞子衡嵌入式:第一本Git命令教程(2)- 连接(remote/clone)
今天是Git系列课程第二课,上一课我们已经学会在本地创建一个空仓库,痞子衡今天要讲的是如何将本地仓库与远程建立联系. 1.将本地仓库挂上远程git remote 本地建好了仓库,我们希望能够挂到远程服 ...
- 第61章 IdentityServer Options - Identity Server 4 中文文档(v1.0.0)
IssuerUri 设置将在发现文档和已颁发的JWT令牌中显示的颁发者名称.建议不要设置此属性,该属性从客户端使用的主机名中推断颁发者名称. PublicOrigin 此服务器实例的来源,例如http ...
- MEF 基础简介 四
前言 前面讲解了MEF的引用方法,接口的导入导出,类属性的导入导出和集合的导出用法其实大家可以看到基本上大同小异的. MEF的延迟加载 我们知道当装配一个组件的时候,当前组件里面的所有的Import的 ...
- response.redirect 与location.href 的区别
最近做项目时发现,先弹出提示框,再跳转页面 这样写:Jscript.Alert("你好,Hello!"); Response.Redirect("/index.aspx& ...
- Java开发笔记(三十八)利用正则表达式校验字符串
前面多次提到了正则串.正则表达式,那么正则表达式究竟是符合什么定义的字符串呢?正则表达式是编程语言处理字符串格式的一种逻辑式子,它利用若干保留字符定义了形形色色的匹配规则,从而通过一个式子来覆盖满足了 ...