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 ...
随机推荐
- JVM垃圾回收
1. 概念理解 1.1. 并行(Parallel)与并发(Concurrent) 并行:指多个垃圾收集线程并行工作,但此时用户线程仍然处于等待状态 并发:指用户线程与垃圾收集线程同时执行 1.2. ...
- C#版 - PAT乙级(Basic Level)真题 之 1024.科学计数法转化为普通数字 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. PAT Bas ...
- Android 9.0/P http 网络请求的问题
Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的 ...
- 重写equals的详细说明
返回目录 原文地址Java equals() 方法总结 equals() 超类 Object 中有这个 equals() 方法,该方法主要用于比较两个对象是否相等.该方法的源码如下: public b ...
- Java IO模型
Linux的内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符).而对一个Socket的读写也会有相应的描述 ...
- navicat连接mysql出现Client does not support authentication protocol requested by server解决方案
USE mysql; '; FLUSH PRIVILEGES; root是用户名 localhost是ip地址127.0.0.1都是特指本机,%表示任何IP都可访问 mysql_native_pass ...
- ELK-ElasticSearch索引详解
1.使用_cat API检测集群是否健康,确保9200端口号可用: curl 'localhost:9200/_cat/health?v' 注意:绿色表示一切正常,黄色表示所有的数据可用但是部分副本还 ...
- 预测python数据分析师的工资
前两篇博客分别对拉勾中关于 python 数据分析有关的信息进行获取(https://www.cnblogs.com/lyuzt/p/10636501.html)和对获取的数据进行可视化分析(http ...
- Node.js 进程平滑离场剖析
本文由云+社区发表 作者:草小灰 使用 Node.js 搭建 HTTP Server 已是司空见惯的事.在生产环境中,Node 进程平滑重启直接关系到服务的可靠性,它的重要性不容我们忽视.既然是平滑重 ...
- Docker系列03—Docker 基础入门
本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...