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 ...
随机推荐
- SpringCloud(3)---Eureka服务注册与发现
Eureka服务注册与发现 一.Eureka概述 1.Eureka特点 (1) Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. (2) Eureka 主管服务 ...
- AspNetCore 使用NLog日志,NLog是基于.NET平台开的类库!(又一神器)
NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码. NLog是一个简单灵活的.NET日志记录类库.通过使用NLog,我们可以在任何一种.NET语言中 ...
- C#版 - Leetcode 414. Third Maximum Number题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- C++、Java语法差异对照表
C++.Java语法差异对照表 C++ and Java Syntax Differences Cheat Sheet First, two big things--the main function ...
- Java基础19:Java集合框架梳理
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- mongodb分片扩展架构
目录 一.简介 二.分片集群 三.数据分布策略 四.Mongos访问模式 五.Config元数据 六.分片均衡 参考文档 一.简介 MongoDB目前3大核心优势:『灵活模式』+ 『高可用性』 + 『 ...
- Java开发知识之Java中的集合上List接口以及子类讲解.
Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...
- ASP.NET Core 2.1 : 十三.httpClient.GetAsync 报SSL错误的问题
不知什么时候 ,出现了这样的一个奇怪问题,简单的httpClient.GetAsync("xxxx")居然报错了.(ASP.NET Core 系列目录) 一.问题描述 把原来的程序 ...
- ubuntu开发项目不能执行热更新
当项目开发到一定成熟度,项目基本上比较大(vue,angular,react,java,php等),在Ubuntu系统环境下,我们写了代码,但是不能想Windows一样执行热更新,这是因为Ubuntu ...
- WPF 中 DispatcherTimer 计时器
在 WPF 中涉及到界面操作的计时器时,一定要使用 DispatcherTime,DispatcherTimer是为 WPF 专门设计的,不然的话会提示界面资源被其他线程所拥有而无法更新界面.Disp ...