FutureVulsでは、サーバにインストールされているWordPressのコア、プラグイン、テーマを自動的に取得し、脆弱性を検知できます。
WordPressのスキャンを実行するには、以下の2つのツールが必要です。
wpコマンド詳細な設定方法については、マニュアルの「WordPressスキャン」に記載していますが、wpコマンドのインストール方法やスキャナの設定手順を、一連の流れとしてまとめたガイドがあると、より分かりやすいのではないでしょうか。
そこで本記事では、WordPressの脆弱性を検知するまでの具体的な設定手順を解説します。
本記事の内容は、以下の環境で実行しました。
予め、EC2にWordPressがインストールされていることとします。
EC2の環境構築については「こちら」をご参照ください。
グループ設定 > スキャナから、Vulsスキャナのインストールコマンドを取得し、管理者権限で実行します。
詳細はマニュアルの「Linuxへのインストール」をご参照ください。
「wpscan.com」よりアカウントを登録して、「API Token」を取得します。
無料プランでは、1日に最大25回のAPIリクエストが許可されています。API上限を超える場合は、有料プラン契約が別途必要です。
FutureVulsでは wpscan.com の代理契約は行いません。お客様にて直接ご契約をお願いします。
次に、FutureVuls画面でグループ設定 > 外部連携 > WordPress Vulnerability Database APIを開きます。
追加を押し、先ほど取得したAPI Token を登録します。
「無効化プラグインも対象」をチェックすると、WordPress 側で無効化されたプラグインやテーマも検知対象に含めることができます。
今回は、チェックを入れずに登録します。
登録が完了しました。
Vulsスキャナでは、WordPressのソフトウェア情報を取得するためにwpコマンドを利用しています。そのため、事前にwpコマンドをインストールしておく必要があります。
インストール方法の詳細は「こちら」をご参照ください。
以下のコマンドを順に実行します。
インストールが完了したら、以下のコマンドでバージョンを確認できます。
Vulsスキャナの設定ファイル/opt/vuls-saas/config.toml を編集し、WordPressのみスキャン対象となるように設定します。
詳細はマニュアルの「WordPress のみをスキャンする場合」をご参照ください。
筆者の環境では、以下のように設定しました。
この設定により、WordPressのソフトウェア情報のみを取得するようになります。
次に、スキャンを実行する際にwpコマンドをパスワードなしで実行できるように/etc/sudoers.d/vuls-saasを編集します。
Vulsスキャナは、wpコマンドを使用してWordPressのソフトウェア情報を取得しますが、デフォルト状態では以下のようにパスワード入力が求められるため、スキャンを実行できません。
これは、Vulsスキャナが sudoコマンドを実行しているために発生します。スクリプトがユーザの介入なしに動作できるようにするために、パスワードの入力を不要にする設定が必要です。
詳細な手順については、マニュアルの「スキャン対象サーバの sudoers への設定追記」をご参照ください。
筆者の環境では、vuls-saasユーザでwpコマンドが実行できるように、以下の順に沿って設定しました。
現在の/etc/sudoers.d/vuls-saasを確認します。
特に設定していない限り、以下のようなデフォルト設定になっています。
この状態では wpコマンドが含まれていないため、スキャン実行時にパスワードが求められます。
wpコマンドの権限を追加visudoコマンドを使用して sudoers の設定を編集します。
以下の内容を追記します。
変更後の/etc/sudoers.d/vuls-saasは以下のようになります。
この設定により、vuls-saasユーザはwpコマンドをパスワードなしで実行できるようになり、スキャンが可能になります。
スキャナのインストール完了後、5分後に自動スキャンが実行されますが、手動でも実行可能です。
スキャン結果は以下のログファイルを確認することで、スキャンの成否やエラーの詳細を把握できます。
/opt/vuls-saas/vuls-saas.log/opt/vuls-saas/scan.log/opt/vuls-saas/report.log筆者の環境では、スキャンとアップロードが成功しました。
スキャンが成功すると、config.tomlが更新され、FutureVuls画面にスキャン結果が「サーバ」に登録されます。
FutureVuls画面のサーバ > サーバ詳細タブから、サーバが登録されているかを確認します。
サーバが登録されていることを確認できました。
次に、このサーバがスキャン対象のEC2と一致しているか、双方のUUIDを照合します。UUIDはFutureVulsでサーバを識別するためのIDです。
サーバ詳細タブのサーバ情報からUUIDを確認します。
FutureVuls画面で表示されているサーバのUUIDは31b9c9b3-68e8-79cf-632e-55615a150912でした。
次に更新されたconfig.tomlを確認し、UUIDが一致しているかを確認します。
UUIDが一致しているため、FutureVulsに登録されたサーバが、スキャン対象のEC2であることを確認できました。
スキャンを通して、WordPressのコア、プラグイン、テーマが登録されているかを確認するため、ソフトウェアタブを開きます。
正しく登録されていることを確認できました。
これらが、EC2上のWordPressのソフトウェア情報と一致しているかをwpコマンドを用いて確認します。
各ソフトウェアのバージョン情報が一致していることを確認できました。
脆弱性×タスクタブを開くと、検知された脆弱性が表示されます。
スキャン結果では、以下の4件の脆弱性が検知されました。
さらに、ソフトウェアタブを開き、これらの脆弱性がどのソフトウェアに関連しているかを確認します。
WordPressのコアに関する脆弱性が検知されていました。
この結果が、正しいかどうかを検証するため、WPScanのAPIを用いて以下のコマンドを実行し、WordPressのコアバージョン6.5の脆弱性情報を取得します。
Futurevulsに表示された脆弱性4件が、WPScanのデータベースにある脆弱性情報と一致していました。
このように、FutureVulsでは、WordPressのコア、プラグイン、テーマの脆弱性をWPScanのデータベースと連携して直接取得し、検知・管理できます。
Vulsスキャナは、OSやミドルウェアのパッケージ、アプリケーションの依存ライブラリの脆弱性が検知対象のため、以下のようなソフトウェアは検知対象外です。
これらを脆弱性管理の対象とするには、CPE形式で登録する必要があります。
詳細は、マニュアルの「CPEスキャン」をご参照ください。
今回のwpコマンドは、パッケージ管理ツール(yum, dnf, apt)を用いず、ベンダの公式サイトからダウンロードしたため、Vulsスキャナでは検知対象外となり、CPE登録が必要になります。
FutureVulsでCPE追加の方法はいくつかありますが、ここでは「CPE入力機能」を使用して、バージョン2.3形式で追加します。
wpコマンドは「NVD」にて、以下フォーマットのCPE名が指定されております。
こちらをCPEスキャン対象として登録することにより、wpコマンドの脆弱性管理が可能となります。
確認したバージョンをCPE形式(バージョン2.3)に変換します。
FutureVuls画面のサーバ > ソフトウェア > CPE追加から、CPEを登録します。
ダイアログの「和製ソフトウェアの脆弱性をJVNで検知する」は選択せずに送信をクリックします。
その後、CPEが追加されていることを確認します。
CPEの追加が完了しました。
次に、サーバ詳細タブから「手動スキャン」を実行し、脆弱性が検知されるかを確認します。
また「スキャン履歴」をクリックすると、スキャン結果を確認することができます。
wpコマンドに関する脆弱性は検知されませんでした。
FutureVulsのCPEスキャンは、「NVD」と「JVN」の情報を基に、脆弱性を検知します。
脆弱性が検知されなかった結果が正しいかどうかを検証するために、NVDでCPEを検索してみます。
NVDでのCPE検索は「こちら」から行えます。
検索結果から、WP-CLI 2.11.0に関する脆弱性は見つかりませんでした。
このように、該当のCPE名で検索することで、CPEスキャン結果の妥当性を確認することができます。
本記事では、WordPressの脆弱性スキャン手順を紹介しました。最後に、WordPressの脆弱性管理を行う際に、FutureVulsを活用する場合とそうでない場合の違いを以下にまとめます。
FutureVulsを使用しない場合
FutureVulsを使用する場合
このように、FutureVulsを導入することで、WordPressのセキュリティ管理をより効率的に行うことが可能になります。
本記事が、WordPressの脆弱性管理のお役に立てれば幸いです。
FutureVulsの詳細な説明やデモのご要望は「こちら」からお気軽にお問い合わせください。