一种脚本病毒的监控方法及装置制造方法

文档序号:6505100阅读:184来源:国知局
一种脚本病毒的监控方法及装置制造方法
【专利摘要】本发明提供了一种脚本病毒的监控方法及装置。其中,所述方法包括:挂钩脚本程序运行时所必需的二进制文件内存映像的入口点函数;利用解密函数对所述脚本程序进行解密得到真实命令序列;分析所述真实命令序列对应的真实脚本动作,并根据所述真实脚本动作执行对应操作。本发明能够对脚本病毒进行有效监控,保护操作系统的安全。
【专利说明】一种脚本病毒的监控方法及装置

【技术领域】
[0001]本发明涉及计算机病毒分析处理【技术领域】,具体涉及一种脚本病毒的监控方法及 装置。

【背景技术】
[0002]脚本病毒,是指通过脚本语言编写的具有危害或破坏计算机系统正常工作的恶意 程序。常见的脚本语言包括Visual Basic Script (简称为VBScript)和javascript。脚 本语言的学习和编写比较简单,并且可以利用Windows系统提供的对象和组件,操作文件、 注册表和网络等,基于脚本语言编写的脚本病毒,具有破坏力大、流传范围广等特点,严重 危害了用户的系统安全。
[0003] 传统的安全软件对脚本病毒的监控通常基于静态分析识别,通过字符匹配敏感命 令序列字符,进而进行进一步的监控。由于这些脚本语言是解释执行的,其源代码可以直接 明文获得或者通过简单处理而得到,对病毒样本经过简单修改就能产生新的病毒样本,因 此其变种较多。基于静态分析识别的传统安全软件,难以对变种样本进行及时准确的查杀 处理。
[0004] 具体的,现有技术的静态分析识别,往往采用针对脚本病毒进行脚本动 作所必须的对象及命令进行字符匹配来识别,例如,当监控到字符串" Scripting. FileSystemObject"(该字符串为脚本进行文件操作所必须创建的对象)时,则进行下一步 监控。而一些脚本病毒通过对上述字符串进行加密,采用加密后的字符串来避免被识别。例 如,采用escape全加密或部分加密方式对字符串进行加密,上述字符串加密后被替换成了 十六进制的转义序列,如 "%73%63%52%69%50%74%69%4E%47%2E%66%49%4C%65%53%79%73%74% 65% 6D%4F%62%6A%65%63%74,,(全 escape 加密方式)或" s%63%52%69%50%74%69%4E%47%2E%66 %49%4C%65%5 3%79%73%74%65%6D%4F%62%6A%65%63T"(部分 escape 加密方式)。
[0005] 可以看出,通过不同的加密方式或者对字符串中的不同字符进行加密,可以获得 多种多样的加密结果,传统的基于静态分析匹配方式,很难能顾及各种情形,往往监控不到 变种病毒。恶意脚本程序采用此种特殊加密可以轻松逃避安全软件监控,进而实行恶意危 害系统的行为。因此,亟需一种方法,能够对变种脚本病毒进行有效监控,以保护用户系统 的安全。


【发明内容】

[0006] 本发明要解决的技术问题是提供一种脚本病毒的监控方法及装置,用于对脚本病 毒进行有效监控。
[0007] 为解决上述技术问题,本发明的实施例提供技术方案如下:
[0008] -方面,提供一种脚本病毒的监控方法,包括:
[0009] 挂钩脚本程序运行时所必需的二进制文件内存映像的入口点函数;
[0010] 利用解密函数对所述脚本程序进行解密得到真实命令序列;
[con]分析所述真实命令序列对应的真实脚本动作,并根据所述真实脚本动作执行对应 操作。
[0012] 进一步地,上述方案中,所述根据所述真实脚本动作执行对应操作包括:
[0013] 根据所述真实脚本动作拦截或允许所述脚本程序的继续执行。
[0014] 进一步地,上述方案中,所述根据所述真实脚本动作拦截或允许所述脚本程序的 继续执行包括:
[0015] 在所述真实脚本动作属于预先定义的脚本病毒动作时,拦截所述脚本程序的继续 执行;否则,允许所述脚本程序的继续执行。
[0016] 进一步地,上述方案中,在所述挂钩脚本程序运行时所必需的二进制文件内存映 像的入口点函数之前,所述方法还包括:
[0017] 若待监控程序加载的二进制文件内存映像为脚本支持相关的动态链接库文件,识 别待监控程序为脚本程序。
[0018] 进一步地,上述方案中,所述挂钩脚本程序运行时所必需的二进制文件内存映像 的入口点函数,获得解密函数对脚本程序解密后得到的真实命令序列包括:
[0019] 在脚本程序加载的二进制文件内存映像的虚拟内存空间中,搜索与解密函数的内 存特征相匹配的入口点;
[0020] 在所述入口点挂钩一伪造函数,通过所述伪造函数调用解密函数对脚本程序进行 解密,并根据解密函数及其内部处理逻辑,从内存中读取解密后的真实命令序列。
[0021] 本发明实施例还提供了一种脚本病毒的监控装置,包括:
[0022] 挂钩处理模块,用于挂钩脚本程序运行时所必需的二进制文件内存映像的入口点 函数,并利用解密函数对所述脚本程序进行解密得到真实命令序列;
[0023] 分析模块,用于分析所述真实命令序列对应的真实脚本动作;
[0024]行为处理模块,用于并根据所述分析模块获得的真实脚本动作,执行对应操作。
[0025] 进一步地,上述方案中,所述行为处理模块,根据所述真实脚本动作拦截或允许所 述脚本程序的继续执行。
[0026] 进一步地,上述方案中,所述行为处理模块,进一步用于在所述真实脚本动作属于 预先定义的脚本病毒动作时,拦截所述脚本程序的继续执行;否则,允许所述脚本程序的继 续执行。
[0027] 进一步地,上述方案中,所述装置还包括:
[0028]识别模块,用于在待监控程序加载的二进制文件内存映像为脚本支持相关的动态 链接库文件,识别待监控程序为脚本程序。
[0029] 进一步地,上述方案中,所述挂钩处理模块包括:
[0030]搜索模块,用于在脚本程序加载的二进制文件内存映像的虚拟内存空间中,搜索 与解密函数的内存特征相匹配的入口点;
[0031] 解密模块,用于在所述入口点挂钩一伪造函数,通过所述伪造函数调用解密函数 对脚本程序进行解密,并根据解密函数及其内部处理逻辑,从内存中读取解密后的真实命 令序列。
[0032]从以上所述可以看出,本发明提供的脚本病毒的监控方法及装置,至少具有以下 有益效果:
[0033] 本发明实施例通过挂钩脚本程序运行时所必须二进制文件内存映像的入口点函 数,使得常用的脚本病毒通过字符加密变换逃避安全软件监控的方式失效,从而可以有效 地对脚本病毒进行监控,保护用户系统的安全。

【专利附图】

【附图说明】
[0034] 图1为本发明实施例所述脚本病毒的监控方法的流程不意图;
[0035] 图2为本发明实施例所述脚本病毒的监控装置的结构示意图;
[0036] 图3为本发明实施例提供的脚本病毒监控示例的流程示意图。

【具体实施方式】
[0037]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对 本发明进行详细描述。
[0038] 本发明实施例提供的脚本病毒的监控方法,如图1所示,包括以下步骤:
[0039] 步骤11,挂钩脚本程序运行时所必需的二进制文件内存映像的入口点函数。
[0040] 这里,挂钩是指通过修改内存数据,使得程序本来的执行流程受到改变。例如,可 以在原流程入口点执行之前或执行之后加入额外的函数(伪造函数)执行流程,从而可以对 传递给原流程入口点的信息(函数参数)进行修改或者对原流程入口点执行的结果进行改 变。上述步骤11中,通过挂钩处理,改变脚本程序的执行流程,在脚本程序的真实命令序列 被执行之前对其进行截获。
[0041] 步骤12,利用解密函数对脚本程序进行解密得到真实命令序列;
[0042] 具体的,所述解密函数包括VbsUnescape函数和JsUnescape函数。
[0043] 步骤I3,分析所述真实命令序列对应的真实脚本动作,并根据所述真实脚本动作 执行对应操作。
[0044] 上述步骤I3中,可以按照现有技术中的分析方式,分析所述真实命令序列对应的 真实脚本动作,例如,可以采用基于静态分析识别的方式,通过在真实命令序列中进行字符 匹配处理,查找与预先设定的敏感命令序列字符相匹配的字符,然后依据匹配处理结果确 定所述真实命令序列对应的真实脚本动作,进而执行对应的操作,例如,在所述真实脚本动 作属于预先定义的脚本病毒动作时,拦截所述脚本程序的继续执行;否则,允许所述脚本程 序的继续执行。
[0045] 具体的,敏感命令序列字符的设置,则可以根据预先获得的脚本病毒进行脚本动 作所必须的对象及命令进行设置,此处不再赘述。
[0046] 从以上所述可以看出,本发明实施例提供的上述方法中,通过挂钩脚本程序相关 解密(Unescape)函数入口点,分析出脚本程序解密后的真实命令序列,进而准确识别出脚 本程序的真正意图,据此进行对应的操作,从而实现了对脚本病毒有效监控,保护了用户操 作系统的安全。
[0047]考虑到系统中的程序多种多样,本实施例在执行上述步骤U之前,可以进一步识 别出待监控程序中的脚本程序,针对脚本程序执行上述步骤U?13的处理,此时,上述方 法在步骤11之前,还可以包括以下步骤:
[0048]若待监控程序加载的二进制文件内存映像为脚本支持相关的动态链接库文件,识 别待监控程序为脚本程序。
[0049] 具体的,对于Window (视窗)操作系统,所述脚本支持相关的动态链接库文件包括 vbscirpt. dll 和 jscript. dll〇
[0050] 上述步骤11?12,又具体可以包括以下步骤:
[0051] 步骤111,在脚本程序加载的二进制文件内存映像的虚拟内存空间中,搜索与解密 函数的内存特征相匹配的入口点;
[0052] 步骤II2,在所述入口点挂钩一伪造函数,通过所述伪造函数调用解密函数对脚本 程序进行解密,并根据解密函数及其内部处理逻辑,从内存中读取解密后的真实命令序列。
[0053] 从以上所述可以看出,本发明实施例上述方法可以应用在脚本病毒识别分析系统 中,针对常见的脚本病毒为了逃避安全软件的静态监控,通常采用escape加密等方式对病 毒代码及数据进行特殊处理,从而使恶意行为不被发现的问题,本发明实施例通过挂钩相 关解密(Unescape)函数入口点,并分析出解密后的真实结果,准确识别脚本病毒的真正意 图后执行相应的处理,因此可以作为传统基于静态脚本病毒分析的有效补充。
[0054]基于上述方法,本发明实施例还提供了一种脚本病毒的监控装置,如图2所示,该 装置包括:
[0055]挂钩处理模块,用于挂钩脚本程序运行时所必需的二进制文件内存映像的入口点 函数,并利用解密函数对脚本程序进行解密得到真实命令序列; ~
[0056] 分析模块,用于分析所述真实命令序列对应的真实脚本动作;
[0057]行为处理模块,用于并根据所述分析模块获得的真实脚本动作,执行对应操作。 [0058]其中,所述行为处理模块,用于根据所述真实脚本动作拦截或允许所述脚本程序 的继续执行。
[0059] 所述行为处理模块进一步用于在所述真实脚本动作属于预先定义的脚本病毒动 作时,拦截所述脚本程序的继续执行;否则,允许所述脚本程序的继续执行。
[0060] 为识别出待监控程序中的脚本程序,上述装置还包括:
[0061]识别模块,用于在待监控程序加载的二进制文件内存映像为脚本支持相关的动态 链接库文件,识别待监控程序为脚本程序。
[0062] 进一步的,上述装置中,所述挂钩处理模块包括:
[0063] 搜索模块,用于在脚本程序加载的二进制文件内存映像的虚拟内存空间中,搜索 与解密函数的内存特征相匹配的入口点;
[0064]解密模块,用于在所述入口点挂钩一伪造函数,通过所述伪造函数调用解密函数 对脚本程序进行解密,并根据解密函数及其内部处理逻辑,从内存中读取解密后的真实命 令序列。
[0065] 为了更容易理解本实施例的上述方案,下面以Windows操作系统为例,将通过更 为详细的示例对本发明做进一步的说明。
[0066]脚本病毒通常米用VBScript、JavaScript等语言编写。在Window操作系统中,脚 本病毒由脚本宿主程序wscript. exe执行,并且在执行之前会根据脚本病毒采用的语言, 加载动态链接库VBScript, dll或者jscript· dll。本发明实施例通过挂钩脚本病毒运行时 所必须二进制文件内存映像(VBScript, dll或jscript· dll)的入口点函数,具体针对上述 的escape全加密或者部分加密的方式对应VBScript, dll的VbsUnescape函数和jscript. dll的JsUnescape函数,待其执行完毕后交给分析模块,分析模块根据函数名称和结果获 取逻辑,从内存中获取解密函数得到的解密结果,然后将解密结果发送给日志记录模块和 行为处理模块进行记录以及对应处理。具体的,如图3所示,该示例包括以下步骤:
[0067]步骤31,针对待监控程序,挂钩kernel32. dll导出的函数LoadLibraryA,LoadLi braryW,LoadLibraryExA和LoadLibraryExW四个函数,这四个函数功能都是用来加载动态 链接库。
[0068] 这里,kernel32. dll是Windows操作系统中内核级的动态链接库文件,用于控制 系统的内存管理、数据的输入输出操作和中断处理。Windows系统中带有字符串参数的API 函数通常都有W和A两个版本,分别对应于Unicode和ANSI版本。通过挂钩上述四个函数, 可以在待监控程序加载vbscirpt· dll或jscript. dll时,确定出待监控程序为脚本程序, 进而后续处理。
[0069] 步骤32,判断传入上述四个函数的第一个参数是否匹配字符串"vbscirpt. dll" 或" jscript. dll",若是,则继续执行步骤33 ;否则,进入步骤38。
[0070] 这里,上述四个函数的第一个参数都是指将要被系统加载的动态链接库的全路 径,若该第一个参数中存在与字符串"vbscirpt. dll"或"jscript. dll"相匹配的字符串, 则说明待监控程序是脚本程序,此时需要执行后续的步骤33以进一步判断该脚本程序是 否为恶意的脚本病毒。若待监控程序非脚本程序,则进入步骤38,以进一步按照该程序的原 始逻辑进行处理。
[0071] 步骤33,在满足步骤32匹配的情况下,待上述四个函数被系统执行完,通过搜索 加载的 vbscirpt. dll 或 jscript. dll 虚拟内存空间,匹配 VbsUnescape (VBS 中 escape 对 应的解密函数)或JsUnescape (JavaScript中escape对应的解密函数)函数特征,通过内 存特征搜索找到VbsUnescape或JsUnescape的入口点。
[0072] 步骤34,在步骤33执行完成后,挂钩上述入口点函数,替换为自己的伪造函数,这 里,伪造函数与原函数(如VbsUnescape或JsUnescape函数)声明需要保持一致。
[0073] 步骤35,经过escape全加密或部分加密的脚本程序在执行前,必须走unescape的 解密流程,此时伪造函数被调用,在伪造函数内调用VbsUnescape或JsUnescape原始执行 逻辑流程,对程序代码进行解密,等待系统执行完,将返回结果发送给分析模块。
[0074] 步骤36,分析模块根据escape函数原型,如BL_INT_stdcall fake_ JsUnescape (BL_WCHAR*p, BL_INT a),以及该函数的内部处理逻辑,获得解密后的结果,本 示例中该结果需要按照* ((BL_PWSTR*) 〇 ((PUL0NG) ((UL0NG) a+8)) +8))的规则从内存中 获取。
[0075] 例如,假设经过escape加密的某个脚本病毒代码为:
[0076] 〃%49%66%20 %46%53%4F%2E%46%69%6C%65%45%78%69%73%74%73%28%66%50%61%74%68%2 9%20%54%68%65%6E%20%46%53%4F%2E%44%65%6C%65%74%65%46%69%6C%65%20 %66%50%61%74%68%2C%54%72%75%65%0D%0A%53%65%74%20%46%63%3D%46%53%4F%2E%4F %70%65%6E%54%65%78%74%46%69%6C%65%28%66%50%61%74%68%2C%32%2C%54%72%75%65 %29%0D%0A%46%63%2E%57%72%69%74%65%20%43%6F%6E%74%65%6E%74%0D%0A%46%63%2E %43%6C%6F%73%65%0D%0A%53%65%74%20%46%63%3D%4E%6F%74%68%69%6E%67%0D%0A%5 3%65%74%20%46%61%3D%46%53%4F%2E%47%65%74%46%69%6C%65%28%66%50%61%74%68°/〇 29%0D%0A%46%61%2E%41%74%74%72%69%62%75%74%65%73%3D%37%0D%0A%53%65%74%20 %46%61%3D%4E%6F%74%68%69%6E%67 ",
[0077] 此时传统的静态分析很难识别其真正的脚本动作。而经过上述处理,得到解密结 果后,对解密结果分析即可得到脚本动作的真实结果为:
[0078] MIf FSO.FileExists(ffath) Then FSO.DeleteFile ffathjme Sci Fc=FSO ()ρ(.·--Τοχ--7?Ιι;(!?3!!},2,1'me) Fc.Write Content Fc.Close Set Fc=Nothing Set Fa=FS() (ietl ilei fPatli} i a.Attributes 7 Set;S=Hothmr
[0079]上述命令序列表示,如果某文件存在,首先删除该文件,然后以同样路径建立新文 件,将某些内容写进去之后关闭文件,最后修改该文件属性为系统并进行隐藏。
[0080] 步骤37,将步骤36中分析获取的真实结果交给日志记录模块进行行为记录,以及 发送结果信息给行为处理模块,行为处理模块则根据真实的脚本动作对病毒操作进行拦截 以及对非病毒操作进行放行。
[0081] 步骤38,将控制权交给系统,从而继续按照上述四个函数的原始逻辑处理。
[0082]综上,脚本病毒为了逃避安全软件对敏感操作命令的追踪通常采用字符加密变换 的方式,使安全软件常难以正确识别其相关脚本动作的真正意图。本发明实施例通过挂钩 脚本病毒运行时所必须二进制文件内存映像的入口点函数,即使脚本病毒采用了如上所述 的字符加密变换,由于在其命令序列真正交给脚本解释器解释执行前必须要经过解密函数 解密,本发明实施例针对此解密函数的入口点进行有效监控,可以获取字符加密变化前的 真正命令序列,从而有效监控到脚本动作的真正意图和目的。
[0083]此说明书中所描述的许多功能部件都被称为模块,以便更加特别地强调其实现方 式的独立性。
[0084] 本发明实施例中,模块可以用软件实现,以便由各种类型的处理器执行。举例来 说,一个标识的可执行代码模块可以包括计算机指令的一个或多个物理或者逻辑块,举例 来说,其可以被构建为对象、过程或函数。尽管如此,所标识模块的可执行代码无需物理地 位于一起,而是可以包括存储在不同物理上的不同的指令,当这些指令逻辑上结合在一起 时,其构成模块并且实现该模块的规定目的。
[0085] 实际上,可执行代码模块可以是单条指令或者是许多条指令,并且甚至可以分布 在多个不同的代码段上,分布在不同程序当中,以及跨越多个存储器设备分布。同样地,操 作数据可以在模块内被识别,并且可以依照任何适当的形式实现并且被组织在任何适当类 型的数据结构内。所述操作数据可以作为单个数据集被收集,或者可以分布在不同位置上 (包括在不同存储设备上),并且至少部分地可以仅作为电子信号存在于系统或网络上。 [0086] 在模块可以利用软件实现时,考虑到现有硬件工艺的水平,所以可以以软件实现 的模块,在不考虑成本的情况下,本领域技术人员都可以搭建对应的硬件电路来实现对应 的功能,所述硬件电路包括常规的超大规模集成(VLSI)电路或者门阵列以及诸如逻辑芯 片、晶体管之类的现有半导体或者是其它分立的元件。模块还可以用可编程硬件设备,诸如 现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等实现。
[0087]以上所述仅是本发明的实施方式,应当指出,对于本【技术领域】的普通技术人员来 说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为 本发明的保护范围。
【权利要求】
1. 一种脚本病毒的监控方法,其特征在于,包括: 挂钩脚本程序运行时所必需的二进制文件内存映像的入口点函数; 利用解密函数对所述脚本程序进行解密得到真实命令序列; 分析所述真实命令序列对应的真实脚本动作,并根据所述真实脚本动作执行对应操 作。
2. 根据权利要求1所述的方法,其特征在于,所述根据所述真实脚本动作执行对应操 作包括: 根据所述真实脚本动作拦截或允许所述脚本程序的继续执行。
3. 根据权利要求2所述的方法,其特征在于,所述根据所述真实脚本动作拦截或允许 所述脚本程序的继续执行包括: 在所述真实脚本动作属于预先定义的脚本病毒动作时,拦截所述脚本程序的继续执 行;否则,允许所述脚本程序的继续执行。
4. 根据权利要求1所述的方法,其特征在于,在所述挂钩脚本程序运行时所必需的二 进制文件内存映像的入口点函数之前,所述方法还包括: 若待监控程序加载的二进制文件内存映像为脚本支持相关的动态链接库文件,识别待 监控程序为脚本程序。
5. 根据权利要求1-4中任一项所述的方法,其特征在于,所述挂钩脚本程序运行时所 必需的二进制文件内存映像的入口点函数,获得解密函数对脚本程序解密后得到的真实命 令序列包括: 在脚本程序加载的二进制文件内存映像的虚拟内存空间中,搜索与解密函数的内存特 征相匹配的入口点; 在所述入口点挂钩一伪造函数,通过所述伪造函数调用解密函数对脚本程序进行解 密,并根据解密函数及其内部处理逻辑,从内存中读取解密后的真实命令序列。
6. -种脚本病毒的监控装置,其特征在于,包括: 挂钩处理模块,用于挂钩脚本程序运行时所必需的二进制文件内存映像的入口点函 数,并利用解密函数对所述脚本程序进行解密得到真实命令序列; 分析模块,用于分析所述真实命令序列对应的真实脚本动作; 行为处理模块,用于并根据所述分析模块获得的真实脚本动作,执行对应操作。
7. 根据权利要求6所述的装置,其特征在于,所述行为处理模块用于根据所述真实脚 本动作拦截或允许所述脚本程序的继续执行。
8. 根据权利要求7所述的装置,其特征在于,所述行为处理模块,进一步用于在所述真 实脚本动作属于预先定义的脚本病毒动作时,拦截所述脚本程序的继续执行;否则,允许所 述脚本程序的继续执行。
9. 根据权利要求6所述的装置,其特征在于,还包括: 识别模块,用于在待监控程序加载的二进制文件内存映像为脚本支持相关的动态链接 库文件,识别待监控程序为脚本程序。
10. 根据权利要求6-9中任一项所述的装置,其特征在于,所述挂钩处理模块包括: 搜索模块,用于在脚本程序加载的二进制文件内存映像的虚拟内存空间中,搜索与解 密函数的内存特征相匹配的入口点; 解密模块,用于在所述入口点挂钩一伪造函数,通过所述伪造函数调用解密函数对脚 本程序进行解密,并根据解密函数及其内部处理逻辑,从内存中读取解密后的真实命令序 列。
【文档编号】G06F21/56GK104252596SQ201310269085
【公开日】2014年12月31日 申请日期:2013年6月28日 优先权日:2013年6月28日
【发明者】杨景杰, 苏海峰, 白彦庚, 邹义鹏 申请人:贝壳网际(北京)安全技术有限公司, 北京金山网络科技有限公司, 北京金山安全软件有限公司, 珠海市君天电子科技有限公司, 可牛网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1