著录项信息
专利名称 | 一种计算机软件漏洞利用的捕获方法及系统 |
申请号 | CN201110428051.0 | 申请日期 | 2011-12-19 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2012-06-27 | 公开/公告号 | CN102521542A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/57 | IPC分类号 | G;0;6;F;2;1;/;5;7查看分类表>
|
申请人 | 北京大学 | 申请人地址 | 北京市海淀区颐和园路5号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京大学 | 当前权利人 | 北京大学 |
发明人 | 丁羽;韦韬;张超;戴帅夫 |
代理机构 | 北京君尚知识产权代理事务所(普通合伙) | 代理人 | 余长江 |
摘要
本发明提供一种计算机软件漏洞利用的捕获方法及系统。该方法利用在互联网上布置的硬件虚拟机进行监控,同时对已经攻击成功或者表现出明显攻击特征但未成功的漏洞利用进行捕获,并存储到数据库中。该系统适用于上述方法,包括至少一台连接互联网的宿主计算机和一数据库系统,所述宿主计算机内安装至少一个硬件虚拟机、控制器、记录器和分析器。本发明的漏洞利用的捕获方法及系统,具有运行速度快、隐蔽性好和捕获效率高的优点。
1.一种计算机软件漏洞利用的捕获方法,其步骤包括:
1)使用硬件虚拟机作为受监视虚拟机,在硬件虚拟机内启动待监视进程;
2)获得所述进程的执行序列,并实时提取和记录所述执行序列的特征;所述执行序列是指虚拟机内部受监视进程中的一个线程执行的指令序列;所述执行序列的特征是一个所述执行序列的子序列,由符合下述条件的指令组成:在所述执行序列中,这条指令与其下一条指令的EIP值之差≥16;
3)判定是否存在软件漏洞利用攻击或潜在的软件漏洞利用攻击,若存在,将该漏洞利用攻击触发时记录的所述执行序列的特征作为签名存储到数据库中;所述判定的规则是:
如果受监视进程执行了当时装载的可执行模块之外的代码,则认为是攻击成功并存在一软件漏洞利用攻击;如果受监视进程触发了系统的崩溃代码,则认为是攻击成功并存在一潜在的软件漏洞利用攻击;
4)将所述签名和所述数据库中已有的签名进行比对,判断所述软件漏洞利用攻击是否为新捕获的软件漏洞利用攻击。
2.如权利要求1所述的方法,其特征在于,所述方法使用所述硬件虚拟机提供的编程接口,包括执行指令的处理器上下文信息,以及解析后的进程ID和线程ID。
3.一种采用如权利要求1所述方法的软件漏洞利用的捕获系统,包括至少一台连接互联网的宿主计算机和一数据库系统;
所述宿主计算机内安装:
至少一个硬件虚拟机,所述硬件虚拟机内运行待监视进程,
控制器,用于控制捕获软件漏洞利用的程序,
记录器,用于获得所述待监视进程的执行序列,并实时提取和记录所述执行序列的特征,所述执行序列是指虚拟机内部受监视进程中的一个线程执行的指令序列;所述执行序列的特征是一个所述执行序列的子序列,由符合下述条件的指令组成:在所述执行序列中,这条指令与其下一条指令的EIP值之差≥16;以及
分析器,用于判定是否存在软件漏洞利用攻击,判定的规则是:如果受监视进程执行了当时装载的可执行模块之外的代码,则认为是攻击成功并存在一软件漏洞利用攻击;如果受监视进程触发了系统的崩溃代码,则认为是攻击成功并存在一潜在的软件漏洞利用攻击;
所述数据库系统用于保存生成的签名文件。
4.如权利要求3所述的系统,其特征在于,所述硬件虚拟机上运行Windows操作系统。
5.如权利要求3所述的系统,其特征在于,所述系统根据一预设时间间隔,定时重启和回滚所述硬件虚拟机。
6.如权利要求5所述的系统,其特征在于,所述时间间隔为30分钟。
7.如权利要求3所述的系统,其特征在于,所述系统在捕获到漏洞利用之后回滚所述硬件虚拟机。
8.如权利要求3所述的系统,其特征在于,所述数据库系统安装于所述宿主计算机内或所述宿主计算机外。
一种计算机软件漏洞利用的捕获方法及系统\n所属技术领域\n[0001] 本发明属于互联网安全技术领域,具体涉及一种对计算机软件漏洞利用进行捕获的方法及系统。\n背景技术\n[0002] 随着网络和计算机技术的快速发展,计算机和计算机网络已经成为各行各业的关键技术之一。与此同时,广泛存在的计算机软件漏洞成为一个巨大的威胁。一个漏洞利用(Vulnerability Exploit),指一段数据或者程序,可以使被利用的存在漏洞的软件完成攻击者预先指定的恶意功能,例如使存在漏洞的计算机软件终止,或者使其成为一个木马后门等。目前,漏洞利用已经成为了一种战略资源。各国都成立了自己的漏洞库,比较著名的有美国国家漏洞数据库(National Vulnerability Database),中国国家信息安全漏洞库(China NationalVulnerability Database of Information Security),国家信息安全漏洞共享平台,(China NationalVulnerability Database),以及国际著名漏洞库CVE(Common Vulnerabilities&Exposures)。这些漏洞库中收录了数万种漏洞以及它们的利用(Exploit)。\n[0003] 计算机软件漏洞利用和计算机软件漏洞是紧密关系的,每一个软件漏洞利用都对应至少一个软件漏洞,而一个软件漏洞不一定有其利用。换句话说,一个软件漏洞是不一定可以被利用的。于是,软件漏洞发掘是一种可能获得软件漏洞利用的方法。软件漏洞发掘已经成为了计算机安全的研究热点之一,从分类上可以将其分为静态分析、动态分析以及混合分析三类。这些方法可以发掘出前人不知道的漏洞,也被成为零日漏洞(0day Vulnerability)。零日漏洞的价值非常高。退而求其次,在互联网上捕获他人攻击使用的漏洞利用,亦可获得漏洞利用。如果在一个打满最新补丁的计算机上捕获了一个攻击者的漏洞利用,那么就意味着捕获到了一个即日的漏洞利用(1day Vulnerability Exploit)。这类漏洞利用有多种用途,例如用来加固计算机系统的防御功能,也可再次用于战略用途等。\n于是计算机软件利用捕获也成为了一项很关键的技术。使用计算机软件利用捕获技术,可以“守株待兔”地得到漏洞利用。\n[0004] 漏洞利用捕获系统是这样一类系统:它由一台或若干台计算机(通常是虚拟机)组成,这些计算机被接入到互联网,等待被恶意代码攻击,并实时记录下攻击行为并生成一个“签名”,这个“签名”可以用来识别或代表一个漏洞利用。同时,签名被存储下来,用于之后的分析等。\n[0005] 目前已有的软件漏洞利用捕获技术都是基于软件虚拟机(Software Virtual Machine),它们可以明确地分为两类:使用污点分析(Taint analysis)的漏洞利用分析,和用来改进计算机网络入侵检测系统的网络报文提取系统。第一类技术以BitBlaze为代表,可见文章“A NewApproach to Computer Security via Binary Analysis,Dawn Song,et al,In Proceedings of the 4thInternational Conference on Information Systems Security,December 2008”。这类技术的特点是,利用污点传播原理,从漏洞触发点精确回溯到程序输入中,获得漏洞利用的全过程,帮助重建漏洞利用。并用形式化的方法生成指纹。这类技术的不足是,时间代价过于庞大,根本无法用于实际分析,动辄一个漏洞分析就要几天甚至几周。一个具体利用该原理的已经投入实用的漏洞利用捕获系统是Argos。\n第二类方法的代表是在文章“Detecting Targeted Attacks UsingShadow Honeypots,KG Anagnostakis,et al,SSYM′05 Proceedings of the 14th conference onUSENIX Security Symposium”中被提出的。这类方法使用软件虚拟机,将软件漏洞触发和当时的网络数据报文相关联,识别出哪些网络数据报文会触发软件漏洞,并在计算机网络的入侵检测系统中添加这些网络数据报文的特征作为指纹,从而使这种网络数据报文被过滤掉,不会再次触发计算机上的软件漏洞。该方法的优点是可以在一定程度上抵御该漏洞利用的再次利用。缺点是无法获知该漏洞的详细利用原理,并且无法抵御可能存在的变形多态代码攻击。此外,这两项技术的共同缺点是,均使用了软件虚拟机,很容易被攻击者检测出,从而不表现出恶意行为,让这两种技术均失效。\n[0006] 硬件虚拟机技术是不同于软件虚拟机技术的另一种虚拟机技术。使用硬件虚拟机技术,需要CPU的硬件支持,例如Intel公司的Intel VT技术和AMD公司的SVM技术;同时,还需要在虚拟机的宿主操作系统上做一些修改,例如增加内核模块,来建立、运行和管理硬件虚拟机。硬件虚拟机采用真实执行技术,取代了软件虚拟机中的指令模拟或者动态翻译,在运行速度和模拟真实性上都有巨大的提升。\n发明内容\n[0007] 本发明的目的是克服现有技术中的问题,提供一种计算机软件漏洞利用的捕获方法及系统,利用在互联网上布置的硬件虚拟机进行监控,同时对已经攻击成功或者表现出明显攻击特征但未成功的漏洞利用进行捕获,并存储到数据库中。\n[0008] 为了达到上述目的,本发明采用如下技术方案:\n[0009] 一种计算机软件漏洞利用的捕获方法,其步骤包括:\n[0010] 1)在硬件虚拟机内启动待监视进程;\n[0011] 2)获得所述进程的执行序列,并实时提取和记录所述执行序列的特征;\n[0012] 3)判定是否存在软件漏洞利用攻击或潜在的软件漏洞利用攻击,若存在,将所述漏洞利用攻击触发时记录的所述执行序列的特征作为签名存储到数据库中;\n[0013] 4)将所述签名和所述数据库中已有的签名进行比对,判断所述软件漏洞利用攻击是否为新捕获的软件漏洞利用攻击。\n[0014] 步骤2)所述的执行序列是指虚拟机内部受监视进程中的一个线程执行的指令序列;所述执行序列的特征是一个所述执行序列的子序列,由所述执行序列中符合下述条件的指令组成:在所述执行序列中,这条指令与其紧挨着执行的下一条指令的EIP值之差≥16。\n[0015] 步骤3)所述的判定,其规则是:如果受监视进程执行了所有当时装载的可执行模块之外的代码,则认为是攻击成功并存在一个软件漏洞利用攻击;如果受监视进程触发了系统的崩溃代码,则认为是攻击成功并存在一个潜在的漏洞利用攻击。\n[0016] 一种软件漏洞利用的捕获系统,适用于上述方法,包括至少一台连接互联网的宿主计算机和一数据库系统;\n[0017] 所述宿主计算机内安装:\n[0018] 至少一个硬件虚拟机,其内运行待监视进程,\n[0019] 控制器,用于控制捕获软件漏洞利用的程序,\n[0020] 记录器,用于获得所述待监视进程的执行序列,并实时提取和记录所述执行序列的特征,以及\n[0021] 分析器,用于判定是否存在软件漏洞利用攻击;\n[0022] 所述数据库系统用于保存签名文件。\n[0023] 进一步地,所述硬件虚拟机上运行Windows操作系统。\n[0024] 进一步地,所述系统根据一预设时间间隔,定时重启和回滚所述硬件虚拟机;所述时间间隔可为30分钟,在30分钟内每分钟判断一次是否捕获软件漏洞利用攻击,在30分钟到时之后强制回滚虚拟机。\n[0025] 进一步地,所述系统在捕获到漏洞利用之后回滚所述硬件虚拟机。\n[0026] 进一步地,所述数据库系统安装于所述宿主计算机内或所述宿主计算机外。\n[0027] 本发明使用硬件虚拟机作为受监视虚拟机,并采用软件漏洞利用的捕获方法来收集软件漏洞利用对应的软件执行序列特征,并存储到数据库中。该执行序列特征可以相当准确的反映程序某线程的执行轨迹,也可以很精确的刻画一个在一个软件漏洞利用下,程序的执行轨迹。本方法即用这样的执行序列特征来作为指纹刻画软件漏洞利用,将其作为本漏洞利用捕获方法所捕获的漏洞利用特征。与现有技术相比,本发明的优点和积极效果如下:\n[0028] 1)具有非常高的运行速度,与传统的软件虚拟机的漏洞利用捕获相比,本发明可以在记录软件执行路径的同时与攻击者进行交互,从而获得更多的被攻击机会,提高整个分析系统效率,这是传统的软件虚拟机漏洞利用捕获所无法做到的;\n[0029] 2)具有更高的隐蔽性:攻击者更难以检测出这是一台虚拟机而不是真实机,从而也能更多的获得被攻击机会;\n[0030] 3)具有更高的捕获效率:使用精确的软件执行序列特征作为指纹,在不丢失精确性的前提下极高的提升了捕获效率,支持监视更多、更庞大的软件,甚至操作系统;\n[0031] 4)能够兼容更多的受监视软件:因为已有许多软件可以识别自身是否运行在软件虚拟机中,而无法检测到硬件虚拟机的存在。\n附图说明\n[0032] 图1为本发明实施例的计算机软件漏洞利用的捕获方法的流程图。\n[0033] 图2为本发明实施例的指令执行序列特征提取示意图。\n[0034] 图3为本发明实施例的计算机软件漏洞利用的捕获系统的拓扑结构示意图,其中:1.互联网;2.宿主计算机;3.硬件层;4.虚拟机控制器;5.硬件虚拟机;6.分析器;\n7.记录器;8.数据库系统。\n[0035] 图4为应用本发明实施例中计算机软件漏洞利用的捕获系统捕获漏洞利用的脚本流程图。\n具体实施方式\n[0036] 下面通过实施例并结合附图,对本发明做详细的说明。\n[0037] 本发明一实施例的计算机软件漏洞利用的捕获方法,其步骤包括:\n[0038] 1)在硬件虚拟机内启动待监视进程;\n[0039] 2)获得所述进程的执行序列,并实时提取和记录所述执行序列的特征;\n[0040] 3)判定是否存在软件漏洞利用攻击或潜在的软件漏洞利用攻击,若存在,将所述漏洞利用攻击触发时记录的所述执行序列的特征作为签名存储到数据库中;\n[0041] 4)将所述签名和所述数据库中已有的签名进行比对,判断所述软件漏洞利用攻击是否为新捕获的软件漏洞利用攻击。\n[0042] 上述步骤2)中,一个执行序列是指虚拟机内部受监视进程中一个线程执行的指令序列。执行序列的特征是一个执行序列的子序列,由原执行序列中符合下述条件的指令(跳转语句Jmp,ret,sysenter等)组成:在原始执行序列中,这条指令与其紧挨着执行的下一条指令的指令指针寄存器(EIP)值之差≥16。由于intel x86体系结构中,常用的最长指令为15字节,所以如果相邻两条指令跨越了16字节或以上就意味着发生了一次跳转。\n因此16字节的跨度可以截取到绝大部分跳转(局部小跳转截获不到,不过这样的情况非常少)。这样定义的执行序列特征可以相当准确的反映程序某线程的执行轨迹,也可以很精确的刻画一个在一个软件漏洞利用下,程序的执行轨迹。本方法即用这样的执行序列特征来作为指纹刻画软件漏洞利用。\n[0043] 上述步骤3)中,判定漏洞利用和潜在漏洞利用攻击的规则是:如果受监视进程执行了在所有当时装载的可执行模块(exe,dll等)之外的代码,则认为是攻击成功,存在一个软件漏洞利用攻击;如果受监视进程触发了系统的崩溃代码,则认为是攻击成功并存在一个潜在的漏洞利用攻击。\n[0044] 结合步骤2)和步骤3),即可记录下在发生软件漏洞利用攻击时程序的执行序列特征。这个特征就作为本漏洞利用捕获方法所捕获的漏洞利用特征。\n[0045] 图1是上述实施例的计算机软件漏洞利用捕获方法的具体流程图。该方法使用硬件虚拟机提供的编程接口,该接口可以在虚拟机每次执行虚拟机内部指令时额外执行虚拟机控制器的一些代码。本发明的的漏洞利用的捕获方法即附加在虚拟机控制器的这一部分代码中。该方法的漏洞利用捕获程序在每次指令执行消息来临时执行一次。\n[0046] 虚拟机提供的接口包括:现在执行指令的处理器上下文信息,以及解析后的当前进程ID和线程ID。可能需要更改虚拟机来增加获得当前进程ID和线程ID的功能,其方法是:使用虚拟机提供的接口读取虚拟机内部CPU的FS段寄存器,FS段寄存器指向的是线程控制块,线程控制块的0x20和0x24偏移位置存储的就是当前线程的PID和TID。然后通过虚拟机提供的读取虚拟机内存特定位置值的函数,读取这两个位置的值,然后返回给调用者。\n[0047] 下面对图1所示的流程进行详细的描述:\n[0048] 第一步,判断是否为新创建的进程。如果是则初始化一个新的进程记录结构;否则找出已有的进程记录结构。该进程记录结构记录了此进程的进程号、此进程每个线程的执行序列特征(初始化为空)、以及该进程的模块列表(初始化为空)。\n[0049] 第二步,判断是否为一个新线程。如果是新线程,则像当前进程记录结构中插入一个新的线程记录结构;否则直接使用已有的线程记录结构。该线程记录结构记录当前的线程号、当前线程隶属于哪个进程、以及当前线程的执行序列特征。\n[0050] 第三步,判断是否为线程ID重用。如果是重用,则需清空此线程对应的记录结构,重新开始记录。如果不是重用,则不用做任何动作;否则需要更新当前线程记录结构中的进程号为新此时的进程号。\n[0051] 第四步,判断是否发生了漏洞利用攻击,即EIP值是否落在可执行模块内。如果没有落在可执行模块内,则可能加载了新的可执行模块。于是此时就利用虚拟机提供的接口,重新获取可执行模块信息,并再次判断是否EIP落在可执行模块内。如果还是否,那么证明已经触犯了上述关于漏洞利用判定的规则,即可报漏洞利用被检测到并记录进入数据库,同时终止虚拟机,等待回滚和下一次的漏洞利用捕获。另一方面,如果发现EIP落在了可执行模块内,则说明刚才发生了模块装载,此时更新模块信息即可。\n[0052] 第五步,建立执行序列特征,即判断是否发生了跳转(EIP之差大于等于16)。如果是,则将语句信息附加到线程记录结构的末尾,作为执行序列特征的一个点;如果没有发生跳转,则直接更新当前线程记录结构的最后一条指令为此条指令,方便下次判断(这样做的好处是,不用额外设置一个地方存储当前尚未决定是不是跳转的语句,直接利用最后一条的空间作为临时空间)。图2为该实施例中的生成指令执行序列特征的示意图。其中图2左侧一列代表原始执行序列,中间一列是通过上述的判定方法,找出的执行序列特征,右侧一列是将执行序列特征抽取出来之后得出的完整的指令执行序列特征。\n[0053] 上述步骤都结束之后,即可将控制权转移给虚拟机控制器,继续执行虚拟机。\n[0054] 每进行一次这样的循环,虚拟机内的待分析进程就执行一条机器指令。虚拟机并不会在所有指令上都触发这样的分析机制,只在待分析进程正在被CPU执行时才会触发,这是由虚拟机自己的机制可以保证的。\n[0055] 在上述实施例中,读取待分析进程的可执行模块的功能可通过下面方法实现:\n[0056] 首先从虚拟机的FS寄存器中读出FS寄存器的值,在此假设为fs_base,其指向的内存的0x30偏移处为指向进程控制块(PEB)的指针,其结构可参见Windows Internals第五版。用虚拟机提供的功能,读出此指针的值,设为pPEB。用pPEB加上0x0c,即可得到指向LDR链表的指针。再用虚拟机提供的函数读出这个位置的值,得到指向LDR链表的指针,设为pLDR。这时pLDR指向的就是一个模块信息链表的一个元素,其0x10,0x18,0x28偏移处存储的是模块基地址、模块大小、和模块名字指针。用虚拟机提供的函数分别读出这三个位置的值,即可得到模块的这几个信息,保存在当前进程的进程信息块中。在pLDR的位置是一个前向链表结构,直接读取pLDR的值就可以获得这个链表的下一项,然后重复这个过程直到pLDR指针为NULL,即可得到所有的可执行模块信息。\n[0057] 图3是本发明一个实施例的计算机软件漏洞利用的捕获系统的拓扑结构示意图。\n在该软件漏洞利用捕获系统中,存在着一个或多个连接互联网1的宿主计算机2。每个宿主计算机2独立工作,是独立的个体。宿主计算机2最底层是硬件层3,其上是虚拟机控制器\n4,即虚拟机软件,负责在开始分析之后,触发上述的分析机制。在虚拟机控制器之上运行着一个或多个硬件虚拟机5,以同时抓取多个软件漏洞利用;以及分析器6和记录器7,与虚拟机控制器4之间交互来捕获漏洞利用。同时,在宿主计算机内运行着数据库系统8,负责保存生成的签名文件。在其它实施例中,数据库系统8也可以在宿主计算机2之外,本发明并不限于此。上述漏洞利用捕获系统可以根据提前设定的时间间隔,定时重启、回滚虚拟机;\n也可在捕捉到漏洞利用之后,迅速回滚虚拟机,以方便再次捕捉。\n[0058] 下面以一台宿主计算机上的一台硬件虚拟机为例,详细描述捕获漏洞利用的过程。\n[0059] 首先,在硬件虚拟机中运行待分析软件,等待分析软件持续在虚拟机中正常运行时,用虚拟机提供的快照功能保存虚拟机快照。\n[0060] 然后,执行漏洞利用捕获系统的脚本,其流程如图4所示。第一步,用回滚的方式,初始化一个硬件虚拟机。这个硬件虚拟机状态是被提前设置好的,设置过程就是在宿主计算机上安装操作系统,然后配置待分析环境,最后运行分析程序。在待分析程序进入待分析状态时,保存虚拟机状态快照。第二步,打开记录器和分析器,通过虚拟机管理层,监视虚拟机中待分析程序的执行。此记录器和分析器即实现了本发明中的漏洞利用捕获方法。其中,记录器用于记录执行序列的特征,分析器用于判定是否存在漏洞攻击。然后进入一个时间判断循环。在30分钟内每分钟判断一次是不是已经有漏洞利用被发现,如果已发现,则证明系统捕捉成功,则可恢复到初始状态,继续捕捉下一个漏洞利用。如果否,则再让虚拟机持续运行一分钟。30分钟到时之后强制回滚虚拟机,保证虚拟机运行的稳定性。\n[0061] 上述实施例仅是为了说明本发明的技术原理,并不用以限制本发明,凡在本发明的精神和原则之内所作的同等变化与修改,均应包含在本发明的保护范围之内。
法律信息
- 2021-11-26
未缴年费专利权终止
IPC(主分类): G06F 21/57
专利号: ZL 201110428051.0
申请日: 2011.12.19
授权公告日: 2015.01.07
- 2015-01-07
- 2012-09-05
实质审查的生效
IPC(主分类): G06F 21/00
专利申请号: 201110428051.0
申请日: 2011.12.19
- 2012-06-27
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2011-11-23
|
2011-08-09
| | |
2
| |
2007-07-25
|
2006-11-27
| | |
3
| |
2009-08-26
|
2009-04-10
| | |
4
| |
2011-10-19
|
2011-07-25
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |