DDoSフィルタリングに機械学習を適用する


12

スタンフォード大学の機械学習コースのAndrew NgがITでMLを適用述べました。しばらくして、私たちのサイトで中程度のサイズ(約2万ボット)のDDoSを取得したとき、単純なニューラルネットワーク分類子を使用してそれと戦うことにしました。

私は約30分でこのpythonスクリプトを書きました:https :
//github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos

pyBrainを使用し、3つのnginxログを入力として受け取ります。そのうち2つはニューラルネットワークをトレーニングするために使用します。

  1. 良いクエリで
  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. ボット検出するには、まずボット検出し、そのデータを使用してニューラルネットワークをトレーニングする必要があるため、教師付き機械学習はこの種の問題には少し間違っています。
  2. クライアントの行動を考慮に入れません。各ユーザーのページ間のページ遷移のグラフを検討することをお勧めします。
  3. 私は、クライアントの地域をアカウントに入れません。ネットワーク内の1台のコンピューターが何らかのウイルスに感染している場合、そのネットワーク内の他のコンピューターが感染する可能性が高くなります。
  4. 位置情報データをアカウントに取り込みません。もちろん、ロシアでサイトを運営している場合、ブラジルからのクライアントの可能性はほとんどありません。
  5. そのような問題を解決するためにニューラルネットワークと分類を使用する正しい方法であったかどうかはわかりません。異常検出システムのほうがよかったかもしれません。
  6. MLメソッドが「オンライン」(または、いわゆる「ストリーミング」)である場合は、その場でトレーニングできます。

質問は次のとおり
です。現在のWebサーバーログ(良好なクライアントとボットで構成されている)と履歴データ(前日/週/月のログ)のみを与えられたDDoS攻撃に対する防御の同じ問題に直面したらどうしますか主に良いクライアントと)?
どの機械学習アプローチを選択しますか。
どのアルゴリズムを使用しますか?

回答:


11

異常検出アルゴリズムはどうですか?Andrew Ngのクラスについて言及しているように、おそらくml-class.orgの「XV。異常検出」セクションを見たことがあると思いますが、とにかく。

異常検出は、次の理由により、あなたに似たシナリオで教師付き分類よりも優れています。

  • 通常、異常はほとんどありません(つまり、「肯定的な」例が少なすぎる)
  • 通常、非常に異なる種類の異常があります
  • 将来の異常は、あなたがこれまでに持っていたもののように見えないかもしれません

異常検出の重要なポイントは、選択する機能です。ここでの2つの一般的なアドバイスは、次の機能を選択することです。

  • ガウス分布(またはそのように歪める)

  • 確率p(異常)p(正常と比較できない-異常な値は非常に大きく、正常な値は非常に小さい(またはその逆)。

ジオロケーションがあなたのシナリオに役立つかどうかはわかりませんが、クライアントの動作は間違いなく重要です-アプリケーションごとにおそらく異なるでしょうが。GET / POSTの比率が重要であることがわかります。または、リクエストサイズに対するレスポンスサイズの比率。または、単一ページのヒット数。ログにそのような情報がある場合-間違いなく、遡及分析にデータを使用し、その後にIPブラックリストを作成できます:)


異常検出の場合は+1。「最後の5分間のログイン試行回数」と「最後の5分間のIP Xからのログイン試行回数」も追加します。
ニューロン

異常検出の主な問題(MLクラスで与えられたように)は、それらの間の複雑な関係を持つ膨大な量の機能に使用できないことです。私の例では、コールグラフ、位置情報、およびnginxログに追加の変数がなくても、2(!!)クエリのうち23個の機能があります。また、攻撃者はボットの動作を変更できるため、PCAは使用できません。
SaveTheRbtz

@SaveTheRbtzは「計算コスト」再- IIRC、異常検知を単に密度推定したML-クラスに提示されるので、あなただけの思い乗算のようにあなたの特徴の確率P(X1)* .. * P(XN)これは、I信じて、O(n)ですか?O(logn)または何かを探していますか?しかし、いずれにせよ、それは公正問題だし、それは私が自動機能の選択について考えさせられました-そうで質問をmachinelearning.stackexchange.com/questions/184
andreister

もっと正確に言うと、1Mbのログファイルあたり最大100,000個の機能について話しています。PS。いい質問です!
SaveTheRbtz

1

これは難しい問題です。ここにいくつかの所見があります。

  • このホワイトペーパーは、あなたの助けになるかもしれません-敵対的な広告を検出するために(マルチクラス分類のコンテキストで)教師付き学習手法に依存しています。敵対的な戦略が進化するので、著者はまれな「異常」に注釈を付ける人間の専門家に頼らなければなりません。特に、SVMベースのランキング手法を使用しています。
  • 他の人が述べたように、教師なし学習ベースの異常/異常値の検出を試すこともできますが、誤検知と誤検知のバランスを正しく取るには多くの調整が必要になります。
  • 優れた機能セットを持つことは非常に重要です-方法論の選択は二次的です(すなわち、Naive Bayesやロジスティック回帰などの単純な手法で十分な機能セットがあれば十分です)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.