CN106203076A - 一种利用ebp判断恶意文件的方法 - Google Patents
一种利用ebp判断恶意文件的方法 Download PDFInfo
- Publication number
- CN106203076A CN106203076A CN201610478251.XA CN201610478251A CN106203076A CN 106203076 A CN106203076 A CN 106203076A CN 201610478251 A CN201610478251 A CN 201610478251A CN 106203076 A CN106203076 A CN 106203076A
- Authority
- CN
- China
- Prior art keywords
- node
- ebp
- function
- type
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明涉及一种利用EBP判断恶意文件的方法,其基于恶意样本文件,建立一套函数栈帧信息数据库;然后,获取要判断的未知样本文件的函数栈帧信息,在数据库中进行匹配,根据匹配的结果和预制的规则判定获取的未知样本文件的安全性,其中,函数栈帧信息是基于EBP寄存器的值计算得到的;通过本发明,可以准确判断恶意文件。
Description
技术领域
本发明具体涉及一种判断恶意文件的方法,属于信息安全技术领域。
背景技术
在信息安全领域,恶意文件检测是非常重要的一环。恶意文件多种多样,按照文件内容的类型分类,可执行二进制文件有windows系统的PE文件,Linux系统的ELF文件,IOS系统的可执行文件,Android系统上的APK文件;客户端脚本类文件有Javascript,VBscript,shell脚本,Powershell脚本,python脚本,ruby脚本等;服务端脚本文件有php文件,Python文件,asp文件等等。
在检测恶意文件的时候,针对不同的文件类型,采用的方式方法也不一样。以可执行二进制文件为例,传统的恶意文件检测技术有文件特征码检测,静态启发式检测,动态启发检测,主动防御检测,沙箱检测,文件大数据检测等等。
恶意文件的自动化判定技术,是根据已知文件与未知文件之间的关联,来推测出未知文件的属性。这种关联包含了相似度比较,差异性比较,还有文件的来源是否相同,是否有同样的签名信息等等。其中最重要的一种关联信息就是文件内容的相似度比较,因为多数情况下,获得的就只有文件的内容,而没有文件的外围关联信息。内容相似度比较,传统的技术方案有,字符串相似度比较,文件结构相似度比较,行为相似度比较,代码相似度比较等等。本文涉及的方法属于代码相似度比较的范畴。
本发明涉及一种恶意程序的判定方法,特别涉及一种利用文件执行时的EBP寄存器信息来判定文件属性的自动化判定方法。本方法应用在判定一个可执行二进制样本是否是恶意文件的场景。当前现有的技术很多,包括人工判定,根据样本文件的文件结构信息、文件调用API信息、文件大数据信息等来判定等等;在利用反编译后的函数信息判定样本属性的研究方向上,也涌现出了各种方法,如利用函数结构信息判定,利用函数调用关系判定等,本文的方法选取的判定依据是文件动态执行时产生的函数栈帧信息。
发明内容
本发明为了解决现有技术中的上述问题,提出一种判断恶意文件的方法,具体提供一种利用EBP判断恶意文件的方法,其基于恶意样本文件,建立一套函数栈帧信息数据库;然后,获取要判断的未知样本文件的函数栈帧信息,在数据库中进行匹配,根据匹配的结果和预制的规则判定获取的未知样本文件的安全性,所述方法具体包括:
函数栈帧信息数据库的建立步骤,其包括:步骤101,采集恶意样本文件;步骤102,恶意样本文件插桩执行或者调试运行,步骤103,获取A类型结点;步骤104,过滤系统函数;步骤105,计算B类型结点;步骤106,包含函数栈帧计算的C类型结点计算;步骤107,包含函数栈帧信息入数据库的C类型结点入库;
未知样本的自动化判定步骤,其包括:步骤201,未知样本文件插桩执行或者调试运行;步骤202,获取A类型结点;步骤203,过滤系统函数;步骤204,计算B类型结点;步骤205,包含函数栈帧计算的C类型结点计算;步骤206,包含函数栈帧信息数据库查询的C类型结点数据库查询;步骤207,根据规则判定未知样本的恶意程度;
其中,函数栈帧信息是基于EBP寄存器的值计算得到的,函数栈帧信息数据库存储了恶意样本文件运行时的函数调用路径上的所有函数的栈帧长度信息,并且把每个函数的栈帧长度作为一个结点,各个结点又组成了一个链表,结点的数值是此函数栈帧长度,几个相邻的结点表示这几个函数运行时相互间的调用关系,其表征了函数之间的联系。
优选的,函数栈帧信息数据库的建立步骤具体为:步骤101,采集恶意样本文件,其中,恶意文件样本是经过确认的,以确保文件属性的准确;
步骤102,恶意样本文件插桩执行或者调试运行,其利用工具来对程序执行时的各个寄存器的状态做记录,记录程序的CPU寄存器的值;
步骤103,获取A类型结点,其记录指令寄存器和栈寄存器的值,这种记录是以线程为区分的,针对不同的线程,分别记录这两个寄存器的值,每个线程的指令寄存器和栈寄存器的值构成一个集合;每一个样本文件按照线程分成了几个集合,每个集合里面是一个链表,每个链表的结点是A类型结点,它包含两种值,记为EIP和EBP;
步骤104,过滤系统函数,其针对步骤103得到的所有的A类型结点,判断结点中的EIP的值,如果它的值位于操作系统分配的专门用于加载系统库文件的地址空间内,那么删除此结点,即从链表上摘除此结点;
步骤105,计算B类型结点:B类型结点是从步骤103存储的A类型结点中提取出来的,提取方法为,在一个寄存器集合内,当且仅当EBP寄存器的值发生变化时,提取变化发生时点的EIP寄存器的值,变化之前的EBP的值,变化之后的EBP的值,B类型结点包含三种数据,一是EIP寄存器的值,记为EIP;二是变化之前的EBP寄存器的值,记为EBP_before;三是变化之后的EBP寄存器的值,记为EBP_after;
步骤106,包含函数栈帧计算的C类型结点计算;其中,B类型结点包含3种数据,分别是EIP,EBP_before,EBP_after,众多的B类型结点又组成了一条链表;C类型结点是根据B类型结点计算出来的;
步骤107,包含函数栈帧信息入数据库的C类型结点入库:经过步骤106,针对每个线程的集合都计算出来了许多的C类型结点,每个结点包含两种数据,function_Instruction_count和function_frame_length,并且多个C类型结点又组成了一条链表,将此链表存储到数据库里。
优选的,C类型结点是根据B类型结点计算出来的,其具体计算方法如下:首先,取B类型结点链表的第一个结点,得到三个数据,分别记作EIP_1,EBP_before_1,EBP_after_1;然后,沿着此链表向后搜索这样一个结点,把此节点的数据分别记作EIP_2,EBP_before_2,EBP_after_2,此结点要同时满足以下两个条件,EBP_before_1=EBP_after_2和EBP_after_1=EBP_before_2;如果找到这样的结点,即可计算C类型结点,C类型结点含有两类值,一是和函数指令长度相关的,为function_Instruction_count,它的值为EIP2减去EIP1的差值;二是和函数栈帧相关的,为function_frame_length,它的值为EBP_before_1减去EBP_after_1差值;如果找到了符合要求的结点,那么就删除掉第2个结点,如果没有找到符合要求的结点,那么放弃计算C类型结点;最后,沿着B类型结点链表向后找到下一个B类型结点,做同样的处理。
优选的,未知样本的自动化判定步骤具体为:步骤201,未知样本文件插桩执行或者调试运行;其利用工具来对程序执行时的各个寄存器的状态做记录,记录程序的CPU寄存器的值;
步骤202,获取A类型结点;其记录指令寄存器和栈寄存器的值,这种记录是以线程为区分的,针对不同的线程,分别记录这两个寄存器的值,每个线程的指令寄存器和栈寄存器的值构成一个集合;每一个样本文件按照线程分成了几个集合,每个集合里面是一个链表,每个链表的结点是A类型结点,它包含两种值,记为EIP和EBP;
步骤203,过滤系统函数;其针对步骤202得到的所有的A类型结点,判断结点中的EIP的值,如果它的值位于操作系统分配的专门用于加载系统库文件的地址空间内,那么删除此结点,即从链表上摘除此结点;
步骤204,计算B类型结点:B类型结点是从步骤202存储的A类型结点中提取出来的,提取方法为,在一个寄存器集合内,当且仅当EBP寄存器的值发生变化时,提取变化发生时点的EIP寄存器的值,变化之前的EBP的值,变化之后的EBP的值,B类型结点包含三种数据,一是EIP寄存器的值,记为EIP;二是变化之前的EBP寄存器的值,记为EBP_before;三是变化之后的EBP寄存器的值,记为EBP_after;
步骤205,包含函数栈帧计算的C类型结点计算;其中,B类型结点包含3种数据,分别是EIP,EBP_before,EBP_after,众多的B类型结点又组成了一条链表,C类型结点是根据B类型结点计算出来的;
步骤206,包含函数栈帧信息数据库查询的C类型结点数据库查询,得到匹配情况,匹配过程如下:如果只有一条链表,则直接匹配;如果有多条链表,则可以逐条匹配;
步骤207,根据规则判定未知样本的恶意程度;其中,C类型结点含有两个数值,function_Instruction_count和function_frame_length,这两个数值就又构成了两条各自的链表,当function_frame_length链表中和数据库中的function_frame_length链表比较时,发现存在长度大于N的结点段完全匹配,那么就认定此样本属于恶意样本,N为长度阈值。
优选的,C类型结点是根据B类型结点计算出来的,其具体计算方法如下:首先,取B类型结点链表的第一个结点,得到三个数据,分别记作EIP_1,EBP_before_1,EBP_after_1;然后,沿着此链表向后搜索这样一个结点,把此节点的数据分别记作EIP_2,EBP_before_2,EBP_after_2,此结点要同时满足以下两个条件,EBP_before_1=EBP_after_2和EBP_after_1=EBP_before_2;如果找到这样的结点,即可计算C类型结点,C类型结点含有两类值,一是和函数指令长度相关的,为function_Instruction_count,它的值为EIP2减去EIP1的差值;二是和函数栈帧相关的,为function_frame_length,它的值为EBP_before_1减去EBP_after_1差值;如果找到了符合要求的结点,那么就删除掉第2个结点,如果没有找到符合要求的结点,那么放弃计算C类型结点;最后,沿着B类型结点链表向后找到下一个B类型结点,做同样的处理;其中,针对每个线程的集合都计算出来了许多的C类型结点,每个结点包含两种数据,function_Instruction_count和function_frame_length,并且多个C类型结点又组成了一条链表。
优选的,步骤206中具体匹配包括:其中,链表的结点是C类型的,每个结点含有两个数值,function_Instruction_count和function_frame_length,这两个数值就又构成了两条各自的链表,分别比较这两条链表和数据库中的链表的相似度。
实质上,本发明,首先,基于恶意样本文件,建立一套函数栈帧信息数据库;然后,获取要判断的样本文件的函数栈帧信息,在数据库中进行匹配,根据匹配的结果和预制的规则就可以判定未知样本的安全性。
整个过程涉及两大部分,一是函数栈帧信息数据库的建立,二是未知样本的自动化判定过程。函数栈帧信息数据库的建立包括以下步骤,采集样本文件;样本文件插桩执行或者调试运行;系统函数过滤;函数栈帧计算;函数栈帧信息入数据库。未知样本的自动化判定过程包含以下步骤,样本文件插桩执行或者调试运行;系统函数过滤;函数栈帧计算;函数栈帧信息数据库查询,根据规则判定样本的恶意程度。
函数栈帧信息数据库实际上存贮了恶意样本文件运行时的函数调用路径上的所有函数的栈帧长度信息,并且把每个函数的栈帧长度作为一个结点,各个结点又组成了一个链表。结点的数值是此函数栈帧长度,它表征了函数在此维度的内在信息;几个相邻的结点表示这几个函数运行时相互间的调用关系,某种意义上,这表征了函数之间的联系。
两个或者两个以上的结点构成了段落,当我们得到未知样本的一条同样的链表时,我们通过比较两个链表,得出两条链表含有的相同段落的数量和最大长度,这种信息再加上我们人为设置的规则就可以用来判断未知样本的属性,通过本发明,根据样本动态运行时产生的函数调用关系来进行判断,可以准确判断恶意文件。
本方法还实现了:1.使用一个函数的栈帧信息来表示这个函数本身;2.对于存在调用关系的一组函数,每一个函数的栈帧信息是一个结点,这组函数的所有结点按照运行时的调用顺序会形成一个链表,使用这个链表来表征这组函数之间的调用关系;3.使用函数的汇编指令的数量来表征这个函数本身;4.对于存在调用关系的一组函数,每一个函数的汇编指令数量是一个结点,这组函数的所有结点按照运行时的调用顺序会形成一个链表,使用这个链表来表征这组函数之间的调用关系;5.使用线程的所有函数的栈帧信息形成的链表,来表征此线程;6.使用线程的所有函数的汇编指令数量形成的链表,来表征此线程。
这种方法同样可以应用在其它领域,这里举例说明:比较两个或者多个文件的相似度,即通过比较两个文件的函数调用关系的相似度来判定两个文件的相似度;恶意病毒木马文件提取特征,即把函数调用关系作为判定的特征;库函数的代码识别,即把库函数的调用关系整理出来,并标记成对应库的名称,凡是与之匹配的就识别为对应的库文件。
附图说明
图1是本发明函数栈帧信息数据库的建立流程图。
图2是本发明未知样本文件的判定过程流程图。
具体实施方式
下面结合附图对本发明做进一步详细说明。
参见图1,函数栈帧信息数据库的建立包括:
步骤101,采集大量的恶意文件;恶意文件样本必须是已经经过确认的,确保文件属性的准确,比如恶意样本可以选取各大杀毒软件公司的样本库;
步骤102,监控运行恶意样本文件;这里的监控运行指的是利用工具来对程序执行时的各个寄存器的状态做记录,监控的粒度就是可以记录程序的CPU寄存器的值。可以实现这一步的方法有很多种,这里列举3种不同的方法:一是对样本程序的汇编指令进行插桩,可以使用工具如Pintools来完成这样的操作;二是使用动态调试的方法,可以使用调试器如ImmunityDebugger来完成;三是可以使用PE模拟器,此类模拟器既有开源工具可以使用,也可以自己开发功能更强大完善的模拟器。
步骤103,获取A类型结点;步骤102无论采用哪种方法,我们记录指令寄存器和栈寄存器的值,而且这种记录是以线程为区分的,也就是说,针对不同的线程,我们分别记录这两个寄存器的值,每个线程的指令寄存器和栈寄存器的值构成一个集合。在不同的硬件平台上,这两个寄存器名称可能不同,以32位X86平台为例,这两个寄存器是EIP和EBP,EBP为扩展基址指针寄存器,以下流程描述中我们均使用32位X86平台。A类型结点包含两种值,一是EIP寄存器的值,二是EBP寄存器的值;经过步骤103,每一个样本文件按照线程分成了几个集合,每个集合里面是一个链表,每个链表的结点是A类型结点,它包含两种值,我们分别记为EIP和EBP。
步骤104,过滤系统函数;针对步骤103得到的所有的A类型结点,判断结点中的EIP的值,如果它的值位于操作系统分配的专门用于加载系统库文件的地址空间内,那么删除此结点,即从链表上摘除此结点。此步骤的目的是过滤掉系统函数,排除系统函数引入的干扰。以32位的Windows系统为例,加载系统库文件的地址一般为0x7*******,那么我们就把EIP地址以0x7*******开头的结点全部删除掉。
步骤105,计算B类型结点;B类型结点是从步骤103存储的A类型结点中提取出来的,提取方法为,在一个寄存器集合内,当且仅当EBP寄存器的值发生变化时,我们提取变化发生时点的EIP寄存器的值,变化之前的EBP的值,变化之后的EBP的值。B类型结点包含三种数据,一是EIP寄存器的值,记为EIP;二是变化之前的EBP寄存器的值,记为EBP_before;三是变化之后的EBP寄存器的值,记为EBP_after。
步骤106,计算C类型结点;B类型结点包含3种数据,分别是EIP,EBP_before,EBP_after,众多的B类型结点又组成了一条链表。C类型结点是根据B类型结点计算出来的,具体计算方法如下:首先,取B类型结点链表的第一个结点,得到三个数据,分别记作EIP_1,EBP_before_1,EBP_after_1;然后,沿着此链表向后搜索这样一个结点,我们把此节点的数据分别记作EIP_2,EBP_before_2,EBP_after_2,此结点要同时满足以下两个条件,EBP_before_1==EBP_after_2和EBP_after_1==EBP_before_2;如果我们找到这样的结点,那么下一步我们计算C类型结点,C类型结点含有两类值,一是和函数指令长度相关的,我们命名为function_Instruction_count,它的值为EIP2减去EIP1的差值;二是和函数栈帧相关的,我们命名为function_frame_length,它的值为EBP_before_1减去EBP_after_1差值;如果我们找到了符合要求的结点,那么就删除掉第2个结点,如果没有找到符合要求的结点,那么放弃计算C类型结点;最后,沿着B类型结点链表向后找到下一个B类型结点,做同样的处理。
步骤107,C类型结点入库;经过步骤106,我们针对每个线程的集合都计算出来了许多的C类型结点,每个结点包含两种数据,function_Instruction_count和function_frame_length,并且多个C类型结点又组成了一条链表,我们把此链表存储到数据库里。
参见图2,未知样本文件的判定过程包括:步骤201,监控运行恶意样本文件;这里的监控运行指的是利用工具来对程序执行时的各个寄存器的状态做记录,监控的粒度就是可以记录程序的CPU寄存器的值。可以实现这一步的方法有很多种,这里列举3种不同的方法:一是对样本程序的汇编指令进行插桩,可以使用工具如Pintools来完成这样的操作;二是使用动态调试的方法,可以使用调试器如ImmunityDebugger来完成;三是可以使用PE模拟器,此类模拟器既有开源工具可以使用,也可以自己开发功能更强大完善的模拟器。
步骤202,获取A类型结点;步骤102无论采用哪种方法,我们记录指令寄存器和栈寄存器的值,而且这种记录是以线程为区分的,也就是说,针对不同的线程,我们分别记录这两个寄存器的值,每个线程的指令寄存器和栈寄存器的值构成一个集合。在不同的硬件平台上,这两个寄存器名称可能不同,以32位X86平台为例,这两个寄存器是EIP和EBP,以下流程描述中我们均使用32位X86平台。A类型结点包含两种值,一是EIP寄存器的值,二是EBP寄存器的值;经过步骤103,每一个样本文件按照线程分成了几个集合,每个集合里面是一个链表,每个链表的结点是A类型结点,它包含两种值,我们分别记为EIP和EBP。
步骤203,过滤系统函数;针对步骤103得到的所有的A类型结点,判断结点中的EIP的值,如果它的值位于操作系统分配的专门用于加载系统库文件的地址空间内,那么删除此结点,即从链表上摘除此结点。此步骤的目的是过滤掉系统函数,排除系统函数引入的干扰。以32位的Windows系统为例,加载系统库文件的地址一般为0x7*******,那么我们就把EIP地址以0x7*******开头的结点全部删除掉。
步骤204,计算B类型结点;B类型结点是从步骤103存储的A类型结点中提取出来的,提取方法为,在一个寄存器集合内,当且仅当EBP寄存器的值发生变化时,我们提取变化发生时点的EIP寄存器的值,变化之前的EBP的值,变化之后的EBP的值。B类型结点包含三种数据,一是EIP寄存器的值,记为EIP;二是变化之前的EBP寄存器的值,记为EBP_before;三是变化之后的EBP寄存器的值,记为EBP_after。
步骤205,计算C类型结点;B类型结点包含3种数据,分别是EIP,EBP_before,EBP_after,众多的B类型结点又组成了一条链表。C类型结点是根据B类型结点计算出来的,具体计算方法如下:首先,取B类型结点链表的第一个结点,得到三个数据,分别记作EIP_1,EBP_before_1,EBP_after_1;然后,沿着此链表向后搜索这样一个结点,我们把此节点的数据分别记作EIP_2,EBP_before_2,EBP_after_2,此结点要同时满足以下两个条件,EBP_before_1==EBP_after_2和EBP_after_1==EBP_before_2;如果我们找到这样的结点,那么下一步我们计算C类型结点,C类型结点含有两类值,一是和函数指令长度相关的,我们命名为function_Instruction_count,它的值为EIP2减去EIP1的差值;二是和函数栈帧相关的,我们命名为function_frame_length,它的值为EBP_before_1减去EBP_after_1差值;如果我们找到了符合要求的结点,那么就删除掉第2个结点,如果没有找到符合要求的结点,那么放弃计算C类型结点;最后,沿着B类型结点链表向后找到下一个B类型结点,做同样的处理。经过步骤205,我们针对每个线程的集合都计算出来了许多的C类型结点,每个结点包含两种数据,function_Instruction_count和function_frame_length,并且多个C类型结点又组成了一条链表
步骤206,查询C类型结点数据库,得到匹配情况;数据库中存储的是多个C类型结点的链表,我们获取的也是一条或者多条C类型结点的链表,匹配过程如下:如果只有一条链表,则直接匹配;如果有多条链表,则可以逐条匹配。链表的结点是C类型的,每个结点含有两个数值,function_Instruction_count和function_frame_length,这两个数值就又构成了两条各自的链表,我们要分别比较这两条链表和数据库中的链表的相似度。以function_frame_length为例,比较样本的function_frame_length链表和数据库中的function_frame_length链表,方法是把function_frame_length的值当作是一个基本单元,把链表当作是由基本单元组成的字符串,相邻的基本单元组成段,最终通过比较得出两个链表中含有的相同段的长度和数量,得到两个链表的相似度。
步骤207,根据匹配情况,判定文件是否恶意;C类型结点含有两个数值,function_Instruction_count和function_frame_length,这两个数值就又构成了两条各自的链表,这两个链表从不同的角度反映了函数调用关系的相似度,它们既可以配合使用,也可以单独使用。这里以function_frame_length链表举例,匹配规则可以如下定义,当function_frame_length链表中和数据库中的function_frame_length链表比较时,发现存在长度大于N的结点段完全匹配,那么就认定此样本属于恶意样本,N值是平衡检测率和误报率之后取的阈值。
以上所述的实施例仅仅是对本发明的优选实施方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通工程技术人员对本发明的技术方案作出的各种变形和改进,均应落入本发明的权利要求书确定的保护范围内。
Claims (6)
1.一种利用EBP判断恶意文件的方法,其基于恶意样本文件,建立一套函数栈帧信息数据库;然后,获取要判断的未知样本文件的函数栈帧信息,在数据库中进行匹配,根据匹配的结果和预制的规则判定获取的未知样本文件的安全性,其特征在于,所述方法具体包括:
函数栈帧信息数据库的建立步骤,其包括:步骤101,采集恶意样本文件;步骤102,恶意样本文件插桩执行或者调试运行,步骤103,获取A类型结点;步骤104,过滤系统函数;步骤105,计算B类型结点;步骤106,包含函数栈帧计算的C类型结点计算;步骤107,包含函数栈帧信息入数据库的C类型结点入库;
未知样本的自动化判定步骤,其包括:步骤201,未知样本文件插桩执行或者调试运行;步骤202,获取A类型结点;步骤203,过滤系统函数;步骤204,计算B类型结点;步骤205,包含函数栈帧计算的C类型结点计算;步骤206,包含函数栈帧信息数据库查询的C类型结点数据库查询;步骤207,根据规则判定未知样本的恶意程度;
其中,函数栈帧信息是基于EBP寄存器的值计算得到的,函数栈帧信息数据库存储了恶意样本文件运行时的函数调用路径上的所有函数的栈帧长度信息,并且把每个函数的栈帧长度作为一个结点,各个结点又组成了一个链表,结点的数值是此函数栈帧长度,几个相邻的结点表示这几个函数运行时相互间的调用关系,其表征了函数之间的联系。
2.根据权利要求1所述的方法,其特征在于,函数栈帧信息数据库的建立步骤具体为:步骤101,采集恶意样本文件,其中,恶意文件样本是经过确认的,以确保文件属性的准确;
步骤102,恶意样本文件插桩执行或者调试运行,其利用工具来对程序执行时的各个寄存器的状态做记录,记录程序的CPU寄存器的值;
步骤103,获取A类型结点,其记录指令寄存器和栈寄存器的值,这种记录是以线程为区分的,针对不同的线程,分别记录这两个寄存器的值,每个线程的指令寄存器和栈寄存器的值构成一个集合;每一个样本文件按照线程分成了几个集合,每个集合里面是一个链表,每个链表的结点是A类型结点,它包含两种值,记为EIP和EBP;
步骤104,过滤系统函数,其针对步骤103得到的所有的A类型结点,判断结点中的EIP的值,如果它的值位于操作系统分配的专门用于加载系统库文件的地址空间内,那么删除此结点,即从链表上摘除此结点;
步骤105,计算B类型结点:B类型结点是从步骤103存储的A类型结点中提取出来的,提取方法为,在一个寄存器集合内,当且仅当EBP寄存器的值发生变化时,提取变化发生时点的EIP寄存器的值,变化之前的EBP的值,变化之后的EBP的值,B类型结点包含三种数据,一是EIP寄存器的值,记为EIP;二是变化之前的EBP寄存器的值,记为EBP_before;三是变化之后的EBP寄存器的值,记为EBP_after;
步骤106,包含函数栈帧计算的C类型结点计算;其中,B类型结点包含3种数据,分别是EIP,EBP_before,EBP_after,众多的B类型结点又组成了一条链表;C类型结点是根据B类型结点计算出来的;
步骤107,包含函数栈帧信息入数据库的C类型结点入库:经过步骤106,针对每个线程的集合都计算出来了许多的C类型结点,每个结点包含两种数据,function_Instruction_count和function_frame_length,并且多个C类型结点又组成了一条链表,将此链表存储到数据库里。
3.根据权利要求2所述的方法,其特征在于,C类型结点是根据B类型结点计算出来的,其具体计算方法如下:首先,取B类型结点链表的第一个结点,得到三个数据,分别记作EIP_1,EBP_before_1,EBP_after_1;然后,沿着此链表向后搜索这样一个结点,把此节点的数据分别记作EIP_2,EBP_before_2,EBP_after_2,此结点要同时满足以下两个条件,EBP_before_1=EBP_after_2和EBP_after_1=EBP_before_2;如果找到这样的结点,即可计算C类型结点,C类型结点含有两类值,一是和函数指令长度相关的,为function_Instruction_count,它的值为EIP2减去EIP1的差值;二是和函数栈帧相关的,为function_frame_length,它的值为EBP_before_1减去EBP_after_1差值;如果找到了符合要求的结点,那么就删除掉第2个结点,如果没有找到符合要求的结点,那么放弃计算C类型结点;最后,沿着B类型结点链表向后找到下一个B类型结点,做同样的处理。
4.根据权利要求1所述的方法,其特征在于,未知样本的自动化判定步骤具体为:步骤201,未知样本文件插桩执行或者调试运行;其利用工具来对程序执行时的各个寄存器的状态做记录,记录程序的CPU寄存器的值;
步骤202,获取A类型结点;其记录指令寄存器和栈寄存器的值,这种记录是以线程为区分的,针对不同的线程,分别记录这两个寄存器的值,每个线程的指令寄存器和栈寄存器的值构成一个集合;每一个样本文件按照线程分成了几个集合,每个集合里面是一个链表,每个链表的结点是A类型结点,它包含两种值,记为EIP和EBP;
步骤203,过滤系统函数;其针对步骤202得到的所有的A类型结点,判断结点中的EIP的值,如果它的值位于操作系统分配的专门用于加载系统库文件的地址空间内,那么删除此结点,即从链表上摘除此结点;
步骤204,计算B类型结点:B类型结点是从步骤202存储的A类型结点中提取出来的,提取方法为,在一个寄存器集合内,当且仅当EBP寄存器的值发生变化时,提取变化发生时点的EIP寄存器的值,变化之前的EBP的值,变化之后的EBP的值,B类型结点包含三种数据,一是EIP寄存器的值,记为EIP;二是变化之前的EBP寄存器的值,记为EBP_before;三是变化之后的EBP寄存器的值,记为EBP_after;
步骤205,包含函数栈帧计算的C类型结点计算;其中,B类型结点包含3种数据,分别是EIP,EBP_before,EBP_after,众多的B类型结点又组成了一条链表,C类型结点是根据B类型结点计算出来的;
步骤206,包含函数栈帧信息数据库查询的C类型结点数据库查询,得到匹配情况,匹配过程如下:如果只有一条链表,则直接匹配;如果有多条链表,则可以逐条匹配;
步骤207,根据规则判定未知样本的恶意程度;其中,C类型结点含有两个数值,function_Instruction_count和function_frame_length,这两个数值就又构成了两条各自的链表,当function_frame_length链表中和数据库中的function_frame_length链表比较时,发现存在长度大于N的结点段完全匹配,那么就认定此样本属于恶意样本,其中,N为长度阈值。
5.根据权利要求4所述的方法,其特征在于,C类型结点是根据B类型结点计算出来的,其具体计算方法如下:首先,取B类型结点链表的第一个结点,得到三个数据,分别记作EIP_1,EBP_before_1,EBP_after_1;然后,沿着此链表向后搜索这样一个结点,把此节点的数据分别记作EIP_2,EBP_before_2,EBP_after_2,此结点要同时满足以下两个条件,EBP_before_1=EBP_after_2和EBP_after_1=EBP_before_2;如果找到这样的结点,即可计算C类型结点,C类型结点含有两类值,一是和函数指令长度相关的,为function_Instruction_count,它的值为EIP2减去EIP1的差值;二是和函数栈帧相关的,为function_frame_length,它的值为EBP_before_1减去EBP_after_1差值;如果找到了符合要求的结点,那么就删除掉第2个结点,如果没有找到符合要求的结点,那么放弃计算C类型结点;最后,沿着B类型结点链表向后找到下一个B类型结点,做同样的处理;其中,针对每个线程的集合都计算出来了许多的C类型结点,每个结点包含两种数据,function_Instruction_count和function_frame_length,并且多个C类型结点又组成了一条链表。
6.根据权利要求4所述的方法,其特征在于,步骤206中具体匹配包括:其中,链表的结点是C类型的,每个结点含有两个数值,function_Instruction_count和function_frame_length,这两个数值就又构成了两条各自的链表,分别比较这两条链表和数据库中的链表的相似度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610478251.XA CN106203076B (zh) | 2016-06-24 | 2016-06-24 | 一种利用ebp判断恶意文件的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610478251.XA CN106203076B (zh) | 2016-06-24 | 2016-06-24 | 一种利用ebp判断恶意文件的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106203076A true CN106203076A (zh) | 2016-12-07 |
CN106203076B CN106203076B (zh) | 2020-03-17 |
Family
ID=57461516
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610478251.XA Active CN106203076B (zh) | 2016-06-24 | 2016-06-24 | 一种利用ebp判断恶意文件的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106203076B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108804917A (zh) * | 2017-12-22 | 2018-11-13 | 哈尔滨安天科技股份有限公司 | 一种文件检测方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103870767A (zh) * | 2014-03-19 | 2014-06-18 | 四川大学 | 基于ebp构造的栈栈帧内容保护方法 |
US20140181981A1 (en) * | 2012-12-21 | 2014-06-26 | International Business Machines Corporation | System and method for protection from buffer overflow vulnerability due to placement new constructs in c++ |
CN104766015A (zh) * | 2015-04-10 | 2015-07-08 | 北京理工大学 | 一种基于函数调用的缓冲区溢出漏洞动态检测方法 |
CN105678168A (zh) * | 2015-12-29 | 2016-06-15 | 北京神州绿盟信息安全科技股份有限公司 | 一种基于栈异常的shellcode检测方法及装置 |
-
2016
- 2016-06-24 CN CN201610478251.XA patent/CN106203076B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140181981A1 (en) * | 2012-12-21 | 2014-06-26 | International Business Machines Corporation | System and method for protection from buffer overflow vulnerability due to placement new constructs in c++ |
CN103870767A (zh) * | 2014-03-19 | 2014-06-18 | 四川大学 | 基于ebp构造的栈栈帧内容保护方法 |
CN104766015A (zh) * | 2015-04-10 | 2015-07-08 | 北京理工大学 | 一种基于函数调用的缓冲区溢出漏洞动态检测方法 |
CN105678168A (zh) * | 2015-12-29 | 2016-06-15 | 北京神州绿盟信息安全科技股份有限公司 | 一种基于栈异常的shellcode检测方法及装置 |
Non-Patent Citations (3)
Title |
---|
YANICK FRATANTONIO等: "《Proceedings of the 20th USENIX Security Symposium》", 21 September 2011 * |
夏超等: "二进制环境下的缓冲区溢出漏洞动态检测", 《计算机工程》 * |
梁玉等: "S-Tracker:基于栈异常的shellcode检测方法", 《华中科技大学学报(自然科学版)》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108804917A (zh) * | 2017-12-22 | 2018-11-13 | 哈尔滨安天科技股份有限公司 | 一种文件检测方法、装置、电子设备及存储介质 |
CN108804917B (zh) * | 2017-12-22 | 2022-03-18 | 安天科技集团股份有限公司 | 一种文件检测方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106203076B (zh) | 2020-03-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684840A (zh) | 基于敏感调用路径的Android恶意软件检测方法 | |
CN107659570A (zh) | 基于机器学习与动静态分析的Webshell检测方法及系统 | |
US20180144132A1 (en) | Kind of android malicious code detection method on the base of community structure analysis | |
CN104700033A (zh) | 病毒检测的方法及装置 | |
CN106485146B (zh) | 一种信息处理方法及服务器 | |
CN109766345A (zh) | 元数据处理方法及装置、设备、可读存储介质 | |
CN105224600B (zh) | 一种样本相似度的检测方法及装置 | |
CN105740711B (zh) | 一种基于内核对象行为本体的恶意代码检测方法及系统 | |
CN109190371A (zh) | 一种基于行为图的Android恶意软件检测方法和技术 | |
CN103955644B (zh) | 一种基于终端自启动项的静态木马检测方法 | |
CN107958154A (zh) | 一种恶意软件检测装置及方法 | |
CN110414236A (zh) | 一种恶意进程的检测方法及装置 | |
CN105718795A (zh) | Linux下基于特征码的恶意代码取证方法及系统 | |
CN109614795A (zh) | 一种事件感知的安卓恶意软件检测方法 | |
CN109543408A (zh) | 一种恶意软件识别方法和系统 | |
CN107491691A (zh) | 一种基于机器学习的远程取证工具安全分析系统 | |
CN109933532A (zh) | 一种基于匹配的物联网固件库函数识别方法 | |
CN112016317A (zh) | 基于人工智能的敏感词识别方法、装置及计算机设备 | |
CN106874762A (zh) | 基于api依赖关系图的安卓恶意代码检测方法 | |
CN106778277A (zh) | 恶意程序检测方法及装置 | |
CN107493275A (zh) | 异构网络安全日志信息的自适应提取和分析方法及系统 | |
CN110532776A (zh) | 基于运行时数据分析的Android恶意软件高效检测方法、系统及介质 | |
CN114329455A (zh) | 基于异构图嵌入的用户异常行为检测方法及装置 | |
CN114024761A (zh) | 网络威胁数据的检测方法、装置、存储介质及电子设备 | |
CN110008701A (zh) | 基于elf文件特征的静态检测规则提取方法及检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |