WordPress の本体、テーマ、プラグインに対して丸ごとセキュリティ状態を診断できるツール、それがWPScanです。
今回は無料版の WPScan をローカルマシンにインストールして脆弱性診断をしました。どのような情報を返してくれるのか、画面とともにご紹介します。
注意:ご紹介のスキャンは自分の所有しているサイトを対象としてください。他人のウェブサイトに対して実行すると、ハッキングとみなされるリスクがあります。自己責任で行ってください。
目次
大量の脆弱性情報を保持しているWPScan
WPScanには連日情報公開されるWordPress本体、WordPressのテーマ、各プラグインの脆弱性情報が保存されており、そのデータベースに登録されている脆弱性の数は43,000件以上です。
今回実行したのはコマンドで脆弱性診断をするWP Scan
WP Scanを利用して脆弱性診断する方法はいくつかあります。
1. WPScanのサイトを通じた簡易チェック
WPScanのサイトから簡単なセキュリティチェックができます。
URLを入れて、利用規約にチェックしたスキャンチェック。ちなみに、スキャン行為は対象のWordPressに負荷がかかるため、サーバーエラーや閲覧遅延などを引き起こす場合があります。
スキャン後、今回のテストにおいてはWordPress本体とテーマは問題ないものの、プラグインに脆弱性の可能性があると表示されました。ただし、詳細のレポートを見るにはメールアドレスと利用法を回答する必要があります。
メールアドレスと利用法を入力すると詳細レポートが確認できます。今回は人気記事を表示するプラグイン、「WordPress Popular Posts」に対して6個の脆弱性があると診断されました。しかしよく見ると、「Version」欄が空欄となっています。これはバージョン情報が取得できなかったため、現在登録されている脆弱性データベースを元に表示されているセキュリティ懸念となります。
実際はこのプラグインは最新版となっており、公開されている脆弱性情報はありませんでした。
この方法はあくまでも簡易的なチェックとなり、より詳細にチェックする場合は以降の方法が推奨されます。レポートの免責事項にも「すべてのプラグインとテーマを検出できない場合がある」と書いてあります。実際、導入しているプラグイン全てはチェックできておらず、検出できたのは全体の3割程度。これでは精度が悪すぎて、利用は中々難しいですね……。
2. プラグインを利用する
WPScan – WordPress Security Scanner – WordPress プラグイン | WordPress.org 日本語
WordPress本体、テーマ、プラグインのスキャンに加え、以下のようなセキュリティもチェックしてくれます。
- debug.logファイルのチェック
- wp-config.phpバックアップファイルのチェック
- XML-RPCが有効かどうかのチェック
- コードリポジトリファイルのチェック
- デフォルトの秘密鍵が使用されているかチェック
- エクスポートされたデータベースファイルのチェック
- 弱いパスワードか
- HTTPSが有効か
利用するにはWPScanへの登録が必要で、登録することでAPIキーが利用できます。基本的には無料で利用できますが、1日あたり25リクエストよりも多く使う場合、有料プランの契約が必要です。
インストールするだけで管理画面から操作できるため、導入・操作のしやすさが特徴で、各プラグインのバージョンも取得できるため、細かいセキュリティチェックも可能です。
ただ、記事執筆時点で有料プラン以外の利用者には今後サポート無しとプラグインページに名言されており、今後の利用は Jetpack Protect を使うよう推奨されています。こちらのプラグインも脆弱性情報のデータベースはWPScanを利用しているプラグインです。
3. コマンドラインインターフェースを利用する
そしてこれが今回試した、CLI(コマンドラインインターフェース)を用いてスキャンする方法です。今回はmacのターミナルにインストールして実行しました。
ドキュメントはgithubに公開されています。
WPScan User Documentation · wpscanteam/wpscan Wiki · GitHub
今回はmacのローカルにインストールしたため、Homebrewを使って brew install wpscanteam/tap/wpscan
とするだけで簡単にインストールできました。
最初、rubyのバージョンが低くインストールできず、rbenvのバージョンアップやらに手こずったのですが、ドキュメントに書かれた方法で行えばそんな作業は全く必要ありませんでした……。やはり「ネットの情報<ドキュメント」ですね。英語だからといって避けては駄目だといういい教訓になりました。
インストール後すぐにWPScanを実行できます。$ wpscan --url https://example.com/ -e ap --plugins-detection mixed --api-token YOUR_API_TOKEN
という、時間がかかる全プラグインをチェックする方法を選択しました。APIトークンは公式サイトで取得した独自のAPIトークンを入力してください。
これで分かる情報はWordPress本体、テーマ、プラグインの脆弱性情報に加え、以下です。
- サーバー情報
- XML-RPCが有効かどうか
- ‘Must Use Plugins’が存在するかどうか
- 外部WP-Cronが有効になっているかどうか
- WordPressのバージョン
プラグインは検出はしたものの、多くのプラグインでバージョン情報までは検出できていませんでした。やはり外部からのチェックだと限界があるんでしょうね。時間がかかるということだったので覚悟していましたが、約10,000リクエストで全体の時間は1時間ちょっとでした。
コマンドラインインターフェースを使うメリットとしては、弱いパスワードを使っているユーザーを特定するためのブルートフォーススキャンを実行することができたり、チェックするモードを意図的に指定できたり、スキャン対象を脆弱性のあるプラグイン・全プラグイン・データベース・ユーザー・メディアなど指定したりと、細かいオプションが提供されています。これによって、より高い柔軟性や深いレベルでのスキャンが可能となります。
定期的なチェックでWordPressを安心して運用する
WordPressの脆弱性は利用しているプラグイン数に応じて比例します。オープンソースという性質上、どうしても脆弱性が発見されることは避けられず、公開されるたびに更新して適応していくという利用方法が安全となります。
こういったツールを利用して、定期的に保守を行っている自分が管理するWordPressが安心かどうかをチェックしましょう。
個人的には、CLIで各プラグインのバージョンを指定してチェックができそうなので、今度時間を見つけてその方法を模索したいですね。もし何かわかったらまた続きを書こうと思います。
コメントを残す