-
FIT:基于深度学习和图匹配的二进制软件漏洞检测
2020-03-13 11:56:35FIT:基于深度学习和图匹配的二进制软件漏洞检测,谢卓思,梁洪亮,近年来,二进制软件在日常生活中起到越来越重要的作用,而其安全现状却不容乐观。为此,该文提出了一种基于特征学习和图匹配的混 -
二进制代码相似性检测
2021-01-25 14:45:23二进制程序函数识别是二进制分析的基础,对于软件漏洞分析与修复,甚至恶意软件检测、协议逆向等都至关重要。由于二进制代码缺少高级语言程序中的信息,函数的识别往往比较困难,现有的反汇编分析工具具有识别正确率...
title: 二进制代码相似性检测
date: 2021年1月25日二进制分析属于信息安全业界逆向工程中的一种技术,通过利用可执行的机器代码(二进制)来分析应用程序的控制结构和运行方式,有助于信息安全从业人员更好地分析各种漏洞、病毒以及恶意软件,从而找到相应的解决方案。
-
二进制程序函数识别是二进制分析的基础,对于软件漏洞分析与修复,甚至恶意软件检测、协议逆向等都至关重要。由于二进制代码缺少高级语言程序中的信息,函数的识别往往比较困难,现有的反汇编分析工具具有识别正确率低的缺陷。
-
二进制代码相似性的概念源于软件分析技术,目前还没有标准和权威的定义。通常认为,如果一段代码是由另一段代码复制或经过一定规则变换而来的,就认为它们是相似的。
-
二进制代码相似性的研究对象分为源代码和二进制代码。
-
二进制代码的相似性是指由同一或相似的源代码编译得到的不同二进制代码是相似的。
-
二进制代码相似性检测通常应用于但不限于代码预测(即根据现有的代码预测可能的代码修改和更新,提供代码模板推荐)、知识产权保护(即发现代码中未经授权的代码的复用和克隆,协助软件所有者保护知识产权或规避潜在的侵权行为)、漏洞搜索(如脆弱代码搜索,软件漏洞追踪和定位)。
-
二进制代码相似性常被作为一种辅助分析技术,由于其在提升代码质量和提高代码分析效率方面效果显著,近年来逐渐成为学术界的研究热点。
下面简单介绍一下二进制代码相似性检测技术的分类:
1. 基于文本的检测
-
基于文本的检测技术历史最悠久,实现最简单,它们有的对二进制代码只做简单的预处理。例如,一类方法首先模糊通用寄存器名和内存地址,然后提取指令的操作码和操作数,或者提取字符串以生成标识符序列,最后通过子序列匹配来判断不同代码是否相似,这类方法可以进一步被归纳为基于标识符的检测。例如,Karta作为著名的静态反编译程序IDAPro的二进制程序匹配插件,首先利用唯一的数值常数和字符串等标识符来设置库的锚点函数,然后通过在二进制文件中查找锚点函数来缩小搜索范围,最后利用标识来进一步确定静态编译的开源库的确切版本并匹配函数符号,其也可以在这一步骤使用函数调用列表来匹配一组相似函数。DarunGrim2是基于指纹哈希匹配的二进制文件比较工具,它忽略汇编代码中的操作数,将程序基本块的指令序列的哈希值作为相似特征,此外,它还以程序中符号名称的匹配作为辅助手段。还有方法甚至不对二进制代码进行反汇编,直接比较程序的二进制字节流是否相近,这类方法可以进一步被归纳为基于字节流的检测。值得注意的是一种名为αDiff的检测方法,该方法使用了当今热门的神经网络技术,利用二维卷积神经网络(Convolutional Neural Network, CNN) 对程序的二进制字节进行嵌入(嵌入既可以指神经网络将其他形式的输入转换为向量形式的输出的过程,也可以指神经网络的输出,即高维向量),并综合函数出入度和调用表的统计特征来构建特征向量,用向量之间的距离来度量程序间的相似性。虽然该方法取得了良好的检测效果,但本文认为,由于其将二进制代码视为线性字节流,其本质上仍属于基于文本的检测。
-
基于文本的检测因为不考虑程序的语法和语义等信息,所以其原理和实现较其他技术更简单,其时空复杂度也较低。该类技术主要针对未应用复杂混淆手段的代码克隆和复用,由于该类检测方法容易实现对抗检测,常作为一种高效的辅助检测手段。
2. 基于属性度量的检测
- 基于属性度量的检测技术关注程序汇编代码中可度量的属性和特征,提取属性和特征的度量值,构成多维向量(该类技术认为该特征向量能够从不同维度标识代码段),以特征向量之间的距离近似来度量代码段之间的相似度大小。这类方法需要确定检测的最小粒度(如基本块或函数),在最小粒度范围内通过对属性和特征的统计计数来获得度量值。度量值可能是但不限于是特定常量和指令等标识、函数的输入和输出等对象的计数。例如,系统discovRE基于跨架构的统计特征缩小相似函数的搜索范围。该方法首先通过人工筛选的特征来构建函数的简单特征向量(这些特征包含算术指令、函数调用、重定向、转移指令、局部变量、基本块、导入函数、所有指令和参数等对象的统计个数),利用kNN(k-Nearest Neighbors)算法计算函数的相似距离,从而实现预筛选可能相似的函数,降低后续基于函数控制流图(Control Flow Graph, CFG)的最大子图同构匹配方法的计算量。BinDiff是一款二进制文件比较工具,能帮助快速查找汇编代码中的差异性和相似性。BinDiff是基于图形和指纹理论开发的IDAPro插件,其函数匹配主要是基于从CFG中得到的NEC 值,即基本块数(Nodes)、边数(Edges)、调用数(Calls)。
- 基于属性度量的检测方法因为不考虑程序的逻辑结构,所以其统计特征易于实现,但其提取的信息十分有限,因此常作为一种辅助方法。其主要问题是,属性特征是人为设计和筛选的,难以保证各属性都处在不同维度上,不同属性之间可能存在拟合问题,因此盲目地增加属性特征的种类,可能不仅无法有效提高检测的准确度,反而会增加计算开销。
3. 基于程序逻辑的检测
- 基于程序逻辑的检测技术,利用列表、树形或图形等数据结构来记录和描绘程序的数据流或控制流信息(该类技术认为所得的中间表示能够捕获程序中一定的语法和语义信息),通过匹配相似的序列、节点或边、公共子树或子图来寻找逻辑或功能相似的程序基本块或函数。
- 程序的数据逻辑在函数内部体现为数据的流向和运算,在函数外部体现为函数的输入和输出。例如,Multi-MH系统通过基本块的输入和输出行为来掌握其语义,利用签名跨架构来查找具有类似行为的漏洞代码。二进制搜索引擎Bingo利用从符号表达式中生成的输入和输出样例来匹配语义相似的函数。
- 程序的控制逻辑在函数间可以用函数调用序列来描述,在函数内部可以用CFG来描绘,在基本块级可以用逻辑树来表示。例如,工具HAWK实现了一种基于系统调用依赖图(System Call Dependence Graph, SCDG)胎记的动态检测方法;Pewny等提出的TEDEM方法利用表达式树的编辑距离来度量基本块级别的相似性;discovRE和Genius是比较著名的基于属性优化CFG的二进制相似性检测系统,其采用了各自经优化的图匹配算法;Esh,BinHunt,iBinHunt等工具在基于CFG的基础上,利用了符号执行来确定基本块或函数的相似性。CFG能够有效获取和展示程序的控制流信息,是程序代码的高度抽象,其作为中间表示既可以用于表示源代码,也可以用于表示汇编代码,但是其跨语言的特性,导致无论是源代码的还是二进制代码的相似性检测技术,大多严重依赖CFG作为中间表示,尤其是跨架构的二进制代码检测。
- 基于程序逻辑的检测方法的优点是准确度较高,可以根据不同的任务采用不同的匹配算法和策略,可伸缩性强。其缺点是时空复杂度高:一方面,数据流和CFG的提取过程代价非常昂贵;另一方面,相似性度量所依赖的图匹配算法的时间复杂度缺少多项式解,图匹配算法又多是两两匹配算法,因此在面对大规模查询任务时,计算量随代码库规模成几何倍数式增长。
- 上述困难并没有阻止研究人员在该方向上取得突破。针对该问题,一种办法是从中间表示CFG入手,利用其他辅助检测技术来为CFG引入轻量级且易于度量的属性,从而简化CFG的节点。例如discovRE利用轻量级的统计特征来筛选候选函数,降低图匹配算法的任务量。另一种办法是从图匹配算法入手,采用近似图匹配算法来提高检测效率,在准确度和速度之间进行折中,但该方法受限于图匹配算法的效率,对检测效率的提升有限。近年来,研究人员开始将神经网络技术跨学科地应用到该领域,以用于解决传统图匹配算法遇到的效率瓶颈问题。其中最具代表性的是Qian等提出的Genius系统,该系统利用机器学习的谱聚类算法来对函数的CFG进行分类并生成码本(Codebook),再对码本进行编码,将相似函数的搜索问题转化为特征编码的搜索问题,极大地提高了效率并兼顾了结果的准确度。至此二进制代码相似性检测技术再一次实现了突破,并开拓了新的发展方向,相关研究越来越多地关注代码中更高级也更复杂的语义信息。
4. 基于语义的检测
- 以上方法多将中间表示的内容(承载的信息)与其形式(存储的数据结构)合并,将基于图形结构的相似性检测技术归入基于语义的检测中。这种分类方法多应用于源代码相似性检测技术,虽然对二进制代码相似性检测技术的分类具有借鉴意义,但本文认为这样既不能很好地涵盖近几年来二进制代码相似性检测领域的最新成果,也不能清晰地反映该领域的发展趋势。本文总结的原因有:(1)虽然高级数据结构(例如树形和图形结构)用于描述高级程序信息具有先天优势,但二者不能划等号,因为高级数据结构可以分解或转化为低级数据结构(例如列表或高维向量),程序语义等高级信息同样可以用低级数据结构来进行描绘;(2)“语义”的概念来自自然语言,若将汇编语言的指令看作“单词”,基本块看作“句子”,则得到相应的二进制代码的“词法”和“语法”概念,函数则具有完整的“语义”,但是CFG主要包含程序的控制流信息,该信息仅是函数所包含的丰富语义信息的一部分;(3)近几年出现的基于机器翻译或深度神经网络的程序语义相似性检测技术,才是直接关注函数语义信息的检测技术,虽然它们有的仍然使用CFG作为中间表示,但相比传统的基于CFG的检测方法却有了本质的不同,其不同在于新方法的检测速度较传统方法的提升了几个数量级。有的方法甚至完全摒弃了前述的3类基本检测技术。
- 本文所指的基于语义的检测技术,是通过捕获程序汇编代码中的语义信息,比较函数或组件的语义差异,来实现相似性度量的。这类方法通常借鉴自然语言处理(Natural Language Processing, NLP)、图像识别或其他领域的技术,利用深度神经网络来实现程序语义的嵌入,通过对嵌入向量的比较或查询操作,来实现大规模任务的处理。其二进制代码的中间表示包括规范化的汇编文本、其他中间语言或CFG,神经网络模型多采用暹罗架构(Siamese Architecture),利用程序代码的大规模特点构造来训练样本库,相关领域的专家和先验知识可能不是必须的。Xu等于2017年提出了第一个基于神经网络生成的二进制函数CFG嵌入的方法,其在名为Gemini的系统中,利用改进的Structure2vec模型(Structure2vec结构感知模型的灵感来自图形模型推理算法,该算法根据图的拓扑结构递归地聚合得到特定于顶点的特征向量)来构成暹罗架构网络,将函数的CFG嵌入高维向量,通过计算向量的余弦距离来度量函数间相似性。Ding等提出的Asm2vec模型,是基于改进的PV-DM模型(PV-DM神经网络模型是为文本数据而设计的,基于文档中的标识学习文档表征的)的汇编代码表征学习模型。该模型利用自定义的函数内联和随机漫步机制,将函数的CFG建模为汇编指令的线性序列,以该汇编文本为输入,不需要任何先验知识,学习指令的语义,构建指令嵌入向量,最终得到函数的语义嵌入向量。Asm2vec是第一个将表征学习作为汇编代码构建特征向量的方案,具有优秀的抗混淆和抗编译器优化特性,但其还不能用于跨架构比较。Luca等提出的SAFE网络,先利用NLP的Word2vec模型(Word2vec是谷歌于2013年推出的一款NLP工具,其特点是能将单词向量化,定量度量单词之间的关系)来实现汇编语言的指令嵌入,再利用循环神经网络(Recurrent Neural Network, RNN)来捕获指令序列的上下文关系,最终实现函数的嵌入,SAFE摒弃了CFG作为中间表示,汇编代码的语义信息直接由深度神经网络嵌入到高维向量中,这样既省去了耗时的CFG提取过程,又避免了人为偏见的引入。SAFE模型利用RNN网络构建了暹罗架构并采用有监督的学习方法来训练模型,虽然其可以由程序自动随机构造正样本对和副样本对,但针对跨架构检测任务的训练,随着系统支持指令架构种类的增加,理论上,其训练样本库的规模需要根据不同架构的组合成倍地扩大,这就限制了该模型的可扩展性。GeneDiff是第一个使用语义表征模型来学习二进制代码中间语言从而实现跨架构克隆检测研究的方法。它借助动态分析VEXIR(VEX IR是动态分析框架Valgrind的中间语言,是一种二地址形式的中间表示,支持多种指令架构)的中间语言消除了不同指令架构之间的差异,通过改进的PV-DM模型来为函数的VEX-IR生成语义以嵌入向量。因为每一条汇编指令会被翻译成多条VEX指令,所以该模型将由同一条汇编指令翻译而来的多条VEX指令组合看作一个单词,将基本块看作句子,将函数看作段落,使用向量间的余弦距离来度量函数间相似度。
- 除了检测速度和准确度的提升,将神经网络应用于相似性检测任务的优势还在于,传统检测方法所采用的匹配算法通常是固定不变的,神经网络可以针对不同任务进行再训练,应用场景更广阔;此外,神经网络不但可以自行学习和选择特征,还可以习得人工方法很难确定的不同特征对相似度影响的权重,从而降低甚至避免人工设计和筛选特征带来的拟合。这类技术在发展过程中也遇到了一些难题:(1)跨学科知识的交叉应用给检测技术的突破带来了新思路和启发,同时对研究人员的知识储备和转化能力提出了更高的要求,现有技术所使用的神经网络模型多是其他领域成果改进而来的,因此相似性检测需要更多针对自身实际的基础进行理论创新;(2)神经网络训练需要大量的训练数据,如何针对不同任务构造高质量的训练集仍然充满挑战;(3)神经网络的输出,嵌入向量的每一维的具体含义还无法进行科学的解释,且其结果无法用符号化的表达式或定理证明。
5. 小结
| 技术分类 | 关注信息 | 中间表示 | 优点 | 缺点 |
| :------: | :------: | :------: |:------: |
| 基于文本 | 汇编文本、字节流 | 字符串、标识符序列、高维向量 | 方法实现简单,检测时空复杂度低 | 不考虑程序的语法和语义等信息;检测准确度较低 |
| 基于属性度量 | 可度量属性 | 度量值、多维向量 | 度量算法简单,方法易于实现,检测速度快 | 不考虑程序逻辑信息;不同属性间可能存在过度拟合问题,准确度难以保证 |
| 基于程序逻辑 | 控制流、数据流 | 抽象语法树、控制流程图、函数调用图、输入输出表、数据依赖图 | 准确度高于基于文本和属性度量的检测;能够识别细微语法变化 | 中间表示转换过程复杂;匹配算法复杂度高 |
| 基于语义 | 程序语义 | 属性控制流图、语义嵌入向量 | 能够识别程序语义差异;机器学习避免引入人为偏见;能够适应不同任务需求;检测效率高 | 需要大量语义训练样本;语义嵌入向量各维度的意义无法解释 |
习避免引入人为偏见;能够适应不同任务需求;检测效率高 | 需要大量语义训练样本;语义嵌入向量各维度的意义无法解释 | -
-
python反汇编二进制文件_IDAPythonScripts: 基于IDAPython的二进制漏洞检测脚本库,对IDA生成的反汇编文件...
2021-01-29 15:00:44IDAPythonScriptsIDAPythonScripts: 二进制漏洞静态分析检测脚本(IDA Pro)准备首先下载IDA Pro软件,版本 <= 6.8,7.0以上部分脚本不支持。漏洞内容(待更新)危险函数调用此脚本对IDA反汇编文件进行静态分析,检测...IDAPythonScripts
IDAPythonScripts: 二进制漏洞静态分析检测脚本(IDA Pro)
准备
首先下载IDA Pro软件,版本 <= 6.8,7.0以上部分脚本不支持。
漏洞内容(待更新)
危险函数调用
此脚本对IDA反汇编文件进行静态分析,检测其是否调用了可能产生漏洞的危险函数,没有找到汇编中的统一的危险函数集合,只好自己一点点积累,在functions.sql中可以看到一些常见的危险函数,保存在MySQL数据库中以后也方便Python调用。
栈堆缓冲区溢出漏洞
脚本从函数调用的地址向后跟踪推送到堆栈中的参数,并返回与指定参数对应的操作数。然后确定eax在被推入堆栈时是否指向堆栈缓冲区,存在可能造成堆栈缓冲区溢出的利用点。
参考链接
只能在IDA版本小于6.8上使用,IDA7.0报错。
格式化字符串漏洞
该脚本结合Github上开源IDA插件LazyIDA,吸收了其中对格式化字符串漏洞检测方法,使其功能在Python脚本中得以实现。
整型溢出漏洞
脚本首先计算当前分配给函数的内存大小,而后从IDA反汇编文件中找到各个函数的参数大小,并进行比较,检测是否存在“整型”溢出的可能。
参考链接1 参考链接2 参考链接3
缓冲区是变化的,因此检测出整型溢出的可能性很大,但是想要利用起来相对更难。
脚本执行完毕后会造成IDA闪退,原因未知...
...
关于更新
漏洞都已经过测试,第一次首先发布4个已经成功检测的漏洞脚本,有一些地方仍然鸡肋,还需大佬支持改善。IDA是一个强大的反汇编分析软件,其中IDAPython插件可以简化手工分析过程,提高测试效率,然而国内对IDA的教学并不多,IDAPython插件的脚本编写更是如此,希望通过这个小仓库丰富IDAPython针对各类漏洞的分析脚本,前人栽树,后人乘凉。真心希望能够与大佬们多多交流学习,带带小白,微信:wwy18795980897。
感谢
部分脚本是在国内外众多大佬编写的模块上进行的代码加工,功能整合,是他们的默默奉献让这里的脚本壮大起来,以及发布在Github,Twitter,CSDN,安全客,FreeBuf等平台上的精彩文章,总是能让我眼前一亮,给我更多的灵感,感谢你们!!!
-
二进制级别自动漏洞检测(二)
2020-12-21 15:21:45因此,二进制代码分析被用于许多原因,包括软件取证,恶意软件分析,性能分析和调试。文献中有很多二进制代码分析方法,其中最常用的有符号执行、concolic执行、静态污染分析和动态污染分析为了验证我根据之前一篇...源代码在大多数软件安全分析的情况下是不可用的。因此,二进制代码分析被用于许多原因,包括软件取证,恶意软件分析,性能分析和调试。文献中有很多二进制代码分析方法,其中最常用的有符号执行、concolic执行、静态污染分析和动态污染分析为了验证我根据之前一篇文章所提出的一种想法,准备一步步进行实现。首先需要建立自己的污点分析工具,污点分析分为静态和动态。对于动态污点分析已经有一系列工具被提出,本文将进行详细介绍。
为了改善符号执行中发现的一系列问题,研究者们开始污点分析,最早的污点分析是由Funnywei提出的(Bufer Overfow Vulnerability Mining Model [Z/OL])。污点分析以三元组的形式表现:污点源(source)、污染汇聚点(sink)、无害处理(sanitizer)。接下来用一个例子来详细描述一下污点分析三元组在具体程序中的表现。
污点分析通过对系统中敏感数据进行标记,继而跟踪标记数据在程序中的传播以检测系统安全问题。上图是一段Android应用程序代码,运行该段程序会导致用户的密码数据通过发送信息的方式泄露;污点分析可以有效地检测该问题。污点分析首先要识别引入敏感数据的接口(污染源)并进行污点标记,如上图第4行引入密码数据的passwordText接口为污点源,并对pwd变量进行污点标记。如果被标记的变量又通过程序依赖关系传播给其他变量,那么根据相关传播规则继续标记对应的变量,例如上图中pwd变量的污点标记按照箭头进行传播,所以第5行的leakedPwd变量和第6行的leakedMessage变量都将会被标记,当被标记的变量达到信息泄露的位置(污点汇聚点)时,则根据对应的安全策略进行检测上图中第8行带污点标记的leakedMessage变量可以传播到发送信息的sendTextMessage接口,这就意味着这里是敏感数据会被泄露的地方。在第9行,密码数据通过加密转化后赋值给sanitized变量,继续传播sanitizedPwd变量并不会产生泄露问题,也就是说,如果污点变量经过一个使数据不再携带隐私信息的接口处理(无害处理),那么就可以移除污点数据的污点标记。
总结一下,污染源是将一些不可信或机密的输入数据引入应用程序的地方,这些输入数据可能来自应用程序API或网络接口。污点汇聚点是应用程序中执行安全操作(例如敏感的银行事务)的敏感点,需要对其进行保护,以免应用程序的完整性、机密性和可用性受到侵犯。无害处理指的是通过删除有害操作(如可能导致应用程序运行出其预期操作[7]的恶意程序),被污染的输入数据不再被认为对应用程序的信息安全有害的过程。
污染分析方法有两种,静态污染分析(STA)和动态污染分析(DTA)。在STA中,分析程序通过检查中间代码而不执行应用程序来测试应用程序。静态污染分析主要是通过两个步骤进行的,包括对中间代码进行反汇编和对得到的汇编代码进行分析。它有时可能使用二进制代码进行应用程序安全分析。然而,由于源代码很少附带COTS软件,这使得STA方法更难对抗恶意程序,从而减少了它的应用。类似地,用STA方法分析二进制代码也经历了复杂和挑战。例如,具有强大规避技术的恶意软件可以很容易地避开STA方法。这些限制促使我们确定替代方法,这些方法可以克服这些缺陷,从而准确可靠地分析应用程序。
另一方面,在DTA中,应用程序将在运行时测试可能的漏洞[12]。STA和DTA方法各有优缺点。例如,在应用程序中进行信息流分析时,DTA可能会受到运行时开销的影响,这可能会导致无法分析所有代码,从而导致无法发现一些潜在的威胁。另一方面,由于STA只分析应用程序代码而不执行它,它可能会受到准确性问题的影响。因此,一些研究人员提出了将这两种技术结合起来分析应用程序缺陷或漏洞的工具:- Constructing a hybrid taint analysis framework for diagnosing attacks on binary programs
- TeICC: targeted execution of inter-component communications in Android
- A hybrid analysis framework for detecting web application vulnerabilities
一些研究人员在DTA前后使用STA方法:
- A hybrid analysis framework for detecting web application vulnerabilities
- Combined approach to solving problems in binary code analysis
例如,在这样做时,在DTA之后使用STA,以查看使用DTA后的分析是否遗漏了任何可疑的东西。可以在DTA之前使用STA来分析应用程序在实际环境中执行代码之前的行为。
通常,DTA方法是在硬件级或代码级实现的。例如,一些DTA方法是在硬件内部实现的。尽管这种实现提供的开销相对最低,但由于它需要对处理器进行重大的架构和微架构更改,因此灵活性较差,实用性较差。通过使用源代码工具来跟踪受污染数据的传播,DTA也可以在软件的代码级执行。这种方法也不太实用,因为在大多数应用程序中,源代码很难用于安全性分析。然而,为了在不修改硬件或源代码的情况下执行数据流跟踪,DTA方法如:- Dytan: a generic dynamic taint analysis framework
- libdft: Practical dynamic data flow tracking for commodity systems
- Argos: an emulator for fingerprinting zero-day attacks for advertised honeypots with automatic signature generation
- BitBlaze: A new approach to computer security via binary analysis
- Dta++: dynamic taint analysis with targeted control-flow propagation
使用二进制代码执行安全分析。这种方法被更广泛地使用,因为它支持各种各样的分析。对于我来说,使用二进制代码的DTA方法是我们感兴趣的焦点。
-
python漏洞检测脚本_GitHub - GuanyunFeng/IDAPythonScripts: 基于IDAPython的二进制漏洞检测脚本库,对IDA...
2020-12-22 10:17:25IDAPythonScriptsIDAPythonScripts: 二进制漏洞静态分析检测脚本(IDA Pro)准备首先下载IDA Pro软件,版本 <= 6.8,7.0以上部分脚本不支持。漏洞内容(待更新)危险函数调用此脚本对IDA反汇编文件进行静态分析,检测...IDAPythonScripts
IDAPythonScripts: 二进制漏洞静态分析检测脚本(IDA Pro)
准备
首先下载IDA Pro软件,版本 <= 6.8,7.0以上部分脚本不支持。
漏洞内容(待更新)
危险函数调用
此脚本对IDA反汇编文件进行静态分析,检测其是否调用了可能产生漏洞的危险函数,没有找到汇编中的统一的危险函数集合,只好自己一点点积累,在functions.sql中可以看到一些常见的危险函数,保存在MySQL数据库中以后也方便Python调用。
栈堆缓冲区溢出漏洞
脚本从函数调用的地址向后跟踪推送到堆栈中的参数,并返回与指定参数对应的操作数。然后确定eax在被推入堆栈时是否指向堆栈缓冲区,存在可能造成堆栈缓冲区溢出的利用点。
参考链接
只能在IDA版本小于6.8上使用,IDA7.0报错。
格式化字符串漏洞
该脚本结合Github上开源IDA插件LazyIDA,吸收了其中对格式化字符串漏洞检测方法,使其功能在Python脚本中得以实现。
整型溢出漏洞
脚本首先计算当前分配给函数的内存大小,而后从IDA反汇编文件中找到各个函数的参数大小,并进行比较,检测是否存在“整型”溢出的可能。
参考链接1 参考链接2 参考链接3
缓冲区是变化的,因此检测出整型溢出的可能性很大,但是想要利用起来相对更难。
脚本执行完毕后会造成IDA闪退,原因未知...
...
关于更新
漏洞都已经过测试,第一次首先发布4个已经成功检测的漏洞脚本,有一些地方仍然鸡肋,还需大佬支持改善。IDA是一个强大的反汇编分析软件,其中IDAPython插件可以简化手工分析过程,提高测试效率,然而国内对IDA的教学并不多,IDAPython插件的脚本编写更是如此,希望通过这个小仓库丰富IDAPython针对各类漏洞的分析脚本,前人栽树,后人乘凉。真心希望能够与大佬们多多交流学习,带带小白,微信:wwy18795980897。
感谢
部分脚本是在国内外众多大佬编写的模块上进行的代码加工,功能整合,是他们的默默奉献让这里的脚本壮大起来,以及发布在Github,Twitter,CSDN,安全客,FreeBuf等平台上的精彩文章,总是能让我眼前一亮,给我更多的灵感,感谢你们!!!
-
基于动态二进制插桩的密钥安全性检测
2021-01-20 05:40:25针对加密软件中的密钥安全性问题,提出一种基于动态二进制插桩的密钥安全性检测方法。该方法面向CryptoAPI加密应用程序,首先通过对CryptoAPI密钥应用模式的分析,指出潜在的密钥安全性漏洞;然后以动态二进制分析... -
利用动态二进制分析方法实现内存自动检测
2020-10-16 19:17:43探讨了采用前沿的动态二进制分析技术检测软件中与内存相关错误,为程序员定位错误位置、查找错误、消除错误原因提供准确的信息的方法,为致力于内存程序错误检测技术的研究人员提供参考。在C/C++软件中的内存错误... -
二进制加密
2014-04-22 08:57:262进制加密,用于检测软件加密 -
关于二进制代码相似度比较
2019-10-21 22:10:26背景:跨平台二进制代码相似性检测问题旨在检测来自两个平台的二进制函数是否相似。包含窃检测、恶意软件检测和漏洞搜索。依赖approximate graphmatching算法,慢且不准。 解决:提出新型基... -
二进制文件加密
2015-08-03 14:27:541.bin文件,exe文件,图片文件等都可以使用二进制加密方式进行加密。 2.使用while循环来取代for循环进行字符加密。 3.exe文件加密解密的应用:先将exe文件伪装成txt文件,避免杀毒软件检测,再通过解密,txt–>exe... -
二进制文件相似度计算-(综述).pdf
2020-06-08 13:35:44二进制文件相似度计算-(综述)涉及文件关联、函数关联、漏洞关联、漏洞发现等多方面的应用,在软件剽窃检测、代码抄袭、版本识别、补丁查找等有重要作用。 -
基于蒙特卡罗仿真的多种二进制通信系统性能分析
2021-01-31 08:10:41介绍了在加性高斯噪声干扰条件下,多种二进制通信系统信号的传递与最佳接收,根据蒙特卡罗仿真方法基本思想,建立在加性噪声干扰下的相关检测系统蒙特卡罗仿真模型。模型通过Matlab软件方法实现,最终仿真结果与对应... -
论文研究-基于动态符号执行的二进制程序缺陷发现系统.pdf
2019-07-22 19:51:09基于软件虚拟机的动态二进制翻译机制和污点传播机制, 对符号计算需要关注的程序运行时语义信息提取、中间语言符号计算等机制进行了研究, 改进了传统动态符号执行的路径调度部分, 分析了程序缺陷的符号断言表达形式, ... -
论文研究-基于反编译的二进制比对技术研究 .pdf
2019-08-16 11:58:19基于反编译的二进制比对技术研究,洪海,崔宝江,软件同源性鉴别和抄袭检测是对软件知识产权进行保护的重要技术手段。本文在研究和总结现有同源性鉴别比对技术的基础上,提出一种 -
经典面试(1) 二分法与二进制
2012-10-29 15:59:292的10次方等于1024,1024以内的所有自然数都可以用10个数位的二进制数表示出来。1000小于1024,此题可解。 将1000瓶酒从1到1000分别进行编号,并转化成10个数位的二进制数表示。 编号 -
二进制学习-反跟踪技术
2018-02-06 12:30:070x00.BeingDebugged1.... 有种保护技术会检测是否有调试器正在调试保护软件,然后需要获取是否被调试的消息,这个消息存储在PEB结构中,PEB结构:typedef struct _PEB { BYTE Reserved1[2]; BY... -
k8s二进制无坑安装——基础篇
2020-07-16 15:33:23文章目录一、准备虚拟机1、修改所有机器的主机名2、修改所有机器的ip地址和DNS(虚拟机)3、所有机器关闭selinux4、所有机器关闭防火墙5、所有机器安装环境工具二、准备虚拟机网络环境1、其中一台机器上安装bind91)... -
oletools:oletools-用于分析MS OLE2文件(结构化存储,复合文件二进制格式)和MS Office文档的python工具...
2021-02-05 16:55:38是python工具包,用于分析(也称为结构化存储,复合文件二进制格式或复合文档文件格式),例如Microsoft Office文档或Outlook邮件,主要用于恶意软件分析,取证和调试。 它基于解析器。 有关更多信息,请参见 。 ... -
【原创】利用动态二进制加密实现新型一句话木马之.NET篇
2019-05-24 09:13:00本系列文章重写了java、.net、php三个版本的一句话木马,可以解析并执行客户端传递过来的加密二进制流,并实现了相应的客户端工具。从而一劳永逸的绕过WAF或者其他网络防火墙的检测。当然,截止到今天,这三个版本一... -
利用动态二进制加密实现新型一句话木马之.NET篇(转)冰蝎
2019-07-16 20:41:35本系列文章重写了java、.net、php三个版本的一句话木马,可以解析并执行客户端传递过来的加密二进制流,并实现了相应的客户端工具。从而一劳永逸的绕过WAF或者其他网络防火墙的检测。当然,截止到今天,这三个版本一... -
二进制部署K8S单Master群集(二)Docker的安装、Flannel网络部署
2020-04-28 16:44:00文章目录软件介绍Node节点上安装dockerFlannel网络概念介绍Flannel网络部署部署完成的检测 软件介绍 Docker版本:19.03 Flannel版本:0.10 Node节点上安装docker 安装依赖包 yum install -y yum-utils device-... -
二进制 RPM 包校验与数字签名 (Verify/signature)
2020-06-07 11:35:49系统中安装的RPM包数量众多,而每个RPM包中都包含大量的文件,万一某个文件被误删除了,或者修改了某个文件中的数据,或者有人恶意修改了某个文件,我们是否有监控和检测手段发现这些问题呢?这时候,必须使用RPM包... -
二进制转换与此平台,VMware Workstation不,Workstation 不可恢复,此虚拟环境中的长模式
2017-03-24 14:30:30在虚拟机安装OS后,启动虚拟机报:二进制转换与此平台上的长模式不兼容。此虚拟环境中的长模式将被禁用。因此需要使用长模式的应用程序将无法正常运行。经过各种查资料终于可以启动了,特此把个人成功案例给大家分享... -
二进制转换与此平台,VMware Workstation不,Workstation 不可恢复,此虚拟环境中的长模式...
2018-01-27 19:55:00在虚拟机安装OS后,启动虚拟机报:二进制转换与此平台上的长模式不兼容。此虚拟环境中的长模式将被禁用。因此需要使用长模式的应用程序将无法正常运行。经过各种查资料终于可以启动了,特此把个人成功案例给大家分享... -
基于机器学习的恶意软件检测(二)
2018-08-10 15:04:561.恶意软件的基本检测方法 一个有效的,强大的和可扩展的恶意软件识别模块是每...这可以包括可执行文件格式描述、代码描述、二进制数据统计、通过代码仿真提取文本字符串和信息机其他相似数据。(静态信息) ... -
面向源代码的软件漏洞静态检测综述
2021-01-20 04:55:01软件静态漏洞检测依据分析对象主要分为二进制漏洞检测和源代码漏洞检测。由于源代码含有更为丰富的语义信息而备受代码审查人员的青睐。针对现有的源代码漏洞检测研究工作,从基于代码相似性的漏洞检测、基于符号执行... -
基于沙盒的Android恶意软件检测技术研究
2021-01-28 20:12:22本文从实际出发,针对移动终端对安全的需求和现有查杀软件存在的弊端进行了深入的分析,提出了一种基于沙盒的结合移动端和云端的恶意软件检测技术。该技术采用了基于动态分析的沙盒技术,从一定程度上弥补了传统的... -
卡巴斯基白皮书-基于机器学习的恶意软件检测-笔记
2020-03-04 17:48:56这篇文章描述卡巴斯基实验室基于机器学习的恶意软件检测实践,包括静态分析和行为分析两类检测方法,以及数据预处理工作。 执行前数据:Exe格式描述,代码描述,二进制数据统计,文本字符串,通过代码仿真而得到的... -
BinDiff(相似文件检测软件)V1.14免费绿色版
2019-07-30 22:08:42BinDiff(相似文件检测软件)是一款非常实用的文件相似度检测...通过对比文件的MD5值可以快速检测出文件是否相似,从而给出详细的分析结果,找出二进制相等的可能性。在论文检测和编程中比较常用,有需要的朋友可以下载! -
恶意软件相似度检测过程
2020-07-10 09:52:46引出问题:如果对每个二进制进行分析,那么在分析人手比较少的时候,这种会造成资源负担;同时,如果采用先来先分析或者随机选择的方法,这种方式也会造成重复分析的过程。 那么也就是说,我们...
-
【Hadoop】zookeeper 集群安装
-
Android Studio安装教程(超级详细)
-
tomcat启动问题
-
VDA_6.3-2016英文版.pdf
-
海峡两岸谋定文旅互动-国情讲坛·钱美梅:倡议业界凝心聚力
-
MySQL 事务和锁
-
Idea springboot应用,启动报错:org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputExcept
-
文件多功能器。2021.3.1..rar
-
应急小故事06·应急资源(运输)
-
投标方法论
-
溶胶-凝胶衍生自杂化空心二氧化硅纳米球的近紫外和可见光抗反射涂层
-
基于模糊神经网络的信噪分离研究
-
译文_nwp_036---Direction Finding.pdf
-
常考压轴01-线段长问题-2020年中考数学特训营.pdf
-
基于变分分解的传感器信号信噪分离
-
习作:猜猜他是谁.docx
-
数据空间:数据空间是为SKULLKANDY Discord服务器打造的开源Discord机器人-源码
-
云开发后台+微信扫码点餐小程序+cms网页管理后台 含后厨端和用户端
-
山东大学校内网盘开发日志 - 项目汇总篇
-
MySQL 索引