Javascript在恶意网页异常检测中的应用研究
来源:用户上传
作者:
摘要:Web应用在移动终端的广泛普及给用户提供了便利的服务,与此同时恶意Web网页中的Javascript代码也会带来严重的安全问题,如何检测恶意网页一直是一个热点安全问题。本文首先介绍常见的恶意网页攻击技术,并在此基础上针对性地提出恶意网页攻击的检测方法;最后阐述了一种基于JavaScript的轻量级恶意网页检测技术。
关键词:恶意网页;攻击技术;检测方法;Javascript
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2019)34-0029-02
和传统的终端设备一样,移动终端在使用过程中也面临严重的安全风险,这不仅和移动终端自身的安全设置有关,也在很大程度上受到访问的Web网站的安全性的影响。
终端在访问网络页面时,如果页面能够利用终端的设置漏洞对其进行攻击,则认为这样的网页就是恶意网页,一般认为那些可以偷偷获取用户敏感信息、或引诱使用者下载恶意程序的页面都是恶意网页。
目前恶意网页已经发展成一种严重的安全问题,相关研究表明它已经成为互联网上针对移动终端的主要工具,针对移动终端的攻击技术也呈现出多样化。更加严重的是,为了增加恶意Web页面的攻击范围和能力,恶意网页开始向云端发展,攻击手段更加隐蔽。
1 恶意网页攻击技术
产生恶意网页的一个必要前提是提供恶意的Web服务,这些服务只有将恶意页面推送到用户终端才能实现恶意攻击。常见的恶意攻击途径包括[1]:(1)浏览器及其插件。用户使用Web应用最常用的入口就是浏览器,因此它就成为恶意网页攻击的首要途径。Web应用设计过程中的技术能力、测试水平等因素会导致Web应用存在BUG,一旦遇到特殊的场景会触发不可预料的行为,也就是常说的漏洞。(2)社交网络。目前产生了各种各样的社交应用,包括基于桌面的社交程序、基于浏览器的社交论坛等。为了吸引用户进入预先构建的恶意网站,攻击者会发布诸如红包、色情图片等,一旦用户点击就会进入恶意网页。(3)电子邮件。公开的电子邮件经常受到攻击者的青睐,恶意网页会给大量的目标用户发送有吸引力的邮件,目标用户一旦点击就会进入恶意站点。
上述攻击途径只是恶意网页的传播方式,它们的实现依赖于底层的恶意网页攻击技术。常见的恶意网页攻击技术包括[2]:Iframe攻击、目标重定向攻击、xss跨站脚本攻击,混淆代码攻击以及页面下载攻击等。
Iframe攻击指的是攻击者在用户查看的网页内嵌入使用恶意代码链接的页面,用户不能区分此恶意页面与期望访问的页面。因此,这种攻击方式具有一定的隐蔽性,用户难以察觉。在网页实现过程中可以通过多种方式嵌入Iframe,最常见的方式是借助document的write方法和getElementByID方法。在用户受到Iframe攻击后,其在网络页面中输入的各种信息,比如用户资料、资金账号及密码等都会被攻击者获取;另外,攻击者还可以在此基础上进行其他各种方式的攻击。Iframe攻击的典型特征是会使用Iframe标签,所以对JavaScript代码反混淆后如果发现含有ifame标签,则说明JavaScript代码可能有恶意代码。
目标重定向攻击指的是改变用户想要访问的目标页面,将其重定向到一个和目标页面非常相似的恶意页面。重定向功能的出发点在于缩短网址、避免网络页面出现断开链接等现象,但是常被攻击者用于重定向到恶意页面。重定向攻击是XSS等攻击方式的前提,和Iframe攻击有一定的相似性,只不过重定向攻击是直接到达一个新的恶意页面,Iframe攻击是在目标页面中嵌入一个恶意页面。网页重定向攻击也有多种实现方式,比如利用document的location方法或window的location方法。在對页面反混淆后,如果发现重定向方法就可以认为是存在重定向攻击。 XSS攻击又称为跨站脚本攻击。有些网络页面中的动态功能没有严格区分页面内容及JavaScript代码,这样恶意页面中的动态内容就能够绕过同源策略攻击Web客户端[3]。如果Web应用没有进行严格的过滤或转义,那么恶意代码就有了用武之地。跨站脚本攻击最主要的目的是窃取Web客户端的缓存或会话信息。
应用代码在保持功能不变的前提下可以进行一定的变形,这就是常说的“混淆”。攻击者也常常会采取混淆的方式隐藏恶意代码,从而逃过安全工具的检查。只要静态分析工具不能检测出经过混淆的恶意代码,它就可以存活更长的时间。
2 JavaScript攻击实例及其检测方法
在浏览器的版本比较旧的情况下,上面的代码会借助浏览器漏洞给代码中指定的img元素链接一个可执行文件,并将此元素隐藏起来;这样一来,即使用户加载了含有可执行程序的网页也不会发现,从而在用户感觉不到异常的情况下执行恶意代码。
一个典型的浏览器劫持攻击代码如下:
Hijack函数会修改正常函数的实现,从而达到浏览器劫持的目的。
为了得到类似上述恶意代码的行为特征,可以获取代码内词汇间的顺序关系。上述恶意代码逻辑上看起来是正常的,传统的分词工具难以进行有效分词,本文实际分词时采取了如下过程:(1)代码清洗。先去掉注释行、空白以及各种标签以外的内容。(2)生成语法树。借助Esprima把清洗后的代码生成为语法树。(3)分词。对于html标签根据等号进行分词,并且丢弃其他标签相关赋值语句中的字符串。这样一来就可以把待检测代码转换为相应的语法树分词。然后就能进一步进行特征提取。
3 基于JavaScript的轻量级恶意网页检测
恶意页面代码和正常的代码有本质的不同[4]:对于嵌入页面的攻击方式而言,恶意页面的宽度经常被设置为0,以防止用户发现。在实现过程中,会加入一个始终为真的判断语句,保证恶意代码始终执行。恶意页面地址被拆分为多个短字符串,并在拼接后赋值给一个通过document的write方法动态生成的变量;如果恶意页面的地址发生变化,也只需要将不同的拆分字符串赋值即可。因此,此类恶意代码的显著特征是有较多的字符串变量,以及很多通过“+”连接的字符串。 不论检测哪种类型的恶意网页,都离不开一个重要环节——页面特征提取。特征提取可以提取页面的特征,如果提取后的页面符合满足恶意网页的特征,则可以认为其是恶意网页。在提取网页的特征前,需要先把Javascript代码进行相应转换。主要的特征提取步骤包括[5]:(1)对待分析网页进行词法分析,输出为有效的功能性代码,不再含有注释以及空白行。(2)将功能性代码转换成特征词表示的代码。原样保留关键词、运算符等不变量,并用NUM代替数值,用ID代替变量及函数名。对于字符串则根据其长度进行不同的处理。
例如,对于表达式
parl=c0+“stringl”;
可以将其逻辑转换为
ID=IDO+str0; 这样一来既可以保留原来的代码逻辑结构,又能够大大简化原有的代码量;最重要的是,还可以尽量保留代码的信息熵,也就是说代码特征整体上不发生变化。在经过这样的处理后,每个网页都可以用特征词、不变量以及它们出现的频数来代替。
提取完网页的特征后,就可以据此构建特征向量。主要有两种特征向量构造方法:一种是借助每个页面特征值的频数的比例构建,另外一种是根据某特征词是否出现构建。不论哪种构建方法,特征向量的维度一般不超过50,从而保证最后的特征检测矩阵是一个低维矩阵。
在完成特征提取及特征向量构建后,可以设计出一个包括数据收集、页面分析、异常检测等组成部分的轻量级恶意网页检测系统。整个检测系统框架如图l所示:
在实际测试时,本文把Alexa网站上公布的页面视为正常页面,将malwaredomains网站公布的页面视为恶意网页,将其组成训练数据集进行训练,然后识别待检测的页面,对于恶意网页检测具有较好的检测效果。
参考文献:
[1]张海艦,方舟,陈新.基于深度学习技术的恶意APP检测方案[J].网络安全技术与应用,2017(8):109-112.
[2]马洪亮,王伟,韩臻.面向drive-by-download攻击的检测力一法[J].华中科技大学学报:自然科学版,2018,15(7):9-13.
[3]沙鸿州,刘庆云,柳厅文,等.恶意网页识别研究综述[f].计算机学报,2018。38(9):21-25.
[4]徐青.JavaScript恶意代码检测技术研究[D].西南交通大学,2018.
[5] Wang Y,Cai W D,Wei P C.A deep learning approach for de-tecting malicious JavaScrpt code[J]. Security&CommunicationNetworks, 2016, 9(11):1520-1534.
【通联编辑:王力】
收稿日期:2019-09-11
作者简介:姜文秀(1980-),女,江苏江都人,讲师,硕士,研究方向为数据库、数据挖掘、嵌入式。
转载注明来源:https://www.xzbu.com/8/view-15122580.htm