WhatWeb徹底解説:Webサイト技術特定ツールの使い方

WebサイトやWebアプリケーションのセキュリティ調査、競合調査、あるいは単に技術的な興味から、「このサイトは何で作られているんだろう?」と思ったことはありませんか? そんな疑問に答えてくれる強力なツールが「WhatWeb」です。

WhatWebは、指定したWebサイトがどのような技術(CMS、Webサーバー、JavaScriptライブラリ、プログラミング言語など)で構築されているかを特定するためのオープンソースのツールです。ペネトレーションテスターやセキュリティ研究者、Web開発者にとって、情報収集フェーズで非常に役立ちます。

この記事では、WhatWebの基本的な使い方から、便利なオプション、実践的な活用方法、そして利用上の注意点まで、網羅的に解説していきます。この記事を読めば、あなたもWhatWebを効果的に使いこなせるようになるはずです!

WhatWebとは?

WhatWebは、Andrew Horton (urbanadventurer) と Brendan Coles (bcoles) によって開発された、Ruby製の次世代Webスキャナーです。その主な目的は、「そのウェブサイトは何?」という問いに答えることです。具体的には、以下のような情報を識別できます。

  • コンテンツ管理システム (CMS): WordPress, Joomla, Drupalなど
  • ブログプラットフォーム
  • 統計・分析パッケージ: Google Analyticsなど
  • JavaScriptライブラリ: jQuery, React, Angular, Bootstrapなど
  • Webサーバーソフトウェア: Apache, Nginx, IISなど
  • プログラミング言語: PHP, Ruby, Python, ASP.NETなど
  • Webフレームワーク: Django, Laravel, Ruby on Railsなど
  • 組み込みデバイス
  • OS情報(サーバーヘッダーから推測)
  • セキュリティ関連ヘッダー

WhatWebは1800を超える豊富なプラグインを備えており、それぞれが特定の技術や情報を認識するように設計されています。これらのプラグインは、HTTPヘッダー、HTMLソースコード(metaタグ、コメント、特定のパターン)、Cookie、URLの構造、ファイルの存在などを分析します。さらに、バージョン番号、メールアドレス、アカウントID、SQLエラーメッセージなども検出できる場合があります。

WhatWebの特徴は、スキャンの「積極性(Aggression)」レベルを調整できる点です。これにより、速度と隠密性を優先するか、より詳細な情報を得るために信頼性を優先するかを制御できます。また、様々なログ出力形式(人間可読、CSV、XML、JSON、MongoDB、ElasticSearchなど)に対応しており、結果の分析や他のツールとの連携も容易です。

インストール方法

WhatWebを使用するには、まずシステムにインストールする必要があります。ここではいくつかの一般的な環境でのインストール方法を紹介します。

Kali Linuxの場合

WhatWebは、多くのペネトレーションテスト用ディストリビューション、特にKali Linuxにはデフォルトでインストールされています。そのため、通常は追加のインストール作業は不要です。ターミナルを開いて以下のコマンドを実行し、バージョン情報が表示されれば準備完了です。

whatweb --version

その他のLinuxディストリビューション (Debian/Ubuntu系)

DebianやUbuntu、およびそれらをベースにしたLinuxディストリビューションでは、パッケージマネージャー(apt)を使用して簡単にインストールできます。

sudo apt update && sudo apt install whatweb

インストール後、同様に whatweb --version で確認してください。

macOSの場合 (Homebrewを使用)

macOSユーザーでHomebrewパッケージマネージャーを使用している場合、以下のコマンドでインストールできます。

brew install whatweb

RubyGemsを使用する場合

システムにRubyがインストールされていれば、RubyGemsを使ってインストールすることも可能です。これはOSに依存しない方法の一つです。

gem install whatweb

ソースコードからインストール (最新版を利用したい場合)

常に最新の機能を利用したい場合や、パッケージマネージャーに登録されているバージョンが古い場合は、GitHubリポジトリから直接ソースコードをクローンして利用することもできます。

まず、GitとRuby、および必要な依存関係がインストールされていることを確認してください。(依存関係はシステムによって異なりますが、Ruby、Bundler、libcurl、libxml2などが一般的です)

# 必要な依存パッケージをインストール (Debian/Ubuntu系の例)
sudo apt update
sudo apt install git ruby ruby-dev build-essential libcurl4-openssl-dev liblzma-dev zlib1g-dev

# リポジトリをクローン
git clone https://github.com/urbanadventurer/WhatWeb.git

# ディレクトリを移動
cd WhatWeb

# Bundlerをインストール (必要に応じて)
sudo gem install bundler

# 依存関係をインストール
bundle install

# 実行可能か確認
./whatweb --version

この方法の場合、実行する際は ./whatweb のようにパスを指定して実行します。PATHを通せば whatweb だけで実行できるようになります。

Windowsの場合

WhatWebはネイティブなWindowsアプリケーションとしては提供されていません。Windowsで使用するには、WSL (Windows Subsystem for Linux) を利用するのが一般的です。WSLを有効にし、UbuntuなどのLinuxディストリビューションをインストールした後、上記のDebian/Ubuntu系の手順でWhatWebをインストールします。あるいは、WhatWebGUIという非公式のGUIフロントエンドも存在しますが、別途Javaランタイムなどが必要になる場合があります。

ご自身の環境に合わせて、最適なインストール方法を選択してください。

基本的な使い方

WhatWebの基本的な構文は非常にシンプルです。

whatweb [オプション] <ターゲット>

<ターゲット>には、調査したいWebサイトのURL、ホスト名、またはIPアドレスを指定します。複数指定することも可能です。

単一ターゲットのスキャン

最も基本的な使い方は、ターゲットとなるURLを指定するだけです。

whatweb example.com

これにより、WhatWebは `http://example.com` にアクセスし、検出された技術情報を表示します。デフォルトでは、HTTPリクエストを行い、リダイレクトがあればそれに従います。もしHTTPSサイトをスキャンしたい場合は、明示的に `https://` をつけるか、WhatWebが自動的に判断するのに任せます。

whatweb https://secure.example.com

実行結果の例

実行すると、以下のような形式で結果が出力されます(内容はターゲットによって大きく異なります)。

$ whatweb example.com
http://example.com [301 Moved Permanently] Country[RESERVED][ZZ], HTTPServer[ECS (sjc/4E5D)], IP[93.184.216.34], RedirectLocation[https://example.com/]
https://example.com/ [200 OK] Country[RESERVED][ZZ], ETag[3147526947+gzip], Expires[Thu, 03 Apr 2025 00:51:05 GMT], HTML5, HTTPServer[ECS (sjc/4E5D)], IP[93.184.216.34], Last-Modified[Thu, 17 Oct 2019 07:18:26 GMT], MetaGenerator[WordPress 6.4.3], Script[text/javascript], Strict-Transport-Security[max-age=31536000], Title[Example Domain], UncommonHeaders[x-cache,cache-control,content-type,date,server,vary,content-length,age], Via-Proxy[HTTP/1.1 1.1.1.1], X-Cache[HIT], jQueryUI, jQuery

この例では、最初に `http://example.com` にアクセスし、`https://example.com/` へのリダイレクト (301 Moved Permanently) が検出されました。その後、リダイレクト先の `https://example.com/` をスキャンし、ステータスコード200 (OK) とともに、検出された技術(国情報、ETag、Expiresヘッダー、HTML5、HTTPサーバー、IPアドレス、最終更新日時、WordPressのバージョン、JavaScriptの使用、セキュリティヘッダー、タイトル、キャッシュ関連ヘッダー、jQueryとそのUIライブラリなど)がリストされています。

複数ターゲットのスキャン

複数のターゲットを一度にスキャンするには、スペースで区切って指定します。

whatweb example.com scanme.nmap.org google.com

WhatWebは指定された順に各ターゲットをスキャンし、それぞれの結果を表示します。

ファイルからのターゲット読み込み

スキャンしたいターゲットが多数ある場合は、ファイルにリストを記述し、-i または --input-file オプションで読み込ませると便利です。ファイルには、1行に1つのターゲット(URL、ホスト名、IPアドレス)を記述します。

# targets.txt の中身例:
# example.com
# https://scanme.nmap.org
# 192.168.1.1

whatweb -i targets.txt

これは、大量のサイトを定期的にチェックする際などに非常に役立ちます。

これらがWhatWebの最も基本的な使い方です。しかし、WhatWebの真価は豊富なオプションによって発揮されます。次のセクションで詳しく見ていきましょう。

主要なオプション解説

WhatWebにはスキャンの挙動を細かく制御するための多くのオプションが用意されています。ここでは特に重要でよく使われるオプションをいくつか紹介します。

オプション 短縮形 説明
--verbose -v 詳細な情報を表示します。検出されたプラグイン名とその簡単な説明、バージョン情報などがより詳しく出力されます。デバッグや、どのプラグインが反応したかを確認したい場合に役立ちます。複数回 (-vv) 指定するとさらに詳細なデバッグ情報が表示されます。 whatweb -v example.com
--aggression -a スキャンの積極性をレベルで指定します (1: Stealthy, 3: Aggressive, 4: Heavy)。レベルが高いほど、より多くのHTTPリクエストを送信し、隠れた技術や詳細なバージョン情報を検出しようと試みますが、ターゲットへの負荷が増加し、検出される可能性も高まります。デフォルトはレベル1 (Stealthy) です。 whatweb -a 3 example.com
--list-plugins -l 利用可能な全てのプラグインのリストを表示します。どのような技術を検出できるか確認するのに便利です。 whatweb -l
--plugins -p 実行するプラグインを指定します。カンマ区切りで複数指定可能です。all ですべてのプラグイン、default でデフォルトセット、プラグイン名の前に - を付けるとそのプラグインを除外、+ を付けると無効化されているプラグインを有効化します。特定の技術のみを調査したい場合や、不要なスキャンを避けたい場合に有効です。 whatweb -p WordPress,jQuery,Apache example.com
whatweb -p all,-Cookies,-Google-Analytics example.com
whatweb -p +plugins-disabled/ example.com
--info-plugins -I 指定したプラグイン(またはキーワード)に関する詳細情報を表示します。プラグインの説明、バージョン、作者などの情報が得られます。キーワードで検索することも可能です。 whatweb -I WordPress
whatweb -I javascript
--search-plugins なし 指定したキーワードに一致するプラグインを検索します。 whatweb --search-plugins=apache
--input-file -i ターゲットURL/ホスト名を記述したファイルを指定し、複数ターゲットを一度にスキャンします。ファイル名は - または /dev/stdin を指定することで標準入力から読み込むことも可能です。 whatweb -i targets.txt
cat targets.txt | whatweb -i -
--log-brief なし 結果を1行のカンマ区切り形式 (CSVライク) で指定したファイルに出力します。スクリプトでの処理や集計に適しています。 whatweb example.com --log-brief=results.csv
--log-xml なし 結果をXML形式で指定したファイルに出力します。構造化されたデータとして扱いたい場合に便利です。 whatweb example.com --log-xml=results.xml
--log-json なし 結果をJSON形式で指定したファイルに出力します。Web APIや他のアプリケーションとの連携に適しています。 whatweb example.com --log-json=results.json
--log-json-verbose なし より詳細な情報を含むJSON形式で出力します。 whatweb example.com --log-json-verbose=results_verbose.json
--user-agent -U リクエストに使用するUser-Agent文字列を指定します。デフォルトは “WhatWeb/バージョン” です。特定のブラウザやボットを装いたい場合に使用します。 whatweb -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/..." example.com
--header -H カスタムHTTPヘッダーを追加します。"Name:Value" の形式で指定します。複数指定可能です。認証トークンや特定の動作を期待するヘッダーを追加する場合などに使用します。デフォルトのヘッダーを上書きしたり、空の値を指定して削除したりすることも可能です。 whatweb -H "Authorization: Bearer XXXXX" -H "X-Forwarded-For: 1.2.3.4" example.com
whatweb -H "User-Agent:" example.com
--cookie -c リクエストに含めるCookieを指定します。"name=value; name2=value2" の形式です。認証が必要なページをスキャンする場合などに使用します。 whatweb -c "sessionid=abcdef12345; logged_in=true" example.com/admin
--cookie-jar なし Cookieをファイルから読み込みます。 whatweb --cookie-jar=cookies.txt example.com
--proxy なし HTTP/HTTPSプロキシサーバーを指定します。hostname:port の形式です。Torネットワーク経由でのスキャンなどにも利用できます。 whatweb --proxy localhost:8080 example.com
whatweb --proxy localhost:9050 example.com # Torの場合
--proxy-user なし プロキシ認証が必要な場合に、ユーザー名とパスワードを指定します。username:password の形式です。 whatweb --proxy proxy.example.com:8080 --proxy-user user:pass example.com
--color なし 出力に色を付けるかどうかを制御します (always, never, auto)。デフォルトは auto で、ターミナルが対応していれば色付きで表示されます。 whatweb --color=never example.com
--no-redirect なし HTTPリダイレクトを追跡しません。リダイレクト自体を調査したい場合に有用です。 whatweb --no-redirect example.com
--max-threads -t 同時に実行するスレッド数を指定します。デフォルトは25です。値を大きくするとスキャン速度は向上しますが、ターゲットや自身のネットワークへの負荷が高まります。 whatweb -t 50 -i targets.txt
--open-timeout なし 接続タイムアウト時間を秒単位で指定します。デフォルトは15秒です。 whatweb --open-timeout=30 example.com
--read-timeout なし 読み取りタイムアウト時間を秒単位で指定します。デフォルトは30秒です。 whatweb --read-timeout=60 example.com
--quiet -q 標準出力への簡単なログ表示(通常表示される1行の結果)を抑制します。ファイルへのログ出力(--log-* オプション)と併用する場合などに使います。 whatweb example.com -q --log-brief=results.csv
--no-errors なし 接続エラーなどのエラーメッセージを抑制します。大量のターゲットをスキャンする際に、成功した結果のみに注目したい場合に便利です。 whatweb -i targets.txt --no-errors

これらのオプションを効果的に組み合わせることで、単純なWebサイト特定から、より複雑な情報収集、特定の技術スタックを持つサイトのスクリーニング、ログの自動処理まで、幅広い用途に対応できます。各オプションの詳細は whatweb --help コマンドでも確認できます。

アグレッシブレベル (-a) の詳細

WhatWebのスキャン強度を調整する --aggression (または -a) オプションは、得られる情報の詳細度とスキャンの隠密性・速度とのトレードオフを制御する重要な機能です。レベルは主に1, 3, 4が定義されています(レベル2は現在未使用)。

  • レベル1 (Stealthy – 隠密): これがデフォルトのレベルです。各ターゲットに対して最小限のHTTPリクエスト(通常は1回)のみを送信します。主に、アクセスしたページのHTTPヘッダーとHTMLソースコードから受動的に情報を収集します。リダイレクトには従います。速度が速く、ターゲットへの負荷が最も低いため、一般的なWebサイトのスキャンや、検出を避けたい場合に適しています。
  • レベル3 (Aggressive – 積極的): レベル1のスキャンで特定の技術(プラグインが一致した場合)が検出されると、その技術に関連する追加のHTTPリクエストを送信します。例えば、WordPressが検出された場合、特定のファイル(wp-login.php など)が存在するかどうかを確認したり、バージョン情報が含まれる可能性のあるファイルにアクセスしたりします。これにより、より詳細なバージョン情報や設定情報を得られる可能性がありますが、リクエスト数が増え、負荷も若干増加します。
  • レベル4 (Heavy – 重量級): 最も積極的なレベルです。レベル1での検出有無に関わらず、多くのプラグインが持つ積極的なテスト(特定のURLへのアクセス試行など)を実行します。これにより、隠された管理画面や設定ファイル、特定の脆弱性を示唆する情報などを発見できる可能性があります。しかし、非常に多くのHTTPリクエストを送信するため、スキャンに時間がかかり、ターゲットサーバーへの負荷が大幅に増加します。また、侵入検知システム(IDS/IPS)やWebアプリケーションファイアウォール(WAF)に検知・ブロックされる可能性が最も高くなります。

どちらのレベルを選ぶべきか?

  • 公開されている一般的なWebサイトの調査: まずはデフォルトのレベル1で試すのが良いでしょう。
  • ペネトレーションテストの初期調査 (許可あり): レベル3を使用することで、より詳細な情報を得られる可能性があります。
  • 詳細な脆弱性調査 (許可あり): レベル4は、より多くの情報を引き出す可能性がありますが、負荷と検知リスクを十分に考慮する必要があります。特定のプラグイン(-pオプション)と組み合わせて、対象を絞って実行することが推奨されます。
注意: アグレッシブレベルを上げることは、ターゲットサーバーへの負荷を増加させ、場合によってはサービスに影響を与える可能性があります。また、許可なく高いレベルのスキャンを行うことは、不正アクセスとみなされる可能性があります。必ず、自身が管理するシステム、または明確な許可を得たシステムに対してのみ、適切なレベルで使用してください。

レベル1とレベル3の結果の違いの例として、phpBBフォーラムのバージョン特定が挙げられます。レベル1では「phpBB[2]」と検出されるだけかもしれませんが、レベル3では追加のリクエストにより「phpBB[2,>2.0.20]」(バージョン2.0.20以上)といった、より詳細な情報が得られることがあります。

プラグインの活用

WhatWebの強力さの源泉は、1800以上(バージョンにより変動)にも及ぶ豊富な「プラグイン」にあります。各プラグインは、特定のWeb技術(CMS、JavaScriptライブラリ、サーバーソフトウェア、分析ツールなど)や、特定の情報(メールアドレス、コメント内の開発者情報、特定のHTMLパターンなど)を検出するように設計されています。

プラグインリストの表示

利用可能な全てのプラグインを確認するには、-l または --list-plugins オプションを使用します。

whatweb -l

膨大なリストが出力されますが、grep と組み合わせることで特定のプラグインを探すことができます。

whatweb -l | grep -i wordpress

あるいは、--search-plugins オプションも利用できます。

whatweb --search-plugins=wordpress

プラグイン情報の表示

特定のプラグインについて、どのような情報を検出しようとするのか、作者は誰かなどの詳細情報を知りたい場合は、-I または --info-plugins オプションを使用します。

whatweb -I WordPress

キーワードで関連するプラグインを検索することも可能です。

whatweb -I analytics

特定のプラグインの実行

デフォルトでは、WhatWebは利用可能なほぼ全てのプラグインを実行しようとします(アグレッシブレベルによります)。しかし、調査対象が明確な場合や、スキャン時間を短縮したい場合は、-p または --plugins オプションで実行するプラグインを限定することができます。プラグイン名はカンマ区切りで指定します。

# WordPressとjQueryに関するプラグインのみを実行
whatweb -p WordPress,jQuery example.com

このオプションは、特定の技術を使用しているサイトを効率的にリストアップしたい場合に特に有効です。

プラグインの除外

逆に、特定のプラグインを除外したい場合は、プラグイン名の前に - を付けます。例えば、Cookie情報やGoogle Analyticsに関する情報を除外したい場合は以下のようにします。

whatweb -p default,-Cookies,-Google-Analytics example.com

default はデフォルトで有効なプラグインセットを意味します。all を指定して全てのプラグインを対象にすることもできます。

whatweb -p all,-MetaGenerator example.com

人気・便利なプラグインの例

WhatWebには多種多様なプラグインがありますが、よく使われるカテゴリとしては以下のようなものがあります。

  • CMS: WordPress, Joomla, Drupal, Magento, Shopify, TYPO3 など
  • Webサーバー: Apache, Nginx, IIS, LiteSpeed, Tomcat など
  • JavaScriptライブラリ/フレームワーク: jQuery, React, Angular, Vue.js, Bootstrap, Modernizr など
  • プログラミング言語/プラットフォーム: PHP, ASP.NET, Ruby (on Rails), Python (Django/Flask), Java (JSP/Spring) など
  • 分析/広告: Google Analytics, Google AdSense, Facebook Pixel, Matomo (Piwik) など
  • OS (ヘッダー情報から): Linux, Windows, FreeBSD など
  • その他: HTTPヘッダー (X-Powered-By, Server, X-Frame-Options など), IPアドレス情報 (国), Cookie情報, Emailアドレス, HTML Title, Meta タグ (Generator, Description), パスワードフィールド, robots.txt, sitemap.xml など

カスタムプラグイン

WhatWebはRubyで書かれており、自分でカスタムプラグインを作成して特定の情報を検出させることも可能です。既存のプラグインを参考に、特定の内部アプリケーションや独自のフレームワークを検出するプラグインを作成するなど、高度な利用もできます。詳細は公式ドキュメントや既存のプラグインコードを参照してください。また、--custom-plugin オプションでコマンドラインから一時的なカスタムプラグインを定義することも可能です。

プラグインを効果的に選択・除外することで、ノイズを減らし、目的の情報に素早くアクセスできるようになります。

出力フォーマット

WhatWebは、スキャン結果を様々な形式で出力する機能を持っています。これにより、結果の確認だけでなく、他のツールとの連携や自動処理、レポート作成などが容易になります。主な出力オプションは --log-* シリーズです。

標準出力 (人間可読形式)

オプションを指定しない場合、結果はターミナルに人間が読みやすい形式で表示されます。これは最も基本的な出力形式で、手軽に結果を確認するのに適しています。

whatweb example.com

Brief形式 (--log-brief)

--log-brief=FILE を指定すると、結果が1ターゲットあたり1行のカンマ区切り形式(CSVに似た形式)で指定したファイルに出力されます。各行はターゲットURLで始まり、検出されたプラグイン名がカンマで区切られて続きます。これは、grepやawkなどのコマンドラインツールでの処理や、スプレッドシートへのインポートに適しています。

whatweb example.com scanme.nmap.org --log-brief=results.csv

results.csv の中身(例):

http://example.com,"Country[RESERVED][ZZ]","HTTPServer[ECS (sjc/4E5D)]","IP[93.184.216.34]","RedirectLocation[https://example.com/]"
https://example.com/,"Country[RESERVED][ZZ]","ETag[3147526947+gzip]",...,"jQueryUI","jQuery"
http://scanme.nmap.org,[...]

XML形式 (--log-xml)

--log-xml=FILE を指定すると、結果がXML形式でファイルに出力されます。XMLは構造化されたデータ形式であり、他のアプリケーションでの解析や、XSLTを用いたレポート生成などに利用できます。WhatWebには結果を見やすく表示するためのXSLスタイルシートも含まれています。

whatweb example.com --log-xml=results.xml

JSON形式 (--log-json)

--log-json=FILE を指定すると、結果がJSON形式でファイルに出力されます。JSONは軽量なデータ交換フォーマットであり、特にWebアプリケーションやスクリプト言語(Python, JavaScriptなど)での扱いに優れています。API連携やデータベースへの格納などに便利です。

whatweb example.com --log-json=results.json

JSON Verbose形式 (--log-json-verbose)

--log-json-verbose=FILE は、通常のJSON形式よりもさらに詳細な情報(プラグインの説明、バージョン情報など)を含んだJSON形式で出力します。

whatweb example.com --log-json-verbose=results_verbose.json

その他の形式

WhatWebは上記以外にも、以下のような出力形式をサポートしています。

  • --log-verbose=FILE: 詳細な人間可読形式をファイルに出力。
  • --log-sql=FILE: 結果をSQLのINSERT文として出力。
  • --log-sql-create=FILE: SQLテーブルを作成するためのCREATE TABLE文を出力。
  • --log-magictree=FILE: MagicTreeというペネトレーションテストツール向けのXML形式で出力。
  • --log-object=FILE: Rubyのオブジェクト形式で出力 (デバッグ用)。
  • --log-mongo-*: MongoDBデータベースに直接結果を保存するためのオプション群 (データベース名、コレクション名、ホスト、認証情報など)。
  • --log-elastic-*: Elasticsearchに直接結果を保存するためのオプション群 (インデックス名、ホストなど)。

これらの多様な出力オプションにより、WhatWebのスキャン結果を様々な用途に合わせて柔軟に活用することが可能です。自動化されたパイプラインに組み込んだり、結果をデータベースで一元管理したり、カスタムレポートを生成したりする際に、適切な出力形式を選択してください。

実践的な使い方・ユースケース

WhatWebは単にWebサイトの技術を調べるだけでなく、様々な実践的なシナリオで活用できます。

1. ペネトレーションテストの初期調査 (Reconnaissance)

ペネトレーションテストやセキュリティ診断において、ターゲットのシステム構成を理解することは非常に重要です。WhatWebは、攻撃対象領域(Attack Surface)を把握するための最初のステップとして広く利用されます。

  • 技術スタックの特定: ターゲットが使用しているWebサーバー、CMS、フレームワーク、言語などを特定し、既知の脆弱性を持つコンポーネントが存在しないかあたりをつけます。
  • バージョン情報の収集: -a 3 などのアグレッシブスキャンや詳細表示 (-v) により、ソフトウェアの具体的なバージョン番号を特定できれば、そのバージョンに存在する脆弱性をピンポイントで調査できます。(例: Apache 2.4.49 の脆弱性 CVE-2021-41773 を探す)
  • 隠れたページや機能の発見: アグレッシブスキャンにより、一般的なパス(例: /admin, /backup, /config など)を試行し、予期せぬ管理画面や情報漏洩につながるファイルを発見できる可能性があります。
# 許可されたターゲットに対してアグレッシブスキャンを実行し、詳細を表示
whatweb -a 3 -v target.example.com

2. 脆弱性管理のための資産棚卸し

組織が管理する多数のWebサイトについて、どのような技術が使われているかを把握し、脆弱性管理に役立てることができます。

  • 特定の技術を利用しているサイトのリストアップ: 例えば、組織内で利用している全てのWordPressサイトを特定し、バージョンが古いものがないか、特定のプラグインに脆弱性が見つかった場合に影響範囲を調査する、といった用途に使えます。
# 内部サーバーリスト(servers.txt)からWordPressサイトを検索し、結果をCSVに出力
whatweb -i servers.txt -p WordPress --log-brief=wordpress_sites.csv
  • 古いライブラリの使用状況調査: サポートが終了したjQueryのバージョンなど、古いJavaScriptライブラリを使用しているサイトを特定し、アップデートを促すために利用できます。
# jQueryプラグインを実行し、結果をJSONで出力
whatweb -i websites.txt -p jQuery --log-json=jquery_usage.json

3. 競合調査・市場分析

競合他社や特定の市場のWebサイトがどのような技術トレンドを採用しているかを調査するために利用できます。

  • 技術選定の参考: 競合がどのようなCMSやフレームワーク、分析ツールを使っているかを把握し、自社の技術選定の参考にします。
  • 市場トレンドの把握: 特定の業界のWebサイト群をスキャンし、特定の技術(例: React vs Angular, Shopify vs Magento)の採用率などを分析します。
# 競合サイトリスト(competitors.txt)をスキャンし、詳細情報をログファイルに保存
whatweb -i competitors.txt -v --log-verbose=competitor_tech.log

4. セキュリティ意識向上・教育

自身の管理するWebサイトをスキャンしてみることで、外部からどのような情報が見えているかを確認し、セキュリティ対策の必要性を理解する助けになります。

  • 意図しない情報の露出確認: Webサーバーのバージョン情報、PHPのエラーメッセージに含まれる内部パス、開発者コメントなどを意図せず公開してしまっていないか確認できます。
  • 不要なファイルの公開確認: アグレッシブスキャンなどで、本来公開すべきでない設定ファイルやバックアップファイルなどがアクセス可能になっていないかチェックします(ただし、許可なくこれを行うべきではありません)。
# 自分のサイトをスキャンしてみる (詳細表示)
whatweb -v my-website.com

脆弱性スキャンツールではない点に注意

WhatWebは、あくまでWebサイトが「何でできているか」を特定するツールであり、それ自体が脆弱性を直接スキャンするツールではありません。検出されたソフトウェアやバージョン情報をもとに、CVEデータベース (例: CVE Mitre, NVD) などで既知の脆弱性を検索することは可能ですが、その脆弱性が実際に存在するかどうかの確認(エクスプロイト可能かどうかの検証)は、別途専用の脆弱性スキャナーや手動での検証が必要です。

重要: WhatWebで得られた情報を元に脆弱性調査を行う場合でも、必ず対象システムの所有者から明確な許可を得てください。許可のない脆弱性スキャンや攻撃試行は違法行為となります。

これらのユースケースは一例です。WhatWebの柔軟なオプションとプラグインシステムを活用することで、アイデア次第でさらに多様な情報収集や分析が可能になります。

注意点と倫理的配慮

WhatWebはその強力さゆえに、使用にあたっていくつかの重要な注意点と倫理的な配慮が必要です。これらを無視すると、法的な問題や技術的なトラブルを引き起こす可能性があります。

  • 許可のないスキャンは絶対に避ける: これが最も重要です。あなたが所有または管理していない、あるいは明確な書面による許可を得ていないWebサイトに対してWhatWeb(特にアグレッシブモード)を使用することは、多くの国や地域で不正アクセス禁止法などの法律に違反する可能性があります。常に合法かつ倫理的な範囲内で使用してください。 教育目的であっても、許可のない第三者のサイトをスキャンすることは避けるべきです。自身のテスト環境や、scanme.nmap.org のようなスキャンが許可されているサイト、バグバウンティプログラムの範囲内のサイトなどを対象としましょう。
  • サーバー負荷への配慮: 特にアグレッシブレベル(-a 3-a 4)や多数のスレッド(-t)を使用すると、ターゲットのWebサーバーに significant な負荷をかける可能性があります。小規模なサイトやリソースの限られたサーバーでは、サービス応答遅延や、最悪の場合サービス停止を引き起こすリスクもゼロではありません。スキャン対象の環境を考慮し、必要に応じてスキャン速度を調整(--wait オプションでリクエスト間に待機時間を入れるなど)してください。
  • 検出とブロックのリスク: WhatWebのスキャン、特に積極的なものは、侵入検知システム(IDS)、侵入防止システム(IPS)、Webアプリケーションファイアウォール(WAF)によって容易に検知されます。これにより、あなたのIPアドレスからのアクセスがブロックされたり、セキュリティ担当者に通報されたりする可能性があります。プロキシ(--proxy)を使用しても、完全に匿名性が保証されるわけではありません。
  • 情報の正確性: WhatWebが出力する情報は、様々な要素(HTTPヘッダー、HTMLソース、ファイルの存在など)からの推測に基づいています。サイト管理者が意図的に情報を隠蔽したり、誤った情報を表示するように設定している場合(フィンガープリント回避)、WhatWebの結果が不正確になる可能性があります。得られた情報はあくまで参考情報として捉え、重要な判断を下す前に追加の検証を行うことが賢明です。
  • 自己責任の原則: WhatWebを使用した結果、何らかの損害(対象サーバーへの損害、法的問題など)が発生した場合、その責任はすべてツール使用者が負います。ツールを提供する開発者は、ツールの不正使用やそれによって生じた結果に対して責任を負いません。

これらの注意点を十分に理解し、責任ある態度でWhatWebを使用することが、技術者としての倫理を守り、不要なトラブルを避けるために不可欠です。

常に考えよう

「このスキャンは許可されているか?」「対象に迷惑をかけないか?」「法的に問題ないか?」
ツールを実行する前に、常にこれらの点を自問自答する習慣をつけましょう。

まとめ

WhatWebは、Webサイトの背後にある技術スタックを迅速かつ効率的に特定するための非常に強力で多機能なツールです。豊富なプラグインと柔軟なオプションにより、ペネトレーションテスター、セキュリティ研究者、Web開発者、そして技術に興味を持つすべての人々にとって、貴重な情報収集手段となります。

この記事では、WhatWebの基本的な概念からインストール方法、基本的な使い方、主要なオプション、アグレッシブスキャン、プラグインの活用、多様な出力フォーマット、そして実践的なユースケースまでを解説しました。これらの知識を活用することで、WhatWebをより深く、効果的に使いこなすことができるようになるでしょう。

しかし、その強力さゆえに、WhatWebの使用には大きな責任が伴います。常に法的・倫理的な側面を考慮し、許可された範囲内で、対象システムへの影響を最小限に抑えるよう配慮しながら使用することが不可欠です。

WhatWebは継続的に開発されており、新しいプラグインや機能が追加されています。最新情報やより詳細なドキュメントについては、以下の公式リソースを参照することをお勧めします。

この素晴らしいツールを正しく理解し、責任を持って活用することで、Web技術の世界への洞察を深め、セキュリティの向上や効率的な開発・調査に役立ててください。Let’s explore the web!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です