WordPressサイトのセキュリティを強化するための第一歩
WPScanとは? 🤔
WPScanは、WordPress(ワードプレス)で構築されたウェブサイトのセキュリティ脆弱性を発見するために特化して開発された、非常に強力なオープンソースの脆弱性スキャナーです。世界中のセキュリティ専門家やウェブサイト管理者に利用されており、WordPressサイトの安全性を確認するための定番ツールとなっています。
このツールを使うことで、以下のような情報を収集・分析できます:
- WordPress本体のバージョン情報と、そのバージョンに存在する既知の脆弱性
- インストールされているテーマやプラグインの特定と、それらに存在する既知の脆弱性
- 設定不備(例:デバッグモードが有効、特定のファイルが公開されているなど)
- ユーザーアカウント名の列挙(ユーザー名を推測する)
- 弱いパスワードの試行(ブルートフォース攻撃) ※実施には細心の注意が必要
WPScanを利用する主な目的は、自身の管理するWordPressサイトのセキュリティ診断を行い、潜在的なリスクを特定して対策を講じることです。ペネトレーションテスト(侵入テスト)の一環としても利用されます。
⚠️ 重要な注意点
WPScanは非常に強力なツールですが、その力を悪用することは絶対に許されません。自分の管理下にあるサイト、または明確な許可を得たサイト以外に対してWPScanを使用することは、不正アクセス行為とみなされ、法的に罰せられる可能性があります。 必ず倫理的な利用を心がけてください。
WPScanのインストール 💻
WPScanを利用するためには、まずお使いの環境にインストールする必要があります。いくつかのインストール方法がありますが、代表的なものを紹介します。
1. パッケージマネージャーを利用する方法 (推奨)
多くのLinuxディストリビューションやmacOSでは、パッケージマネージャーを使って簡単にインストールできます。
-
Debian/Ubuntu系 (Kali Linuxなど):
Kali Linuxには多くの場合プリインストールされています。もしインストールされていない場合や、他のDebian/Ubuntu系OSで利用する場合は、以下のコマンドを実行します。sudo apt update && sudo apt install wpscan
-
Fedora/CentOS系:
(利用可能なパッケージリポジトリによりますが) DNFやYUMを使ってインストールできる場合があります。sudo dnf install wpscan # または yum
-
macOS (Homebrew):
Homebrewがインストールされていれば、以下のコマンドでインストールできます。brew install wpscan
2. Dockerを利用する方法 (環境分離に便利)
Dockerがインストールされていれば、ホスト環境を汚さずにWPScanを実行できます。
- Dockerイメージの取得:
docker pull wpscanteam/wpscan
- WPScanの実行:
コンテナを実行してWPScanコマンドを使用します。例えば、基本的なスキャンを実行する場合は以下のようになります。(`–rm` オプションで実行後にコンテナを削除します)
Dockerを使う場合、毎回 `docker run –rm wpscanteam/wpscan` の後にWPScanのオプションを続けます。docker run --rm wpscanteam/wpscan --url http://example.com/
3. Ruby Gemを利用する方法 (Ruby環境が必要)
WPScanはRubyで書かれているため、RubyのパッケージマネージャーであるGemを使ってインストールすることも可能です。RubyとBundlerがシステムにインストールされている必要があります。
# 必要であればBundlerをインストール
gem install bundler
# WPScanをインストール
gem install wpscan
ただし、依存関係の問題が発生することがあるため、初心者にはパッケージマネージャーやDockerの利用をお勧めします。
インストール確認
どの方法でインストールした場合でも、ターミナル(コマンドプロンプト)で以下のコマンドを実行して、バージョン情報が表示されればインストールは成功です 🎉。
wpscan --version
(Dockerの場合は `docker run –rm wpscanteam/wpscan –version`)
💡 インストール方法の選択
特に理由がなければ、OSのパッケージマネージャー(apt, brewなど)を使うのが最も手軽です。Dockerは、環境をクリーンに保ちたい場合や、特定のバージョンを使いたい場合に便利です。
基本的なスキャン方法 🚀
WPScanの最も基本的な使い方は、スキャン対象のWordPressサイトのURLを指定して実行することです。
wpscan --url <ターゲットのURL>
例えば、`http://example.com/` というサイトをスキャンする場合は、以下のようになります。
wpscan --url http://example.com/
(Dockerの場合は `docker run –rm wpscanteam/wpscan –url http://example.com/`)
この基本的なコマンドを実行すると、WPScanは以下のような情報を自動的に収集・表示しようとします:
- ヘッダー情報: サーバーの種類(Apache, Nginxなど)、PHPのバージョンなど。
- WordPressのバージョン: 特定できた場合、そのバージョン番号。
- テーマ情報: 現在有効になっているテーマの名前。
- プラグイン情報: いくつかの一般的なプラグインが有効になっているか。
- robots.txt: `robots.txt` ファイルの内容。`wp-admin` などへのアクセス制限が適切か確認できます。
- XML-RPC: XML-RPCインターフェースが有効になっているか。これはブルートフォース攻撃などに悪用される可能性があります。
- 公開されている情報: READMEファイル、設定ファイル(`wp-config.php` のバックアップなど)の存在チェック。
- 既知の脆弱性: (APIキーが設定されている場合) WordPress本体、テーマ、プラグインに関する既知の脆弱性データベースと照合します。
スキャン結果には、[+] (情報)、[!] (警告)、[!] (深刻な警告/脆弱性) といった記号が表示され、問題の重要度を視覚的に示してくれます。
⚡️ アクセス負荷に関する注意
WPScanは対象サイトに対して多数のリクエストを送信します。そのため、共有サーバーなどのリソースが限られた環境では、サーバーに負荷がかかり、サイトの表示が遅くなったり、一時的にアクセスできなくなったりする可能性があります。また、ホスティング会社によっては、スキャン行為自体を禁止または制限している場合があります。必ず事前に確認し、許可された範囲で、必要であれば負荷を抑えるオプション(後述の `–throttle` など)を使用してください。
情報収集(列挙)オプション 🧐
WPScanは、基本的なスキャンに加えて、特定の情報をより詳細に収集する「列挙 (Enumeration)」機能を持っています。`-e` または `–enumerate` オプションに続けて、列挙したい情報の種類を指定します。
ユーザー名の列挙 (`-e u`)
WordPressサイトに登録されているユーザー名を特定しようと試みます。ユーザー名がわかると、ブルートフォース攻撃などの標的になりやすくなります。
wpscan --url http://example.com/ --enumerate u
複数の列挙手法(オーサーIDスキャン、REST API、ログインエラーメッセージなど)を組み合わせてユーザー名を特定しようとします。ただし、近年のWordPressやセキュリティプラグインでは対策されている場合も多いです。
プラグインの列挙 (`-e p`, `-e vp`, `-e ap`)
インストールされている可能性のあるプラグインをリストアップします。
- `-e p` (プラグイン列挙): 一般的なプラグインや、ソースコードから検出可能なプラグインをリストアップします。
wpscan --url http://example.com/ --enumerate p
- `-e vp` (脆弱性のあるプラグイン列挙): 発見されたプラグインのうち、バージョン情報が特定でき、かつそのバージョンに脆弱性が存在する可能性があるものだけを表示します。(APIキーが必要です)
wpscan --url http://example.com/ --enumerate vp --api-token YOUR_API_TOKEN
- `-e ap` (全てのプラグイン列挙): より網羅的にプラグインを探索します。時間がかかる場合があります。
wpscan --url http://example.com/ --enumerate ap
テーマの列挙 (`-e t`, `-e vt`, `-e at`)
インストールされている可能性のあるテーマをリストアップします。
- `-e t` (テーマ列挙): 有効なテーマや、検出可能なテーマをリストアップします。
wpscan --url http://example.com/ --enumerate t
- `-e vt` (脆弱性のあるテーマ列挙): 発見されたテーマのうち、バージョン情報が特定でき、かつそのバージョンに脆弱性が存在する可能性があるものだけを表示します。(APIキーが必要です)
wpscan --url http://example.com/ --enumerate vt --api-token YOUR_API_TOKEN
- `-e at` (全てのテーマ列挙): より網羅的にテーマを探索します。時間がかかる場合があります。
wpscan --url http://example.com/ --enumerate at
複数の列挙を同時に実行
コンマ区切りで指定することで、複数の種類の情報を一度に列挙できます。
# ユーザー名、プラグイン、テーマを同時に列挙
wpscan --url http://example.com/ -e u,p,t
🎯 列挙の目的
列挙によって、攻撃者が悪用可能な情報(ユーザー名、古いバージョンのプラグインやテーマなど)を特定できます。これにより、具体的なセキュリティ対策(不要なユーザーの削除、コンポーネントのアップデートなど)を講じることができます。
脆弱性スキャン 🔍
WPScanの最も重要な機能の一つが、既知の脆弱性を検出する機能です。WordPress本体、インストールされているプラグイン、テーマに含まれる脆弱性を特定し、報告してくれます。
WPScan APIキーの利用
最新かつ詳細な脆弱性情報を取得するためには、WPScan APIキー が必要です。WPScanは独自の脆弱性データベースを保持しており、APIキーを通じてこのデータベースにアクセスします。
- APIキーは WPScan公式サイト で無料登録することで入手できます。
- 無料プランでも1日あたりのAPIリクエスト数に制限がありますが、個人サイトや小規模な診断には十分な場合が多いです。(2025年3月現在、無料プランでは1日75リクエストまで)
- 大規模なスキャンや頻繁なスキャンを行う場合は、有料プランの検討が必要です。
APIキーの設定方法
APIキーはいくつかの方法でWPScanに渡すことができます。
- コマンドラインオプション (`–api-token`) で指定:
wpscan --url http://example.com/ --api-token YOUR_API_TOKEN
毎回コマンドに含める必要があり、やや面倒です。また、コマンド履歴に残る可能性があります。
- 設定ファイルに保存 (推奨):
WPScanの設定ファイル(通常は `~/.wp scan/scan.yml` や `/etc/wpscan/scan.yml` など)にAPIキーを記述しておく方法です。一度設定すれば、毎回指定する必要はありません。
設定ファイルに以下のように追記します:
wpscan: api_token: YOUR_API_TOKEN
設定ファイルの場所は環境によって異なる場合があるので、WPScanのドキュメントを確認してください。
脆弱性スキャンの実行
APIキーが設定されていれば、基本的なスキャン (`wpscan –url …`) でも脆弱性情報が含まれるようになります。
特定のコンポーネントの脆弱性のみを重点的にチェックしたい場合は、列挙オプションと組み合わせます。
- 脆弱なプラグインのみを検出 (`-e vp`):
# APIキーは設定ファイルに記述済みの場合 wpscan --url http://example.com/ -e vp
# APIキーをコマンドで指定する場合 wpscan --url http://example.com/ -e vp --api-token YOUR_API_TOKEN
- 脆弱なテーマのみを検出 (`-e vt`):
wpscan --url http://example.com/ -e vt --api-token YOUR_API_TOKEN
- 全ての脆弱なプラグイン (`-e ap` と脆弱性チェック): WPScanは `-e ap` でも脆弱性チェックを試みます。
wpscan --url http://example.com/ -e ap --api-token YOUR_API_TOKEN
- 全ての脆弱なテーマ (`-e at` と脆弱性チェック):
wpscan --url http://example.com/ -e at --api-token YOUR_API_TOKEN
✅ 脆弱性スキャンの効果
定期的に脆弱性スキャンを実行することで、公開されている攻撃手法(Exploit)が存在するような危険な脆弱性を早期に発見できます。発見された脆弱性に対しては、速やかに該当するプラグインやテーマ、WordPress本体をアップデートする、または代替手段を検討するなどの対策が必要です。
パスワード攻撃 🔑
WPScanには、ユーザー名とパスワードのリスト(辞書ファイル)を使って、WordPressのログインパスワードを試行するブルートフォース(総当たり)攻撃機能も含まれています。
基本的なパスワード攻撃
ユーザー名が記述されたファイル (`users.txt`) と、パスワード候補が記述されたファイル (`passwords.txt`) を用意し、以下のコマンドを実行します。
wpscan --url http://example.com/ --usernames users.txt --passwords passwords.txt
`users.txt` と `passwords.txt` は、1行に1つのユーザー名またはパスワードが書かれたテキストファイルです。
特定のユーザー名に対して試行する場合は、`–usernames` に直接ユーザー名を指定できます。
wpscan --url http://example.com/ --usernames admin --passwords passwords.txt
ユーザー名列挙との組み合わせ
`-e u` オプションで列挙したユーザー名に対して、パスワードリストを使って攻撃を試みることも可能です。
wpscan --url http://example.com/ -e u --passwords passwords.txt
🚨 絶対厳守:パスワード攻撃に関する警告 🚨
ブルートフォース攻撃は、対象サーバーに極めて高い負荷をかける行為です。試行回数によってはサーバーがダウンしたり、ファイアウォールやセキュリティプラグインによって自身のIPアドレスがブロックされたりする可能性があります。
さらに重要な点として、許可なく他者のサイトに対してパスワード攻撃を行うことは、明確な不正アクセス行為であり、絶対に許されません。
この機能は、自身が管理するサイトのパスワード強度テストや、ペネトレーションテストの契約に基づき明確な許可を得ている場合にのみ、細心の注意を払って使用してください。安易な実行は絶対に避けてください。
強力なパスワードの使用、ログイン試行回数制限の導入(プラグイン等で可能)、2要素認証の導入などが、ブルートフォース攻撃への有効な対策となります。
WPScanデータベースの更新 🔄
WordPressの脆弱性情報は日々発見・公開されています。WPScanが最新の脅威を検出できるようにするためには、脆弱性データベースを常に最新の状態に保つことが非常に重要です。
以下のコマンドを実行することで、WPScanのデータベースを更新できます。
wpscan --update
(Dockerの場合は `docker run –rm wpscanteam/wpscan –update`)
このコマンドは、WPScanの脆弱性データベースをインターネットからダウンロードし、ローカルのデータベースを更新します。
⏱️ 更新の頻度
WPScanを実行する前には、毎回 `–update` を実行してデータベースを最新化することを強く推奨します。これにより、スキャンの精度を最大限に高めることができます。
その他の便利なオプション ✨
WPScanには、スキャンをより柔軟に行うための様々なオプションが用意されています。
- `–random-user-agent`, `-rua`: スキャン時に送信するUser-Agent文字列をランダムに変更します。これにより、WAF(Web Application Firewall)などによる検出を回避しやすくなる場合があります。
- `–proxy <[protocol://]host:port>`: HTTP/HTTPS/SOCKS5 プロキシサーバー経由でスキャンを実行します。
# HTTPプロキシ経由でスキャン wpscan --url http://example.com/ --proxy http://127.0.0.1:8080
# SOCKS5プロキシ経由でスキャン wpscan --url http://example.com/ --proxy socks5://127.0.0.1:9050
- `–throttle
` : 各リクエスト間に指定したミリ秒数の待機時間を挿入します。サーバーへの負荷を軽減したい場合に有効です。# 各リクエスト間に500ミリ秒 (0.5秒) の待機を入れる wpscan --url http://example.com/ --throttle 500
- `-o`, `–output FILE`: スキャン結果をターミナルに表示する代わりに、指定したファイルに出力します。
wpscan --url http://example.com/ -o scan_result.txt
- `-f`, `–format FORMAT`: 出力形式を指定します。`cli` (デフォルトのターミナル表示)、`json` (JSON形式)、`txt` (シンプルなテキスト形式) などが選択できます。JSON形式は他のツールとの連携に便利です。
# 結果をJSON形式でファイルに出力 wpscan --url http://example.com/ -o scan_result.json -f json
- `–help`: 利用可能な全てのオプションと簡単な説明を表示します。困ったときや詳細を知りたいときに役立ちます。
wpscan --help
主なオプションのまとめ表
オプション | 説明 | 例 |
---|---|---|
--url <URL> |
スキャン対象のWordPressサイトのURL | --url http://example.com/ |
-e, --enumerate [u,p,t,vp,vt,ap,at,...] |
列挙する対象 (u:ユーザー, p:プラグイン, t:テーマ, vp:脆弱プラグイン, vt:脆弱テーマ, ap:全プラグイン, at:全テーマなど) | -e u,vp,vt |
--api-token <TOKEN> |
WPScan APIキー (脆弱性情報の取得に必要) | --api-token YOUR_API_TOKEN |
--passwords <FILE> |
パスワードリストのファイル (ブルートフォース用) | --passwords passwords.txt |
--usernames <FILE/USER> |
ユーザー名リストのファイルまたは単一ユーザー名 (ブルートフォース用) | --usernames admin |
--update |
WPScanデータベースを更新 | wpscan --update |
--random-user-agent , -rua |
ランダムなUser-Agentを使用 | -rua |
--proxy <proxy_url> |
プロキシサーバーを指定 | --proxy http://127.0.0.1:8080 |
--throttle <ms> |
リクエスト間の待機時間 (ミリ秒) | --throttle 500 |
-o, --output <FILE> |
結果を指定ファイルに出力 | -o result.txt |
-f, --format <FORMAT> |
出力形式 (cli, json, txt) | -f json |
--help |
ヘルプを表示 | wpscan --help |
倫理的な考慮事項と法的側面 ⚖️
これまでWPScanの機能と使い方を見てきましたが、最後に最も重要な点について改めて強調します。
🚨 WPScan利用における絶対的なルール 🚨
-
許可なきスキャンの禁止:
自身が管理権限を持っていないウェブサイト、または所有者から明確かつ書面による許可を得ていないウェブサイトに対して、WPScanを使用することは絶対にしないでください。これは日本の「不正アクセス行為の禁止等に関する法律(不正アクセス禁止法)」に抵触する可能性のある犯罪行為です。 -
目的の明確化と同意:
たとえ自分のサイトであっても、スキャンを行う目的(脆弱性診断、設定確認など)を明確にし、共同管理者や関係者がいる場合は事前に通知・同意を得ることが望ましいです。第三者のサイトを診断する場合は、診断の範囲、期間、手法、報告方法などを定めた契約や覚書を交わすことが不可欠です。 -
負荷への配慮:
スキャン行為は対象サーバーに負荷をかけます。特にブルートフォース攻撃や網羅的な列挙は大きな負荷となる可能性があります。共有サーバーなどリソースが限られた環境では、サイトのパフォーマンスに影響を与えたり、他の利用者に迷惑をかけたりしないよう、--throttle
オプションを使用するなど、慎重に実施してください。 -
責任ある脆弱性の報告:
もし許可を得て診断したサイトで脆弱性を発見した場合、発見した情報を悪用したり、無断で公開したりせず、サイト管理者や事前に定めた報告先に速やかに、かつ責任ある方法で報告してください(責任ある開示 – Responsible Disclosure)。場合によっては、情報処理推進機構(IPA)などの第三者機関への届出も検討されます。
WPScanは、ウェブサイトを守るための強力な「盾」となり得るツールですが、使い方を誤れば容易に「矛」となり、法的な問題や倫理的な問題を引き起こします。常に正しい目的意識と倫理観を持って利用してください。
まとめ 🎉
WPScanは、WordPressサイトのセキュリティ状態を評価し、潜在的な脅威からサイトを守るために非常に役立つツールです。
- 基本的なスキャンから、ユーザー名・プラグイン・テーマの列挙、そして既知の脆弱性の検出まで、多岐にわたる機能を提供します。
- 脆弱性スキャンを最大限に活用するには、WPScan APIキーの取得と設定が推奨されます。
- 常に最新の脅威に対応するため、スキャン前には必ず
wpscan --update
でデータベースを更新しましょう。 - 様々なオプションを使いこなすことで、より効率的で目的に合ったスキャンが可能です。
そして、何よりも忘れてはならないのは、「倫理的な利用」です。
許可なく他者のサイトをスキャンすることは絶対に避け、常に責任ある行動を心がけてください。
WPScanを正しく活用し、定期的な診断を行うことで、あなたのWordPressサイトをより安全に保つことができます。ぜひ、サイトのセキュリティ強化に役立ててください! 💪
コメント