基於PU-Learning的惡意URL檢測——半監督學習的思路來進行正例和無標記樣本學習



基於PU-Learning的惡意URL檢測

Ya-Lin Zhang, Longfei Li, Jun Zhou, Xiaolong Li, Yujiang Liu, Yuanchao Zhang, Zhi-Hua Zhou
National Key Lab for Novel Software Technology, Nanjing University, China
Ant Financial Services Group, China
來源: CCS’17 https://dl.acm.org/citation.cfm?id=3138825

摘要

本文描述了一種基於PU-Learning(正例和無biao'zhu學習)的潛在惡意URL檢測系統。以往的基於機器學習的解決方案是將它定義為有監督學習問題。然而在很多時候,我們所獲得的數據總是包含少量已知的攻擊URL以及大量的未標記樣本,這使得有監督學習不可行。在這項工作中,我們將其定義為PU-Learning問題,並結合兩種不同的策略(two-stage strategy and cost-sensitive strategy)。實驗結果表明,我們所開發的系統能夠有效地發現潛在的惡意URL攻擊。該系統既可以作為現有系統的輔助部署,也可以用來幫助網絡安全工程師有效地發現潛在的攻擊模式,使他們能夠快速更新現有的系統。

1 引言

隨着互聯網的迅速發展,出現了越來越多的惡意URL攻擊,嚴重威脅着網絡安全。傳統的URL攻擊檢測系統主要通過使用黑名單或規則列表。而這些名單將變得越來越長,但是以這些方式防范所有的攻擊是不現實的。更嚴重的是,這些方法難以檢測潛在的威脅,這使得網絡安全工程師很難有效地發現新出現的惡意URL攻擊。

為了提高算法的泛化能力,很多研究人員采用基於機器學習的方法來完成這項任務。這些方法主要分為兩類:大多數轉化為有監督學習問題[6],則需要對數據進行標注,而其他的一些研究人員則試圖以無監督的方式解決問題,例如通過異常檢測技術[5],就不需要對數據進行標注。當可以得到標注數據時,有監督學習方法通常實現更強的泛化能力。然而在很多時候,我們很難獲得精准的標注數據。在更多時候,我們可能只得到一小部分惡意URL和大量未標記的URL樣本,缺乏足夠可靠的負例樣本,這也就意味着我們並不能直接使用上述的機器學習算法。另一方面,如果我們簡單地以無監督的方式解決它,那么已知惡意URL的標注信息就難以充分利用,可能無法達到令人滿意的性能。

在本文中,我們將上述問題抽象為PU-Learning(正例和未標記學習)問題[3],它可以更充分地利用所檢測到的惡意URL以及未標記的URL,並實現了更強的性能。基於此,我們開發了一個基於PU-Learning的潛在惡意URL攻擊檢測系統。有許多策略可以用來處理PU學習問題,如two-stage strategy[4]、cost-sensitive strategy[2]等。在這項工作中,我們將two-stage strategy、cost-sensitive strategy結合起來構建我們的系統。最后,我們對所開發的系統進行了驗證評估,結果表明該方法能有效地發現潛在的惡意URL攻擊,大大降低了網絡安全工程師的工作量,使其在實際的URL攻擊檢測中非常有用。

本文的其余部分組織如下。在第2節中,我們描述了所開發的系統。在第3節,我們基於螞蟻金服的實際業務場景評估了我們所開發的系統。最后,在第4節中,我們總結了這項工作。

2 系統架構

在這一章中,我們介紹了所開發的系統架構。如圖1所示,我們的系統主要包括3個模塊:

  • (i)特征提取,將原始URL轉換成特征向量;
  • (ii)模型訓練,利用所提取的URL訓練集的特征向量訓練PU-Learning模型;
  • (iii)預測,預測輸入的URL以及輸出可能的惡意URL集。

2.1 特征提取

首先將原始URL轉換為特征向量表示,以便於應用到后續的機器學習算法中。下面,我們將簡要地解釋我們所開發的系統,並介紹我們在系統中使用的特征提取過程的細節。

一般來說,URL可以分成幾個部分,包括協議部分、認證部分、路徑部分、query部分和fragment部分,如圖2所示。攻擊者可能修改任意一個部分以發起攻擊。在我們的場景中,由於前幾個部分受到限制,攻擊主要來自fragment部分,所以我們主要關注的是基於惡意修改fragment部分的攻擊的執行情況。具體而言,fragment通常是形如“key1 = value1&…&keyn = valuen”的形式,攻擊者可以通過任意修改value部分以發起攻擊。因此,我們的系統主要處理這個部分,而特征提取過程直接從fragment的Key-Value對中提取特征。

更具體地說,給定一組URL,我們首先將它們分別划分為上述部分,並從每個URL的fragment中提取Key-Value對。其次,由於我們的目標是發現惡意網址的特質,因此我們過濾了Key-Value對,只保留惡意網址出現的前N個Key,並將剩余的Key-Value對合並為一個Key-Value對,從而每個URL將最多提取(N + 1)個Key-Value對。最后,我們試探性地提取8種不同的統計信息從每個過濾值,包括value中出現所有的字符、字母、數字、標點符號的次數和value中出現的不同的字符、字母、數字、標點符號的數目。因此每個URL將被描述為一個(N + 1)∗8維特征向量。

2.2 模型訓練

值得注意的是,傳統的有監督學習算法並不能直接應用於我們的場景。在這項工作中,我們將其轉化為PU-Learning問題。

PU-Learning[3]是半監督學習的一種特殊情況[1,7],它用於解決只提供正例和未標注樣本而不提供負例的問題。研究人員已經提出了許多策略來解決這個問題。為了繞過缺乏負標注的問題,two-stage策略首先試圖挖掘出一些可靠的負例,然后將問題轉化為一個傳統的監督和半監督學習問題。另一方面,用於二分類的cost-sensitive策略由於具有不對稱的誤分類成本,因此非常適合用於解決PU-Learning問題[2]。在我們開發的系統中,這兩種策略都被采用並進一步結合形成最終的預測模型。

two-stage strategy:在第一階段從未標記實例中選擇可靠的負例,算法1顯示了相關的細節。在第二階段,利用正例和第一階段選擇的負例,訓練傳統的監督模型,並進一步用於預測新樣本。
在這項工作中,考慮到效率,我們采用Logistic回歸來訓練分類模型。

cost-sensitive strategy:我們假設在未標注樣本只有少量正例。將所有未標注樣本設定為負例,最小化以下目標函數:

其中C+和C-分別是正例和負例誤分類的懲罰因子;l(yi,f(xi))表示損失函數,例如log損失函數或hinge損失函數;λ是歸一化系數,R(w)是歸一化范數,例如L1-范數、L2-范數。本文中,我們將損失函數設置為log損失函數,將L2-范數作為歸一化范數。因此具體的函數如下:

其中LL(z)=log(1+exp(-z))就是log損失函數,在實際中,C+和C-是基於驗證集選取的,並且C+總是大於C-,這表明正例誤分類的懲罰因子要大於負例誤分類的懲罰因子。這也就使得模型將更關注於對惡意URL的正確分類。

2.3 預測

在預測階段,一個新輸入的URL首先將在特征提取模塊被轉換為(n + 1)∗8維特征向量,然后所提取的特征向量將送入一個雙策略模型,每個模型都將輸出一個分數表示惡意URL的概率。得分越高,這個URL就越有可能是惡意的。我們把兩個分數平均作為URL的最終得分,選擇具有較高分數的URL構造為候選惡意URL集。
在工程實踐中,我們會基於候選惡意URL集過濾K個URL,這些過濾的URL將由網絡安全工程師進行人工驗證。

3 實驗驗證

3.1 數據集與准備工作

該數據集來自於發送至螞蟻金服的URL請求的采樣。數據主要分為兩部分:一大組未標記的URL和少數已經通過現有的系統標注的惡意網址,並出現了不同的攻擊類型,包括XXE、XSS和SQL注入等。我們並沒有把這些不同類型的惡意網址進行進一步細分。由於總數據集太大,我們從每天的請求中抽取1億個URL,其中由現有系統檢測到的惡意URL的數量從幾萬到數十萬不等。該模型使用連續7天收集的數據進行訓練,並用於預測每天新出現的未標記URL的分數。

當提取Key-Value對時,N被設置為99,因此每個URL將由一個800維的特征向量來描述,使用min-max歸一化方法來處理不同量綱下的特征。在模型訓練部分,我們采用基於logistic回歸的方法來訓練PU-Learning模型,C+、C−和λ等參數由驗證集進行選取。

3.2 實驗結果

由於我們並沒有未標注URL的具體情況,我們借助網絡安全工程師來幫助檢查結果並驗證我們系統的有效性。
由於檢查結果非常耗時,因此我們將候選惡意URL集的大小K設置為至多150,並由網絡安全工程師將手動檢查所選URL是否是惡意URL。表1展示了實驗結果的細節。從表中可以看出,過濾后的候選集的精度可以達到90%,表明該系統能有效地發現潛在的惡意URL,而現有的系統無法捕獲這些惡意URL。應該特別提到的是,我們基於候選惡意URL集發現了新的攻擊模式,而螞蟻金服的網絡安全工程師已經通過這個發現改進了現有系統。同時,開發的系統還可以與現有系統協同使用,提高整體的網絡安全水平。

4 總結

在這項工作中,我們開發了一個基於PU-Learning的潛在惡意URL檢測系統。與基於監督學習的方法相比,我們的方法只需要少量惡意URL以及未標注URL,而這正好適合我們遇到的實際情況。

該系統主要包括三個部分:首先,特征提取將原始URL轉化為特征向量;然后,利用two-stage strategy、cost-sensitive strategy來訓練分類模型;最后,新輸入的URL將被首先轉化為特征向量,再進行機器學習,輸出的分數表明了該URL為惡意網址的概率。

實證結果表明,我們開發的系統能夠有效地發現潛在的惡意URL。該系統既可以作為現有系統的輔助部署,也可以用來幫助網絡安全工程師有效地發現潛在的攻擊模式。

參考文獻

[1] Olivier Chapelle, Bernhard Scholkopf, and Alexander Zien. 2009. Semi-Supervised Learning. IEEE Transactions on Neural Networks 20, 3 (2009), 542–542.
[2] Marthinus C du Plessis, Gang Niu, and Masashi Sugiyama. 2014. Analysis of Learning from Positive and Unlabeled Data. In Advances in Neural Information Processing Systems 27. 703–711.
[3] Charles Elkan and Keith Noto. 2008. Learning Classifiers from Only Positive and Unlabeled Data. In Proceedings of the 14th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. 213–220.
[4] Bing Liu, Yang Dai, Xiaoli Li, Wee Sun Lee, and Philip S Yu. 2003. Building Text Classifiers Using Positive and Unlabeled Examples. In Proceeding of the 3rd IEEE International Conference on Data Mining. 179–186.
[5] Fei Tony Liu, Kai Ming Ting, and Zhi-Hua Zhou. 2008. Isolation Forest. In Proceeding ot the 8th IEEE International Conference on Data Mining. 413–422.
[6] Justin Ma, Lawrence K Saul, Stefan Savage, and Geoffrey M Voelker. 2009. Beyond Blacklists: Learning to Detect Malicious Web Sites from Suspicious URLs. In Proceedings of the 15th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. 1245–1254.
[7] Zhi-Hua Zhou and Ming Li. 2010. Semi-Supervised Learning by Disagreement. Knowledge and Information Systems 24, 3 (2010), 415–439.

 

 

 

 

基於 PU-Learning 的分類方法

from: http://blog.xiaoduoai.com/?p=344
 

簡介

正例和無標記樣本學習(Learning from Positive and Unlabled Example)簡稱PU或LPU學習,是一種半監督的二元分類模型,通過標注過的正樣本和大量未標注的樣本訓練出一個二元分類器。

與普通分類問題不同,PU問題中P的規模通常相當小,擴大正樣本集合也比較困難;而U的規模通常很大,比如在網頁分類中,未標識的網頁資源可以非常廉價、方便的從網絡中獲取。引入U的目的就是降低人工分類的預備工作量,同時提高精度,盡可能達到自動分類的效果。

本文主要參考「Building Text Classifiers Using Positive and Unlabeled Examples」,對其中的PU學習方法進行簡單的介紹。

PU 學習方法

PU學習主要有以下兩個步驟:

  1. 根據已標注過的正樣本P在未標注樣本集U中找出可靠的負樣本集合(Reliable Negative Examples,簡稱RN),將PU問題轉化為二分類的問題;
  2. 利用正負樣本通過迭代訓練得到一個二元分類器。

理論上已經證明:如果最大化未標注樣本集U中負樣本的個數,同時保證正樣本被正確分類,則會得到一個性能不錯的分類器。

上述兩個步驟中,找出RN以及訓練二元分類器都有很多方法可以選擇,下面對這些方法進行簡單的介紹。

計算 RN

1. 朴素貝葉斯分類器

使用朴素貝葉斯(Naive Bayesian,NB)分類方法計算RN,可以簡單參考以下步驟:

  • 把P中的每個樣本標記為類別1;
  • 把U中的每個樣本標記為類別-1;
  • 使用P和U訓練得到貝葉斯分類器;
  • 對U中的每個樣本使用上述分類器進行分類,如果分類結果為-1,則把該樣本加入RN。

2. Rocchio 技術

Rocchio是一種早期的文檔分類技術,其基本思想是:每個樣本可以用一組特征向量來表示,特征值可以使用TF-IDF方式計算得到。

設全部樣本集合為D,類別為 基於 PU-Learning 的分類方法 - 第1張  | 新聞中心訓練樣本集合為 基於 PU-Learning 的分類方法 - 第2張  | 新聞中心。通過對每個類別基於 PU-Learning 的分類方法 - 第3張  | 新聞中心構造一個原型向量基於 PU-Learning 的分類方法 - 第4張  | 新聞中心,可以得到Rocchio分類器:

基於 PU-Learning 的分類方法 - 第5張  | 新聞中心其中,α和β分別調節與類別基於 PU-Learning 的分類方法 - 第6張  | 新聞中心相關及不相關類別的權重。

對一個待分類的樣本t,使用余弦相似度計算其與每個類別的原型向量的相似距離,取距離最小的類別作為該樣本的類別。

使用Rocchio算法與上述NB分類器計算RN的步驟很類似,只要把上述算法中第3步的分類器替換為Rocchio分類器即可。

3. Spy 算法

Spy的基本思想是從P中划分出一個子集S,將S中的樣本放到U中,從而得到新的正樣本集P-S和未標識樣本集U+S。使用P-S作為正樣本,U+S作為負樣本,利用迭代的EM算法進行分類,當分類結束后,利用對那些“間諜”樣本的標識,確定一個參數閾值th,再對U中的文檔進行划分得到可靠的反樣本集合RN。其中,從P中划分子集S的數量比例一般為15%。算法步驟描述如下:

  1. RN集合置空;
  2. 從P中隨機選取子集S,得到新的正樣本集PS=P-S和未標識樣本集US=U+S,記PS中各個樣本類別為1,US各個樣本類別為-1;
  3. PS和US作為訓練集,用I-EM算法訓練得到一個貝葉斯分類器;
  4. 使用子集S確定出一個概率閾值th;
  5. 對US中的每個樣本d使用貝葉斯分類器計算其屬於正類別的概率P(1|d),如果小於閾值概率th,則把其加入RN集合。

4. 1-DNF 算法

1-DNF算法基本思想是:對於每個特征,如果其在P集合中的出現頻次大於N集合,記該特征為正特征(Positive Feature, PF),所有滿足該條件的特征組成一個PF集合。對U中的每個樣本,如果其完全不包含PF集合中的任意一個特征,則該樣本應加入RN。算法步驟描述如下:

PF 置空,RN=U;
設 U∪P 的特征集為:{x1,x2,---,xn};
for i=1 to n:
if (freq(xi,P)/|P| > freq(xi,U)/|U|):

PF = PF ∪ {xi}

for each d∈U:
Ifョxj,freq(xj,d) > 0 and xj∈PF:

RN = RN - {d}

訓練分類器

1. SVM

使用SVM直接對P和RN進行訓練得到分類器。

2. S-EM

EM算法主要由Expectation和Maximization兩個步驟組成。前者對缺失標簽的數據打上標簽;后者則用全部數據一起計算模型參數。算法步驟描述如下:

  • 對 P 中的每個樣本標記為類別 1;
  • 對 RN 中的每個樣本標記為類別-1;
  • Q=U-RN 中的樣本起初沒有任何類別標簽,在 EM 算法第一次迭代完成時,這些數據將會具有一個基於概率的類別標簽。在后續的迭代中,都使用上一輪更新完類別標簽的數據集 Q,直至 EM 算法收斂。

在上述流程中,每次迭代使用Naive Bayesian算法修正Q集合中的數據標簽。

3. PEBL 算法

PEBL算法主要思想是使用SVM迭代地從U-RN中抽取出更多的負樣本,並把它們放到RN集合中,直至U-RN中沒有可以被分為負樣本的數據為止。算法步驟如下:

  • 對 P 中的每個樣本標記為類別 1;
  • 對 RN 中的每個樣本標記為類別-1;
  • 令 i=1,Q=U-RN,開始以下的循環:
    • 使用 P 和 RN 訓練一個 SVM 分類器 Si;
    • 使用 Si 對 Q 中的樣本進行分類,把其中所以分類為-1 的樣本記為 W;
    • 如果 W 為空,則結束循環;否則:Q = Q-W, RN = RN ∪ W, i = i + 1

4. Roc-SVM 算法

PEBL算法中得到的最后一個分類器不一定是最優分類器,為此,對該算法進行一些改進,得到了Roc-SVM算法。算法步驟如下:

  1. 使用 PEBL 算法直至收斂,記最后一個分類器為 S_last;
  2. 使用 S_last 對 P 進行分類;
  3. 如果 P 中超過 8%的樣本被分為負樣本,則選擇 S1 作為最終的分類器;否則,選擇 S_last 作為最終分類器。

由於SVM算法對噪聲很敏感,如果在迭代過程中,把Q中的一些正樣本錯分為-1而划分到RN中,那么會導致最終的分類器S_last性能很差,這也是PEBL算法的一個缺陷。為此,需要對S_last的分類性能進行評估,看是否選擇其作為最終分類器。選擇8%作為判斷閾值也是一個保守的做法,以防選擇一個性能不好的分類器。

上述的選擇S1或S_last的做法其實還是欠妥,因為這兩個分類器可能性能都很差。S1性能差是因為初始的RN集合中可能包含很少的負樣本,不能體現出負樣本的整體分布情況;S_last性能差則是由於PEBL算法在某個迭代過程中把一些正樣本錯分到RN中。為此,我們可以選擇使用Spy或Rocchio算法得到初始的RN,這樣可以使S1、更加穩健。有一點要注意的是:多數情況下,最佳分類器可能並不是S1或S_last,而是在迭代過程中產生的某一個分類器,然而,這個最佳分類器卻是很難被“catch”的。

有偏的 SVM 算法

由於正樣本集合P中難免會有一些噪聲,以及正負樣本的數據傾斜,可使用一種有偏的SVM算法,使用C+和C-分別控制正負樣本的誤差(直觀上看,對C+取一個較大的值,而C-取一個較小的值):

基於 PU-Learning 的分類方法 - 第7張  | 新聞中心為了選擇合適的C+和C-,通常用驗證集來評估在不同取值下的分類器性能。性能指標可采用F值(F=2pr/(p+r),其中,p為准確率,r為召回率)。但又個問題:驗證集中沒有負樣本,如何評估F值呢?

“Learning with positive and unlabeled examples using weighted logistic regression”中給出了一種直接使用不含負樣本的驗證集來評估分類器性能的方法。判斷准則是采用:pr / Pr[Y=1](其中,Pr[Y=1]是正樣本的實際概率),其等價於r2 / Pr[f(X)=1] (其中,Pr[f(X)=1]是一個樣本被分為正樣本的概率)。其中,r可以用驗證集中的正樣本來計算得到,Pr[f(X)=1]可以由整個驗證集計算得到。這個判斷指標隨p和r的增加而增加,隨p或r中任一個減小而減小,所以可以像F值一樣來判斷分類器的性能。

實驗及結論

原文中給出了上述的方法在不同組合下的實驗評估,結果表明,采用有偏的SVM方法性能最好(具體的實驗及數據比較這里就不寫了,可以參考原文)。


參考文獻

Bing Liu, Yang Dai, Xiaoli Li, Wee Sun Lee and and Philip Yu. “Building Text Classifiers Using Positive and Unlabeled Examples”.
Proceedings of the Third IEEE International Conference on Data Mining (ICDM-03), Melbourne, Florida, November 19-22, 2003


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM