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

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


             (4)  触发事件函数总数
             触发事件是一类用于在进行某个操作后自动触发执行后续动作的标签属性.攻击者将要执行的恶意代码
         与触发事件进行绑定,从而在事件触发后自动的执行恶意代码.其中最常使用的触发事件包括 onload 和 onclick
         事件,我们发现,最新的恶意页面结合了 HTML5 中增加的 onerror 和 onscroll 事件来自动地触发执行恶意代码.
             (5) VBScript 敏感字符串总数
             由于 IE 浏览器使用范围广且存在较多的安全问题,恶意页面越来越多地使用恶意 VBScript 脚本对 IE 浏览
         器进行攻击.因此,我们不只局限于对 JavaScript 代码的分析,还关注页面中 VBScript 代码.为了执行执行恶意操
         作,恶意 VBScript 代码中通常会包含敏感的字符串,我们将在页面 VBScript 代码中包含的“CreateObject”
         “WriteData” “svchost.exe”和“cmd.exe”字符串的总数量作为特征.
         3.2   JavaScript函数参数特征

             在对符合攻击条件的用户实施攻击的过程中,恶意 URL 会将包含恶意代码的页面发送给用户.我们发现:
         这些恶意代码在执行的过程中,JavaScript 关键函数的参数在长度和与内容方面与正常代码存在较大的区别,恶
         意代码的关键函数的参数中含有更多敏感字符串,而在静态页面内容分析的过程中难以获得准确的参数值.
             因此,我们通过动态代码执行的方式获取 JavaScript 关键函数的参数,并对关键函数的参数长度和参数内容
         进行更加细粒度的检测,共选取了 6 个 JavaScript 函数参数特征,见表 2.
                               Table 2    Extracted JavaScript function parameter features
                                      表 2   选取的 JavaScript 函数参数特征
                       编号         特征名称                         特征描述
                        1   动态执行函数参数平均长度         攻击者利用动态执行函数执行长字符串的恶意代码
                               动态执行函数参数               攻击者利用动态执行函数动态的执行
                        2
                               含敏感字符串总数                  创建 iframe 等标签的字符串
                        3   动态生成函数参数平均长度             恶意代码传入动态生成函数的参数较长
                               动态生成函数参数               恶意代码利用动态生成函数动态创建
                        4
                               含敏感字符串总数              Script 等标签引入外部页面和脚本代码
                               escape 和 unescape     攻击者利用 escape 和 unescape 函数进行
                        5
                               函数参数平均长度              编码和解码的恶意字符串参数通常较长
                              escape 和 unescape 函数   攻击者利用 escape 和 unescape 函数进行编码和
                        6
                             参数包含敏感字符串总数           解码的恶意字符串参数中通常包含敏感字符串
             下面将对选取的 JavaScript 函数参数特征进行详细解释.
             (1)  动态执行函数参数特征
             动态执行函数是 JavaScript 中可以将传入函数的参数字符串作为代码执行的一类函数,包括 eval,
         setTimeout 和 setInterval 函数.为了逃避静态分析检测,攻击者通常将恶意代码作为字符串传入 eval 等动态执行
         函数参数中,然后在页面代码解析过程中,动态地执行这些恶意代码来实施攻击.恶意代码中,传入动态执行函
         数的参数的长度普遍较长,而且参数内容中经常包含“iframe”“frame”“script”和“link”等敏感字符串,因此,选取
         动态执行函数参数的平均长度和含敏感字符串的总数量作为特征.
             (2)  动态生成函数参数特征
             动态生成函数是 JavaScript 中可以实现插入标签和修改页面 DOM 结构的一类函数,包括 document.write
         和 document.writeln 函数.恶意页面为了逃避签名匹配检测,通常在页面解析的过程中利用 document.write 等函
         数动态的创建恶意标签.恶意代码中,传入动态生成函数的字符串参数的长度普遍较长,在参数内容中通常会包
         含“iframe”“frame”“script”和“link”等敏感字符串,用于动态地创建这些标签,因此,选取动态生成函数参数的平
         均长度和含敏感字符串的总数量作为特征.
             (3) escape 和 unescape 函数参数特征
             除了利用动态执行函数和动态生成函数外,恶意页面还经常利用 escape 函数对恶意代码进行编码,然后在
         执行的过程中,再通过 unescape 函数进行解码还原得到初始的恶意代码,通过一系列的编码和解码操作,可以混
   294   295   296   297   298   299   300   301   302   303   304