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

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


         条件语句匹配参数中是否包含敏感字符串,统计包含敏感字符串的总数量.
                            var saved_eval=this.eval;
                            this.eval=function(⋅){
                              alert(“Hook eval start”);
                              returnValue=saved_eval.apply(this,arguments); var count=0;
                              var value=arguments[0];    //将传入eval函数的参数保存到value变量
                              var eval_length=value.length;    //获取eval函数参数的字符串长度
                              alert(“eval_length:”+eval_length);
                              If ((value.indexOf(“iframe”)>0)||(value.indexOf(“script”)>0)||(value.indexOf
                              (“frame”)>0)||(value.indexOf(“embed”)>0)||(value.indexOf(“link”)>0)||
                              (value.indexOf(“applet”)>0)||(value.indexOf(“object”)>0){
                               count=count+1;}  //匹配eval函数参数是否包含敏感字符串
                              alert(“eval_string:”+count);
                              alert(“Hook eval end!”);
                            }
                                 Fig.10    Rewrited dynamic execution function of eval
                                         图 10   改写动态执行函数 eval
             (2)  特征提取
             同时,我们从获取的页面源代码和日志记录中分别提取页面特征和 Web 会话特征.改写后的 Thug 模拟客户
         端浏览器向待检测网站发起会话请求,并将所有响应的页面源代码保存到本地.我们使用正则表达式匹配页面
         源代码,提取 12 个页面特征.在与待检测网站的会话过程中,Thug 记录网站服务器发送给客户端的响应头信息
         和响应体内容.我们根据定义的规则,从日志中分别提取会话协议、响应码和响应资源类型等内容,统计 Web 会
         话流程特征.如图 11 所示的代码是从日志记录中提取会话过程中,服务器响应特殊资源文件数量与会话请求错
         误数量的特征.我们根据资源文件类型与 Content-Type 字段的对应表,匹配服务器返回的文件类型是否为关注
         的 5 种特殊资源文件.同时根据服务器返回的响应状态码,匹配客户端请求错误和服务器端错误响应码的数量.
                       if len(s[‘locations’])>0:
                         for i in range(len(s[‘locations’])):
                           files=s[‘locations’][i][‘content-type’].count(‘pdf’)+s[‘locations’][i][‘content-type’].
                            count(‘x-shockwave-flash’)+s[‘locations’][i][‘content-type’].count(‘x-msdownload’)+
                            s[‘locations’][i][‘content-type’].count(‘msword’)+s[‘locations’][i][‘content-type’].
                            count(‘java/*’)   //匹配服务器响应特殊资源文件
                           response=str(s[‘locations’][i][‘status’]).count(‘40’)+str(s[‘locations’][i][‘status’])
                            .count(‘41’)+str(s[‘locations’][i][‘status’]).count(‘50’)
                            //匹配服务器响应码是否为请求错误类型
                            Fig.11    Extraction features of response resources and request error
                                      图 11   提取响应资源与请求错误特征

         4.3   特征归一化

             在使用多种特征进行分类的过程中,由于不同类型的特征性质不同,这些特征通常具有不同的数量级和量
         纲.为了尽可能地减少特征在数值分布上所造成的影响,需要对原始的特征数据进行标准化处理.数据标准化是
         通过对数据进行按比例缩放,落入一个较小的特定区间中,消除数据的单位限制,转化为无量纲的纯数值,使得
         不同量级的特征可以进行加权.其中最典型的数据标准化方法是 Min-Max 标准化                         [20] ,即对原始数据进行线性区
         间变换,计算方式如公式(1)所示:
                                                   x −  min
                                               *
                                              x =                                             (1)
                                                     −
                                                  max min
                                                             *
         其中,x 表示原始值,max 表示样本最大值,min 表示样本的最小值,x 表示经过标准化处理后的值.
             我们使用 Min-Max 标准化方法将特征值转换为无量纲数据,每个样本的特征组合序列由 25 个经标准化处
         理后的特征值和分类值组成.我们将经过标准化处理后的特征组合序列输入到分类器中进行训练,得到相应的
         分类器模型.对于分类器算法的选择,分别选取了常用的 5 种机器学习算法,在实验部分通过对比不同分类器的
   298   299   300   301   302   303   304   305   306   307   308