でスタンフォード大学の機械学習コースのAndrew NgがITでMLを適用述べました。しばらくして、私たちのサイトで中程度のサイズ(約2万ボット)のDDoSを取得したとき、単純なニューラルネットワーク分類子を使用してそれと戦うことにしました。
私は約30分でこのpythonスクリプトを書きました:https :
//github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos
pyBrainを使用し、3つのnginxログを入力として受け取ります。そのうち2つはニューラルネットワークをトレーニングするために使用します。
- 良いクエリで
- 悪いものと
そして分類のための1つのログ
悪いクエリから。
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台のコンピューターが何らかのウイルスに感染している場合、そのネットワーク内の他のコンピューターが感染する可能性が高くなります。
- 位置情報データをアカウントに取り込みません。もちろん、ロシアでサイトを運営している場合、ブラジルからのクライアントの可能性はほとんどありません。
- そのような問題を解決するためにニューラルネットワークと分類を使用する正しい方法であったかどうかはわかりません。異常検出システムのほうがよかったかもしれません。
- MLメソッドが「オンライン」(または、いわゆる「ストリーミング」)である場合は、その場でトレーニングできます。
質問は次のとおり
です。現在のWebサーバーログ(良好なクライアントとボットで構成されている)と履歴データ(前日/週/月のログ)のみを与えられたDDoS攻撃に対する防御の同じ問題に直面したらどうしますか主に良いクライアントと)?
どの機械学習アプローチを選択しますか。
どのアルゴリズムを使用しますか?