CN102609649B - 一种自动采集恶意软件的方法和装置 - Google Patents
一种自动采集恶意软件的方法和装置 Download PDFInfo
- Publication number
- CN102609649B CN102609649B CN201210024743.3A CN201210024743A CN102609649B CN 102609649 B CN102609649 B CN 102609649B CN 201210024743 A CN201210024743 A CN 201210024743A CN 102609649 B CN102609649 B CN 102609649B
- Authority
- CN
- China
- Prior art keywords
- code
- function
- subelement
- malicious code
- script
- 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.)
- Active
Links
Landscapes
- Information Transfer Between Computers (AREA)
Abstract
本发明提供了一种自动采集恶意软件的方法和装置,其中方法包括:S1、通过模拟浏览器扫描网页,识别并抓取所扫描网页的恶意代码;S2、通过构建恶意代码执行环境来执行抓取到的恶意代码,得到恶意软件。这种方式能够实现恶意软件的自动采集,无需人工识别,大大提高了效率,并且从恶意代码的识别出发进而获取恶意软件无需通过采集恶意软件静态特征的方式,无论采用变形手段的恶意软件只要其包含恶意代码均能够采集到,可靠性和检出率大大提高。
Description
【技术领域】
本发明涉及计算机安全技术领域,特别涉及一种自动采集恶意软件的方法和装置。
【背景技术】
随着计算机技术的不断发展,计算机网络已经成为人们获取信息的主要工具,随之而来的是对计算机安全技术需求的不断提高。计算机病毒、木马、恶意软件和恶意代码是近几年来计算机网络面对的主要安全威胁,其中用户在浏览挂马网页之后往往会自动安装一些恶意软件,为了方便对恶意软件进行预防和分析,并进一步应用于挂马检测系统和恶意软件分布式研究,需要解决恶意软件的采集问题。
现有对恶意软件的采集主要通过以下两种方式实现:
其一、通过用户举报的方式,采集用户举报的恶意软件。这种方式依赖于用户的识别能力,无法实现恶意软件的自动采集,效率低下。
其二、通过在用户端设备上部署客户端来进行大规模样本采集工作,即通过匹配预设的恶意软件的静态特征实现恶意软件的采集。这种方式虽然实现了恶意软件的自动采集,但需要部署规模庞大的客户端,难度和成本很高,且基于静态特征的方式对于采用变形手段的恶意软件容易失效,可靠性和检出率较低。
【发明内容】
本发明提供了一种自动采集恶意软件的方法和装置,以便于提高恶意软件自动采集的可靠性和检出率。
具体技术方案如下:
一种自动采集恶意软件的方法,该方法包括:
S1、通过模拟浏览器扫描网页,识别并抓取所扫描网页的恶意代码;
S2、通过构建恶意代码执行环境来执行抓取到的恶意代码,得到恶意软件。
根据本发明一优选实施例,所述步骤S1中识别所扫描网页的恶意代码具体包括:
S11、对所扫描网页的脚本进行解析,在解析过程中如果通过预先对预设的用于编写shellcode的函数所挂的函数钩子获取到对应函数在内存中产生的二进制数据,则执行步骤A12、步骤B12或者步骤C12;
所述步骤A12为:对所述二进制数据与预先设置的黑名单进行匹配,如果匹配上,则检测到恶意代码,其中所述黑名单包括:nop指令头;
所述步骤B12为:对所述二进制数据进行反汇编检测,如果在反汇编过程中检测到自定位代码,则检测到恶意代码;
所述步骤C12为:对所述二进制数据进行高危字节码统计,如果高危字节码的数量超过预设的高危字节码数量阈值,则检测到恶意代码。
根据本发明一优选实施例,如果检测到恶意代码,则结束对所述待检测网页脚本的解析,否则转至所述步骤S11对所述待检测网页脚本继续进行解析。
根据本发明一优选实施例,在执行所述步骤A12确定没有匹配上时,进一步执行所述步骤B12或步骤C12。
根据本发明一优选实施例,在执行所述步骤B12确定在反汇编过程中没有检测到自定位代码时,进一步执行所述步骤C12。
根据本发明一优选实施例,所述自定位代码包括:过程调用call指令代码、出栈pop指令代码、浮点检查保护环境FSTENV指令代码以及高强度加花SEH指令代码中的至少一种。
根据本发明一优选实施例,所述高危字节码包括:不可见字符和堆喷射常用地址中的至少一种。
根据本发明一优选实施例,在所述步骤S11之前还包括:
S01、新建一个浏览器IE控件进程,并对预设的用于编写shellcode的函数挂函数钩子。
根据本发明一优选实施例,所述用于编写shellcode的函数包括:javascript类型脚本的用于转义的\u函数、用于字符串解码的unescape函数或者用于返回ASCII值表示的字符串的string.fromcharcode函数,vbscript类型脚本的unescape函数、string.fromcharcode函数或者用于返回与指定字符代码相关联的字符的chrw函数中的至少一种。
根据本发明一优选实施例,所述步骤S2具体包括:
S21、通过对创建文件函数所挂的函数钩子,在确定抓取的恶意代码执行了创建文件操作时,将创建文件操作的路径参数替换为指定的路径;以及,将所述抓取的恶意代码覆盖一个正常程序的地址空间;
S22、在虚拟机中执行所述抓取的恶意代码,得到恶意软件。
一种自动采集恶意软件的装置,该装置包括:
网页扫描单元,用于通过模拟浏览器扫描网页;
恶意代码识别单元,用于识别并抓取所述网页扫描单元所扫描网页的恶意代码;
恶意代码执行单元,用于通过构建恶意代码执行环境来执行抓取到的恶意代码,得到恶意软件。
根据本发明一优选实施例,所述恶意代码识别单元包括脚本解析子单元,并进一步包括黑名单匹配子单元、反汇编检测子单元或者高危码统计子单元;
所述脚本解析子单元,用于对所述网页扫描单元所扫描网页的脚本进行解析,在解析过程中如果通过预先对预设的用于编写shellcode的函数所挂的函数钩子获取到对应函数在内存中产生的二进制数据,则触发所述黑名单匹配子单元、反汇编检测子单元或者高危码统计子单元;
所述黑名单匹配子单元,用于受到触发后,对所述脚本解析子单元获取的二进制数据与预先设置的黑名单进行匹配,如果匹配上,则检测到恶意代码,其中所述黑名单包括:nop指令头;
所述反汇编检测子单元,用于受到触发后,对所述脚本解析子单元获取的二进制数据进行反汇编检测,如果在反汇编过程中检测到自定位代码,则检测到恶意代码;
所述高危码统计子单元,用于受到触发后,对所述脚本解析子单元获取的二进制数据进行高危字节码统计,如果高危字节码的数量超过预设的高危字节码数量阈值,则检测到恶意代码。
根据本发明一优选实施例,所述黑名单匹配子单元、反汇编检测子单元或者高危码统计子单元,还用于如果检测到恶意代码则结束对所述待检测网页脚本的解析,否则触发所述脚本解析子单元对所述待检测网页脚本继续进行解析。
根据本发明一优选实施例,如果所述恶意代码识别单元包括所述黑名单匹配子单元,则进一步包括:所述反汇编检测子单元或者所述高危码统计子单元;
所述黑名单匹配子单元确定没有匹配上时,触发所述反汇编检测子单元或者所述高危码统计子单元。
根据本发明一优选实施例,如果所述恶意代码识别单元包括所述反汇编检测子单元,则进一步包括所述高危码统计子单元;
所述反汇编检测子单元确定在反汇编过程中没有检测到自定位代码时,触发所述高危码统计子单元。
根据本发明一优选实施例,所述自定位代码包括:过程调用call指令代码、出栈pop指令代码、浮点检查保护环境FSTENV指令代码以及高强度加花SEH指令代码中的至少一种。
根据本发明一优选实施例,所述高危字节码包括:不可见字符和堆喷射常用地址中的至少一种。
根据本发明一优选实施例,所述恶意代码识别单元还包括:浏览器模拟子单元,用于新建一个浏览器IE控件进程,并对预设的用于编写shellcode的函数挂函数钩子。
根据本发明一优选实施例,所述用于编写shellcode的函数包括:javascript类型脚本的用于转义的\u函数、用于字符串解码的unescape函数或者用于返回ASCII值表示的字符串的string.fromcharcode函数,vbscript类型脚本的unescape函数、string.fromcharcode函数或者用于返回与指定字符代码相关联的字符的chrw函数中的至少一种。
根据本发明一优选实施例,所述恶意代码执行单元包括:
路径替换子单元,用于通过对创建文件函数所挂的函数钩子,在确定所述恶意代码识别子单元抓取的恶意代码执行了创建文件操作时,将创建文件操作的路径参数替换为指定的路径;
代码覆盖子单元,用于将所述恶意代码识别子单元抓取的恶意代码覆盖任意一个正常程序的地址空间;
代码执行子单元,用于在所述路径替换子单元和所述代码覆盖子单元处理完毕时,在虚拟机中执行所述抓取的恶意代码,得到恶意软件。
由以上技术方案可以看出,本发明完全颠覆了现有恶意软件采集的思路,不是直接对恶意软件进行识别,而是通过模拟浏览器扫描网页,识别并抓取所扫描网页的恶意代码,再通过构建恶意代码执行环境执行抓取到的恶意代码,从而采集得到恶意代码。这种方式能够实现恶意软件的自动采集,无需人工识别,大大提高了效率,并且从恶意代码的识别出发进而获取恶意软件无需通过采集恶意软件静态特征的方式,无论采用变形手段的恶意软件只要其包含恶意代码均能够采集到,可靠性和检出率大大提高。
【附图说明】
图1为本发明实施例一提供的自动采集恶意软件的方法流程图;
图2为本发明实施例二提供的恶意代码识别的方法流程图;
图3为本发明实施例三提供的得到恶意软件的方法流程图;
图4为本发明实施例四提供的自动采集恶意软件的装置结构图;
图5a至图5g分别为本发明实施例四提供的黑名单匹配子单元的结构图;
图6为本发明实施例四提供的恶意代码执行单元的结构图。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
实施例一、
图1为本发明实施例一提供的自动采集恶意软件的方法流程图,如图1所示,该方法包括:
步骤101:通过模拟浏览器扫描网页,识别并抓取所扫描网页的恶意代码。
在本步骤中,通过模拟浏览器主动对网页进行扫描,并结合恶意代码识别技术,从扫描的网页中识别并抓取恶意代码。具体的恶意代码识别的方法可以包括:首先对扫描到的网页脚本进行解析,在解析过程中如果通过预先对预设的用于编写shellcode的函数所挂的函数钩子获取到对应函数在内存中产生的二进制数据,则进一步采用黑名单匹配、反汇编检测以及高危字节码统计中的一种或任意组合的处理方式进行恶意代码识别。具体过程将在实施例二中进行详细描述。
步骤102:通过构建恶意代码执行环境来执行抓取的恶意代码,得到恶意软件。
在本步骤中通过将创建文件的路径替换为指定路径以及将恶意代码覆盖任意正常程序的地址空间的方式,使得恶意代码在执行时按照指定路径生成恶意软件到指定目录,具体过程将在实施例三中进行详细描述。
实施例二、
图2为本发明实施例二提供的恶意代码识别的方法流程图,如图2所示,该方法可以包括以下步骤:
步骤201:预先对预设的用于编写shellcode的函数挂函数钩子。
通常网页脚本中是通过一系列的脚本函数编写shellcode,从而可以在内存中生成可控的恶意数据进行攻击的,即这些用于编写shellcode的函数能够在内存中生成指定格式的二进制数据。这些预设的用于编写shellcode的函数可以包括但不限于:javascript类型脚本的用于转义的\u函数、用于字符串解码的unescape函数或者用于返回ASCII值表示的字符串的string.fromcharcode函数,vbscript类型脚本的unescape函数、string.fromcharcode函数或者用于返回与指定字符代码相关联的字符的chrw函数中的至少一种。
本步骤是一个准备步骤,通过新建一个浏览器(IE)控件进程,并在上述函数上挂函数钩子,可以在待检测网页脚本的过程中获取到这些函数在内存中生成的二进制数据。
步骤202:对待检测网页脚本进行解析,在解析过程中如果通过已挂的函数钩子获取到对应函数在内存中产生的二进制数据,则执行步骤203。
一旦解析到用于编写shellcode的函数,则通过已挂的函数钩子就能够获取到解析到的函数在内存中产生的二进制数据,并对该二进制数据进行以下步骤的处理,否则继续进行解析。
步骤203:将获取到的二进制数据与预先设置的黑名单进行匹配,如果匹配上,则检测到恶意代码,否则执行步骤104。
为了保护shellcode的完整性,通常在shellcode的头部会加上一小段空(nop)指令头,因此可以预先将nop指令头设置为黑名单,在本步骤中将获取到的二进制数据的开头与预先设置的黑名单进行匹配,如果匹配上则说明该二进制数据的开头为nop指令头,认为该网页脚本包含恶意代码。
其中nop指令头包括但不限于:9090、5858、0c0c、0d0d等。
如果在本步骤中没有匹配上黑名单,则需要进一步通过以下步骤识别恶意代码。
步骤204:对二进制数据进行反汇编检测,如果在反汇编过程中检测到自定位代码,则检测到恶意代码;否则执行步骤205。
在本步骤中逐字节对二进制数据进行反汇编,并检测是否存在自定位代码。一般来说恶意网页脚本中的恶意代码都是加密的,要进行动态解密必须要经过一个自定位过程,所谓自定位代码就是恶意代码获取自己在内存中位置的代码,包括但不限于:过程调用(call)指令代码、出栈(pop)指令代码、浮点检查保护环境(FSTENV)指令代码、高强度加花(SEH)指令代码等。
如果将内存中的二进制数据进行反汇编后能够检测出自定位代码,则说明网页脚本中存在恶意代码,本步骤的检测方式具有极高的检测准确率。
步骤205:对步骤202获取到的二进制数据进行高危字节码的统计,如果高危字节码的数量超过预设的高危字节码数量阈值,则检测到恶意代码,否则转至步骤202对待检测网页脚本继续进行解析,直至解析结束。
高危字节码是从大量shellcode样本中提取出的特征,经过对大量shellcode样本的分析,确定了一系列只有shellcode会使用的字符区间,这些区间一部分是不可见字符区间,所谓不可见字符是指Unicode字符表中所有不属于键盘上可见的字符且不属于汉字的字符。另一部分是通过经验总结出的堆喷射常用地址,包括但不限于:0c0c0c0c、0d0d0d0d0d、90909090、14141414等。
预设的高危字节码数量阈值可以经验值进行设置,例如如果高危字节码采用不可见字符,则可以设置高危字节码数量阈值为5;如果高危字节码采用堆喷射常用地址,则可以设置高危字节码数量阈值为1。
本步骤可以看做是对反汇编检测的进一步补充,从而进一步提高恶意代码的检出率。
需要说明的是,图2所示流程为本发明实施例提供的一个优选流程,实际上在步骤202的网页脚本解析过程中如果通过已挂的函数钩子获取到对应函数在内存中产生的二进制数据,则可以执行上述步骤203中所述的黑名单匹配步骤、步骤204中所述的反汇编检测步骤以及步骤205中所述的高危字节码统计步骤中的任一种或任意组合。如果仅执行其中任一种,则在未检测到恶意代码时,均返回步骤202继续进行网页脚本的解析。如果执行上述的任意组合,则在最后执行的步骤中如果未检测到恶意代码,则返回步骤202继续进行网页脚本的解析。例如,如果仅执行步骤203的黑名单匹配和步骤204的反汇编检测,则步骤203的执行流程不变,步骤204中如果在反汇编过程中没有检测到自定位代码,则返回步骤202继续进行网页脚本的解析。再例如,如果仅执行步骤203的黑名单匹配和步骤205的高危字节码统计,则步骤203中如果未匹配上,则直接执行步骤205,步骤205的执行流程不变。其他组合情况不再一一赘述。
在实施例二所示的流程中,一旦检测到恶意代码,则停止对网页脚本的解析,并可以进一步将检测结果进行上报。
下面举一个具体的实例对上述恶意代码识别过程进行描述,首先对javascript类型脚本的\u函数、unescape函数以及string.fromcharcode函数挂上函数钩子,假设待检测的网页脚本如下:
对上述网页脚本进行解析的过程中,通过已挂的函数钩子能够获取到string.fromcharcode在内存中生成的二进制数据,假设该段二进制数据为:
90909090eb548b753c8b74357803f5568b762003f533c94941ad33db360fbe142838f27408c1cb0d03da40ebef3bdf75e75e……
首先将获取到的二进制数据与预先配置的黑名单进行匹配,即判断二进制数据的开头是否为nop指令头,发现9090为nop指令头,直接可以确定检测到恶意代码。
如果不执行黑名单匹配的操作而直接执行反汇编检测,则在反汇编时检测出eb54对应自定位代码,可以确定检测到恶意代码。
如果在反汇编检测过程中没有检测到自定位代码,则统计高危字节码的数量,从该段二进制数据中统计到超过5个不可见字符,假设5为预设的高危字节码数量阈值,则同样会检测到恶意代码。
实施例三、
图3为本发明实施例三提供的得到恶意软件的方法流程图,如图3所示,该方法可以包括以下步骤:
步骤301:通过对创建文件函数所挂的函数钩子,在确定抓取的恶意代码执行了创建文件操作时,将创建文件操作的路径参数替换为指定的路径。
此处创建文件函数可以包括但不限于:NtCreateFile、ZwCreateFile等函数,预先在系统底层挂上函数钩子,能够监测恶意代码是否执行了创建文件操作。
路径参数的替换是为了使得恶意代码在创建恶意软件时,能将恶意软件转移到指定的路径,即转移到指定目录。
步骤302:将抓取的恶意代码覆盖任意一个正常程序的地址空间。
在本步骤中可以通过启动一个正常程序来将抓取的恶意代码拷贝到该正常程序的地址空间,该正常程序可以预先设定,保证是非恶意程序即可,诸如:记事本、计算器、即时通讯工具等。
需要说明的是,上述步骤301和步骤302的先后顺序并不是唯一的,也可以先执行步骤302再执行步骤301,也可以同时执行步骤301和步骤302。
步骤303:在虚拟机中执行上述正常程序的地址空间中的恶意代码,得到恶意软件。
由于步骤301的执行,在步骤303执行恶意代码过程中,创建的恶意软件被转移到指定的路径,从而在该指定的路径得到恶意软件。
以上是对本发明所提供方法进行的详细描述,下面通过实施例四对本发明所提供的装置进行详细描述。
实施例四、
图4为本发明实施例四提供的自动采集恶意软件的装置结构图,如图4所示,该装置包括:网页扫描单元400、恶意代码识别单元410和恶意代码执行单元420。
网页扫描单元400通过模拟浏览器扫描网页。
恶意代码识别单元410识别并抓取网页扫描单元400所扫描网页的恶意代码。
恶意代码执行单元420通过构建恶意代码执行环境来执行抓取到的恶意代码,得到恶意软件。
下面对恶意代码识别单元410进行详细描述。恶意代码识别单元410可以包括脚本解析子单元411。并进一步包括黑名单匹配子单元412(如图5a所示)、反汇编检测子单元413(如图5b所示)或者高危码统计子单元414(如图5c所示)。
脚本解析子单元411对网页扫描单元400所扫描网页的脚本进行解析,在解析过程中如果通过预先对预设的用于编写shellcode的函数所挂的函数钩子获取到对应函数在内存中产生的二进制数据,则触发黑名单匹配子单元412(如图5a所示)、反汇编检测子单元413(如图5b所示)或者高危码统计子单元414(如图5c所示)。
如图5a所示,黑名单匹配子单元412受到触发后,对脚本解析子单元411获取的二进制数据与预先设置的黑名单进行匹配,如果匹配上,则检测到恶意代码,其中黑名单包括:nop指令头。其中nop指令头包括但不限于:9090、5858、0c0c、0d0d等。
这种情况下,黑名单匹配子单元412如果检测到恶意代码则结束对待检测网页脚本的解析,否则触发脚本解析子单元411对待检测网页脚本继续进行解析。
如图5b所示,反汇编检测子单元413受到触发后,对脚本解析子单元411获取的二进制数据进行反汇编检测,如果在反汇编过程中检测到自定位代码,则检测到恶意代码。
反汇编检测子单元413逐字节对二进制数据进行反汇编,并检测是否存在自定位代码。一般来说恶意网页脚本中的恶意代码都是加密的,要进行动态解密必须要经过一个自定位过程,所谓自定位代码就是恶意代码获取自己在内存中位置的代码,包括但不限于:过程调用(call)指令代码、出栈(pop)指令代码、浮点检查保护环境(FSTENV)指令代码、高强度加花(SEH)指令代码等。
另外,反汇编检测子单元413如果检测到恶意代码则结束对待检测网页脚本的解析,否则触发脚本解析子单元411对待检测网页脚本继续进行解析。
如图5c所示,高危码统计子单元414受到触发后,对脚本解析子单元411获取的二进制数据进行高危字节码统计,如果高危字节码的数量超过预设的高危字节码数量阈值,则检测到恶意代码。
高危字节码是从大量shellcode样本中提取出的特征,经过对大量shellcode样本的分析,确定了一系列只有shellcode会使用的字符区间,这些区间一部分是不可见字符区间,所谓不可见字符是指Unicode字符表中所有不属于键盘上可见的字符且不属于汉字的字符。另一部分是通过经验总结出的堆喷射常用地址,包括但不限于:0c0c0c0c、0d0d0d0d0d、90909090、14141414等。
预设的高危字节码数量阈值可以经验值进行设置,例如如果高危字节码采用不可见字符,则可以设置高危字节码数量阈值为5;如果高危字节码采用堆喷射常用地址,则可以设置高危字节码数量阈值为1。
这种情况下,高危码统计子单元414如果检测到恶意代码则结束对待检测网页脚本的解析,否则触发脚本解析子单元411对待检测网页脚本继续进行解析。
除了上述图5a、图5b以及图5c的实现方式之外,还可以存在其他黑名单匹配子单元、反汇编检测子单元和高危码统计子单元进行任意组合的形式。
如图5d所示,恶意代码识别单元410包括脚本解析子单元411、黑名单匹配子单元412以及反汇编检测子单元413。
脚本解析子单元411对网页扫描单元400所扫描网页的脚本进行解析,在解析过程中如果通过预先对预设的用于编写shellcode的函数所挂的函数钩子获取到对应函数在内存中产生的二进制数据,则触发黑名单匹配子单元412。
黑名单匹配子单元412受到触发后,对脚本解析子单元411获取的二进制数据与预先设置的黑名单进行匹配,如果匹配上,则检测到恶意代码,如果确定没有匹配上时,触发反汇编检测子单元413。
反汇编检测子单元413受到触发后,对脚本解析子单元411获取的二进制数据进行反汇编检测,如果在反汇编过程中检测到自定位代码,则检测到恶意代码;如果在反汇编过程中没有检测到自定位代码,则触发脚本解析子单元411对待检测网页脚本继续进行解析。
如图5e所示,恶意代码识别单元410包括脚本解析子单元411、黑名单匹配子单元412以及高危码统计子单元414。
脚本解析子单元411对网页扫描单元400所扫描网页的脚本进行解析,在解析过程中如果通过预先对预设的用于编写shellcode的函数所挂的函数钩子获取到对应函数在内存中产生的二进制数据,则触发黑名单匹配子单元412。
黑名单匹配子单元412受到触发后,对脚本解析子单元411获取的二进制数据与预先设置的黑名单进行匹配,如果匹配上,则检测到恶意代码,如果确定没有匹配上时,触发高危码统计子单元414。
高危码统计子单元414受到触发后,对脚本解析子单元411获取的二进制数据进行高危字节码统计,如果高危字节码的数量超过预设的高危字节码数量阈值,则检测到恶意代码;否则,触发脚本解析子单元411对待检测网页脚本继续进行解析。
如图5f所示,恶意代码识别单元410可以包括脚本解析子单元411、反汇编检测子单元413以及高危码统计子单元414。
脚本解析子单元411对网页扫描单元400所扫描网页的脚本进行解析,在解析过程中如果通过预先对预设的用于编写shellcode的函数所挂的函数钩子获取到对应函数在内存中产生的二进制数据,则触发反汇编检测子单元413。
反汇编检测子单元413受到触发后,对脚本解析子单元411获取的二进制数据进行反汇编检测,如果在反汇编过程中检测到自定位代码,则检测到恶意代码;如果在反汇编过程中没有检测到自定位代码,则触发高危码统计子单元414。
高危码统计子单元414受到触发后,对脚本解析子单元411获取的二进制数据进行高危字节码统计,如果高危字节码的数量超过预设的高危字节码数量阈值,则检测到恶意代码;否则,触发脚本解析子单元411对待检测网页脚本继续进行解析。
如图5g所示,恶意代码识别单元410可以包括脚本解析子单元411、黑名单匹配子单元412、反汇编检测子单元413以及高危码统计子单元414。
脚本解析子单元411对网页扫描单元400所扫描网页的脚本进行解析,在解析过程中如果通过预先对预设的用于编写shellcode的函数所挂的函数钩子获取到对应函数在内存中产生的二进制数据,则触发黑名单匹配子单元412。
黑名单匹配子单元412受到触发后,对脚本解析子单元411获取的二进制数据与预先设置的黑名单进行匹配,如果匹配上,则检测到恶意代码;否则触发反汇编检测子单元413。
反汇编检测子单元413受到触发后,对脚本解析子单元411获取的二进制数据进行反汇编检测,如果在反汇编过程中检测到自定位代码,则检测到恶意代码;否则触发高危码统计子单元414。
高危码统计子单元414受到触发后,对脚本解析子单元411获取的二进制数据进行高危字节码统计,如果高危字节码的数量超过预设的高危字节码数量阈值,则检测到恶意代码;否则触发脚本解析子单元411对待检测网页脚本继续进行解析。
在上述图5a至图5g所示结构中,恶意代码识别单元410还可以包括:浏览器模拟子单元415,用于新建一个浏览器IE控件进程,并对预设的用于编写shellcode的函数挂函数钩子。
其中用于编写shellcode的函数包括:javascript类型脚本的用于转义的\u函数、用于字符串解码的unescape函数或者用于返回ASCII值表示的字符串的string.fromcharcode函数,vbscript类型脚本的unescape函数、string.fromcharcode函数或者用于返回与指定字符代码相关联的字符的chrw函数中的至少一种。
下面通过图6对恶意代码执行单元420进行详细描述,如图6所示,恶意代码执行单元420可以包括:路径替换子单元421、代码覆盖子单元422和代码执行子单元423。
路径替换子单元421通过对创建文件函数所挂的函数钩子,在确定恶意代码识别子单元410抓取的恶意代码执行了创建文件操作时,将创建文件操作的路径参数替换为指定的路径。
此处创建文件函数可以包括但不限于:NtCreateFile、ZwCreateFile等函数,预先在系统底层挂上函数钩子,能够监测恶意代码是否执行了创建文件操作。路径参数的替换是为了使得恶意代码在创建恶意软件时,能将恶意软件转移到指定的路径,即转移到指定目录。
代码覆盖子单元422将恶意代码识别子单元410抓取的恶意代码覆盖任意一个正常程序的地址空间。可以通过启动一个正常程序来将抓取的恶意代码拷贝到该正常程序的地址空间,该正常程序可以预先设定,保证是非恶意程序即可,诸如:记事本、计算器、即时通讯工具等。
代码执行子单元423在路径替换子单元421和代码覆盖子单元422处理完毕时,在虚拟机中执行抓取的恶意代码,得到恶意软件。执行恶意代码的过程中创建的恶意软件被转移到指定的路径,从而在该指定的路径得到恶意软件。
在采用上述方法和装置实现恶意软件的采集之后,一方面可以利用采集到的恶意软件构建静态特征库,从而方便后续快速地利用静态特征识别恶意软件;另一方面也可以通过分析恶意软件,获知挂马行为、挂马的作者以及地域分布情况、数量分布情况等,从而有效地实施针对性打击。当然恶意软件采集之后的应用并不限于此,还存在其他应用,在此不再一一赘述。
由以上描述可以看出,本发明提供的方法和装置具备以下优点:
1)本发明完全颠覆了现有恶意软件采集的思路,不是直接对恶意软件进行识别,而是通过模拟浏览器扫描网页,识别并抓取所扫描网页的恶意代码,再通过构建恶意代码执行环境执行抓取到的恶意代码,从而采集得到恶意代码。这种方式能够实现恶意软件的自动采集,无需人工识别,大大提高了效率。
2)从恶意代码的识别出发进而获取恶意软件无需通过采集恶意软件静态特征的方式,无论采用变形手段的恶意软件只要其包含恶意代码均能够采集到,可靠性和检出率大大提高。
3)由于本发明提供的方法和装置通过扫描网页的方式最终实现恶意软件的采集,因此可以少量的部署在服务器端或客户端,例如单机即可实现大量恶意软件的自动采集,难度和成本大大降低。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (18)
1.一种自动采集恶意软件的方法,其特征在于,该方法包括:
S1、通过模拟浏览器扫描网页,识别并抓取所扫描网页的恶意代码;
S21、通过对创建文件函数所挂的函数钩子,在确定抓取的恶意代码执行了创建文件操作时,将创建文件操作的路径参数替换为指定的路径;以及,将所述抓取的恶意代码覆盖一个正常程序的地址空间;
S22、在虚拟机中执行所述抓取的恶意代码,得到恶意软件。
2.根据权利要求1所述的方法,其特征在于,所述步骤S1中识别所扫描网页的恶意代码具体包括:
S11、对所扫描网页的脚本进行解析,在解析过程中如果通过预先对预设的用于编写shellcode的函数所挂的函数钩子获取到对应函数在内存中产生的二进制数据,则执行步骤A12、步骤B12或者步骤C12;
所述步骤A12为:对所述二进制数据与预先设置的黑名单进行匹配,如果匹配上,则检测到恶意代码,其中所述黑名单包括:nop指令头;
所述步骤B12为:对所述二进制数据进行反汇编检测,如果在反汇编过程中检测到自定位代码,则检测到恶意代码;
所述步骤C12为:对所述二进制数据进行高危字节码统计,如果高危字节码的数量超过预设的高危字节码数量阈值,则检测到恶意代码。
3.根据权利要求2所述的方法,其特征在于,如果检测到恶意代码,则结束对所述脚本的解析,否则转至所述步骤S11对所述脚本继续进行解析。
4.根据权利要求2所述的方法,其特征在于,在执行所述步骤A12确定没有匹配上时,进一步执行所述步骤B12或步骤C12。
5.根据权利要求2或4所述的方法,其特征在于,在执行所述步骤B12确定在反汇编过程中没有检测到自定位代码时,进一步执行所述步骤C12。
6.根据权利要求2所述的方法,其特征在于,所述自定位代码包括:过程调用call指令代码、出栈pop指令代码、浮点检查保护环境FSTENV指令代码以及高强度加花SEH指令代码中的至少一种。
7.根据权利要求2所述的方法,其特征在于,所述高危字节码包括:不可见字符和堆喷射常用地址中的至少一种。
8.根据权利要求2所述的方法,其特征在于,在所述步骤S11之前还包括:
S01、新建一个浏览器IE控件进程,并对预设的用于编写shellcode的函数挂函数钩子。
9.根据权利要求2或8所述的方法,其特征在于,所述用于编写shellcode的函数包括:javascript类型脚本的用于转义的\u函数、用于字符串解码的unescape函数或者用于返回ASCII值表示的字符串的string.fromcharcode函数,vbscript类型脚本的unescape函数、string.fromcharcode函数或者用于返回与指定字符代码相关联的字符的chrw函数中的至少一种。
10.一种自动采集恶意软件的装置,其特征在于,该装置包括:
网页扫描单元,用于通过模拟浏览器扫描网页;
恶意代码识别单元,用于识别并抓取所述网页扫描单元所扫描网页的恶意代码;
路径替换子单元,用于通过对创建文件函数所挂的函数钩子,在确定所述恶意代码识别子单元抓取的恶意代码执行了创建文件操作时,将创建文件操作的路径参数替换为指定的路径;
代码覆盖子单元,用于将所述恶意代码识别子单元抓取的恶意代码覆盖任意一个正常程序的地址空间;
代码执行子单元,用于在所述路径替换子单元和所述代码覆盖子单元处理完毕时,在虚拟机中执行所述抓取的恶意代码,得到恶意软件。
11.根据权利要求10所述的装置,其特征在于,所述恶意代码识别单元包括脚本解析子单元,并进一步包括黑名单匹配子单元、反汇编检测子单元或者高危码统计子单元;
所述脚本解析子单元,用于对所述网页扫描单元所扫描网页的脚本进行解析,在解析过程中如果通过预先对预设的用于编写shellcode的函数所挂的函数钩子获取到对应函数在内存中产生的二进制数据,则触发所述黑名单匹配子单元、反汇编检测子单元或者高危码统计子单元;
所述黑名单匹配子单元,用于受到触发后,对所述脚本解析子单元获取的二进制数据与预先设置的黑名单进行匹配,如果匹配上,则检测到恶意代码,其中所述黑名单包括:nop指令头;
所述反汇编检测子单元,用于受到触发后,对所述脚本解析子单元获取的二进制数据进行反汇编检测,如果在反汇编过程中检测到自定位代码,则检测到恶意代码;
所述高危码统计子单元,用于受到触发后,对所述脚本解析子单元获取的二进制数据进行高危字节码统计,如果高危字节码的数量超过预设的高危字节码数量阈值,则检测到恶意代码。
12.根据权利要求11所述的装置,其特征在于,所述黑名单匹配子单元、反汇编检测子单元或者高危码统计子单元,还用于如果检测到恶意代码则结束对所述脚本的解析,否则触发所述脚本解析子单元对所述脚本继续进行解析。
13.根据权利要求11所述的装置,其特征在于,如果所述恶意代码识别单元包括所述黑名单匹配子单元,则进一步包括:所述反汇编检测子单元或者所述高危码统计子单元;
所述黑名单匹配子单元确定没有匹配上时,触发所述反汇编检测子单元或者所述高危码统计子单元。
14.根据权利要求11或13所述的装置,其特征在于,如果所述恶意代码识别单元包括所述反汇编检测子单元,则进一步包括所述高危码统计子单元;
所述反汇编检测子单元确定在反汇编过程中没有检测到自定位代码时,触发所述高危码统计子单元。
15.根据权利要求11所述的装置,其特征在于,所述自定位代码包括:过程调用call指令代码、出栈pop指令代码、浮点检查保护环境FSTENV指令代码以及高强度加花SEH指令代码中的至少一种。
16.根据权利要求11所述的装置,其特征在于,所述高危字节码包括:不可见字符和堆喷射常用地址中的至少一种。
17.根据权利要求11所述的装置,其特征在于,所述恶意代码识别单元还包括:浏览器模拟子单元,用于新建一个浏览器IE控件进程,并对预设的用于编写shellcode的函数挂函数钩子。
18.根据权利要求11或17所述的装置,其特征在于,所述用于编写shellcode的函数包括:javascript类型脚本的用于转义的\u函数、用于字符串解码的unescape函数或者用于返回ASCII值表示的字符串的string.fromcharcode函数,vbscript类型脚本的unescape函数、string.fromcharcode函数或者用于返回与指定字符代码相关联的字符的chrw函数中的至少一种。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210024743.3A CN102609649B (zh) | 2012-02-06 | 2012-02-06 | 一种自动采集恶意软件的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210024743.3A CN102609649B (zh) | 2012-02-06 | 2012-02-06 | 一种自动采集恶意软件的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102609649A CN102609649A (zh) | 2012-07-25 |
CN102609649B true CN102609649B (zh) | 2015-09-02 |
Family
ID=46527010
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210024743.3A Active CN102609649B (zh) | 2012-02-06 | 2012-02-06 | 一种自动采集恶意软件的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102609649B (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103701759A (zh) * | 2012-09-27 | 2014-04-02 | 西门子公司 | 一种用于检测恶意网站的方法和装置 |
CN103870382B (zh) * | 2012-12-10 | 2018-11-09 | 百度在线网络技术(北京)有限公司 | 一种代码风险的检测方法及装置 |
CN103425930B (zh) * | 2012-12-27 | 2016-09-07 | 北京安天电子设备有限公司 | 一种在线实时脚本检测方法及系统 |
CN104252599B (zh) * | 2013-06-28 | 2019-07-05 | 深圳市腾讯计算机系统有限公司 | 一种检测跨站脚本漏洞的方法及装置 |
CN103413092A (zh) * | 2013-09-10 | 2013-11-27 | 深圳市共进电子股份有限公司 | 一种网络终端禁止恶意代码注入的方法 |
CN104636664B (zh) * | 2013-11-08 | 2018-04-27 | 腾讯科技(深圳)有限公司 | 基于文档对象模型的跨站脚本攻击漏洞检测方法及装置 |
CN103905425A (zh) * | 2013-12-27 | 2014-07-02 | 哈尔滨安天科技股份有限公司 | 一种恶意代码网络行为加密数据捕获方法及系统 |
CN103927486B (zh) * | 2014-05-06 | 2018-03-06 | 珠海市君天电子科技有限公司 | 一种黑特征库中失效特征的确定方法及系统 |
CN104008336B (zh) * | 2014-05-07 | 2017-04-12 | 中国科学院信息工程研究所 | 一种ShellCode检测方法和装置 |
CN104978381A (zh) * | 2014-10-28 | 2015-10-14 | 哈尔滨安天科技股份有限公司 | 一种基于反汇编进行恶意样本检测的方法及系统 |
CN104331663B (zh) * | 2014-10-31 | 2017-09-01 | 北京奇虎科技有限公司 | web shell的检测方法以及web服务器 |
CN104751057B (zh) * | 2015-03-13 | 2018-08-24 | 安一恒通(北京)科技有限公司 | 一种用于增强计算机系统安全性的方法及装置 |
RU2606564C1 (ru) * | 2015-09-30 | 2017-01-10 | Акционерное общество "Лаборатория Касперского" | Система и способ блокировки выполнения сценариев |
CN106022132A (zh) * | 2016-05-30 | 2016-10-12 | 南京邮电大学 | 一种基于动态内容分析的网页木马实时检测方法 |
CN107577944A (zh) * | 2017-09-08 | 2018-01-12 | 杭州安恒信息技术有限公司 | 基于代码语法分析器的网站恶意代码检测方法及装置 |
CN109284604A (zh) * | 2018-09-10 | 2019-01-29 | 中国联合网络通信集团有限公司 | 一种基于虚拟机的软件行为分析方法和系统 |
CN109408810A (zh) * | 2018-09-28 | 2019-03-01 | 东巽科技(北京)有限公司 | 一种恶意pdf文档检测方法及装置 |
CN109918907B (zh) * | 2019-01-30 | 2021-05-25 | 国家计算机网络与信息安全管理中心 | Linux平台进程内存恶意代码取证方法、控制器及介质 |
CN112632531A (zh) * | 2020-12-15 | 2021-04-09 | 平安科技(深圳)有限公司 | 恶意代码的识别方法、装置、计算机设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7350203B2 (en) * | 2002-07-23 | 2008-03-25 | Alfred Jahn | Network security software |
CN101673326A (zh) * | 2008-09-11 | 2010-03-17 | 北京理工大学 | 基于程序执行特征的网页木马检测方法 |
CN101820419A (zh) * | 2010-03-23 | 2010-09-01 | 北京大学 | 一种挂马网页中网页木马挂接点自动定位方法 |
CN102254111A (zh) * | 2010-05-17 | 2011-11-23 | 北京知道创宇信息技术有限公司 | 恶意网站检测方法及装置 |
-
2012
- 2012-02-06 CN CN201210024743.3A patent/CN102609649B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7350203B2 (en) * | 2002-07-23 | 2008-03-25 | Alfred Jahn | Network security software |
CN101673326A (zh) * | 2008-09-11 | 2010-03-17 | 北京理工大学 | 基于程序执行特征的网页木马检测方法 |
CN101820419A (zh) * | 2010-03-23 | 2010-09-01 | 北京大学 | 一种挂马网页中网页木马挂接点自动定位方法 |
CN102254111A (zh) * | 2010-05-17 | 2011-11-23 | 北京知道创宇信息技术有限公司 | 恶意网站检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102609649A (zh) | 2012-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102609649B (zh) | 一种自动采集恶意软件的方法和装置 | |
CN102622543B (zh) | 一种动态检测恶意网页脚本的方法和装置 | |
KR101083311B1 (ko) | 악성 스크립트 분석 시스템 및 그를 이용한 악성 스크립트 분석 방법 | |
CN101820419B (zh) | 一种挂马网页中网页木马挂接点自动定位方法 | |
CN101605074B (zh) | 基于网络通讯行为特征监测木马的方法与系统 | |
CN107688743B (zh) | 一种恶意程序的检测分析方法及系统 | |
Shabtai et al. | F-sign: Automatic, function-based signature generation for malware | |
CN103065089B (zh) | 网页木马的检测方法和装置 | |
US20100071063A1 (en) | System for automatic detection of spyware | |
CN101924762A (zh) | 一种基于云安全的主动防御方法 | |
CN103634306A (zh) | 网络数据的安全检测方法和安全检测服务器 | |
CN107465702B (zh) | 基于无线网络入侵的预警方法及装置 | |
CN107612924A (zh) | 基于无线网络入侵的攻击者定位方法及装置 | |
CN101154257A (zh) | 基于漏洞特征的动态执行补丁方法 | |
CN109167781A (zh) | 一种基于动态关联分析的网络攻击链识别方法和装置 | |
CN104850786A (zh) | 基于环境重构的恶意代码完整性分析方法 | |
CN107231360A (zh) | 基于云网络的网络病毒防护方法、安全无线路由器和系统 | |
CN107644161A (zh) | 样本的安全测试方法、装置和设备 | |
Liang et al. | Malicious web pages detection based on abnormal visibility recognition | |
CN107566401A (zh) | 虚拟化环境的防护方法及装置 | |
US10601867B2 (en) | Attack content analysis program, attack content analysis method, and attack content analysis apparatus | |
CN107302530A (zh) | 一种基于白名单的工控系统攻击检测装置及其检测方法 | |
CN111859374A (zh) | 社会工程学攻击事件的检测方法、装置以及系统 | |
KR101404108B1 (ko) | 윈도우 실행파일 추출방법, 및 장치 | |
CN107509200A (zh) | 基于无线网络入侵的设备定位方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |