EyeWitness は Christopher Truncer (FortyNorth Security) によって開発された 偵察 (recon) / triage ツール。役割は単純で強力 — 大量の Web ホストのスクリーンショットを自動で撮り、一枚の HTML レポートにまとめる。nmap や rustscan を撃つと、開いている Web ポートが 数百単位で返ってくることがある。それを一つずつブラウザで開いて「ログイン画面はどれか」「デフォルトページか」「古いアプリか」を確認するのは現実的でない。EyeWitness は全ホストを裏でヘッドレスブラウザで開いてスクショし、各ホストのレスポンスヘッダ・推定技術・(分かれば) デフォルト認証情報まで添えてレポート化する。結果として「目で一気に眺めて、面白いターゲット (ログインパネル・管理コンソール・放置された古いアプリ) を素早く拾う」ことができる。RDP・VNC のスクショにも対応する。
EyeWitness とは — スクショ自動化 + HTML レポートで triage #
ポートスキャンの結果は「IP とポートの羅列」でしかない。443/tcp open https が 300 行並んでいても、どれが攻略の足がかりになるかは中身を見るまで分からない。EyeWitness が解決するのはまさにこの「見る」の自動化だ。
入力にホスト / URL のリストを渡すと、EyeWitness は各ホストをヘッドレスブラウザで順に開いてスクリーンショットを撮影し、同時にサーバのレスポンスヘッダ情報を記録、可能なら稼働技術を推定する。最後にそれらを 1 枚のブラウズ可能な HTML レポート (report.html) に束ねる。レポートはスクショ・ヘッダ・推定情報をホストごとに並べ、さらに「Identified Login Pages (ログイン画面)」「High Value Targets (高価値ターゲット)」といったカテゴリに自動分類してくれる。
recon の流れは大まかに ポートスキャン → triage (選別) → 手動テスト の三段。EyeWitness はこの真ん中の triage を担う。nmap が「どこが開いているか」を、ffuf や Burp が「個別ホストの深掘り」を担うとすれば、EyeWitness は「どのホストを深掘りすべきか」を一望で決めるための道具だ。Kali では多くの場合プリインストール済み、無ければ apt install eyewitness で導入できる。
法的・倫理的な注意 #
EyeWitness は「見るだけ」のツールに見えるが、その実態は対象ホスト群へ実際に HTTP / RDP / VNC 接続を張ることだ。許可のない第三者のホストへ撮影をかければ、それは正当な権限のないアクセスであり、日本の不正アクセス禁止法や業務妨害に問われ得る違法行為になりうる。「スクショを撮っただけ」は免罪符にならない。
- 自分が所有・管理している資産 — 自分のサーバ群、契約している VPS、隔離した学習用ラボ
- 書面で明示的に許可されたスコープ — ペネトレーションテスト契約で対象ホスト・期間が文書化されているもの。スコープ外のホストは1 件たりとも入力リストに含めない
- 正規の学習プラットフォーム — Hack The Box、TryHackMe など、運営が偵察を許可している環境
とくに注意すべきは nmap の XML をそのまま流し込む運用。スキャン範囲に許可外の IP が紛れていれば、EyeWitness はそれらにも自動で接続しに行く。リストや XML の中身を渡す前に必ず確認し、許可されたスコープだけに限定すること。「権限のない第三者ホストへ撮影をかける」ことそのものが不正アクセス・濫用になり得る。
何ができるか — スクショ / ヘッダ / 認証情報の示唆 / 分類 #
EyeWitness が一回の実行で集める情報は、単なる画像にとどまらない。triage を加速させるための情報がレポートに凝縮される。
| 収集するもの | 内容 | triage での意味 |
|---|---|---|
| Web スクリーンショット | HTTP / HTTPS の画面を撮影 | ログイン画面・デフォルトページを目視で即判別 |
| RDP / VNC スクショ | リモートデスクトップ / VNC の画面も撮影 | 放置された遠隔操作サービスを発見 |
| レスポンスヘッダ | Server / 各種ヘッダを記録 | 稼働ソフト・バージョンの当たりを付ける |
| 技術の推定 | 稼働している技術を推測 | 既知の脆弱な製品かを素早く判断 |
| デフォルト認証情報の示唆 | 既知製品なら初期パスワードを併記 | 未変更の初期認証情報を試す候補が分かる |
撮影モードは入力ホストの種別に合わせて切り替える。Web だけなら --web、RDP / VNC を撮るなら --rdp / --vnc、全部まとめて試すなら --all-protocols。
EyeWitness のレポートは撮影画像をただ並べるだけでなく、「Identified Login Pages」「High Value Targets」といったカテゴリに自動で振り分ける。数百ホストのうちまず見るべきログイン画面・管理画面に直行できるので、目視の負担が劇的に減る。デフォルト認証情報が示唆されたホストは、そのまま最初に試す候補になる。
基本の使い方 — リスト / nmap XML / 単一ホスト #
EyeWitness は 入力の渡し方と 出力先を決めるだけで動く。入力は「URL/ホストのリスト (-f)」「nmap/Nessus の XML (-x)」「単一 URL (--single)」の三通り。出力ディレクトリは -d で指定する。
URL リストから撮る #
一行一ホストのテキストファイルを -f で渡すのが最も基本。--web で Web 画面を撮影する。
$ eyewitness --web -f urls.txt -d recon_shots
# --web HTTP/HTTPS のスクショモード
# -f urls.txt 一行一ホストの入力リスト
# -d recon_shots レポートとスクショの出力先ディレクトリnmap の XML から撮る #
nmap を -oX で XML 出力しておけば、EyeWitness が -x でそれを読み込み、XML 中の Web サービスを自分で抽出して撮影する。スキャン結果をそのまま流せるのが強み。
$ eyewitness -x nmap.xml --web -d shots --no-prompt
# -x nmap.xml nmap (または Nessus) の XML から Web を抽出
# --no-prompt 途中で入力待ちをせず自動で完走させる単一ホスト / RDP・VNC をまとめて #
一発だけ確認したいなら --single。RDP・VNC・Web を一度に試すなら --all-protocols をリストに対して使う。
$ eyewitness --single https://10.0.0.5 --web
$ eyewitness --all-protocols -f hosts.txt -d shots
# --single URL 単一ホストだけを撮る
# --all-protocols Web + RDP + VNC をまとめて試行recon パイプライン — スキャンからレポート、そして深掘りへ #
EyeWitness は単体で使うより、偵察パイプラインの一段として組み込むと真価を発揮する。古典的な流れはこうだ。
-oX nmap.xml で XML に書き出す。eyewitness -x nmap.xml --web --no-prompt で Web サービスを抽出して一括スクショ。report.html を眺め、ログイン画面・管理コンソール・古いアプリなど「面白いホスト」を絞り込む。ポイントは、EyeWitness が「全部を深掘り」しない判断を支えること。数百ホストすべてに ffuf を撃つのは時間も負荷も無駄になる。EyeWitness で一望してから当たりだけに ffuf / Burp を集中投下することで、限られた時間を価値の高いターゲットに割ける。
$ nmap -p 80,443,8080 -oX nmap.xml 10.0.0.0/24
$ eyewitness -x nmap.xml --web -d shots --no-prompt
# shots/report.html を見て当たりを選別したら…
$ ffuf -w wordlist.txt -u https://10.0.0.5/FUZZ関連ツールと運用 Tips #
「大量の Web ホストをスクショする」ツールは EyeWitness だけではない。用途と好みで選ぶとよい。
| ツール | 特徴 |
|---|---|
EyeWitness | 元祖的存在。レポートにヘッダ・デフォルト認証情報・分類まで含む triage 重視。RDP / VNC も撮れる |
Aquatone | 大量ホストのスクショ + HTML レポート生成に特化。サブドメイン列挙の後段で定番 |
gowitness | Go 製で高速・軽量。単一バイナリで動かしやすい |
httpx | ProjectDiscovery 製。HTTP プローブが主軸でスクショも可能。他の PD ツールと連携しやすい |
EyeWitness を快適に使うための主要オプションは以下。自動化と取りこぼし対策に効く。
| オプション | 効果 |
|---|---|
--threads <n> |
同時スレッド数。上げれば速く、下げれば低負荷 |
--timeout <sec> |
ホストごとのタイムアウト秒。遅いホストで詰まらせない |
--prepend-https |
スキームの無いホストに https:// も試す (取りこぼし防止) |
--no-prompt |
入力待ちをせず自動で完走 (パイプライン / cron 向け) |
--resolve |
DNS の PTR / 名前解決情報をレポートに含める |
--results <n> |
レポート 1 ページあたりのスクショ枚数 |
--user-agent "<UA>" |
User-Agent を任意に設定 |
EyeWitness は渡したリスト / XML のホストすべてに実際に接続する。だからこそ最大の運用上の注意は「入力にスコープ外のホストを混ぜないこと」。--no-prompt で自動化するときは特に、リストの中身を実行前に必ず確認する。撮影漏れが気になるホストには --prepend-https を、遅いホストでスキャン全体が止まるなら --timeout を短めに設定する。triage はあくまで許可されたスコープ内で完結させること。