Web攻撃検出のための機械学習の深層実践

Web攻撃検出のための機械学習の深層実践

1. 概要

1. 従来のWAFの問題点

従来の WAF は、ルールとブラックリストおよびホワイトリストに依存して Web 攻撃を検出します。このアプローチは、セキュリティ担当者の知識の広さに過度に依存しており、未知の攻撃タイプに対しては無力です。一方、既知の攻撃タイプであっても、正規表現の固有の制限と、シェルやPHPなどの言語の非常に柔軟な構文により、理論的にはバイパスできるため、誤った傍受や傍受の見逃しはつきものです。正規表現の精度を向上させるコストは、より洗練された正規表現を追加することであり、これは終わりのないパッチ適用の渦につながり、全体的なパフォーマンスを低下させます。

上記の問題に対して、現在主流のセキュリティベンダーの研究方向は、セマンティック解析と AI 認識の 2 つの陣営に大別されます。

2. 意味解析

http ペイロードから抽出された疑わしい実行可能コード セグメントは、サンドボックスを使用して解析され、実行可能かどうかが確認されます。

一般的なシェル コマンド cat をシェル構文を使用して理解すると、cat c'a't c"'a"'t ""c'a't"" はすべて同じ意味になります。理論的には、意味理解によって正規表現の見逃しや誤検出の問題の一部を解決できますが、いくつかの困難もあります。たとえば、http プロトコルのどの部分が疑わしい実行可能コード セグメントであるか、http プロトコルをどのように切り捨てて結合すれば正常な解析が保証されるかなど、これらはさらに面倒です。さらに、sql 構文、sehll 構文、js 構文を個別に実装する必要があります。

Libinjectionセマンティックパーシングライブラリの観点から見ると、バイパスやインターセプトの見逃しが多く、ルール自体も使用しています。従来のWAFルールをベースに抽象化レイヤーを作り、ルールの判断方法を変えています。実際、市場にはすでにセマンティックベースの WAF がいくつか存在し、非常に大きなスローガンを掲げていますが、その見通しはまだ不透明です。

3. AI認識

AI 支持者の中には、機械学習とディープラーニングが従来の WAF の問題点に対する究極のソリューションであると楽観視している人もいます。まあ、おそらく、比較的完璧な AI ソリューションはまだ発明されていないのでしょう。それでも、機械学習によって WAF を強化する余地はまだたくさんあります。

セキュリティ識別の分野では、人間はAI技術とデータを媒体として使い、構築された特徴を識別能力で数学的に表現し、モデルをトレーニングして、良し悪しを区別する能力を持たせます。

したがって、モデルの品質は最終的にはデータの品質と機能の品質に依存し、これらがモデルが到達できる上限を決定します。アルゴリズムは、モデルがこの上限に継続的に到達できるようにするためのものです。

特徴抽出は「美しい自然の法則を探る」プロセスです。特定の種類の特徴は、対応する特徴を持つ攻撃の種類を区別することができます。核心は、モデルが優れた識別能力、優れた一般化能力と汎用性、さらには未知の攻撃の種類を区別する能力を持つように、この種類の特徴をどのように選択するかです。

画像認識や音声認識などの分野と比較すると、Webセキュリティ分野におけるAIの応用はやや遅れて始まり、十分に深く適用されていません。その理由は、機械学習による Web セキュリティの認識精度と保守性では、従来の WAF ルールを完全に置き換えることはできないからです。定期的なマッチングに基づくセキュリティ保護では、見た目どおりの結果が得られ、実装するとすぐに保守が有効になります。したがって、Web 攻撃の識別に AI を使用する適用性を向上させるには、次の方向から始める必要があります。

  • 精度の向上
  • ロジックを最適化し、パフォーマンスを向上
  • モデルの効率的な自己更新反復
  • 未知の攻撃タイプの識別

2. Web攻撃特性分析

攻撃の例を見てみましょう:

XSS クロスサイトスクリプティング:

  1. <スクリプト>アラート(0) </スクリプト>
  2. <画像ソース= 0 onerror =アラート(0) >

SQL インジェクション:

  1. +and+(select+0+from+(select+count(*),concat(floor(rand(0)*0),
  2. すべて結合して null、null、null、null、null、null、null、null# を選択

コマンド実行:

  1. ${@print($_post[c]))}
  2. xp_cmdshell を実行します('cat ../../../etc/passwd')#

Web 攻撃リクエストの特徴は、大きく分けて 2 つの方向に分けられることがわかります。

  • 脅威キーワードの特徴:
    1. 選択、スクリプト、etc/passwd
  • 不規則な構造的特徴:
    1. ${@print($_post[c]))}

1. 状態遷移に基づく構造特徴抽出

私たちの一般的なやり方は、類似の属性を持つ文字を 1 つの状態に一般化し、固定文字に置き換えることです。たとえば、文字は「N」に一般化され、漢字は「Z」に一般化され、数字は「0」に一般化され、区切り文字は「F」に一般化されます。基本的な考え方は、異なる状態を使用して異なる文字属性を表現し、Web 攻撃で意味を持つ文字を他の文字から可能な限り区別し、ペイロードを一連の状態チェーンに変換して確率遷移行列をトレーニングすることです。

よく使われるモデルは隠れマルコフ連鎖モデルです。 HHM モデルを黒のサンプルでトレーニングすると、黒で黒を見つけるという目的を達成でき、誤判定率が低くなるという利点があります。HHM モデルを白のサンプルでトレーニングすると、未知の攻撃タイプを発見できますが、同時に誤判定率が高くなります。収集したトレーニング サンプルをテストに使用したところ、一部の XSS 攻撃や区切り文字を挿入する攻撃の亜種など、リクエスト パラメータ構造に明らかな特徴がある Web 攻撃パラメータの認識能力が優れていることがわかりました。ただし、構造上の特徴のない SQL インジェクションや機密ディレクトリ実行は認識できず、これは完全に予想どおりでした。

しかし、この方法にはよく知られた欠陥があります。異常なリクエストパラメータ構造の観点から見ると、構造上の異常は必ずしも Web 攻撃ではなく、正常な構造は Web 攻撃ではないことを保証するものではありません。

(1)構造異常XSS攻撃 ——> 特定

  1. var _ = i [c].id;u.test(_)&&( s =(s+=( _ _ =_.substring(0))+"#@#").replace(/\\|/g," "))}""!==s?( s s =s.substring(0,s.length-0),_sendexpodatas

(2)異常な構造変形XSS攻撃 ——> 識別

  1. /m/101/bookdetail/comment/129866160.page? title = xxx <マーキーonstart = "top[`ale`+`rt`](document[\'cookie\'])" >

(3)異常な構造のSQLインジェクション ——> 特定

  1. /wap/home.htm?utm_source = union %' かつ3356 = dbms_pipe .receive_message(chr(107)||chr(78)||chr(72)||chr(79),5) かつ '%'='& utm_medium = 14 & utm_campaign = 32258543 & utm_content = 504973

(4)通常の構造によるSQLインジェクション → 識別できない

  1. /hitcount.asp? lx = qianbo_about & id = 1 and 1 = 2 union パスワードを選択

(5)異常構造正常要求→誤判断

  1. /amapfromcookie().get("visitorid"), o = __ut ._encode(loginusername), u = o ?"r":"g", d = n .gettime(), c = _cuturltoshorrid ")

(6)異常構造正常要求→誤判断

  1. o.value:"")&&( c c =c+"& sperid ="+o),x+=c,__ut._httpgifsendpassh0(x)}} _sendexpodatas = function (e,t,n){var a = 0 ===t?getmainpr

(7)異常構造正常要求→誤判断

  1. /index.php? m = vod -search& wd ={{page:lang}if-a:e{page:lang}val{page:lang}($_po{page:lang}st[hxg])}{endif-a}

2. 統計に基づく構造的特徴

URL リクエストから、URL の長さ、パスの長さ、パラメータの長さ、パラメータ名の長さ、パラメータ値の長さ、パラメータの数、パラメータの長さの比率、特殊文字の数、危険な特殊文字の組み合わせの数、高リスクの特殊文字の組み合わせの数、パスの深さ、区切り文字の数、その他の統計指標などの特徴を抽出します。モデルは、ロジスティック回帰、SVM、セットカウントアルゴリズム、MLP、または教師なし学習モデルを選択できます。

検証に単一のドメイン名の URL リクエストのみを使用する場合、モデルのパフォーマンスは許容範囲内です。しかし、グループ会社のシステム ドメイン名は数千に上ります。ドメイン名が異なれば、URL ディレクトリ レベル、命名習慣、リクエスト パラメータも異なります。このような極めて複雑なビジネス シナリオでは、上記の機能領域では、データ自体に多くの曖昧さが生じます。このように、フルスタック URL リクエスト モデルは差別化効果が低く、精度も低くなります。リアルタイムでは、適応環境が改善されたとしても、比較的単純なシナリオでモデルの精度を 97% 以上に向上させることは困難です。

3. 単語の分割に基づくコードスニペット機能

特定の単語分割ルールに従ってURLリクエストをスライスし、TF-IDFを使用して特徴を抽出します。識別能力のあるキーワードの組み合わせ特徴を保持し、インターネット上のオープンソース攻撃サンプルを組み合わせることで特徴を可能な限り向上させます。ここで、単語を「ロスレス」に分割する方法と特徴キーワードの組み合わせの構造は密接に関連しており、これが特徴エンジニアリングの焦点であり、後続のモデルのパフォーマンス結果と組み合わせて継続的に調整および改善する必要があります (以下に焦点を当てます)。

実際、保持される特徴はすべて Web 攻撃でよく見られる危険なキーワードと文字の組み合わせであり、これらのキーワードと文字の組み合わせは限られています。理論的には、現在の膨大なアクセストラフィックと WAF の十分な Web 攻撃サンプルを考慮すると、これらのキーワードと文字の組み合わせのほぼすべてをカバーできます。

3. 単語分割とMLPモデルに基づく特徴抽出

普遍近似定理 (Hornik ら、1989 年、Cybenko、1989 年) によれば、ニューラル ネットワークは理論的には任意の精度で任意の複雑さの関数を近似できます。

1. 特徴エンジニアリング

  • デコード: 再帰 URL デコード、Base64 デコード、10 進数 16 進数デコード。
  • 文字の一般化: たとえば、データを「0」に一般化したり、大文字を小文字に変換したりします。
  • イベント マッチング: XSS 攻撃のペイロードには、タグとイベントが含まれています。ここでは、同じタイプのイベントまたはタグを収集し、正規表現を使用してマッチングし、カスタム文字の組み合わせに置き換えて、bag-of-words モデルに入れます。
  • キーワードマッチング: 上記のイベントマッチングの原理と同様に、同じカテゴリで同じ属性を持つキーワードを文字の組み合わせに一般化し、バッグオブワードモデルに組み込みます。この利点は、特徴次元を削減できることです。
  • 特徴ベクトルの変換: デコード、単語分割、マッチングを通じて、サンプルを「0」と「1」で構成される固定長の特徴ベクトルに変換します。

2. モデル効果

論文の長さを短くするために、ここでは特徴抽出のアイデアとモデルの評価結果のみを示します。

ランダムフォレスト:

ロジスティック回帰:

MLP モデル:

3. まとめ

欠点:

  • 特徴抽出変換ルールを最適化するには、モデルを繰り返し検証する必要があります。
  • 未知の攻撃タイプに対する認識効果が低い。
  • 変形攻撃認識には無効。
  • キーワードの時間情報は学習されません。

一般的なシェル コマンド cat をシェル構文を使用して理解すると、cat c'a't c"'a"'t ""c'a't"" はすべて同じ意味になります。ここでの単語分割の MLP モデルは cat を理解できますが、変形された c'a't は理解できません (単語分割によって情報が破壊されます)。

アドバンテージ:

  • ディープラーニングと比較すると、より効率的な予測効率を持っています。
  • ディープラーニングモデルと比較すると、分散展開はより便利で、スケーラビリティが強く、大量のアクセストラフィックに適応できます。
  • 高精度、既知のタイプを完全に認識します。
  • メンテナンス性が高く、見逃されたリクエスト タイプや誤ってブロックされたリクエスト タイプにラベルを付けて、トレーニングを再入力するだけで済みます。

上記のキーワード特徴に基づく MLP モデルに関して、なぜ 100% に近い精度を達成できるのか疑問に思う人もいるかもしれません。これは、デバッグを繰り返した結果です。特徴ベクトル変換を実行する前に、著者は URL リクエストに対して多くの一般化とクリーニング作業を行い、正規化も使用しました。初期段階では、誤認認識されたリクエストに対して、バッグオブワードのベクトル次元と URL クリーニング方法を調整して、正のサンプルと負のサンプルの特徴を十分に調査し、次にベクトル変換を実行して、モデルに入力されるトレーニング サンプルが明確であることを確認します。モデルのローンチ期間中、日々生成される誤判定の種類は、特徴抽出を調整した後、正のサンプルとしてトレーニング セットに再入力され、モデルが更新されます。少しずつ積み重ねていくことで、モデルはより完璧なものになります。

4. 変形と未知の攻撃を識別するための LSTM モデル

上記の 3 つの特徴抽出のアイデアに基づいて、MLP モデルをトレーニングするための最適な単語分割方法が選択されます。関数とパラメーターの組み合わせをトレーニングして、既知の攻撃タイプを完全に識別できます。しかし、MLP モデルの特徴抽出は部分的にルールに依存しているため、理論上は常に欠落や誤判断が生じます。サンプルだけではターゲットの識別に十分ではないため、新しい攻撃方法を発見し、特徴抽出方法を調整し、パラメータを調整し、再トレーニングするために、継続的な手動レビューが必要です...この道には終わりがないようです。

1. LSTMを選ぶ理由

上記の Web 攻撃リクエストを振り返ると、セキュリティ専門家は一目で攻撃を識別できますが、機械学習モデルでは、一連の識別機能を手動で伝え、サンプル データと機能を組み合わせて ML モデルに関数をシミュレートさせ、yes または no の出力を取得する必要があります。

セキュリティ専門家が URL リクエストを見ると、自分の「経験記憶」に基づいて URL リクエストを理解し、URL リクエストの構造が正常かどうか、Web 攻撃のキーワードが含まれているかどうか、各フラグメントが何を意味するかを判断します。これらはすべて、URL リクエスト内の各文字のコンテキストを理解することに基づいています。従来のニューラル ネットワークではこれができませんが、リカレント ニューラル ネットワークではこれが可能であり、情報の永続化が可能になります。

私たちは、LSTM のコンテキストを理解する能力を活用し、URL リクエストの前後の文字を使用して、それが Web 攻撃であるかどうかを判断します。これの利点は、特徴エンジニアリングの複雑なプロセスを省くことができることです。

URL リクエストの特性を理解するこの方法により、未知の攻撃を識別する一定の能力が得られます。未知の攻撃変形の場合、単語分割 MLP モデルは cat を理解できますが、変形 c'a't は単語分割によって分割されるため理解できません。 LSTM モデルは各文字を特徴として扱い、文字間には文脈的なつながりがあります。cat、c'a't、c"'a"'t、""c'a't"" のいずれであっても、埋め込み層によって変換された後、それらは同様の特徴ベクトル表現を持ち、モデルに近似します。

2. 特徴ベクトル化とモデルトレーニング

ここでは、要求されたパラメータ値のみがトレーニングされます。

  1. 定義arg2vec(arg):
  2. arglis = [c は arg 内の c です]
  3. x = [wordindex[c] cがIに含まれる場合、そうでなければ1、cがarglisに含まれる場合]
  4. vec =シーケンス.pad_sequences ([x], maxlen maxlen = maxlen)
  5. np.array(vec).reshape(-1, maxlen) を返します。
  6. def build_model(max_features, maxlen):
  7. 「LSTM モデルの構築」
  8. モデル=シーケンシャル()
  9. model.add(埋め込み(max_features, 32, input_length = maxlen ))
  10. モデルを追加します(LSTM(16))
  11. モデルを追加します(ドロップアウト(0.5))
  12. モデルを追加します(密(1))
  13. model.add(アクティベーション('シグモイド'))
  14. # model.compile( loss = 'binary_crossentropy,mean_squared_error' ,
  15. #オプティマイザー= 'Adam,rmsprop' )
  16. model.compile( loss = 'binary_crossentropy' ,
  17. オプティマイザー= 'rmsprop'メトリック= ['acc'])
  18. リターンモデル
  19. def run():
  20. モデル= build_model (最大機能、最大長さ)
  21. Reduce_lr = ReduceLROnPlateau (モニター= 'val_loss'係数= 0.2忍耐力= 4モード= 'auto'イプシロン= 0.0001 )
  22. model.fit(X, y, batch_size = 512epochs = 20validation_split = 0.1callbacks = [reduce_lr]) を実行します。
  23. リターンモデル
  24. __name__ == "__main__" の場合:
  25. 開始時間=時間.time()
  26. ファイル名= sys.argv [1]
  27. データ= pd .read_csv(ファイル名)
  28. I = ['v', 'i', '%', '}' , 'r', '^', 'a' , 'c', 'y', '.' , '_', '|', 'h' , 'w', 'd', 'g' , '{', '!', '$' , '[', ' ', '"' , ';', '\t ' , ' > ', ' < ', ' \\', 'l' , '\n', ' \r', '(', '=', ':', 'n' , '~', '`', '&', 'x', "'" , '+', 'k', ']', ')', 'f' , 'u', '', '0', 'q', '#' , 'm', '@', '*', 'e', 'z' , '?', 't' , 's', 'b' , 'p' , 'o' , '-', 'j' , '/',',' ]
  29. wordindex = {k:v+2 for v, k in enumerate (I)}
  30. max_features = len (wordindex) + 2 # 未知の状態(中国語を含む)と充填状態を追加
  31. 最大長= 128
  32. X = np .array([arg2vec(x) for x in data['args']]).reshape(- 1 ,128)
  33. y =データ['ラベル']
  34. モデル=実行()
  35. logger.info("モデルストレージ!")
  36. モデル名= 'model/lstm' + time.strftime('%y_%m_%d' ) + '.h5'
  37. model.save(モデル名)

3. モデル評価

テスト中のサンプルサイズが 10,000 の場合、精度は 99.4% でした。

テスト中のサンプルサイズが 584 万だったとき、GPU トレーニング後の精度は 99.99% に達しました。

不正なサンプルを観察して特定したところ、そのほとんどは長さの切断により URL フラグメントに攻撃意図があるかどうかを定義するのが難しいことがわかりました。

4. まとめ

欠点:

  • リソース消費量が多く、予測効率が低い。
  • このモデルでは、同じサイズの入力が必要です。上記では、128 バイトを超える URL リクエストはカットされ、128 バイト未満の URL リクエストには 0 が埋め込まれます。この厳格なカット方法では、元の URL 情報が破壊される可能性があります。

アドバンテージ:

  • 複雑な機能エンジニアリングは必要ありません。
  • 未知の攻撃を識別する能力。
  • 強力な一般化能力。

5. いくつかの考え

仕事上、Web 攻撃の方向を検出し、その特徴を抽出するためにさまざまな方法を試してきましたが、どれも満足できる結果には至りませんでした。時には、特定の方向の欠陥を許容できないこともあります。 Web 攻撃を識別するための従来の機械学習手法は、特徴エンジニアリングに大きく依存しており、これが私の時間の大半を費やしており、現在も継続中です。

LSTM モデルに加えて、MLP モデルは現在、Suning の運用環境で最高のパフォーマンスを発揮しています。ただし、このモデルにも重大な欠陥があります。このモデルの特徴抽出は Web 攻撃キーワードに基づいているため、認識の精度を確保するために、特徴抽出中に単語の分割と URL の一般化クリーニングに大量の正規表現を使用する必要があります。ただし、この方法は本質的にルールベースの WAF とそれほど変わりません。唯一の利点は、見逃されたり誤ってブロックされたりした一部のタイプの WAF ルールを識別するための、同一ではない追加の検証方法を提供し、それによってルール ベースをアップグレードおよび維持できることです。

長期的には、上記の LSTM 検出方向が最も有望だと思います。ここでは、各文字が特徴ベクトルと見なされます。理論的には、十分なサンプルが与えられている限り、文字セットの組み合わせと、URL 内の特定の位置に表示されたときにそれが何を意味するかを自ら学習します。本物のセキュリティ専門家のように、攻撃の変種に関係なく、一目で攻撃を認識できます。

<<:  顔認識システムの技術的プロセスの分析

>>:  なぜ多くの大学や大富豪が協力して AI 技術制御の研究を進めているのでしょうか?

ブログ    
ブログ    
ブログ    

推薦する

...

...

2019 年の IT およびビッグデータ業界のトレンドを理解する

2018年ももうすぐ終わりです。今年は、ブロックチェーン、5G、チップ、量子コンピューティングが、誰...

革新的なAIソフトウェア企業5社、次のAIユニコーンはあなたかもしれません

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

...

データベース列ストレージ: 最適な圧縮アルゴリズムを設計するための近道

データベースの保存方法によって、データベース操作の効率が決まります。51CTO データベース チャネ...

1865年から始まるビジネスインテリジェンスの簡単な歴史

[[206158]]ビジネス インテリジェンス (BI) という用語は、1865 年にリチャード ミ...

人工知能ニューラルネットワークとは何ですか?なぜ人間の推論を実現したり、意識を生成したりできないのでしょうか?

少し前にウォールストリートジャーナルは、Uberが無人車両のテスト中に歩行者1名が死亡する重大な交通...

3 つのヒープ内キャッシュ アルゴリズム (ソース コードと設計アイデア付き)

トレードオフを最もよく反映するコンピュータ システムのテクノロジといえば、それはキャッシュです。高速...

農業生産の効率性を向上させるために、知能ロボットが力を発揮している

現在、知能ロボットは急速な発展期に入り、生活のあらゆる分野で非常に重要な役割を果たし、人類にとっての...

IDC: 欧州の人工知能への支出は2022年に220億ドルに達する

インターナショナル・データ・コーポレーション(IDC)の新しい世界人工知能支出ガイドでは、ヨーロッパ...

...