Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

高度なカスタム攻撃オブジェクト手法

パターン否定を使用して、安全であることがわかっているパターンを除外し、他のすべてのパターンに一致させることができます。

カスタム攻撃オブジェクト DFA 式

表 1 は、攻撃パターンを照合するための構文の例を示しています。

表 1: 例:カスタム攻撃オブジェクトの正規表現

構文例

形容

一致例

こんにちは。。\B.0.1..00\B...世界

マッチングには 2 つの側面があります。

ビットマスク パターン \B.0.0.1 と一致する必要があります。00\B

ビットマスク パターンの前後のバイト数 (. で表される) と一致する必要があります。

一致:

こんにちは。。\B.0.11100\B...worldこんにちは..\B.0.10000\B...世界

一致しない:

Hello.\B.0.1..00\B.worldこんにちは..\B.0.1..11\B...世界

\X01 86 A5 00 00\X

指定された 5 バイトのパターンをそのまま使用します。

01 86 A5 00 00

(hello|world)

hello または world が 1 回出現するパターン。

こんにちは

世界

(hello|world)+

hello または world が 1 回以上出現するパターン。

ハローワールド

ワールドハロー

こんにちはこんにちは

\[こんにちは\]

パターン こんにちは、大文字と小文字を区別しません。

こんにちは

こんにちは

こんにちは

\uこんにちは\u

パターンこんにちは、Unicodeは無神経です。

こんにちは

68656c6c6f

hello\sワールド

hello world というパターンで、2 つの単語を空白で区切ります。

ハローワールド

[c-e]a(d|t)

c、d、または e の最初の文字を持つパターン。真ん中の文字a;dまたはtで終わります。

お父さん

食べる

[^c-d]a(d|t)

c、d、または e 以外の文字で始まるパターン。2 番目の文字 a があります。d または t で終わります。

流行

ザド

A*B+C

任意の数の文字 (0 を含む) のパターン。その後に 1 つ以上の B 文字が続きます。その後に C 文字が続きます。

紀元前

甲乙丙

aaaabbbbc

T[株式会社]

大文字の T で始まり、その後に大文字と小文字を区別しない k が続くパターン。

TKの

Tkの

([Tt])k

大文字と小文字を区別しない t で始まり、その後に小文字の k が続くパターン。

Tkの

Tkの

海[で]

Sea で始まり、その後に小文字の l、m、または n が続くパターン。

印章

縫い目

ショーン

([B-D])を

大文字の B、C、または D で始まり、その後に小文字の at が続くパターン。

蝙蝠

ダット

\0133\[こんにちは\]\0135

左角かっこで始まり、大文字と小文字を区別しない hello が続き、閉じ括弧で終わるパターン。この式では、\0 式を使用して、次の式が 8 進符号であることを示すと、左角かっこ (133) または右角かっこ (135) の 8 進符号が続きます。

[こんにちは]

[HeLLo]

パターン否定

たとえば、FTP サーバーへのトラフィックを検査する攻撃オブジェクトを設計しているとします。アカウントのユーザー名とパスワードは、許可されたユーザーのみが内部リソースにアクセスできるように適切に管理されていることがわかっています。しかし、ネットワークが成長し、新しいコンポーネントが追加されると、ユーザーアカウントが増加し、特定のコンポーネントへのネットワークアクセスが増加する可能性があります。この例では、内部ネットワーク上にFTPサーバーがあり、複数のユーザーアカウントが有効になっています。セキュリティを強化するには、FTP 管理者へのアクセスを制限します。

FTP サービス、ftp-username コンテキスト、およびパターン adminの攻撃オブジェクトを作成し、[ 否定(Negate )] チェックボックスをオンにします。その結果、 admin 以外のユーザーによるログイン試行にフラグを立てることができる攻撃オブジェクトが作成されます。この攻撃オブジェクトは、一致するトラフィックをログに記録またはドロップするルールで使用できます。

例: ファイル拡張子の一致

この例では、拡張子 .emf (Windows 拡張メタファイル) と .wmf (Microsoft Windows メタファイル) を使用する Microsoft Windows メタファイルを検出します。

これらのファイルタイプのいずれかに一致させるには、単純な DFA 式を使用します。

この式では、次のようになります。

  • ピリオドとアスタリスク (.*) の組み合わせは、1 つ以上の文字が必要であることを示します (ワイルドカード一致)。

  • バックスラッシュとピリオド文字(\.)の組み合わせは、ピリオド文字がエスケープされていることを示します(ピリオドはパターンに表示されます)。

  • 式 ( ) の先頭と末尾の括弧は、グループを示します。e と w の間のパイプ文字 (e|w) は、文字間の OR 関係を示します。この式では、e または w がこの式と一致するようにパターンに出現する必要があります。存在は 1 つだけです。

  • 左角かっこ (\[) は、右角かっこ (\]) が表示されるまで、すべての文字の大文字と小文字を区別しない一致の開始を示します。

  • 閉じ括弧(\])は、大文字と小文字を区別しない一致の終了を示します。

例:Apache Tomcat のサービス拒否攻撃

この例では、Apache Tomcat を実行している Web サーバーがあることを前提としています。セキュリティー管理者から Apache Tomcat の脆弱性が報告されたことが通知されたので、サーバーにパッチを適用するためのダウンタイムをスケジュールできるようになるまで、ネットワークを保護するためのカスタム攻撃オブジェクトを作成することにしました。

脆弱性(http://nvd.nist.gov/nvd.cfm?cvename=CAN-2002-0682)に対するCVEアドバイザリには、次の引用が含まれています。

この情報から、攻撃がHTTPを使用していることがわかります。次に、攻撃コードを見つける必要があります。このアドバイザリには、攻撃に関する詳細情報にリンクする参照も含まれています。残念ながら、参照されている Web ページには悪用コードは含まれていません。CVEアドバイザリから学習した情報を使用してWebを検索した後、 http://packetstormsecurity.nl/0210-exploits/neuter.c でいくつかの悪用コードを見つけます。スクリプトをコピーし、テスト ラボ内の攻撃者のコンピューターに移動します。

この攻撃オブジェクトを開発するには、次のようにします。

  1. 攻撃を再現して、攻撃のコンテキスト、方向、パターンを判断します。理想的には、 scio ccap とWiresharkを同時に使用して、攻撃を一度だけ実行する必要があります。
  2. 攻撃シグネチャの次の要素を検出します。
    • サービス。CVEアドバイザリから、攻撃がHTTPプロトコルを使用していることがわかっています。入力しますを確認してプロトコルを確認します。

    • 文脈。 scio ccap を使用して、特定のサービスコンテキストを一致させることができるかどうかを判断します。この例では、シグネチャパターンはサービス コンテキスト HTTP URL Parsed で発生します。

    • パターン。アドバイザリから、攻撃はHTTPプロトコルの悪用されたGETメソッドを使用して発生することがわかっています。GET メソッドを含むフレームを選択して、パケットのそのセクションの詳細を表示します。シグネチャパターン examples/servlet/AUXとしてすぐに識別できます。

    • 方向。セッションを開始した送信元 IP を見つけます。この攻撃はTCPを使用するため、Wiresharkの[Follow TCP Stream]オプションを使用して、セッションを開始した送信元IPをすばやく検出できます。攻撃方向はクライアントからサーバーです。

  3. 攻撃シグネチャと一致する攻撃オブジェクトを作成します。この例では、次の正規表現を使用して署名を照合します。

    この式では、次のようになります。

    • ドット スターの組み合わせ (.*) は、ワイルドカードの一致を示します。

    • /examples/servlet/ セクションは、パケットキャプチャから直接入力します。

    • 括弧 ( ) は項目のグループを示し、パイプ文字 (|) は OR を示します。これらの文字は、攻撃にグループから 1 つの項目を含める必要があることを示すために一緒に使用されることがよくあります。この例では、攻撃の文字列 /examples/servlet/ の後に aux、lpt1、con、または prn という単語を含める必要があります。

      この例では、グループを使用していることに注意してください。パケット キャプチャは、シグネチャパターンを /examples/servlet/AUX として入力します。 AUX は Windows デバイスです。LPT1、CON、およびPRNデバイスを悪用する試みに警戒する十分な理由があります。

  4. 攻撃オブジェクトをテストします。

特定のプロトコルの IDP テスト条件

IDP カスタム攻撃を設定する場合、特定のプロトコルのテスト条件の一覧を指定できます。ICMP のテスト条件を一覧表示するには:

  1. ICMP でサポートされているテスト条件を一覧表示し、設定する条件を選択します。サポートされているテスト条件は、 [edit security idp custom-attack test1 attack-type anomaly] 階層レベルのCLIで使用できます。

  2. テスト条件を設定するサービスを設定します。

  3. テスト条件を設定します(プロトコル名の指定は不要です)。

  4. デバイスの設定が完了したら、設定モードから commit を入力します。

例:UNIX CDE/dtlogin の脆弱性

この例では、ネットワークにはUNIXを実行する複数のユーザーワークステーションとサーバーが含まれています。多くの UNIX オペレーティング・システムは、グラフィカル・ユーザー・インターフェースとして共通デスクトップ環境 (CDE) を使用します。セキュリティー管理者は、CDE の dtlogin プロセスに新しい脆弱性があることを通知します (dtlogin プロセスは CDE への GUI ログイン・プロセスを処理します)。

脆弱性(http://www.kb.cert.org/vuls/id/179804)に対するCERTアドバイザリには、次の情報が含まれています。

この情報から、攻撃がXDMCPプロトコルパケットを使用し、UDP/177で実行されていることがわかります。次に、攻撃コードを見つける必要があります。このアドバイザリには、攻撃に関する詳細情報にリンクする参照も含まれています。http://lists.immunitysec.com/pipermail/dailydave/2004-March/000402.html の 1 つの参照は、攻撃を最初に報告した人物が攻撃を再現するスクリプトも作成していることを示しています。スクリプトを入手し、テスト ラボ内の攻撃者のコンピューターに移動します。

この攻撃オブジェクトを開発するには、次のようにします。

  1. 攻撃を再現して、攻撃のコンテキスト、方向、パターンを判断します。理想的には、 scio ccap とWiresharkを同時に使用して、攻撃を一度だけ実行する必要があるようにします。
  2. 攻撃シグネチャの要素:
    • サービス。CERT アドバイザリから、この攻撃は XDMCP プロトコルを使用していることがわかっています。Wiresharkの入力しますを確認して、プロトコルを確認します。

    • 文脈。 scio ccap を使用して、特定のサービスコンテキストを一致させることができるかどうかを判断します。この例では、XMCP サービス コンテキストは IDP システムでサポートされておらず、 scio ccap の出力は空白です。攻撃のパケット コンテキストを指定する必要があります。

    • パターン。XDMCP プロトコルに関する知識を使用して、攻撃が非 NUL 文字 (16 進コード 00 1b) を使用して無効な接続タイプを指定していることを識別します (NUL 文字は XDMCP のインターネット接続タイプを表します)。非 NUL 文字をシグネチャパターンに固定するには、先行するバイトの一部をパターンの一部として含めます。この例では、バージョン番号(16進コード00 01)とリクエストオプションコード(16進コード00 07)で非NUL文字を固定することを選択します。完全な攻撃パターンは、00 01 00 07 の後に任意のタイプの 5 つの文字が続き、その後に 6 番目の文字と非 NUL 文字 (上記の 00 1b を参照) または非 NUL 文字と別の文字が続きます。

    • 方向。セッションを開始した送信元 IP を見つけます。この例では、攻撃方向を特定できません。

  3. 攻撃シグネチャと一致する攻撃オブジェクトを作成します。次の正規表現を使用して、署名と一致させます。

    この式では、次のようになります。

    • \x 式は 16 進数値を示します。

    • XDMP プロトコルの 00 01 00 07 という数字は、バージョン番号 (16 進コード 00 01 とリクエスト オプション コード (16 進コード 00 07) を表します。

    • 5 つのピリオド (.....) は、任意の種類の 5 つの文字を示します。

    • 括弧 ( ) は項目のグループを示し、パイプ文字 (|) は OR を示します。これらの文字は、攻撃にグループから 1 つの項目を含める必要があることを示すために一緒に使用されることがよくあります。

    • キャレット [^] と組み合わされた開き括弧と閉じ括弧は否定を示します。

    • バックスラッシュとゼロ (\0) の組み合わせは、8 進数コード番号を示します。

    • 00 文字は、NUL 文字の 16 進コードです。この例では、攻撃の前に別の文字 ([^\000] または [^\000]) が続く NUL 以外の文字が含まれている必要があります。

    • ドット スターの組み合わせ (.*) は、ワイルドカードの一致を示します。式の末尾で使用する場合、ワイルドカードは、指定された式の後に何でも続くことができることを示します。

  4. 攻撃オブジェクトをテストします。

例:ワームの検出

ワームやトロイの木馬は、ファイアウォールやその他の従来のセキュリティ対策を迂回してネットワークに侵入することがよくあります。この例では、ネットワーク上の Blaster ワームを検出するためのカスタム攻撃オブジェクトを作成します。

BlasterワームのCERTアドバイザリ(http://www.cert.org/advisories/CA-2003-20.html)には、次の情報が記載されています。

この情報から、この攻撃は以前に特定されたセキュリティ ホールである DCOM エクスプロイトを使用していることがわかります。次に、攻撃コードを見つける必要があります。このアドバイザリには、攻撃に関する詳細情報にリンクする参照も含まれています。残念ながら、参照されている Web ページには悪用コードは含まれていません。CERTアドバイザリから学習した情報を使用してWebを検索した後、PacketStorm(http://packetstormsecurity.com/0307-exploits/dcom.c)でエクスプロイトコードを見つけます。

この攻撃オブジェクトを開発するには、次のようにします。

  1. 攻撃を再現して、攻撃のコンテキスト、方向、パターンを判断します。理想的には、 scio ccap とWiresharkを同時に使用して、攻撃を一度だけ実行する必要があります。
  2. 攻撃シグネチャの要素:
    • サービス。CERTアドバイザリから、攻撃はIDP OSがサービスコンテキストをサポートしていないICMPを使用していることがわかります。入力しますを確認して、プロトコルがICMPであることを確認します。

    • 文脈。 scio ccap を使用して、特定のサービスコンテキストに一致できるかどうかを判断します。この例では、ICMP サービス コンテキストは IDP システムでサポートされておらず、 scio ccap の出力は空白です。攻撃の最初のパケット コンテキストを指定する必要があります。

    • パターン。[Wireshark] にリストされている最初のフレームを選択し、2 番目のセクションの情報を確認します。ICMP パケットにデータを含めるべきではないことがわかっているので、64 バイトのデータ ペイロードを調査します。不規則なペイロードは複数の「AA」文字であり、おそらくバッファをオーバーフローさせようとするコードであることがわかります。このパターンは ICMP パケットのコンテキストでは珍しいため、署名として選択します。

    • 方向。セッションを開始した送信元 IP を見つけます。この例では、攻撃方向を特定できません。

  3. 攻撃シグネチャと一致する攻撃オブジェクトを作成します。この例では、次の正規表現を使用して署名を照合します。

    この式では、次のようになります。

    • \X 式は、その後に 16 進数値が続くことを示します。

    • ドット スターの組み合わせ (.*) は、ワイルドカードの一致を示します。式の末尾で使用する場合、ワイルドカードは、指定された式の後に何でも続くことができることを示します。

  4. 攻撃オブジェクトをテストします。

例:HTTP 脆弱性のエクスプロイトを検出するための複合シグネチャ

一部の攻撃は、パケット単位で見ると無害に見えるように細工されています。これらの攻撃では、複数のコンテキスト(サービス、非サービス、またはその両方)で複数のシグニチャパターンを検出する複合シグネチャを作成できます。

この例では、Microsoft FrontPage Server 拡張機能を使用する Web サーバーがあります。セキュリティ管理者は、FrontPage Server 拡張機能に新しいバッファ オーバーフローの脆弱性があることを通知します。

脆弱性 (http://www.securityfocus.com/bid/9007/discussion/) に対する BugTraq アドバイザリには、次の情報が含まれています。

次の概念実証の例も提供されています。

さらに、コンパイルされたエクスプロイトへのリンクが含まれています。

この情報から、攻撃が HTTP プロトコルを使用しており、攻撃の少なくとも一部が POST メソッドを使用していることがわかります。コンパイルされたエクスプロイトへのリンクを使用してスクリプトを取得し、テストラボ内の攻撃者のコンピューターに移動します。

この攻撃オブジェクトを開発するには、次のようにします。

  1. 攻撃を再現して、攻撃のコンテキスト、方向、パターンを判断します。理想的には、 scio ccap とWiresharkを同時に使用して、攻撃を一度だけ実行する必要があるようにします。
  2. 攻撃シグネチャの要素:
    • サービス。BugTraq のアドバイザリから、この攻撃は HTTP プロトコルを使用していることがわかっています。入力しますを確認し、HTTPプロトコルの使用状況を見つけます。

    • 文脈。 scio ccap を使用して、特定のサービスコンテキストを一致させることができるかどうかを判断します。この例では、サービス コンテキストは HTTP URL 解析済みです。

    • パターン。HTTP サービス内でシグネチャパターン POST /_vti_bin/_vti_aut/fp30reg.dll をすばやく識別できます。

      ただし、このパターンは誤検知をトリガーする可能性があるため、2 番目のシグネチャパターンも決定して、ルールで攻撃のみが検出されるようにします。この場合、2 番目のシグネチャ (BugTraq アドバイザリに記載されている) は Transfer-Encoding: chunked です。

    • 方向。セッションを開始した送信元 IP を見つけます。この例では、両方のシグネチャパターンの攻撃方向はクライアントからサーバーです。

  3. 攻撃シグネチャと一致する攻撃オブジェクトを作成します。次の正規表現を使用して、最初の署名と一致させます。

    この式では、次のようになります。

    • 左角かっこ (\[) は、右角かっこが表示されるまで、すべての文字の大文字と小文字を区別しない一致の開始を示します。

    • パターン /_vti_bin/_vti_aut/fp30reg は、文字が直接一致します。

    • バックスラッシュとピリオド(\.)の組み合わせは、ピリオドがエスケープされていることを示します(ピリオドはパターンに表示されます)。

    • 閉じ括弧(\])は、大文字と小文字を区別しない一致の終わりを示します。

    • ピリオドとアスタリスク文字 (.*) の組み合わせは、1 つ以上の文字が必要であることを示します。

  4. 2 つ目の署名を追加します。次の正規表現を使用して、2 番目の署名と一致させます。

    この式では、次のようになります。

    • 左角かっこ (\[) は、右角かっこが表示されるまで、すべての文字の大文字と小文字を区別しない一致の開始を示します。

    • パターン Transfer-Encoding: は、文字の直接一致です。

    • プラス記号 (+) は、パターン内にスペース文字が 1 回以上出現する必要があることを示します。

    • チャンクされたパターンは、文字が直接一致します。

    • 閉じ括弧(\])は、大文字と小文字を区別しない一致の終わりを示します。

  5. 攻撃オブジェクトをテストします。

例: タイムバインディングパラメータを使用したブルートフォース攻撃の検出

タイムバインディング制約では、トラフィックが一致しているとみなされるために、パターンが1分間に一定回数発生する必要があります。

時間バインディングパラメーターを署名と共に使用して、ブルートフォース攻撃の兆候を検出できます。ユーザーがパスワードを変更することは無害なイベントであり、通常はネットワーク上で時折見られます。しかし、1分間に何千ものパスワード変更を行うのは疑わしいものです。

ブルートフォース攻撃では、攻撃者はシステムの防御を突破しようとします。通常、宛先サーバーの容量を圧倒するか、認証資格情報の照合を試行錯誤を繰り返します。ブルートフォースログイン攻撃では、攻撃者は最初にユーザー名のリストとパスワード辞書を収集します。次に、攻撃者はツールを使用して、リスト内の最初のユーザーの辞書に最初のパスワードを入力し、一致するまですべてのユーザーのすべてのパスワードを試します。攻撃者がユーザー名とパスワードのすべての組み合わせを試みた場合、それらは常に成功します。ただし、通常、パスワード辞書は制限されており(すべての可能なパスワードが含まれているわけではありません)、攻撃ツールがパスワードの順列(文字の逆や大文字と小文字の変更など)を実行しないため、ブルートフォース攻撃はしばしば失敗します。

この例では、HTTP (Web ベースのアプリケーション) を介して認証されたユーザーの過剰な数のパスワード変更を検出する署名攻撃オブジェクトを作成します。

まず、攻撃パターンを設定します。

この式では、次のようになります。

  • ドット スターの組み合わせ (.*) は、ワイルドカードの一致を示します。

  • 文字の前のバックスラッシュは、その文字が正規表現を表しており、エスケープする必要があることを示します。この場合、文字は左括弧です。バックスラッシュは、この式では、ファイル拡張子マーカー (ドット) の前と右角かっこの前でも使用されます。

  • ユーザー・パスワードの変更に使用される cgi スクリプトの名前と、cgi 拡張モジュールが含まれています。

  • [コンテキスト] では、Web ベースのアプリケーションで発生するパスワードの変更を検出しようとしているため、一覧から [HTTP-URL-PARSED] を選択します。changepassword.cgi スクリプトを使用すると、URL の一部として表示されますが、名前を検索するには、URL を解析するように IDP シリーズ デバイスに指示する必要があります。

次に、タイムバインディングを設定します。

これらの設定では、次のようになります。

  • スコープは ピア に設定されているため、攻撃パターンは送信元または宛先に関係なくイベントに一致できます。

  • Count は、誤検知を避けるために大きな数値 (1000 まで) に設定されます。この値は、攻撃オブジェクトが一致する前に、changepassword.cgiスクリプトがURLに1000回出現する必要があることを意味します。