本文描述了一種基于PU-Learning(正例和未標注學習)的潛在惡意URL檢測系統。實驗結果表明,我們所開發的系統能夠有效地發現潛在的惡意URL攻擊。該系統既可以作為現有系統的輔助部署,也可以用來幫助網絡安全工程師有效地發現潛在的攻擊模式,使他們能夠快速更新現有的系統。
系統架構
我們介紹了所開發的系統架構。如圖1所示,我們的系統主要包括3個模塊:
特征提取
首先將原始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維特征向量。
模型訓練
值得注意的是,傳統的有監督學習算法并不能直接應用于我們的場景。在這項工作中,我們將其轉化為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的正確分類。
預測
在預測階段,一個新輸入的URL首先將在特征提取模塊被轉換為(n + 1)?8維特征向量,然后所提取的特征向量將送入一個雙策略模型,每個模型都將輸出一個分數表示惡意URL的概率。得分越高,這個URL就越有可能是惡意的。我們把兩個分數平均作為URL的最終得分,選擇具有較高分數的URL構造為候選惡意URL集。
在工程實踐中,我們會基于候選惡意URL集過濾K個URL,這些過濾的URL將由網絡安全工程師進行人工驗證。
實驗驗證
數據集與準備工作
該數據集來自于發送至螞蟻金服的URL請求的采樣。數據主要分為兩部分:一大組未標記的URL和少數已經通過現有的系統標注的惡意網址,并出現了不同的攻擊類型,包括XXE、XSS和SQL注入等。我們并沒有把這些不同類型的惡意網址進行進一步細分。由于總數據集太大,我們從每天的請求中抽取1億個URL,其中由現有系統檢測到的惡意URL的數量從幾萬到數十萬不等。該模型使用連續7天收集的數據進行訓練,并用于預測每天新出現的未標記URL的分數。
當提取Key-Value對時,N被設置為99,因此每個URL將由一個800維的特征向量來描述,使用min-max歸一化方法來處理不同量綱下的特征。在模型訓練部分,我們采用基于logistic回歸的方法來訓練PU-Learning模型,C+、C?和λ等參數由驗證集進行選取。
實驗結果
由于我們并沒有未標注URL的具體情況,我們借助網絡安全工程師來幫助檢查結果并驗證我們系統的有效性。
由于檢查結果非常耗時,因此我們將候選惡意URL集的大小K設置為至多150,并由網絡安全工程師將手動檢查所選URL是否是惡意URL。表1展示了實驗結果的細節。從表中可以看出,過濾后的候選集的精度可以達到90%,表明該系統能有效地發現潛在的惡意URL,而現有的系統無法捕獲這些惡意URL。應該特別提到的是,我們基于候選惡意URL集發現了新的攻擊模式,而螞蟻金服的網絡安全工程師已經通過這個發現改進了現有系統。同時,開發的系統還可以與現有系統協同使用,提高整體的網絡安全水平。
總結
在這項工作中,我們開發了一個基于PU-Learning的潛在惡意URL檢測系統。與基于監督學習的方法相比,我們的方法只需要少量惡意URL以及未標注URL,而這正好適合我們遇到的實際情況。
該系統主要包括三個部分:首先,特征提取將原始URL轉化為特征向量;然后,利用two-stage strategy、cost-sensitive strategy來訓練分類模型;最后,新輸入的URL將被首先轉化為特征向量,再進行機器學習,輸出的分數表明了該URL為惡意網址的概率。
實證結果表明,我們開發的系統能夠有效地發現潛在的惡意URL。該系統既可以作為現有系統的輔助部署,也可以用來幫助網絡安全工程師有效地發現潛在的攻擊模式。
原文:https://dl.acm.org/citation.cfm?id=3138825