強力なサブドメイン発見ツールの徹底解説
1. Sublist3rとは? 🤔
Sublist3r(サブリスリー/サブリスッターと読むことも)は、Webサイトのサブドメインを効率的に発見するために設計された、Pythonベースの強力なオープンソースツールです。セキュリティ専門家やペネトレーションテスター、バグバウンティハンターなどが、攻撃対象領域(アタックサーフェス)の把握や情報収集(リコnaissance)フェーズで広く利用しています。
なぜサブドメインの列挙が重要なのでしょうか? 🤔 企業や組織が管理するWebサイトは、メインのドメイン(例: `example.com`)だけでなく、多数のサブドメイン(例: `blog.example.com`, `shop.example.com`, `internal.example.com`)を持っていることが一般的です。これらのサブドメインは、時にメインサイトとは異なる目的で運用され、異なるアプリケーションやサービスが動作しています。中には、開発中のサイト、古いバージョンのサイト、内部向けのツールなどが意図せず公開されている場合もあり、セキュリティ上の弱点(脆弱性)を抱えている可能性があります。したがって、これらの隠れたサブドメインを発見することは、潜在的な侵入口を見つけ出し、セキュリティリスクを評価する上で非常に重要なステップとなります。
Sublist3rはこれらの機能を組み合わせることで、網羅的かつ効率的なサブドメインの列挙を実現します。
2. インストール方法 💻
Sublist3rを利用するには、まずお使いの環境にインストールする必要があります。Python 3がインストールされていることが前提となります。
前提条件
- Python 3: Sublist3rはPython 3で動作します。まだインストールされていない場合は、Python公式サイトからダウンロードしてインストールしてください。
- Git: Sublist3rのソースコードを取得するためにGitが必要です。
- pip: Pythonのパッケージインストーラーです。Python 3のインストールに含まれていることが多いです。
インストール手順
ターミナル(コマンドプロンプト)を開き、以下の手順を実行します。
-
リポジトリのクローン:
まず、Sublist3rの公式GitHubリポジトリからソースコードをクローン(ダウンロード)します。任意のディレクトリで以下のコマンドを実行してください。git clone https://github.com/aboul3la/Sublist3r.git
-
ディレクトリの移動:
クローンしたSublist3rのディレクトリに移動します。cd Sublist3r
-
依存関係のインストール:
Sublist3rが動作するために必要なPythonライブラリ(`requests`, `dnspython`, `argparse`など)をインストールします。`requirements.txt`ファイルに必要なライブラリがリストされているので、`pip`を使って一括でインストールできます。# Python 3の場合 pip3 install -r requirements.txt # もしくは単に pip を使う環境の場合 # pip install -r requirements.txt
注意: 環境によっては `pip` の代わりに `pip3` を使用する必要がある場合があります。
これでインストールは完了です! 🎉 `Sublist3r` ディレクトリ内で `python3 sublist3r.py -h` を実行してヘルプメッセージが表示されれば、正常にインストールされています。
3. 基本的な使い方 🚀
Sublist3rの基本的な使い方は非常にシンプルです。ターミナルから `sublist3r.py` スクリプトを実行し、`-d` オプションで調査したいドメイン名を指定します。
基本コマンド
python3 sublist3r.py -d <ターゲットドメイン>
例えば、`example.com` のサブドメインを検索したい場合は、以下のように実行します。
python3 sublist3r.py -d example.com
実行結果の例
コマンドを実行すると、Sublist3rは設定された検索エンジンやサービスに対してクエリを送信し始めます。進捗状況がリアルタイムで表示され(デフォルト)、最終的に発見されたサブドメインのリストが出力されます。
____ _ _ _ _ _____
/ ___| _ _| |__ | (_)___| |_|___ / _ __
\___ \| | | | '_ \| | / __| __| |_ \| '__|
___) | |_| | |_) | | \__ \ |_ ___) | |
|____/ \__,_|_.__/|_|_|___/\__|____/|_|
# Coded By Ahmed Aboul-Ela - @aboul3la
[-] Enumerating subdomains for example.com
[-] Searching now in Baidu..
[-] Searching now in Yahoo..
[-] Searching now in Google..
[-] Searching now in Bing..
[-] Searching now in Ask..
[-] Searching now in Netcraft..
[-] Searching now in DNSdumpster..
[-] Searching now in Virustotal..
[-] Searching now in ThreatCrowd..
[-] Searching now in SSL Certificates..
[-] Searching now in PassiveDNS..
[-] Total Unique Subdomains Found: 5
[-] www.example.com
[-] mail.example.com
[-] ftp.example.com
[-] blog.example.com
[-] shop.example.com
上記の例では、`example.com` に対して合計5つのユニークなサブドメイン (`www`, `mail`, `ftp`, `blog`, `shop`) が発見されたことを示しています。Sublist3rは、複数のソースから得られた結果を統合し、重複を除去して最終的なリストを表示します。
4. 主要なオプションと機能 ⚙️
Sublist3rは、検索プロセスをカスタマイズするための多くのオプションを提供しています。ここでは、特に重要でよく使われるオプションを解説します。
オプション | 説明 | 例 |
---|---|---|
-d , --domain |
必須。調査対象のドメイン名を指定します。 | -d example.com |
-b , --bruteforce |
サブドメインのブルートフォース(辞書攻撃)を有効にします。subbruteモジュールを使用します。 | -b |
-p , --ports |
発見したサブドメインに対してスキャンするTCPポートを指定します。カンマ区切りで複数指定可能です。 | -p 80,443,8080 |
-v , --verbose |
リアルタイムで結果(発見されたサブドメイン)を列挙中に表示します。デフォルトで有効な場合が多いですが、明示的に指定することもできます。 | -v |
-t , --threads |
ブルートフォースやポートスキャンで使用するスレッド数を指定します。数を増やすと処理が速くなる可能性がありますが、リソース消費やターゲットへの負荷が増加します。 | -t 10 |
-e , --engines |
検索に使用するエンジンを指定します。カンマ区切りで複数指定可能です。指定しない場合は、利用可能な全てのエンジンが使用されます。 | -e google,bing,virustotal |
-o , --output |
結果を指定したファイルに保存します。 | -o subdomains.txt |
-h , --help |
ヘルプメッセージを表示し、利用可能な全てのオプションを確認できます。 | -h |
オプションの組み合わせ例
これらのオプションを組み合わせることで、より目的に合ったスキャンを実行できます。
例1: 特定のドメインに対し、ブルートフォースとポートスキャン(80, 443番)を行い、結果をファイルに保存する
python3 sublist3r.py -d example.com -b -p 80,443 -o example_subdomains.txt
例2: GoogleとVirusTotalのみを使用し、詳細表示を有効にしてサブドメインを検索する
python3 sublist3r.py -d example.com -e google,virustotal -v
例3: ブルートフォースのスレッド数を20に設定して実行する
python3 sublist3r.py -d example.com -b -t 20
⚠️ 注意: スレッド数を過度に上げると、自身のネットワークやPCに負荷がかかるだけでなく、ターゲットのサーバーや利用する検索エンジン/サービスから一時的にブロックされる可能性があります。適切な値を設定しましょう。
5. 対応する検索エンジンとサービス 🌐
Sublist3rの強みの一つは、多様な情報ソースを活用してサブドメインを収集する点にあります。デフォルトでは、以下のソースが利用されます(利用可能性はSublist3rのバージョンや各サービスのAPI仕様変更によって変わる可能性があります)。
- 検索エンジン:
- Bing
- Yahoo
- Baidu
- Ask
- サードパーティサービス:
- Netcraft
- DNSdumpster
- VirusTotal
- ThreatCrowd
- SSL Certificates (crt.sh など)
- PassiveDNS (公開されているパッシブDNSデータベース)
これらのソースはそれぞれ異なる方法でサブドメイン情報を収集・保持しています。例えば、検索エンジンはインデックスされたWebページからサブドメインを抽出し、VirusTotalはマルウェア分析の過程で収集したドメイン情報、crt.shは発行されたSSL/TLS証明書のコモンネームやSAN(Subject Alternative Name)からサブドメインをリストアップします。
-e
オプションを使用することで、特定のエンジンのみを利用するように指定できます。これは、特定のソースからの情報のみが必要な場合や、一部のエンジンがブロックされている場合などに役立ちます。
# GoogleとDNSdumpsterのみを使用する例
python3 sublist3r.py -d example.com -e google,dnsdumpster
利用可能なエンジンの正確なリストは、バージョンによって異なる場合があるため、最新の情報は `python3 sublist3r.py -h` を実行してヘルプを確認するか、GitHubリポジトリのドキュメントを参照するのが確実です。
6. ブルートフォース機能の活用 💪
検索エンジンや公開サービスから見つけられるサブドメインは、あくまで「公開されている」または「インデックスされている」ものに限られます。しかし、実際にはもっと多くのサブドメインが存在する可能性があります。ここで役立つのがブルートフォース(辞書攻撃)機能です。
Sublist3rは、subbrute という別のツールと連携し、一般的なサブドメイン名のリスト(ワードリスト)を使って総当たり的にサブドメインの存在を確認します。例えば、`dev`, `staging`, `test`, `admin`, `internal` といった名前が `example.com` の前に付く `dev.example.com`, `staging.example.com` などが存在するかどうかをDNS問い合わせによってチェックします。
ブルートフォースの有効化
ブルートフォース機能を有効にするには、-b
または --bruteforce
オプションを追加します。
python3 sublist3r.py -d example.com -b
このコマンドを実行すると、通常の検索エンジンによる探索が終わった後に、ブルートフォース処理が開始されます。
ワードリスト
Sublist3r (subbrute) は、デフォルトで組み込みのワードリスト(通常は `subbrute/names.txt` などに含まれる数千〜数万語)を使用します。より大規模なリストや、特定の業界・用途に特化したカスタムワードリストを使用したい場合、subbrute側の設定やSublist3rのコードを改変する必要があるかもしれません(標準のオプションではカスタムワードリスト指定が用意されていない可能性があります)。
パフォーマンスの調整
ブルートフォースは多数のDNSクエリを送信するため、時間がかかることがあります。-t
オプションでスレッド数を増やすことで、処理速度を向上させることができますが、前述の通り、リソース消費とブロックのリスクに注意が必要です。
# ブルートフォースを有効にし、スレッド数を30に設定
python3 sublist3r.py -d example.com -b -t 30
7. ポートスキャン機能 🔍
発見したサブドメインが実際にどのようなサービスを提供しているかを知る第一歩として、特定のTCPポートが開いているかを確認することができます。Sublist3rは、このための簡単なポートスキャン機能を提供しています。
ポートスキャンの有効化とポート指定
ポートスキャンを実行するには、-p
または --ports
オプションを使用し、スキャンしたいポート番号をカンマ区切りで指定します。
# 発見したサブドメインの80番(HTTP)と443番(HTTPS)ポートをスキャン
python3 sublist3r.py -d example.com -p 80,443
# Webサーバーでよく使われるポートをいくつかスキャン
python3 sublist3r.py -d example.com -p 80,443,8000,8080,8443
コマンドを実行すると、サブドメイン列挙の後、発見された各サブドメインに対して指定されたポートへの接続試行が行われます。開いているポートが見つかったサブドメインとポート番号が出力に追加されることがあります(表示形式はバージョンによる可能性があります)。
パフォーマンスの調整
ポートスキャンもサブドメインの数や指定するポートの数によっては時間がかかります。-t
オプションでスレッド数を指定することで、スキャンの並列度を上げ、処理時間を短縮できます。
# ポート80, 443をスキャンし、スレッド数を25に設定
python3 sublist3r.py -d example.com -p 80,443 -t 25
8. 結果の保存と管理 💾
Sublist3rで発見したサブドメインのリストは、後の分析や他のツールでの利用のためにファイルに保存しておくと便利です。
ファイルへの出力
結果をファイルに保存するには、-o
または --output
オプションに続けてファイル名を指定します。
# 結果を "example_subs.txt" という名前のファイルに保存
python3 sublist3r.py -d example.com -o example_subs.txt
# ブルートフォースとポートスキャン(80,443)の結果をファイルに保存
python3 sublist3r.py -d example.com -b -p 80,443 -o results/example_detailed.txt
上記のコマンドを実行すると、ターミナルへの出力に加えて、指定したファイル(例: `example_subs.txt`)が作成され、発見されたサブドメインが一行ずつ書き込まれます。ディレクトリを指定することも可能です(例: `results/example_detailed.txt`)。ただし、指定したディレクトリが存在しない場合はエラーになる可能性があるため、事前に作成しておくのが安全です。
出力形式
通常、出力ファイルには発見されたユニークなサブドメイン名がリスト形式で保存されます。
`example_subs.txt` の内容例:
www.example.com
mail.example.com
ftp.example.com
blog.example.com
shop.example.com
dev.example.com
internal.example.com
このシンプルなテキスト形式は、他のツール(Nmap, Httpx, Nucleiなど)への入力としてそのまま利用しやすいという利点があります。
9. 実用的なユースケースと例 🎯
Sublist3rはその機能の多様性から、様々なシナリオで活用できます。
-
ペネトレーションテストの偵察 (Reconnaissance):
テスト対象の組織が持つWeb資産の全体像を把握する初期段階で使用します。忘れられている開発環境や管理画面など、脆弱性が潜んでいる可能性のあるサブドメインを発見することが目的です。
# 包括的な調査(ブルートフォース有効、主要ポートスキャン、結果保存) python3 sublist3r.py -d target-corp.com -b -p 80,443,8080 -t 20 -o target-corp_subs.txt
-
バグバウンティハンティング:
報奨金プログラムの対象となっているドメインに対して、まだ知られていないサブドメインやアプリケーションを発見し、脆弱性を見つけるために利用します。特に、買収された企業の古いドメインなどが狙い目となることもあります。
# 特定のバグバウンティプログラムのドメインを調査 (エンジン指定) python3 sublist3r.py -d bounty-program.com -e google,virustotal,dnsdumpster -v
-
自組織のセキュリティ評価 (Attack Surface Management):
自社や自組織が管理するドメインに対して定期的にSublist3rを実行し、意図せず公開されているサブドメインや、管理下にないはずのサブドメイン(サブドメインテイクオーバーの可能性など)がないかをチェックします。
# 自社ドメインの定期チェック (ブルートフォース込み) python3 sublist3r.py -d mycompany.com -b -o mycompany_subs_$(date +%Y%m%d).txt
-
他のツールとの連携:
Sublist3rで得られたサブドメインリストを、他のセキュリティツールへの入力として活用します。
- HTTP/HTTPSサーバーの特定: Httpx や httprobe を使い、リスト中のどのサブドメインがWebサーバーを稼働させているかを確認する。
- 詳細なポートスキャン: Nmap を使い、特定のサブドメインに対して詳細なポートスキャンやサービス検出を行う。
- Web脆弱性スキャン: Nuclei や Burp Suite, OWASP ZAP などで、発見したWebアプリケーションの脆弱性をスキャンする。
# Sublist3rでリストを作成し、HttpxでHTTP/HTTPSサーバーを特定する例 python3 sublist3r.py -d example.com -o subs.txt cat subs.txt | httpx -o live_webservers.txt
10. ヒントとトラブルシューティング 💡🔧
-
APIキーの設定:
一部のサービス(特にVirusTotalなど)は、APIキーを設定することで、より多くのリクエストを送信できたり、より詳細な情報を取得できたりする場合があります。Sublist3rがAPIキーの設定に対応しているか、またその設定方法は、公式ドキュメントやコードを確認してください(設定ファイルや環境変数経由での設定が一般的です)。
-
検索エンジンのブロック・レートリミット:
短時間に大量のリクエストを送ると、Googleなどの検索エンジンから一時的にIPアドレスがブロックされたり、CAPTCHA認証を求められたりすることがあります。これを避けるには、スレッド数を適切に設定する、
-e
オプションで利用するエンジンを絞る、時間を置いて実行する、プロキシサーバーを経由する(Sublist3rが対応していれば)などの対策が考えられます。 -
依存関係のエラー:
インストール時や実行時に `ModuleNotFoundError` などのエラーが出る場合は、必要なライブラリが正しくインストールされていない可能性があります。`pip install -r requirements.txt` を再度実行したり、エラーメッセージに表示されている特定のモジュールを `pip install
` で個別にインストールしたりしてみてください。 -
Pythonのバージョン:
Sublist3rはPython 3を要求します。システムにPython 2と3の両方がインストールされている場合、`python` コマンドではなく `python3` コマンドを明示的に使用する必要があるか確認してください。
-
ツールのアップデート:
オープンソースツールは頻繁に更新されます。新しい機能の追加やバグ修正、検索エンジン仕様変更への対応などが行われるため、定期的に最新版にアップデートすることをお勧めします。Gitでクローンした場合、Sublist3rのディレクトリ内で以下のコマンドを実行します。
git pull origin master # 必要に応じて依存関係も更新 pip install -r requirements.txt
-
倫理的な利用:
重要: Sublist3rを含む偵察ツールは、必ず許可されたドメインに対してのみ使用してください。許可なく第三者のシステムを調査することは、法律や利用規約に違反する可能性があります。常に倫理的な観点を持ち、責任ある使用を心がけてください。
11. まとめ 🏁
Sublist3rは、多様な情報ソースとブルートフォース機能を組み合わせることで、サブドメイン列挙プロセスを大幅に効率化する非常に強力なツールです。ペネトレーションテストの初期段階、バグバウンティ、自組織のセキュリティ評価など、幅広い場面でその価値を発揮します。
基本的な使い方から、各種オプションの活用、他のツールとの連携まで理解することで、より効果的にSublist3rを使いこなすことができるでしょう。ただし、その強力さゆえに、必ず許可された範囲内で、倫理的に使用することが重要です。
ぜひSublist3rを実際に試してみて、サブドメイン探索の世界を探求してみてください! Happy Hacking! (ethically, of course!) 😉
コメント