はじめに
responder-RunFinger
は、有名なペネトレーションテストツールスイートである Responder に含まれる補助ツールの1つです。Responder 自体は、主に LLMNR (Link-Local Multicast Name Resolution)、NBT-NS (NetBIOS Name Service)、mDNS (Multicast DNS) の名前解決プロトコルに対するポイズニング攻撃(中間者攻撃)を行い、ネットワーク上の認証情報(特に NTLM ハッシュ)を窃取したり、認証を中継(リレー)したりするために使用されます。
responder-RunFinger
は、Responder の主要機能であるポイズニングとは異なり、情報収集に特化したツールです。具体的には、ターゲットとなるホストに対して SMB (Server Message Block) プロトコルなどを用いて接続を試み、OS のバージョン、ドメイン情報、ホスト名、そして特に重要な SMB 署名が必須かどうかといった情報を収集します。
この情報は、Responder のもう一つの強力なツールである MultiRelay
を使用した SMB リレー攻撃を行う際に極めて重要になります。SMB リレー攻撃は、ターゲットホストが SMB 署名を要求しない場合にのみ成功するため、responder-RunFinger
を使って事前に SMB 署名の要否を確認することが、攻撃の成否を左右する鍵となります。
また、responder-RunFinger
という名前には “Finger” が含まれていますが、これは必ずしも古典的な Finger プロトコル (RFC 1288, TCP/79) のみを指すわけではありません。むしろ、ターゲットホストの「指紋(fingerprint)」、つまりシステム情報を収集するという意味合いが強いと考えられます。ただし、ツールは SMB などのプロトコルを利用してこれらの情報を取得します。
この記事では、responder-RunFinger
の基本的な使い方から、収集できる情報の詳細、そして実際のペネトレーションテストにおける活用シナリオまでを詳しく解説します。 🧐
Responder と Finger プロトコルについて
Responder とは?
Responder は、Laurent Gaffié 氏によって開発された、Python で書かれたオープンソースのセキュリティツールです。主に内部ネットワークにおけるペネトレーションテストで使用されます。
Windows ネットワーク環境では、DNS による名前解決が失敗した場合、フォールバックとして LLMNR や NBT-NS といったブロードキャスト/マルチキャストベースの名前解決プロトコルが使用されることがあります。例えば、ユーザーが存在しないファイルサーバー名(例: `\\fileservr` のタイプミス)を入力した場合などです。
Responder は、これらの LLMNR/NBT-NS リクエストを待ち受け、自身がその要求されたホストであるかのように応答します(ポイズニング)。これにより、クライアントマシンは Responder を実行している攻撃者のマシンに対して認証を試み、その過程でユーザー名や NTLM ハッシュなどの認証情報が攻撃者に送信されます。攻撃者はこれらの情報を取得し、オフラインでのパスワードクラッキングや、MultiRelay
ツールを用いた NTLM リレー攻撃に利用できます。
Responder は Kali Linux などのペネトレーションテスト用ディストリビューションに標準で含まれていることが多いツールです。
Finger プロトコルとは?
Finger プロトコル(RFC 1288 で定義)は、インターネットの初期に使用されていた古いプロトコルで、リモートホスト上のユーザーに関する情報を取得するために設計されました。通常、TCP ポート 79 を使用します。
ユーザーは finger
コマンドを使用して、特定のホストにログインしているユーザーのリストや、特定のユーザーのフルネーム、最終ログイン日時、メールアドレス、さらにはユーザーがホームディレクトリに作成した .plan
や .project
ファイルの内容などを照会できました。これらのファイルには、ユーザーの予定、連絡先情報、あるいは単なるジョークなどが書かれていることがありました。
しかし、Finger プロトコルは設計上の古さからセキュリティ上の懸念が多く、ユーザーに関する詳細な情報を外部に公開してしまうため、現代のネットワークではほとんど使用されておらず、多くのシステムで Finger サービス (fingerd
) はデフォルトで無効化されています。プライバシー侵害や攻撃者による情報収集のリスクが高いと見なされているためです。
responder-RunFinger
は、この古典的な Finger プロトコルを直接利用するというよりは、「ターゲットの情報を探る(Finger する)」という広義の意味で名付けられた可能性が高いです。実際の情報収集は主に SMB プロトコルなどを介して行われます。
前提条件とインストール
responder-RunFinger
を使用するには、まず Responder ツールスイートがインストールされている必要があります。
インストール方法
Responder は多くの場合、Kali Linux にプリインストールされています。もしインストールされていない場合や、他の Linux ディストリビューションで使用したい場合は、GitHub リポジトリからクローンしてセットアップできます。
git clone https://github.com/SpiderLabs/Responder.git
cd Responder
Responder は Python 3 で書かれており、いくつかの依存ライブラリが必要です。通常、pip
を使ってインストールできますが、必要なライブラリ(例: `netifaces`, `pycryptodome`, `six` など)は環境によって異なる場合があります。Kali Linux であれば、`apt` を使ってインストールするのが簡単です。
sudo apt update
sudo apt install responder
これにより、Responder 本体と、responder-RunFinger
を含む関連ツールがシステムにインストールされます。通常、/usr/share/responder/tools/
や /usr/bin/
などに実行ファイルが配置されます。
必要な権限
responder-RunFinger
はネットワーク上の他のホストに接続して情報を収集するため、通常は特別な権限(root 権限など)は必要ありません。ただし、実行するユーザーがターゲットホストへのネットワーク接続を許可されている必要があります。ファイアウォール設定などに注意してください。
⚠️ 注意: Responder および関連ツールは、許可されたネットワーク環境でのみ、セキュリティ評価やペネトレーションテストの目的で使用してください。無許可のネットワークでの使用は違法行為となる可能性があります。
基本的な使い方とオプション
responder-RunFinger
の基本的なコマンド構文は以下の通りです。
responder-RunFinger [オプション]
または、Responder のディレクトリ内で直接実行する場合:
python ./tools/RunFinger.py [オプション]
主要なオプション
最もよく使われるオプションは、ターゲットを指定するためのものです。
オプション | 説明 | 例 |
---|---|---|
-h, --help |
ヘルプメッセージを表示して終了します。 | responder-RunFinger -h |
-i IP_ADDRESS or CIDR, --ip=IP_ADDRESS or CIDR |
ターゲットの IP アドレス、または CIDR 表記のサブネットを指定します。必須のオプションです。 | responder-RunFinger -i 192.168.1.100 responder-RunFinger -i 192.168.1.0/24 |
-f FILENAME, --filename=FILENAME |
ターゲット IP アドレスがリストされたファイル名を指定します。-i の代わりに使用できます。 |
responder-RunFinger -f targets.txt |
-t TIMEOUT, --timeout=TIMEOUT |
接続タイムアウト(秒)を指定します。デフォルトは 0.9 秒です。ネットワーク状況に応じて調整します。 | responder-RunFinger -i 192.168.1.0/24 -t 1.5 |
-g |
出力を grep しやすい形式(grepable format)で表示します。スクリプト処理などに便利です。 | responder-RunFinger -i 192.168.1.0/24 -g |
--version |
プログラムのバージョン情報を表示して終了します。 | responder-RunFinger --version |
実行例
特定のホスト (192.168.1.50) の情報を収集する場合:
sudo responder-RunFinger -i 192.168.1.50
サブネット (10.10.20.0/24) 全体のホストをスキャンする場合:
sudo responder-RunFinger -i 10.10.20.0/24
ターゲットリストファイル (iplist.txt) を使用し、タイムアウトを 2 秒に設定する場合:
sudo responder-RunFinger -f iplist.txt -t 2.0
サブネットをスキャンし、結果を grep しやすい形式で出力する場合:
sudo responder-RunFinger -i 10.10.20.0/24 -g
実行すると、指定されたターゲットに対してスキャンが開始され、応答があったホストの情報が表示されます。
出力結果の解釈
responder-RunFinger
を実行すると、スキャン対象の各ホストから収集できた情報が表示されます。以下は典型的な出力例とその意味です。
[*] Running RunFinger against 192.168.1.100
[+] SMB Signing not required on 192.168.1.100
Host: WIN10-CLIENT
Domain: WORKGROUP
OS: Windows 10 Pro 19044
LM Dialect: NT LM 0.12
[*] Running RunFinger against 192.168.1.200
[+] SMB Signing is required on 192.168.1.200
Host: DC01
Domain: CORP.LOCAL
OS: Windows Server 2019 Standard 17763
LM Dialect: NT LM 0.12
[*] RunFinger finished. Found 2 hosts.
各項目の意味
[*] Running RunFinger against [IP_ADDRESS]
: 指定された IP アドレスに対してスキャンを開始したことを示します。[+] SMB Signing not required on [IP_ADDRESS]
: このホストでは SMB 署名が必須ではないことを示します。これは SMB リレー攻撃の潜在的なターゲットであることを意味します。🎉[+] SMB Signing is required on [IP_ADDRESS]
: このホストでは SMB 署名が必須であることを示します。このホストに対する SMB リレー攻撃は通常成功しません。🛡️Host: [HOSTNAME]
: ターゲットホストの NetBIOS ホスト名。Domain: [DOMAIN_NAME or WORKGROUP]
: ターゲットホストが参加しているドメイン名またはワークグループ名。OS: [OS_VERSION]
: ターゲットホストのオペレーティングシステムのバージョン情報。詳細なビルド番号が含まれることもあります。LM Dialect: [DIALECT_INFO]
: SMB/LM プロトコルのネゴシエーションに関する情報。通常は “NT LM 0.12” が表示されます。[*] RunFinger finished. Found [N] hosts.
: スキャンが完了し、応答があったホストの数を示します。
Grepable フォーマット (-g オプション)
-g
オプションを使用すると、出力はより機械処理しやすい形式になります。
192.168.1.100:WIN10-CLIENT:WORKGROUP:Windows 10 Pro 19044:Signing_Not_Required
192.168.1.200:DC01:CORP.LOCAL:Windows Server 2019 Standard 17763:Signing_Required
この形式では、各情報がコロン (:
) で区切られています。SMB 署名の要否は Signing_Not_Required
または Signing_Required
として表示されます。この形式は、結果をファイルに保存し、grep
や awk
などのコマンドでフィルタリングしたり、他のスクリプトで利用したりするのに便利です。
例えば、SMB 署名が不要なホストだけを抽出するには次のようにします:
sudo responder-RunFinger -i 192.168.1.0/24 -g | grep Signing_Not_Required
これにより、SMB リレー攻撃の候補となるターゲットリストを簡単に作成できます。
さらに、ツールによっては MS17-010 (EternalBlue) の脆弱性チェックや Null Session のチェック結果なども出力に含まれる場合があります。(2019年頃の情報ではそのような機能追加が言及されていました)
ユースケースとシナリオ
responder-RunFinger
は、特に内部ネットワークのペネトレーションテストにおいて、以下のようなシナリオで非常に役立ちます。
1. SMB リレー攻撃のターゲット特定
これが最も主要なユースケースです。NTLM リレー攻撃(特に SMB リレー)は、攻撃者が被害者の認証情報を中継して、別のサーバーに被害者になりすましてアクセスする攻撃手法です。Responder スイートに含まれる MultiRelay
ツールは、この攻撃を自動化するのに使われます。
しかし、SMB リレー攻撃が成功するためには、ターゲットとなるサーバーが SMB 署名を要求しない設定になっている必要があります。SMB 署名は、通信の完全性と真正性を保証するための機能で、有効になっていると中間者攻撃であるリレー攻撃を防ぐことができます。Windows Server ではデフォルトで有効になっていることが多いですが、クライアント OS (Windows 10/11) や古いサーバー OS、あるいは設定変更により無効化されている場合があります。
responder-RunFinger
を使用してネットワーク内のホストをスキャンし、”SMB Signing not required” と表示されるホストを特定することで、MultiRelay
で攻撃を仕掛けるべき有効なターゲットを効率的に見つけ出すことができます。
シナリオ例 (2019年頃の記述に基づく):
- 攻撃者はネットワークに接続し、Responder を起動して LLMNR/NBT-NS ポイズニングを開始します。
- 並行して、
responder-RunFinger -i [サブネット] -g
を実行し、SMB 署名が不要なホストのリスト (targets.txt
) を作成します。 MultiRelay
を起動し、-t
オプションでステップ 2 で特定したターゲット IP アドレスを指定し、-u ALL
(または特定のユーザー/グループ) でリレー対象を指定します。./tools/MultiRelay.py -t [ターゲットIP] -u ALL
- Responder が被害者からの認証要求を捕らえ、それを
MultiRelay
に転送します。 MultiRelay
は受け取った認証情報をターゲットサーバーにリレーします。- リレーが成功し、かつリレーしたアカウントがターゲットサーバーの管理者権限を持っていれば、
MultiRelay
は対話的なシェルを提供し、ハッシュダンプやコマンド実行などが可能になります。
2. ネットワークインベントリの作成と情報収集
responder-RunFinger
は、SMB 署名の情報だけでなく、ホスト名、ドメイン/ワークグループ名、OS バージョンといった基本的なシステム情報も収集します。これにより、攻撃対象ネットワークの構成を把握するための初期情報収集(偵察)フェーズで役立ちます。
- どの OS が多く使われているか? (脆弱性のある古い OS はないか?)
- ドメイン構成はどうなっているか? (ドメインコントローラーはどれか?)
- ホスト名の命名規則は?
これらの情報は、さらなる攻撃計画を立てる上で重要な手がかりとなります。
3. セキュリティ設定の監査
防御的な観点からは、responder-RunFinger
を使って自組織のネットワークをスキャンし、SMB 署名が無効になっているホストがないかを確認するのに利用できます。もし意図せず SMB 署名が無効になっているホストが見つかった場合は、設定を見直し、有効化することで SMB リレー攻撃のリスクを低減できます。
重要な考慮事項とセキュリティへの影響
responder-RunFinger
および Responder スイート全体を使用する際には、以下の点に留意する必要があります。
⚠️ 倫理的な使用と法的遵守
Responder および関連ツールは、強力な攻撃ツールとなり得ます。これらのツールは、必ず所有者から明示的な許可を得たネットワークおよびシステムに対してのみ、正当なセキュリティ評価や教育目的で使用してください。許可なく他者のネットワークやシステムに対してこれらのツールを使用することは、多くの国や地域で違法行為とみなされ、重大な法的結果を招く可能性があります。 ethical hacking の原則を遵守してください。
💡 ネットワークへの影響
responder-RunFinger
は、ターゲットホストに対して能動的に接続を試みます。大規模なネットワークに対して高頻度でスキャンを実行すると、ネットワーク帯域やターゲットホストのリソースに負荷をかける可能性があります。また、侵入検知システム(IDS)や侵入防止システム(IPS)によっては、スキャン行為が検知され、アラートが発報されたり、通信がブロックされたりすることがあります。テストを行う際は、ネットワーク管理者と連携し、影響を最小限に抑えるよう計画的に実施することが重要です。
🔒 SMB 署名の重要性
responder-RunFinger
の主な目的が SMB 署名の確認であることからもわかるように、SMB 署名は NTLM リレー攻撃に対する重要な防御策です。組織のセキュリティポリシーとして、可能な限りすべての Windows ホスト(特にサーバー)で SMB 署名を必須に設定することが推奨されます。これはグループポリシー (GPO) などを通じて一元管理できます。
- サーバー側: `Microsoft network server: Digitally sign communications (always)`
- クライアント側: `Microsoft network client: Digitally sign communications (always)`
これらのポリシーを有効にすることで、responder-RunFinger
で “Signing_Required” となり、SMB リレー攻撃のリスクを大幅に低減できます。
🛡️ LLMNR/NBT-NS の無効化
Responder が利用する LLMNR および NBT-NS ポイズニング攻撃そのものを防ぐためには、これらのレガシーな名前解決プロトコルを無効化することが最も効果的です。現代の適切に構成された DNS 環境では、これらのプロトコルは通常不要です。これもグループポリシーなどで設定可能です。
まとめ
responder-RunFinger
は、Responder ツールスイートの一部として提供される、ネットワーク情報収集ツールです。特に、SMB リレー攻撃の前提条件となる SMB 署名の要否をターゲットホストに対して確認する上で重要な役割を果たします。
このツールを使うことで、ペネトレーションテスターは効率的に SMB リレー攻撃のターゲットを特定でき、ネットワーク構成に関する基本的な情報を収集できます。一方で、防御的な観点からは、自組織のネットワークにおける SMB 署名設定の監査にも利用できます。
responder-RunFinger
を含む Responder スイートは強力なツールですが、その使用には倫理的な配慮と法的遵守が不可欠です。常に許可された範囲内で、責任を持って使用するようにしてください。✅
SMB 署名の強制や LLMNR/NBT-NS の無効化といった対策を講じることで、Responder や関連ツールによる攻撃リスクを効果的に軽減できます。
参考情報
- Responder GitHub Repository: https://github.com/SpiderLabs/Responder (ツールのソースコードと基本的な説明)
- Using MultiRelay with Responder for Penetration Testing (Sikich Blog, 2019): https://www.sikich.com/insight/using-multirelay-with-responder-for-penetration-testing/ (RunFinger と MultiRelay を組み合わせた攻撃シナリオの解説)
- Pwning with Responder – A Pentester’s Guide (NotSoSecure Blog, 2017): https://www.netspi.com/blog/technical/network-penetration-testing/powning-with-responder-a-pentesters-guide/ (RunFinger を含む Responder の使い方ガイド)
- RFC 1288 – The Finger User Information Protocol: https://datatracker.ietf.org/doc/html/rfc1288 (古典的な Finger プロトコルの仕様)
コメント