はじめに: EyeWitness とは? 🤔
EyeWitness は、ウェブサイトのスクリーンショットを自動で取得し、サーバーヘッダー情報を提供し、可能であればデフォルトの認証情報を特定するために設計された強力なオープンソースツールです。Python で書かれており、主に Kali Linux での実行が想定されています。
ペネトレーションテストやバグバウンティ、レッドチーム活動における偵察(Reconnaissance)フェーズで非常に役立ちます。大量の Web サイトや Web アプリケーションが存在する場合、それらすべてを手動で確認するのは時間がかかります。EyeWitness を使用すると、対象となるシステムの Web インターフェースの概要を素早く視覚的に把握でき、優先的に調査すべきターゲットを特定するのに役立ちます。ログインページ、管理パネル、設定不備のあるサービスなどを効率的に見つけ出すことができます。✨
単にスクリーンショットを撮るだけでなく、Nmap や Nessus のスキャン結果(XML形式)を入力として受け付け、検出された Web サービスに対して自動的にスクリーンショットを取得することも可能です。また、RDP (Remote Desktop Protocol) や VNC (Virtual Network Computing) サービスのスクリーンショット取得もサポートしています(一部機能)。取得した情報は整理された HTML レポートとして出力されるため、結果の確認が容易です。
このブログ記事では、EyeWitness のインストール方法から基本的な使い方、そしてより高度なオプションまで、詳しく解説していきます。
インストール方法 🛠️
EyeWitness は Kali Linux には標準でリポジトリに含まれているため、apt
コマンドで簡単にインストールできます。また、GitHub からソースコードをクローンしてセットアップスクリプトを実行する方法もあります。
Kali Linux での APT を使用したインストール
Kali Linux を使用している場合、以下のコマンドを実行するだけでインストールできます。これが最も簡単な方法です。
sudo apt update
sudo apt install eyewitness
インストールが完了すると、eyewitness
コマンドが利用可能になります。依存関係のあるパッケージ(python3-selenium, xvfb など)も自動的にインストールされます。
GitHub からのインストール
最新版を利用したい場合や、Kali Linux 以外の環境で使用したい場合は、GitHub リポジトリからクローンしてインストールします。
前提条件:
- Python 3.x
- Git
- pip (Python パッケージインストーラー)
- 必要な依存関係 (通常はセットアップスクリプトでインストールされます)
インストール手順:
- リポジトリをクローンします:
git clone https://github.com/FortyNorthSecurity/EyeWitness.git
- EyeWitness ディレクトリに移動します:
cd EyeWitness/Python/setup/
- セットアップスクリプトを実行します:
このスクリプトは、必要な依存関係のインストールや設定を行います。sudo ./setup.sh
セットアップが正常に完了すれば、EyeWitness/Python
ディレクトリ内にある EyeWitness.py
スクリプトを実行して EyeWitness を使用できます。
💡 注意:
EyeWitness は内部で Web ブラウザ (Firefox/Iceweasel や Headless Chrome) を使用してスクリーンショットを取得します。これらのブラウザと、それを制御するための WebDriver (例: geckodriver) が正しくインストールおよび設定されている必要があります。Kali Linux の APT でインストールした場合、これらも適切に設定されることが多いですが、手動でインストールした場合は確認が必要です。
Windows 版の EyeWitness も開発されていますが、この記事では主に Linux (Kali Linux) での利用を前提として解説します。
基本的な使い方 🚀
EyeWitness はコマンドラインから実行します。基本的な書式は以下の通りです。
eyewitness [オプション]
または、GitHub からインストールした場合は、
./EyeWitness.py [オプション]
いくつかの基本的な使い方を見ていきましょう。
単一 URL のスキャン
特定の 1 つの Web サイトのスクリーンショットを取得したい場合は、--single
オプションを使用します。
eyewitness --single https://www.example.com
実行後、結果が保存されたディレクトリ(デフォルトでは実行日時のフォルダ名)と、レポートを開くかどうかの確認メッセージが表示されます。Y
を入力すると、デフォルトのブラウザで HTML レポートが開きます。
URL リストファイルからのスキャン
複数のターゲットを一度にスキャンしたい場合、URL を記述したテキストファイルを用意し、-f
オプションで指定します。ファイルには、1 行に 1 つの URL を記述します (例: http://
や https://
を含む)。
例 (urls.txt
):
https://www.google.com
http://scanme.nmap.org
https://www.kali.org
コマンド:
eyewitness -f urls.txt --web
--web
オプションは、HTTP/HTTPS のスクリーンショット取得を明示的に指示します(多くの場合デフォルトで有効ですが、明示すると確実です)。
Nmap/Nessus XML ファイルからのスキャン
Nmap や Nessus のスキャン結果 (XML 形式) を持っている場合、-x
オプションでそのファイルを指定すると、ファイル内で検出された Web サーバー (開いている HTTP/HTTPS ポートを持つホスト) に対して自動的にスクリーンショットを取得できます。これは非常に便利な機能です。👍
# Nmap でスキャンして XML ファイルを出力
sudo nmap -sV -p 80,443,8080 --open 192.168.1.0/24 -oX nmap_scan.xml
# EyeWitness で Nmap XML ファイルを処理
eyewitness -x nmap_scan.xml --web
EyeWitness は XML ファイルを解析し、適切な URL (例: http://192.168.1.10:80
, https://192.168.1.11:443
など) を生成してスキャンを実行します。
出力ディレクトリの指定
スクリーンショットやレポートを保存するディレクトリを指定するには、-d
オプションを使用します。指定しない場合、実行日時に基づいた名前のディレクトリが自動的に作成されます。
eyewitness -f urls.txt --web -d my_eyewitness_report
これにより、my_eyewitness_report
というディレクトリ内に結果が保存されます。
ヘッドレスモードでの実行
GUI 環境がないサーバーなどで実行する場合や、ブラウザウィンドウを表示させずにバックグラウンドで実行したい場合は、--headless
オプションを使用します。
eyewitness -f urls.txt --web --headless
これにより、仮想ディスプレイ (Xvfb など) を利用してバックグラウンドでブラウザが実行され、スクリーンショットが取得されます。Kali Linux のパッケージでインストールした場合、この設定は比較的スムーズに行われることが多いです。
高度なオプションと機能 ⚙️
EyeWitness には、スキャン動作を細かく制御するための様々なオプションが用意されています。
タイミング関連オプション
オプション | 説明 | デフォルト値 |
---|---|---|
--timeout <秒数> |
Web ページの読み込みとスクリーンショット取得を待つ最大時間(秒)。ネットワークが遅い場合や応答の遅いサイトをスキャンする場合は長めに設定します。 | 7 |
--threads <数> |
ファイルベースの入力 (-f または -x ) を使用する際の並列実行スレッド数。数を増やすとスキャン速度は向上しますが、リソース消費とターゲットへの負荷が増加します。 |
環境による (CPU コア数など) |
--jitter <秒数> |
URL の処理順序をランダム化し、リクエスト間にランダムな遅延 (最大指定秒数) を追加します。スキャンを隠蔽するのに役立つ場合があります。 | なし |
--delay <秒数> |
ブラウザのナビゲーション開始からスクリーンショット取得までの固定遅延時間(秒)。JavaScript などで動的にコンテンツが読み込まれるページで有効な場合があります。 | なし |
--max-retries <回数> |
タイムアウトが発生した場合の最大リトライ回数。不安定な接続環境で役立ちます。 | 1 (リトライなしの意味か要確認) |
レポート出力オプション
オプション | 説明 |
---|---|
-d <ディレクトリ名> |
レポートとスクリーンショットを保存するディレクトリ名を指定します。 |
--results <数> |
HTML レポートの 1 ページあたりに表示するホスト数を指定します。大量のターゲットをスキャンした場合にレポートを分割するのに便利です。 |
--no-prompt |
スキャン完了後にレポートを開くかどうかの確認プロンプトを表示しません。スクリプトなどで自動実行する場合に便利です。 |
Web 関連オプション
オプション | 説明 |
---|---|
--user-agent <文字列> |
リクエストで使用するカスタム User-Agent 文字列を指定します。 |
--proxy-ip <IPアドレス> |
使用する Web プロキシサーバーの IP アドレスを指定します。 |
--proxy-port <ポート番号> |
使用する Web プロキシサーバーのポート番号を指定します。 |
--proxy-type <タイプ> |
プロキシのタイプを指定します (例: http , socks5 )。 |
--resolve |
ターゲットのホスト名を IP アドレスに解決します。 |
--no-dns |
接続時に DNS 解決をスキップします。特定の VPN 環境などで役立つ場合があります。 |
--add-http-ports <ポート番号,...> |
標準ポート (80) 以外に HTTP として扱う追加のポートをカンマ区切りで指定します (例: 8000,8080 )。 |
--add-https-ports <ポート番号,...> |
標準ポート (443) 以外に HTTPS として扱う追加のポートをカンマ区切りで指定します (例: 8443 )。 |
プロトコルオプション
どのプロトコルのスクリーンショットを取得するかを指定できます。
--web
: HTTP/HTTPS のスクリーンショットを取得します (Selenium を使用)。--rdp
: RDP サービスのスクリーンショットを取得します。--vnc
: 認証なしの VNC サービスのスクリーンショットを取得します。--all-protocols
: サポートされているすべてのプロトコルのスクリーンショットを取得します。
eyewitness -x nmap_scan.xml --all-protocols -d full_scan_report
再開オプション
--resume <dbファイルパス>
オプションを使用すると、中断されたスキャンを再開できます。EyeWitness はスキャン中にデータベースファイル (通常 eyewitness.db
) を出力ディレクトリに作成します。このファイルを指定することで、前回の続きからスキャンを再開できます。大規模なスキャンが中断してしまった場合に非常に便利です。😌
# スキャンが中断されたとする
eyewitness -f large_list.txt --web -d large_scan --threads 20
# 再開する
eyewitness --resume large_scan/eyewitness.db
出力レポートの確認と活用 📊
EyeWitness のスキャンが完了すると、指定したディレクトリ (または自動生成されたディレクトリ) に HTML 形式のレポートファイル (通常 report.html
) と、取得されたスクリーンショット画像などが保存されます。
report.html
を Web ブラウザで開くと、スキャン結果を一覧で確認できます。
このレポートを視覚的に確認することで、以下のような情報を素早く把握できます。
- ログインフォームや管理画面の存在
- エラーページや設定不備を示すページ
- 古いバージョンのソフトウェアや特徴的なインターフェース
- 意図せず公開されている内部向けページ
- デフォルト設定のまま運用されている可能性のあるデバイス
大量のターゲットがある場合でも、スクリーンショットをざっと眺めることで、怪しいターゲットや興味深いターゲットに優先順位をつけて詳細な調査に進むことができます。🕵️♂️
実践的なユースケースとヒント ✨
EyeWitness は様々なセキュリティ評価の場面で活用できます。
- ペネトレーションテスト: 広範囲なネットワークスキャンの後、発見された Web サービスを EyeWitness で視覚化し、攻撃対象領域を素早く把握します。特に Nmap の結果と連携させると効果的です。
- バグバウンティ: 大量のサブドメインやホストを列挙した後、EyeWitness を使って実際に稼働している Web ページを特定し、脆弱性がありそうなアプリケーション (古い CMS、開発中のページなど) を見つけ出します。
- ネットワーク監視: 定期的に EyeWitness を実行し、ネットワーク内の Web サービスの変更点 (新しいサービスの出現、ページの更新など) を視覚的に追跡します。
- レッドチーム活動: 初期偵察段階で、ターゲット組織の公開 Web 資産を広範囲に調査し、侵入の足がかりとなりそうなシステム (VPN ログイン、リモートアクセス用ポータルなど) を特定します。
ヒントとベストプラクティス
- 倫理的な利用: 必ず許可されたターゲットに対してのみ EyeWitness を使用してください。無許可のスキャンは違法行為となる可能性があります。🚫
- 他のツールとの連携: Amass や Subfinder などのサブドメイン列挙ツール、Nmap などのポートスキャナと組み合わせることで、より包括的な偵察が可能になります。
- 負荷への配慮:
--threads
オプションでスレッド数を増やすとスキャンは速くなりますが、ターゲットサーバーや自身のネットワークに過度な負荷をかける可能性があります。適切な値に調整しましょう。 - タイムアウト調整: ネットワーク環境やターゲットの応答速度に応じて
--timeout
値を調整してください。短すぎると正常なページもタイムアウト扱いになる可能性があり、長すぎるとスキャン全体の時間が延びます。 - プロキシ/VPN の利用: 外部ターゲットに対してスキャンを行う場合、自身の IP アドレスを隠蔽するために VPN やプロキシサーバー (Tor など) を経由させることが推奨される場合があります (
--proxy-ip
,--proxy-port
,--proxy-type
オプション)。 - 結果のフィルタリング: 大量の結果が出力された場合、レポートのフィルタリング機能や、レポート内のキーワード検索 (例: “login”, “admin”, “password”, “error”) を活用して、重要な情報を見つけ出しましょう。
- 定期的な実行: 監視目的で使用する場合、cron ジョブなどで EyeWitness の実行を自動化し、定期的にレポートを生成・比較することで、変更点を効率的に検出できます。
まとめ 📝
EyeWitness は、ペネトレーションテスターやセキュリティ研究者にとって、偵察フェーズを大幅に効率化するための非常に価値のあるツールです。大量の Web サイトやサービスを視覚的に素早く評価し、調査の優先順位付けを助けます。
基本的な使い方から高度なオプションまで理解し、Nmap などの他のツールと連携させることで、ターゲットの攻撃対象領域をより効果的に把握し、潜在的な脆弱性を発見する可能性を高めることができます。
ぜひ EyeWitness を活用して、セキュリティ評価の効率と質を向上させてください! 💪
参考情報 🔗
- EyeWitness GitHub リポジトリ (FortyNorthSecurity): https://github.com/FortyNorthSecurity/EyeWitness
- Kali Linux Tools – eyewitness: https://www.kali.org/tools/eyewitness/
コメント