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 ...
随机推荐
- oracle 12C利用dbca建库13步
oracle用户登录然后命令行执行:dbca 如果没有此命令可以用:find / -name "dbca"查到后执行. 1.选择Create a database 2.选择Adva ...
- asp.net mvc简单实现基于Razor的分页控件
最近在写一些web应用了解了一下asp.net mvc发现的确好用,所以直接就干上了.不过在使用asp.net mvc的Razor模板的情况并不向传统webform那样可以使用控件.但从Razor的功 ...
- 从零打卡leetcode之day 1--两数之和
前言 就是要把leetcode的题刷完,每天一道题,每天进步一点点 从零打卡leetcode之day 1 题目描述: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只 ...
- VSCode入门----设置成中文
将VScode设置成中文. 1.如下图,安装中文插件,点击左边后,输入chinese搜索,然后选择中文件简体进行安装. 2.按住Ctrl+Shift+P,然后输入 configure ,如下图,选择“ ...
- spring框架应用系列四:切面编程(环绕通知与前后置通知区别)
切面编程(环绕通知与前后置通知区别) 本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7867034.html 解决问 ...
- leetcode — scramble-string
import java.util.Arrays; /** * Source : https://oj.leetcode.com/problems/scramble-string/ * * Given ...
- LeetCode专题-Python实现之第7题:Reverse Integer
导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...
- 使用ajax+php+mysql实现数据库定时刷新
php版本5.5.9,mysql版本5.7. 所以php链接mysql就是使用mysql_connect. 如果遇到了连接时没有成功也没有失败的情况时,就重启mysql,或重启docker(睡一觉就好 ...
- [八]JavaIO之FileInputStream 与 FileOutputStream
接下来介绍 FileInputStream 和 FileOutputStream 现在看名字应该可以看得出来: 他就是从一个文件中读取数据 或者将数据写入到一个文件中 FileInputStream ...
- QT 自定义模态对话框
新建一个MsgBox类 msgbox.h 代码 #ifndef MSGBOX_H #define MSGBOX_H #include <QDialog> #include <QPus ...