Fierce: DNS偵察ツールの詳細解説 🕵️‍♀️

セキュリティツール

Fierceは、ペネトレーションテストやセキュリティ評価の初期段階である情報収集フェーズで非常に役立つDNS偵察ツールです。もともとはRSnake氏によってPerlで書かれましたが、現在はPython 3に移植され、よりモダンなコードベースになっています。主に、ターゲットとなるドメインに関連する非連続的なIPアドレス空間やホスト名を発見することを目的としています。これにより、Nmap、Nessus、Niktoといった他のスキャンツールを使用する前に、攻撃対象となりうるIP範囲を特定するのに役立ちます。

Fierceは脆弱性を悪用するツールではなく、インターネット全体を無差別にスキャンするものでもありません。特定のターゲット(企業ネットワーク内外)に関連する可能性のあるホストを発見するために特化しています。DNSを主に使用するため、設定ミスにより内部ネットワークのアドレス空間が漏洩しているケースを発見することがあります。これは特に標的型攻撃において重要な情報となり得ます。

Fierceの目的と重要性 ✨

サイバーセキュリティやペネトレーションテストにおいて、情報収集は成功の鍵を握る非常に重要なステップです。Fierceはこの情報収集段階で、特にDNSに関連する情報を深く掘り下げるために設計されています。

Fierceの主な目的は以下の通りです:

  • NSレコードの特定: ターゲットドメインの権威DNSサーバーを特定します。
  • ゾーン転送の試行: 設定ミスによりゾーン転送が許可されている場合、ドメイン内の全DNSレコードを取得しようと試みます。これは非常に多くの情報を一度に得られる可能性がありますが、現代の多くのDNSサーバーではセキュリティ対策として無効化されています。
  • サブドメインのブルートフォース: 一般的なサブドメイン名(www, mail, ftp, adminなど)やカスタム辞書リストを使用して、存在するサブドメインを発見します。
  • 非連続IP空間の発見: 発見されたホスト名のIPアドレス周辺を調査し、ターゲット組織が使用している可能性のある他のIPアドレス範囲(サブネット)を特定します。これは、明示的に公開されていないネットワークセグメントを見つけるのに役立ちます。
  • ワイルドカードDNSの検出: 存在しないサブドメインへの問い合わせに対して、特定のIPアドレスを返すワイルドカードDNS設定がされているかを確認します。これが有効だと、ブルートフォースによるサブドメイン発見が困難になります。

これらの情報を通じて、攻撃者はターゲットのネットワーク構成、サーバーの役割(Webサーバー、メールサーバーなど)、利用している可能性のある外部サービス、そして潜在的な侵入経路についての理解を深めることができます。Fierceは、これらの情報を効率的に収集するための強力な自動化ツールとして機能します。🔍

インストール方法 💻

Fierceは多くのセキュリティ専門ディストリビューションに含まれています。特にKali Linuxでは標準で利用可能です。

Kali Linux / Debian / Ubuntu系の場合:

aptパッケージマネージャーを使用して簡単にインストールできます。

sudo apt update
sudo apt install fierce

ソースコードからインストールする場合 (GitHub):

最新版を利用したい場合や、他のLinuxディストリビューション、macOS、Windows (WSL) などで使用する場合は、GitHubリポジトリからクローンしてインストールすることも可能です。Python 3とpipがインストールされている必要があります。

git clone https://github.com/mschwager/fierce.git
cd fierce
pip3 install -r requirements.txt

この場合、実行は python3 fierce.py [オプション] のように行います。

Homebrew (macOS) の場合:

brew install fierce

インストール後、fierce -h または fierce --help を実行して、ヘルプメッセージが表示されればインストールは成功です。🎉

基本的な使い方 🚀

Fierceの最も基本的な使い方は、--domain オプションを使用してターゲットドメインを指定することです。

fierce --domain example.com

上記のコマンドを実行すると、Fierceは以下のステップを自動的に実行します:

  1. 指定されたドメイン (example.com) のNSレコードを問い合わせ、DNSサーバーを特定します。
  2. 特定したDNSサーバーに対してゾーン転送 (AXFR) を試みます。成功すれば、ドメイン内のレコードを一括取得できます。(多くの場合、失敗します)
  3. ゾーン転送が失敗した場合、DNSブルートフォースに移ります。
  4. まず、ワイルドカードDNSが設定されていないか確認します。
  5. 設定されていなければ、内蔵のサブドメイン辞書(通常、数千語)を使用して、subdomain.example.com の形式でDNS問い合わせを順次行い、存在するサブドメインとそのIPアドレスをリストアップします。

以下は、架空のドメイン example.com に対する実行例の出力イメージです。

# fierce --domain example.com
DNS Servers for example.com:
    b.iana-servers.net
    a.iana-servers.net

Trying zone transfer first...
    Testing b.iana-servers.net
        Request timed out or transfer not allowed.
    Testing a.iana-servers.net
        Request timed out or transfer not allowed.

Unsuccessful in zone transfer (it was worth a shot)
Okay, trying the good old fashioned way... brute force

Checking for wildcard DNS...
    Nope. Good.

Now performing 2280 test(s)...
    Found mail.example.com at 192.0.2.10
    Found www.example.com at 192.0.2.20
    Found ftp.example.com at 192.0.2.30
    ... (さらに多くの発見されたサブドメイン) ...

Scan completed: Found 15 hosts.

この基本的な使い方だけでも、ターゲットドメインに関する多くの公開情報を得ることができます。🧐

主要なオプション解説 🛠️

Fierceには、スキャンをカスタマイズするための様々なオプションが用意されています。以下に主要なオプションとその説明をまとめます。

オプション省略形説明使用例
--domain DOMAIN(なし)スキャン対象のドメインを指定します。必須オプションです。fierce --domain example.com
--connect(なし)発見された非RFC1918(プライベートでない)IPアドレスに対してHTTP/HTTPS接続を試み、ヘッダー情報を取得します。時間がかかる可能性があります。⚠️fierce --domain example.com --connect
--wide(なし)発見されたホストのIPアドレスが含まれるクラスCサブネット全体 (/24) をスキャンし、関連する可能性のある他のホストを探します。広範囲のスキャンになります。fierce --domain example.com --wide
--traverse TRAVERSE(なし)発見されたIPアドレスの周辺(指定した数だけ前後)のIPアドレスをスキャンします。隣接するクラスCには入りません。例えば --traverse 5 は発見されたIPの前後5つずつをスキャンします。fierce --domain example.com --traverse 10
--search SEARCH [SEARCH ...](なし)--wide--traverse でスキャンする際に、逆引きで見つかったホスト名が指定したドメイン(複数指定可)に含まれるもののみをフィルタリングします。fierce --domain example.com --wide --search example.com internal.example.com
--range RANGE(なし)内部ネットワークなど、特定のIP範囲(CIDR形式)を逆引きスキャンします。fierce --range 192.168.1.0/24
--delay DELAY(なし)各DNSクエリ間の待機時間(秒)を指定します。デフォルトは通常短いです。サーバーへの負荷を軽減したい場合や、レート制限を回避したい場合に設定します。fierce --domain example.com --delay 2
--subdomains SUBDOMAINS [SUBDOMAINS ...](なし)ブルートフォースに使用するサブドメイン名を直接指定します(スペース区切り)。--subdomain-file とは排他的です。fierce --domain example.com --subdomains www mail ftp api
--subdomain-file SUBDOMAIN_FILE(なし)ブルートフォースに使用するサブドメインリストが含まれたファイルを指定します(1行に1サブドメイン)。デフォルトの辞書の代わりに使用されます。カスタムリストを使いたい場合に便利です。📝fierce --domain example.com --subdomain-file custom_subs.txt
--dns-servers DNS_SERVERS [DNS_SERVERS ...](なし)クエリに使用するDNSサーバーを直接指定します(スペース区切り)。デフォルトではターゲットドメインのNSサーバーを使用します。--dns-file とは排他的です。fierce --domain example.com --dns-servers 8.8.8.8 1.1.1.1
--dns-file DNS_FILE(なし)クエリに使用するDNSサーバーリストが含まれたファイルを指定します(1行に1サーバー)。fierce --domain example.com --dns-file my_dns_servers.txt
--tcp(なし)DNSクエリをUDPではなくTCPで行います。ファイアウォール設定などによりUDPがブロックされている場合に有効なことがあります。fierce --domain example.com --tcp
--threads THREADS(Perl版のみ)ブルートフォース時の並列実行スレッド数を指定します。速度は向上しますが、ターゲットサーバーへの負荷が増加します。Python版では非同期処理が使われるため、このオプションは存在しないか、挙動が異なる場合があります。perl fierce.pl -dns example.com -threads 20
--file FILE(Perl版のみ)スキャン結果を指定したファイルに出力します。Python版ではリダイレクト (> output.txt) を使用します。perl fierce.pl -dns example.com -file output.txt
--help-hヘルプメッセージを表示して終了します。fierce -h

これらのオプションを組み合わせることで、より詳細かつ目的に合わせたDNS偵察が可能になります。💡

Fierceの基本的な使い方に加え、オプションを組み合わせることで、より高度な情報収集が可能です。いくつかのシナリオを見てみましょう。

企業の内部DNSサーバーや特定の公開DNSサーバー(Google Public DNS: 8.8.8.8, Cloudflare: 1.1.1.1 など)を使い、かつ、業界特有の用語やプロジェクト名を含むカスタムサブドメインリスト (my_wordlist.txt) でブルートフォースを行いたい場合。

fierce --domain targetcorp.com --dns-servers 8.8.8.8 1.1.1.1 --subdomain-file my_wordlist.txt

これにより、デフォルトのDNS解決パスや標準辞書では見逃される可能性のあるサブドメインを発見できるかもしれません。🕵️‍♂️

サブドメインのブルートフォースで見つかったホスト (例: dev.targetcorp.com198.51.100.50) の近くに、他の関連サーバーが存在しないか調査したい場合。--traverse オプションを使います。ここでは前後20個のIPをチェックします。

fierce --domain targetcorp.com --traverse 20

これにより、198.51.100.30 から 198.51.100.70 までの範囲で逆引きDNSルックアップが試行され、qa.targetcorp.comstaging.targetcorp.com など、ブルートフォースでは見つからなかったホストが発見される可能性があります。🌐

ペネトレーションテストで内部ネットワークにアクセスできた場合、特定のIP範囲 (例: 10.1.5.0/24) に存在するホスト名を洗い出したい場合があります。--range オプションと、内部DNSサーバーを指定する --dns-servers (例: 10.1.1.1) を組み合わせます。

fierce --range 10.1.5.0/24 --dns-servers 10.1.1.1

これにより、srv-fileshare.internal.targetcorp.comdc01.internal.targetcorp.com のような内部ホスト名とIPアドレスのマッピング情報を得られる可能性があります。🏢

発見した公開IPアドレスを持つホストに対して、実際にHTTP/HTTPSでアクセスできるか、どのようなサーバーソフトウェアが動作しているかのヒントを得たい場合。--connect オプションを追加します。

fierce --domain external-app.com --connect

出力には、HTTPステータスコードやサーバーヘッダー(例: Server: Apache/2.4.58, X-Powered-By: PHP/8.1)などが含まれ、さらなる調査の手がかりとなります。ただし、多数のホストが見つかった場合、非常に時間がかかる点に注意が必要です。⏳

出力結果の解釈 📊

結果を読み解く

Fierceの出力は、実行されたステップとその結果を示します。主な要素とその意味を理解することが重要です。

  • DNS Servers for [domain]: 最初に、ターゲットドメインの権威DNSサーバー(NSレコード)がリストされます。Fierceは通常、これらのサーバーに後続のクエリを送信します。
  • Trying zone transfer first…: DNSゾーン転送(AXFR)を試みたことを示します。Request timed out or transfer not allowed. または Unsuccessful in zone transfer と表示されれば、ゾーン転送は失敗(通常通り)です。もし成功した場合(稀ですが)、ドメイン内の全レコードが表示されます。🎉
  • Checking for wildcard DNS…: ワイルドカードDNSのチェック結果です。Nope. Good. と表示されれば、ワイルドカードは無効であり、ブルートフォースが有効であることを意味します。もし Found wildcard DNS at [...] のように表示された場合、ブルートフォースによるサブドメイン発見は信頼性が低くなります。
  • Now performing [N] test(s)…: サブドメインのブルートフォースが開始されたことを示します。[N]は試行されるサブドメイン名の数です。
  • Found [hostname] at [IP address]: ブルートフォースや他の探索(--wide, --traverse)によって発見されたホスト名とその解決されたIPアドレスが表示されます。これがFierceの主要な成果物です。
  • Scan completed: Found [M] hosts.: スキャンが完了し、発見されたホストの総数が表示されます。
  • (--connect 使用時) Found HTTP connection for [hostname] ([IP address]): HTTP/HTTPS接続に成功したホストとそのサーバーヘッダー情報が表示されます。

これらの情報から、ターゲット組織のネットワーク構造、公開されているサービス、使用されている可能性のあるIPアドレス範囲などを推測し、次の攻撃フェーズ(ポートスキャン、脆弱性スキャンなど)の計画を立てます。📈

倫理的な考慮事項と免責事項 ⚠️

🚨 重要: 責任ある使用

Fierceは強力な情報収集ツールですが、その使用には倫理的な配慮と法的な責任が伴います。

  • 許可なきスキャンは禁止: 自分自身が所有または管理しているドメイン、あるいは明示的な許可を得ているドメインに対してのみFierceを使用してください。許可なく第三者のドメインやネットワークに対してスキャンを行うことは、多くの国や地域で違法行為とみなされる可能性があります。
  • 負荷への配慮: Fierce、特にブルートフォースや--wide--threads(Perl版)などのオプションは、ターゲットのDNSサーバーに多数のクエリを送信します。これにより、サーバーに負荷がかかり、パフォーマンスに影響を与える可能性があります。スキャンを実行する際は、--delayオプションを使用するなどして、過度な負荷をかけないように注意してください。
  • 目的の明確化: Fierceは、正当なセキュリティ評価、ペネトレーションテスト、あるいは自身のネットワーク管理のために使用されるべきツールです。悪意のある目的(不正アクセス、サービス妨害など)での使用は絶対に避けてください。
  • ツールの限界理解: FierceはDNS情報に基づいて推測を行いますが、得られた情報が常に正確であるとは限りません。また、すべてのサブドメインやIPアドレスを発見できるわけではありません。結果は他のツールや手法と組み合わせて検証することが重要です。

このツールの使用によって生じたいかなる結果についても、ユーザー自身が全責任を負うものとします。常に法律と倫理規定を遵守し、責任ある行動を心がけてください。🙏

まとめ 🏁

Fierceは、DNS偵察のための非常に効果的なツールであり、ペネトレーションテスターやセキュリティ研究者にとって不可欠な武器の一つです。ターゲットドメインのサブドメイン、関連するIPアドレス空間、そして場合によってはネットワークの設定ミスを発見する能力を持っています。

この記事では、Fierceの基本的な概念からインストール方法、基本的な使い方、主要なオプション、高度なシナリオ、そして倫理的な使用について解説しました。

キーポイント:

  • FierceはDNS偵察に特化し、非連続IP空間やホスト名を発見する。
  • Kali Linuxに標準搭載されていることが多いが、pipやHomebrewでもインストール可能。
  • --domain でターゲットを指定するのが基本。
  • ゾーン転送試行、ワイルドカード検出、サブドメインブルートフォースを自動で行う。
  • --connect, --wide, --traverse, --subdomain-file などのオプションでスキャンをカスタマイズできる。
  • 最も重要なのは、許可されたターゲットに対してのみ、倫理的に使用すること。

Fierceを使いこなすことで、情報収集フェーズの効率と質を大幅に向上させることができます。ただし、その力を正しく、責任を持って使用することが極めて重要です。🛡️ Happy (ethical) hacking! 😄

コメント

タイトルとURLをコピーしました