performing-dns-enumeration-and-zone-transfer について
DNS 列挙とゾーン転送の検査を行う、許可を得たペネトレーションテスター向けのスキルです。サブドメインやホスト、設定上の問題を調べ、許可された範囲内でのテストを求めています。
主な機能
- 01一般的な DNS レコードの照会
- 02AXFR ゾーン転送の試行
- 03ワードリストによるサブドメイン列挙
- 04逆引き DNS の実行
- 05DNSSEC、SPF、DKIM、DMARC の確認
- 06検出したサブドメインの名前解決とマッピング
活用シーン
- 01組織の外部攻撃対象領域の把握
- 02露出したホスト名と IP アドレスの発見
- 03DNS ゾーン転送のアクセス制御の検査
- 04DNS とメール認証設定の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-dns-enumeration-and-zone-transferインストール後、Claude Code で/performing-dns-enumeration-and-zone-transferを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
DNS 列挙とゾーン転送の実施
使用する場面
- 許可された侵入テストで、対象組織の外部攻撃対象領域をマッピングする場合
- DNS レコードを通じて公開されている隠れたサブドメイン、内部ホスト名、IP アドレスを発見する場合
- DNS サーバーが不正なゾーン転送を許可し、ゾーンファイル全体が漏えいするかどうかをテストする場合
- さらなる標的型テストに向けて、メールサーバー、ネームサーバー、サービスレコードを特定する場合
- DNSSEC、SPF、DKIM、DMARC などの DNS セキュリティ設定を検証する場合
DNS 増幅攻撃やリフレクション攻撃に利用する場合、または過剰なクエリを送信して DNS サーバーに過負荷をかける場合は、使用しないでください。テストの許可を得ていないドメインに対しても使用しないでください。
前提条件
- 対象ドメインに対して DNS 列挙を実施する書面による許可
- DNS 列挙ツールのインストール:dig、nslookup、host、dnsrecon、dnsenum、subfinder、amass
- 対象の DNS サーバーへのネットワークアクセス(UDP/TCP ポート 53)
- サブドメインのブルートフォース用ワードリスト(SecLists dns-wordlist など)
- DNS レコードタイプ(A、AAAA、CNAME、MX、NS、TXT、SOA、SRV、PTR)に関する理解
ワークフロー
ステップ 1:DNS サーバーと基本レコードの特定
# Find authoritative name servers
dig NS example.com +short
# ns1.example.com.
# ns2.example.com.
# Get SOA record for zone metadata
dig SOA example.com +short
# ns1.example.com. admin.example.com. 2024031501 3600 900 604800 86400
# Enumerate all common record types
dig example.com ANY +noall +answer
# Get MX records (mail servers)
dig MX example.com +short
# 10 mail.example.com.
# 20 mail-backup.example.com.
# Get TXT records (SPF, DKIM, DMARC, verification)
dig TXT example.com +short
# Check for DMARC policy
dig TXT _dmarc.example.com +short
# Check for DKIM selectors
dig TXT default._domainkey.example.com +short
dig TXT selector1._domainkey.example.com +short
dig TXT google._domainkey.example.com +short
# Get SRV records for common services
dig SRV _sip._tcp.example.com +short
dig SRV _ldap._tcp.example.com +short
dig SRV _kerberos._tcp.example.com +short
ステップ 2:ゾーン転送の試行
# Attempt AXFR zone transfer against each name server
dig AXFR example.com @ns1.example.com
dig AXFR example.com @ns2.example.com
# Use host command for zone transfer
host -t axfr example.com ns1.example.com
# Use dnsrecon for automated zone transfer attempts
dnsrecon -d example.com -t axfr
# If zone transfer succeeds, save the output
dig AXFR example.com @ns1.example.com > zone_transfer_results.txt
# Test for IXFR (incremental zone transfer)
dig IXFR=2024031500 example.com @ns1.example.com
ステップ 3:ブルートフォースによるサブドメイン列挙
# Use dnsenum for comprehensive enumeration
dnsenum --dnsserver ns1.example.com --enum -f /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -r example.com -o dnsenum_output.xml
# Use dnsrecon with brute force
dnsrecon -d example.com -t brt -D /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
# Use gobuster for fast DNS brute forcing
gobuster dns -d example.com -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -t 50 -o gobuster_dns.txt
# Use subfinder for passive subdomain discovery
subfinder -d example.com -all -o subfinder_results.txt
# Use amass for comprehensive enumeration (passive + active)
amass enum -d example.com -passive -o amass_passive.txt
amass enum -d example.com -active -brute -o amass_active.txt
# Combine and deduplicate results
cat subfinder_results.txt amass_passive.txt amass_active.txt gobuster_dns.txt | sort -u > all_subdomains.txt
ステップ 4:逆引き DNS と PTR の列挙
# Reverse DNS lookup on discovered IP ranges
dnsrecon -d example.com -t rvl -r 10.10.0.0/24
# PTR record enumeration for IP range
for ip in $(seq 1 254); do
result=$(dig -x 10.10.1.$ip +short 2>/dev/null)
if [ -n "$result" ]; then
echo "10.10.1.$ip -> $result"
fi
done
# Use Nmap for reverse DNS on a subnet
nmap -sL 10.10.0.0/24 | grep "(" | awk '{print $5, $6}'
# Check for DNS cache snooping (information about queried domains)
dig @ns1.example.com www.competitor.com +norecurse
ステップ 5:DNS セキュリティ設定の分析
# Check DNSSEC validation
dig example.com +dnssec +short
dig DNSKEY example.com +short
dig DS example.com +short
# Test for DNS rebinding vulnerability
# Check if the DNS server has a short TTL that could enable rebinding
dig example.com +noall +answer | grep -i ttl
# Check for open recursive resolver (misconfiguration)
dig @ns1.example.com google.com +recurse
# If it resolves, the server is an open resolver
# Check for wildcard DNS records
dig nonexistent-subdomain-xyz123.example.com +short
# If it resolves, a wildcard record exists
# Test DNS over HTTPS/TLS support
# DoH test
curl -s -H 'accept: application/dns-json' 'https://dns.google/resolve?name=example.com&type=A'
# Verify SPF record for email security
dig TXT example.com +short | grep "v=spf1"
# Check for overly permissive SPF (+all, ?all)
ステップ 6:発見したすべてのサブドメインの名前解決とマッピング
# Resolve all discovered subdomains to IP addresses
while read subdomain; do
ip=$(dig +short A "$subdomain" | head -1)
if [ -n "$ip" ]; then
echo "$subdomain,$ip"
fi
done < all_subdomains.txt > resolved_subdomains.csv
# Identify unique IP addresses and their locations
cut -d',' -f2 resolved_subdomains.csv | sort -u > unique_ips.txt
# Check for internal IP addresses leaked via DNS
grep -E "^10\.|^172\.(1[6-9]|2[0-9]|3[01])\.|^192\.168\." resolved_subdomains.csv > internal_ip_leaks.txt
# Use httpx to probe web services on discovered subdomains
cat all_subdomains.txt | httpx -title -status-code -tech-detect -o httpx_results.txt
# Screenshot web services for documentation
cat all_subdomains.txt | httpx -screenshot -o screenshots/
主な概念
| 用語 | 定義 |
|---|---|
| ゾーン転送(AXFR) | プライマリサーバーからセカンダリサーバーへゾーンファイル全体を複製する DNS の仕組みです。不正な転送が許可されると、ゾーン内のすべてのレコードが漏えいします |
| サブドメイン列挙 | ブルートフォース、証明書の透明性ログ、検索エンジン、パッシブ DNS データベースを通じて、有効なサブドメインを発見するプロセスです |
| DNSSEC | DNS 応答に暗号署名を追加する DNS Security Extensions で、キャッシュポイズニングやなりすまし攻撃を防ぎます |
| SPF/DKIM/DMARC | DNS TXT レコードで定義されるメール認証プロトコルで、メールのなりすましやドメインの偽装を防ぎます |
| ワイルドカード DNS | アスタリスク(*)を使う DNS レコードで、存在しないサブドメインへのすべてのクエリに一致します。列挙結果を不明瞭にする可能性があります |
| PTR レコード | IP アドレスをホスト名に対応付ける逆引き DNS レコードです。内部の命名規則やサーバーの役割が明らかになることがあります |
ツールとシステム
- dig:すべてのレコードタイプ、DNSSEC 検証、ゾーン転送クエリを完全にサポートする標準 DNS ルックアップユーティリティ
- dnsrecon:ゾーン転送、ブルートフォース、逆引き、キャッシュスヌーピング、Google ドーククエリに対応する包括的な DNS 列挙ツール
- subfinder:証明書の透明性ログ、検索エンジン、DNS データベースを照会する高速なパッシブサブドメイン検出ツール
- Amass(OWASP):パッシブおよびアクティブな DNS 列挙、グラフ分析、データソース連携に対応する高度な攻撃対象領域マッピングツール
- gobuster:設定可能なワードリストと並行スレッドを使う、高速な DNS サブドメイン列挙用ブルートフォースツール
一般的なシナリオ
シナリオ:Web アプリケーションのペネトレーションテストにおける外部偵察
背景:セキュリティコンサルタントが、Web アプリケーションのペネトレーションテストに向けて外部偵察を実施しています。クライアントの主要ドメインは example.com で、対象範囲にはすべてのサブドメインと関連インフラストラクチャが含まれます。コンサルタントは、DNS レコードの列挙と、発見した Web サービスの調査について許可を得ています。
アプローチ:
- example.com の NS、MX、TXT、SOA レコードを照会して、DNS インフラストラクチャをマッピングします
- 両方のネームサーバーに対してゾーン転送を試みます。ns2 が成功し、内部のステージング環境を含む 347 件の DNS レコードが明らかになります
- subfinder と amass をパッシブモードで実行し、証明書の透明性ログから 89 件の追加サブドメインを発見します
- gobuster を使って 20,000 語のリストでサブドメインをブルートフォースし、パッシブソースでは見つからなかった 12 件のサブドメインをさらに発見します
- すべてのサブドメインを名前解決し、そのうち 15 件が内部 RFC1918 アドレスに解決されることを特定します(情報漏えい)
- Web からアクセス可能なすべてのサブドメインを httpx で調査し、デフォルトの認証情報でアクセスできるステージング環境(staging.example.com)を発見します
- ゾーン転送の脆弱性、内部 IP の漏えい、公開状態のステージング環境をクライアントに報告します
注意点:
- 1 秒あたり数千件の DNS クエリを送信して、レート制限や DNS ベースの DDoS 防御を発動させてしまう
- ワイルドカード DNS レコードを確認せず、サブドメインの誤検出を招く
- 別の DNS プロバイダーや CDN 固有の CNAME レコードを使用するサブドメインを見落とす
- API キー、検証トークン、内部コメントを含む TXT レコードを見落とす
出力形式
## DNS Enumeration Report
**Target Domain**: example.com
**Authorized Nameservers**: ns1.example.com (203.0.113.10), ns2.example.com (203.0.113.11)
### Zone Transfer Status
| Nameserver | AXFR Result | Records Obtained |
|------------|-------------|------------------|
| ns1.example.com | REFUSED | 0 |
| ns2.example.com | SUCCESS | 347 records |
### Subdomain Discovery Summary
| Method | Subdomains Found |
|--------|-----------------|
| Zone Transfer | 347 |
| Passive (subfinder + amass) | 89 |
| Active Brute Force | 12 |
| **Total Unique** | **412** |
### Critical Findings
1. **Zone Transfer Allowed** (High): ns2.example.com allows AXFR from any source
2. **Internal IP Disclosure** (Medium): 15 subdomains resolve to RFC1918 addresses
3. **Exposed Staging Environment** (High): staging.example.com accessible with default credentials
4. **Missing DMARC Policy** (Medium): No DMARC record found, enabling email spoofing
5. **Weak SPF Record** (Low): SPF uses ~all (soft fail) instead of -all (hard fail)
コメント
Markdown 対応