一种基于程序关键字调用序列的脚本病毒检测方法及系统的制作方法
【技术领域】
[0001]本发明涉及网络安全领域,特别涉及一种基于程序关键字调用序列的脚本病毒检测方法及系统。
【背景技术】
[0002]脚本语言是为了缩短传统的编写-编译-链接-运行过程而创建的计算机编程语言,它由相应的解释器逐句解释执行,具有简单,易学易用等特点,目前在互联网的网页开发中大量使用,较为流行的脚本语言有javascript和vbscript等。恶意脚本程序是以损坏系统功能和恶意传播为目的的脚本程序,这部分程序嵌入在正常的网页程序中,不易被人发觉,在用户浏览被恶意脚本感染的网页时,自动下载其他恶意代码到用户电脑中或感染用户系统上的其他脚本代码。
[0003]目前对恶意脚本的检测方式有很多种,有基于静态代码内容进行模式匹配检测的,也有基于虚拟执行后结果进行模式再匹配的。而目前恶意脚本为了对抗杀毒软件的查杀大都采用了复杂的多态变形技术,如部分的脚本变形采用增加空格换行等无用字符,或者将脚本程序中使用的变量名称采用随机字符串定义,语句等价变换等,这给静态代码检测的方法带来了非常大的困难,导致检测模块的特征量急剧上升,和检出率的不断降低,这就催生了采用虚拟执行后的检测方法,这个方法的好处是通过虚拟执行,解密了恶意代码的变形代码,得到真正的恶意功能部分,再采用静态的模式匹配方法进行匹配,这个方法的确提高了恶意脚本的检出能力,但是由于该方法执行效率非常低,很难找到一致的方法对所有恶意脚本进行解密,通常是每种恶意变形技术都要实现一套脚本虚拟执行解密模块,开发难度大,日常维护成本高导致该方法在目前的反病毒软件中并没有广泛应用。
【发明内容】
[0004]基于上述问题,本发明提出了一种基于程序关键字调用序列的脚本病毒检测方法及系统,针对恶意脚本程序较多采用字符串替换,增加无意义空行等形式变形加密技术,但是变形的代码拥有相同的调用方式和指令执行流的跳转结构,而且主要功能代码调用的API名称是基本一致的特点,通过对关键词调用及语义中上下文调用及跳转关系,可以基本判断两个脚本语言是否具有一致的代码结构,具有同样代码结构的脚本则可以认为相同,以此来判断脚本程序是否为恶意。
[0005]一种基于程序关键字调用序列的脚本病毒检测方法,包括:
对待检测程序的字符序列进行词法分析,生成一系列单词,并将单词分类,得到单词序列;
根据得到的单词序列,进行语法分析,记录调用的脚本程序关键字信息;
语义分析,根据每行程序语义,确定语义类型,并标记助记符;
创建待检测数据流;
逐行遍历待检测程序,判断当前行是否调用了脚本程序关键字信息,如果是,则将所述脚本程序关键字信息添加到待检测数据流中;否则判断当前行是否标记了助记符,如果是,则将所述助记符添加到待检测数据流中,否则跳过当前行;
将所述待检测数据流与特征库中的关键字调用序列特征串匹配,如果匹配成功,则判定所述待检测程序为恶意,否则所述待检测程序非恶意。
[0006]所述的方法中,所述记录调用的脚本程序关键字信息具体为:记录程序调用的API名称作为脚本程序关键字信息。
[0007]所述的方法中,所述的语义分析,根据每行程序语义,确定语义类型,并标记助记符中,所述语义类型包括:赋值语句、跳转语句、循环语句和返回语句。
[0008]所述的方法中,在将所述待检测数据流与特征库中的特征串匹配成功后,还包括:将所述判定为恶意的待检测程序与白名单匹配,如果不存在于白名单中,则确定所述待检测程序为恶意,否则所述待检测程序非恶意。
[0009]所述的方法中,所述特征库中的关键字调用序列特征串为从已知恶意脚本代码中提取。
[0010]一种基于程序关键字调用序列的脚本病毒检测系统,包括:
词法分析模块,用于对待检测程序的字符序列进行词法分析,生成一系列单词,并将单词分类,得到单词序列;
语法分析模块,用于根据得到的单词序列,进行语法分析,记录调用的脚本程序关键字信息;
语义分析模块,用于根据每行程序语义,确定语义类型,并标记助记符;
待检测数据流创建模块,用于创建待检测数据流;
遍历检测模块,用于逐行遍历待检测程序,判断当前行是否调用了脚本程序关键字信息,如果是,则将所述脚本程序关键字信息添加到待检测数据流中;否则判断当前行是否标记了助记符,如果是,则将所述助记符添加到待检测数据流中,否则跳过当前行;
匹配模块,用于将所述待检测数据流与特征库中的关键字调用序列特征串匹配,如果匹配成功,则判定所述待检测程序为恶意,否则所述待检测程序非恶意。
[0011]所述的系统中,所述记录调用的脚本程序关键字信息具体为:记录程序调用的API名称作为脚本程序关键字信息。
[0012]所述的系统中,所述的语义分析,根据每行程序语义,确定语义类型,并标记助记符中,所述语义类型包括:赋值语句、跳转语句、循环语句和返回语句。
[0013]所述的系统中,匹配模块后,还包括:白名单模块,用于将所述判定为恶意的待检测程序与白名单匹配,如果不存在于白名单中,则确定所述待检测程序为恶意,否则所述待检测程序非恶意。
[0014]所述的系统中,所述特征库中的关键字调用序列特征串为从已知恶意脚本代码中提取。
[0015]本发明提供了一种基于程序关键字调用序列的脚本病毒检测方法及系统,通过将待检测程序进行词法分析及语法语义分析,标记调用的脚本程序关键字信息及语义类型的助记符,并将所述关键字信息及助记符保存到待检测数据流中,将待检测数据流与预先从恶意脚本中提取的特征串匹配,如果匹配成功,则判定所述待检测程序为恶意。
[0016]本发明的优势在于,能够针对恶意脚本存在变形难于检测的特点,跳出了程序的静态代码检测思维,采用了不同的脚本程序结构的模式匹配方法来检测恶意代码,采用该方法得到待检测数据流相对源代码而言保留了程序的执行流程,调用方式等主要信息,抛弃了变量名称,语句细节等次要信息,而这些次要信息中常常被恶意脚本所利用,通过多态变形的方法给静态检测带来了很多障碍。本发明提出的脚本检测方法可以有效对抗恶意脚本的多态变形特点,相对传统的恶意脚本检测方法可以对经常变化变量名称,增加空行空格,等价语句替换等无用信息的恶意脚本有更高的检出率,对采用相似多态变形技术的未知恶意脚本有较好的未知检测能力。同时,可以对使用相似恶意功能的脚本程序有非常好的归一化能力,有效的减少了特征库中的特征,减少了反病毒程序的磁盘占用,同时还减少匹配次数,进而提升了检测效率。
【附图说明】
[0017]为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0018]图1为本发明基于程序关键字调用序列的脚本病毒检测方法流程图;
图2为本发明基于程序关键字调用序列的脚本病毒检测系统示意图。
【具体实施方式】
[0019]为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明中技术方案作进一步详细的说明。
[0020]基于上述问题,本发明提出了一种基于程序关键字调用序列的脚本病毒检测方法及系统,针对恶意脚本程序较多采用字符串替换,增加无意义空行等形式变形加密技术,但是变形的代码拥有相同的调用方式和指令执行流的跳转结构,而且主要功能代码调用的API名称是基本一致的特点,通过对关键词调用及语义中上下文调用及跳转关系,可以基本判断两个脚本语言是否具有一致的代码结构,具有同样代码结构的脚本则可以认为相同,以此来判断脚本程序是否为恶意。
[0021]—种基于程序关键字调用序列的脚本病毒检测方法,如图1所示,包括:
5101:对待检测程序的字符序列进行词法分析,生成一系列单词,并将单词分类,得到单词序列;即从左到右逐个字符的读入待检测程序源代码,对代码进扫描,然后根据脚本语言的构词规则,逐个识别单词,组成单词序列交给语法分析;
5102:根据得到的单词序列,进行语法分析,记录调用的脚本程序关键字信息;即将单词序列组合成语法短句,记录该语法短句中可能存在的脚本程序关键字信息,一般程序调用的API名称可以作为关键字;
5103:语义分析,根据每行程序语义,确定语义类型,并标记助记符;
5104:创建待检测数据流;
5105:逐行遍历待检测程序,判断当前行是否调用了脚本程序关键字信息,如果是,则将所述脚本程序关键字信息添加到待检测数据流中;否则判断当前行是否标记了助记符,如果是,则将所述助记符添加到待检测数据流中,否则跳过当前行;
S106:将所述待检测数据流与特征库中的关键字调用序列特征串匹配,如果匹配成功,则判定所述待检测程序为恶意,否则所述待检测程序非恶意。
[0022]预先在已知的恶意代码库中,选择脚本病毒中复杂度较高恶意代码片段使用如上的方法进行信息提取,得到结果信息保存在特征库中作为关键字调用序列特征串。在检测的过程中,逐条使用每条恶意代码特征库中的关键字调用序列特征串与生成好的待检测数据流中进行匹配,如果待检测数据流包含任意一条特征,即可认为当前检测的脚本为恶意脚本病毒。
[0023]所述的方法中,所述记录调用的脚本程序关键字信息具体为:记录程序调用的API名称作为脚本程序关键字信息。
[0024]所述的方法中,所述的语义分析,根据每行程序语义,确定语义类型,并标记助记符中,所述语义类型包括:赋值语句、跳转语句、循环语句和返回语句。所述标记助记符方法如:
赋值语句使用助记符“SET ; ” ;
跳转语句使用助记符“JMP; ”;
循环语句使用“LOOP; ”;
返回语句使用助记符“RET; ”。
[0025]所述的方法中,为了降低误报率,可以在将所述待检测数据流与特征库中的特征串匹配成功后,还包括:将所述判定为恶意的待检测程序与白名单匹配,如果不存在于白名单中,则确定所述待检测程序为恶意,否则所述待检测程序非恶意。
[0026]所述的方法中,所述特征库中的关键字调用序列特征串为从已知恶意脚本代码中提取。对于关键字调用序列特征串的提取方法,与本发明的方法相同,适当增加用于检测的关键字调用序列特征串的长度,能够提尚对恶意脚本病毒检测的精度。
[0027]为更好说明本发明待检测数据流的提取方法,举例如下:如待检测脚本程序代码为:
var arrStr = document, cookie, split(〃; 〃);for (var i = 0;i < arrStr.length;i ++)
{
adsame_time = Number(getCookie(〃_as_crazyl2345〃))〈3 ;
var temp = arrStr[i].split(〃=〃);
window._AdSame0bj_CY9673.b3.destroy ();
if (temp[0] == objName)
temp= ss ;
}
document.getElementByld(window.—AdSameObj_CY9673.b2.1d).style, height =〃310px";return ;
经过逐行分析后得到的待检测数据流为:
SET ;L00P ;getCookie ;SET ;destroy ;JMP ;SET ; getElementByld ;RET0
[0028]一种基于程序关键字调用序列的脚本病毒检测系统,如图2所示,包括:
词法分析模块201,用于对待检测程序的字符序列进行词法分析,生成一系列单词,并将单词分类,得到单词序列;
语法分析模块202,用于根据得到的单词序列,进行语法分析,记录调用的脚本程序关键字信息;
语义分析模块203,用于根据每行程序语义,确定语义类型,并标记助记符;
待检测数据流创建模块204,用于创建待检测数据流;
遍历检测模块205,用于逐行遍历待检测程序,判断当前行是否调用了脚本程序关键字信息,如果是,则将所述脚本程序关键字信息添加到待检测数据流中;否则判断当前行是否标记了助记符,如果是,则将所述助记符添加到待检测数据流中,否则跳过当前行;
匹配模块206,用于将所述待检测数据流与特征库中的关键字调用序列特征串匹配,如果匹配成功,则判定所述待检测程序为恶意,否则所述待检测程序非恶意。
[0029]所述的系统中,所述记录调用的脚本程序关键字信息具体为:记录程序调用的API名称作为脚本程序关键字信息。
[0030]所述的系统中,所述的语义分析,根据每行程序语义,确定语义类型,并标记助记符中,所述语义类型包括:赋值语句、跳转语句、循环语句和返回语句。
[0031]所述的系统中,匹配模块后,还包括:白名单模块207,用于将所述判定为恶意的待检测程序与白名单匹配,如果不存在于白名单中,则确定所述待检测程序为恶意,否则所述待检测程序非恶意。
[0032]所述的系统中,所述特征库中的关键字调用序列特征串为从已知恶意脚本代码中提取。
[0033]本发明提供了一种基于程序关键字调用序列的脚本病毒检测方法及系统,通过将待检测程序进行词法分析及语法语义分析,标记调用的脚本程序关键字信息及语义类型的助记符,并将所述关键字信息及助记符保存到待检测数据流中,将待检测数据流与预先从恶意脚本中提取的特征串匹配,如果匹配成功,则判定所述待检测程序为恶意。
[0034]本发明的优势在于,能够针对恶意脚本存在变形难于检测的特点,跳出了程序的静态代码检测思维,采用了不同的脚本程序结构的模式匹配方法来检测恶意代码,采用该方法得到待检测数据流相对源代码而言保留了程序的执行流程,调用方式等主要信息,抛弃了变量名称,语句细节等次要信息,而这些次要信息中常常被恶意脚本所利用,通过多态变形的方法给静态检测带来了很多障碍。本发明提出的脚本检测方法可以有效对抗恶意脚本的多态变形特点,相对传统的恶意脚本检测方法可以对经常变化变量名称,增加空行空格,等价语句替换等无用信息的恶意脚本有更高的检出率,对采用相似多态变形技术的未知恶意脚本有较好的未知检测能力。同时,可以对使用相似恶意功能的脚本程序有非常好的归一化能力,有效的减少了特征库中的特征,减少了反病毒程序的磁盘占用,同时还减少匹配次数,进而提升了检测效率。
[0035]本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0036]本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0037]虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。
【主权项】
1.一种基于程序关键字调用序列的脚本病毒检测方法,其特征在于,包括: 对待检测程序的字符序列进行词法分析,生成一系列单词,并将单词分类,得到单词序列; 根据得到的单词序列,进行语法分析,记录调用的脚本程序关键字信息; 语义分析,根据每行程序语义,确定语义类型,并标记助记符; 创建待检测数据流; 逐行遍历待检测程序,判断当前行是否调用了脚本程序关键字信息,如果是,则将所述脚本程序关键字信息添加到待检测数据流中;否则判断当前行是否标记了助记符,如果是,则将所述助记符添加到待检测数据流中,否则跳过当前行; 将所述待检测数据流与特征库中的关键字调用序列特征串匹配,如果匹配成功,则判定所述待检测程序为恶意,否则所述待检测程序非恶意。2.如权利要求1所述的方法,其特征在于,所述记录调用的脚本程序关键字信息具体为:记录程序调用的API名称作为脚本程序关键字信息。3.如权利要求1所述的方法,其特征在于,所述的语义分析,根据每行程序语义,确定语义类型,并标记助记符中,所述语义类型包括:赋值语句、跳转语句、循环语句和返回语句。4.如权利要求1所述的方法,其特征在于,在将所述待检测数据流与特征库中的特征串匹配成功后,还包括:将所述判定为恶意的待检测程序与白名单匹配,如果不存在于白名单中,则确定所述待检测程序为恶意,否则所述待检测程序非恶意。5.如权利要求1或4所述的方法,其特征在于,所述特征库中的关键字调用序列特征串为从已知恶意脚本代码中提取。6.一种基于程序关键字调用序列的脚本病毒检测系统,其特征在于,包括: 词法分析模块,用于对待检测程序的字符序列进行词法分析,生成一系列单词,并将单词分类,得到单词序列; 语法分析模块,用于根据得到的单词序列,进行语法分析,记录调用的脚本程序关键字信息; 语义分析模块,用于根据每行程序语义,确定语义类型,并标记助记符; 待检测数据流创建模块,用于创建待检测数据流; 遍历检测模块,用于逐行遍历待检测程序,判断当前行是否调用了脚本程序关键字信息,如果是,则将所述脚本程序关键字信息添加到待检测数据流中;否则判断当前行是否标记了助记符,如果是,则将所述助记符添加到待检测数据流中,否则跳过当前行; 匹配模块,用于将所述待检测数据流与特征库中的关键字调用序列特征串匹配,如果匹配成功,则判定所述待检测程序为恶意,否则所述待检测程序非恶意。7.如权利要求6所述的系统,其特征在于,所述记录调用的脚本程序关键字信息具体为:记录程序调用的API名称作为脚本程序关键字信息。8.如权利要求6所述的系统,其特征在于,所述的语义分析,根据每行程序语义,确定语义类型,并标记助记符中,所述语义类型包括:赋值语句、跳转语句、循环语句和返回语句。9.如权利要求6所述的系统,其特征在于,匹配模块后,还包括:白名单模块,用于将所述判定为恶意的待检测程序与白名单匹配,如果不存在于白名单中,则确定所述待检测程序为恶意,否则所述待检测程序非恶意。10.如权利要求6或9所述的系统,其特征在于,所述特征库中的关键字调用序列特征串为从已知恶意脚本代码中提取。
【专利摘要】本发明提供了一种基于程序关键字调用序列的脚本病毒检测方法及系统,通过将待检测程序进行词法分析及语法语义分析,标记调用的脚本程序关键字信息及语义类型的助记符,并将所述关键字信息及助记符保存到待检测数据流中,将待检测数据流与预先从恶意脚本中提取的特征串匹配,如果匹配成功,则判定所述待检测程序为恶意。本发明方法抛弃了程序中的变量名称等,通过代码程序的关键字调用序列,进行模式匹配,可以有效对抗恶意脚本的多态变形,并且模式匹配的方式,有效的减少了特征库中的特征量,减少了磁盘占用。
【IPC分类】G06F17/27, G06F17/30, G06F21/56
【公开号】CN105488399
【申请号】CN201410738723
【发明人】苏培旺, 童志明, 张栗伟, 何公道
【申请人】哈尔滨安天科技股份有限公司
【公开日】2016年4月13日
【申请日】2014年12月8日