Webshell檢測方法(四)

http://dy.163.com/v2/article/detail/F69G6PBT0511CJ6O.htmlphp


  

  本篇工做依舊使用了隨機森林算法,而前一篇文章[Webshell檢測方法(三)]結合的是fastText,本篇文章結合的是梯度提高迭代決策樹算法。html

  
0x01 研究方法

web

  在前一篇文章中,對於features的提取分爲兩大步:算法

  1. 分析提取文件的靜態特徵shell

  2. 利用PHP-VLD獲取文件的Opcode,利用fastText訓練文本分類器模型函數

  一、靜態特徵工具

  而本篇文章中所用和其類似,但有所提高,在前一篇文章的基礎上增長了以下文件的靜態特徵:post

  1.數據壓縮比性能

  因爲base64方式壓縮的webshell一般具備更均衡的特定字符分佈,而且每每具備更高的數據壓縮比,所以使用數據壓縮比檢測webshell,有必定的成效。3d

  2.eval函數的使用

  一句話木馬的重要特性即eval,通常的一句話木馬格式以下:

  @eval ($_post[xxxxx])

  所以一個文件的eval的數量是模型訓練的一個重要feature。

  除此以外,以前的文章利用PHP-VLD提取文件Opcode,再使用fastText訓練文本分類器,而本篇文章與之不一樣:將得到的Opcode,使用Scikit-learn從中提取2種特徵:TF-IDF向量和Hash向量。

  二、TF-IDF Vector

  TF即Term frequency,詞頻計算公式以下:

  

  其用來評估一個詞語在文本中出現的頻率。

  IDF即inverse document frequency,逆文本頻率指數以下:

  

  其用於評估該詞語在全部文本中是否罕見。

  故此TF-IDF的主要思想是:若是某個詞或短語在一篇文章中出現的頻率TF高,而且在其餘文章中不多出現,則認爲此詞或者短語具備很好的類別區分能力,適合用來分類。

  其計算方法以下:

  

  三、Hash Vector

  hash散列能夠將任意長度的數據轉換爲固定長度的數據,同時這種這種轉換一般是一對一的,咱們很難找到一樣的hash對應不一樣的數據。所以能夠利用hash做爲某個特徵向量的索引,所以無需建立大型字典,而這個剛好是TF-IDF所缺少的。

  例如:特徵 i 會被hash到索引位置j:

  h(i) = j

  特徵 i 的詞頻表示爲φ(i),那麼公式以下:

  

  在提取特徵結束後,實驗嘗試在僅使用6個靜態特徵和GBDT算法進行檢測,成功率已達96.9%。

  對於GBDT算法,其核心是:每棵樹學的是以前全部樹結論和的殘差,即真實值-預測值。每一輪梯度boosting訓練都會減小上一輪訓練的殘差,即在梯度方向上訓練一個新的模型來下降上一輪訓練的殘差。

  

  其優勢在於能夠有效減小feature,下降過擬合現象,而且具備更高的魯棒性,不太可能受到訓練集規模的影響。

  這也是將其與隨機森林算法結合使用的一個緣由。同時爲了進一步提升效率,加入了PHP Opcode的特徵提取,和隨機森林算法:

  

  在結合前6個靜態特徵後,實驗使用隨機森林獲取TF-IDF矩陣和hash矩陣的預測結果,最後結合8個feature對GBDT進行訓練。

  
0x02 數據實驗

  實驗從Github收集了2232個webshell,2388 CMS樣本文件:

  

  但因爲有些文件提取特徵不成功,或者並不是php文件,所以丟棄了大小超過20000的文件,並未使用。

  然後從以下幾個角度評估了RF-GBDT算法的性能:

  

  

  同時進行了一些對照實驗,結果以下:

  

  

  能夠看到,若是僅用6個靜態features的GBDT在各方面的性能都不如使用8個features的RF-GBDT。除此以外,實驗中還挑選了一些網上主流的webshell檢測工具,結果以下:

  

  這同時也證實了RF-GBDT具備很是好的性能。

  本文爲 一葉飄零 原創稿件,受權嘶吼獨家發佈

相關文章
相關標籤/搜索