Classification

將機器學習應用於 DDoS 過濾

  • February 8, 2012

斯坦福大學的機器學習課程中, Andrew Ng 提到在 IT 中應用機器學習。一段時間後,當我在我們的網站上遇到中等規模(大約 20k 機器人)的 DDoS 時,我決定使用簡單的神經網絡分類器來對抗它。

我在大約 30 分鐘內編寫了這個 python 腳本:

https ://github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos

它使用pyBrain並以 3 個nginx日誌作為輸入,其中兩個用於訓練神經網絡:

  1. 有很好的查詢
  2. 與壞人

和一個分類日誌

從不好的查詢..

0.0.0.0 - - [20/Dec/2011:20:00:08 +0400] "POST /forum/index.php HTTP/1.1" 503 107 "http://www.mozilla-europe.org/" "-"

…好的…

0.0.0.0 - - [20/Dec/2011:15:00:03 +0400] "GET /forum/rss.php?topic=347425 HTTP/1.0" 200 1685 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906 Firefox/3.0"

…它構造了一個字典:

['__UA___OS_U', '__UA_EMPTY', '__REQ___METHOD_POST', '__REQ___HTTP_VER_HTTP/1.0', 
'__REQ___URL___NETLOC_', '__REQ___URL___PATH_/forum/rss.php', '__REQ___URL___PATH_/forum/index.php',
'__REQ___URL___SCHEME_', '__REQ___HTTP_VER_HTTP/1.1', '__UA___VER_Firefox/3.0',
'__REFER___NETLOC_www.mozilla-europe.org', '__UA___OS_Windows', '__UA___BASE_Mozilla/5.0',
'__CODE_503', '__UA___OS_pl', '__REFER___PATH_/', '__REFER___SCHEME_http', '__NO_REFER__',
'__REQ___METHOD_GET', '__UA___OS_Windows NT 5.1', '__UA___OS_rv:1.9',
'__REQ___URL___QS_topic', '__UA___VER_Gecko/2008052906']

我們訓練網絡的每個條目/我們需要分類的條目……

0.0.0.0 - - [20/Dec/2011:20:00:01 +0400] "GET /forum/viewtopic.php?t=425550 HTTP/1.1" 502 107 "-" "BTWebClient/3000(25824)"

…被轉換為特徵向量:

[False, False, False, False, True, False, False, True, True, False, False, False, False, False, False, False, False, True, True, False, False, False, False]

畢竟,有標準的路徑將數據集分成訓練集和測試集,訓練神經網絡並選擇最好的一個。在這個過程之後(這可能需要很長時間,具體取決於數據集的大小),我們最終可以使用經過訓練的網絡對日誌進行分類。

但這裡有一些與這種方法有關的問題:

  1. 對於這類問題,監督機器學習有點錯誤,因為要檢測機器人,我首先需要檢測機器人並用這些數據訓練神經網絡。
  2. 我不考慮客戶的行為。最好考慮每個用戶的頁面到頁面轉換圖。
  3. 我不考慮客戶的位置。如果網絡中的一台計算機感染了某種病毒,那麼該網絡中的其他計算機被感染的可能性就更大。
  4. 我不考慮地理位置數據。當然,如果您在俄羅斯經營網站,那麼來自巴西的客戶機會就很小。
  5. 我不知道使用神經網絡和分類來解決此類問題是否是正確的方法。可能是我使用一些異常檢測系統會更好。
  6. 當 ML 方法是“在線”(或所謂的“流式”)時會更好,這樣它就可以在運行中進行訓練。

那麼問題來了:

如果你面臨同樣的防禦 DDoS 攻擊的問題,你會怎麼做?主要是好客戶)?

您會選擇哪種機器學習方法。

你會使用哪些算法?

異常檢測算法怎麼樣?當您提到 Andrew Ng 的課程時,您可能已經在 ml-class.org 上看到了“XV. ANOMALY DETECTION”部分,但無論如何。

在與您類似的場景中,異常檢測將優於監督分類,因為:

  • 通常你有很少的異常(即,太少的“正面”例子)
  • 通常你有非常不同類型的異常
  • 未來的異常可能看起來與您迄今為止所遇到的完全不同

異常檢測的重點是選擇哪些特徵。這裡有兩個常見的建議是選擇具有

  • 高斯分佈(或將它們扭曲成那樣)
  • 概率*p(anomaly)與**p(normal)*無法比較- 比如說,異常值非常大,而正常值非常小(反之亦然)。

我不確定地理位置是否對您的方案有所幫助,但客戶端行為肯定很重要——儘管它可能因應用程序而異。您可能會發現 GET/POST 的比率很重要。或響應大小與請求計數的比率。或單頁點擊數。如果您在日誌中有此類信息 - 絕對可以使用這些數據進行回顧性分析,然後是 IP 黑名單 :)

引用自:https://stats.stackexchange.com/questions/23488

comments powered by Disqus