コンテンツにスキップ

WordPressスキャン#

サーバ上にインストールされているWordPressコア、プラグイン、テーマの一覧を自動取得し、脆弱性を検知できます。 WordPress関連だけで2万件以上の脆弱性情報を持つ「wpscan.com」の脆弱性データベースを利用します。

本機能は、まず WordPress が稼働する OS 上にて Vuls スキャナが wp コマンドを実行し、WordPress コア、プラグイン、テーマの完全なバージョンリストを取得します。 完全なリストを元に検知するため、ネットワーク型のスキャナ(シグニチャから推測する方式)よりも高精度の検知が可能です。 また、擬似攻撃は行わない非破壊型スキャンのため本番サイトに影響を及ぼしません。

対象

本機能は Linux 上にセットアップされた WordPress が対象です。

設定方法#

WordPress のスキャンには以下の設定が必要です。

ハンズオン形式

本マニュアルの内容のハンズオン記事を FutureVuls ブログにて公開しています。

WordPressの脆弱性を管理!コア、プラグイン、テーマの脆弱性を検知する方法

WPScan API Token の取得と FutureVuls への登録#

  1. wpscan.com」よりアカウントを登録して、API Token を取得してください

  2. FutureVuls を開き、グループ設定 > 外部連携 > WordPress Vulnerability Database API に先程発行した API Token を登録してください

image

image

  • 「無効化プラグインも対象」をチェックすると、WordPress 側で無効化されているプラグインとテーマの脆弱性も検知します。
  • チェックを入れない場合は、有効化されているものの脆弱性のみを検知します。
  • 登録後に「無効化プラグインも対象」を変更したい場合は、一度 wpscan の設定を削除してから再度登録し直してください。
  • FutureVuls では「スキャン対象の Wordpress のコア、プラグイン、テーマ」1つにつき「1 API」を消費します。
  • wpscan.com のプランの種類によって API 上限数が異なります。
  • wpscan.com の API 上限を超える場合は、wpscan.com の有償契約が別途必要です。
  • FutureVuls では wpscan.com の代理契約は行いません。お客様にて直接契約してください。

スキャナの設定#

/opt/vuls-saas/config.toml を編集します。

この設定では、OS パッケージと WordPress の両方がスキャンされます。

[servers]

  [servers.dev]
    user = "vuls-saas"
    host = "localhost"
    port = "local"
    scanMode = ["fast-root"]
    [servers.dev.uuids]
      dev = "xxxx-xxxx-xxxx-xxxx"

  [servers.dev.wordpress]
    cmdPath = "/usr/local/bin/wp"
    osUser = "wordpress"
    docRoot = "/home/kusanagi/wp/DocumentRoot/"
  • cmdPath には wp コマンドの絶対パスを指定してください
    • 絶対パスの確認コマンド: which wp
  • osUser には、wp コマンドが実行可能なユーザを指定します
  • docRoot には WordPress の DocumentRoot を指定します

スキャン対象サーバの sudoers への設定追記#

Vuls スキャナは、スキャン対象サーバ上で sudo -u <user> -i して wp コマンドをパスワードなしで実行できなければなりません。 WordPress が稼働するスキャン対象サーバ上の /etc/sudoers.d/vuls-saas に以下の設定を追記してください。
wp コマンド実行可能なユーザやパスが異なる場合は、環境に合わせて適宜修正してください。

<user> ALL=(ALL) NOPASSWD:SETENV: /bin/bash -c /usr/local/bin/wp cli *, /bin/bash -c /usr/local/bin/wp core *, /bin/bash -c /usr/local/bin/wp theme *, /bin/bash -c /usr/local/bin/wp plugin *

Vulsスキャナのアップデート時に /etc/sudoers.d/vuls-saas が上書きされ、次回スキャン時にエラーとなる可能性があります。Vulsスキャナのアップデート後に再度 /etc/sudoers.d/vuls-saas を編集する必要があるのでご注意下さい。

スキャン実行#

すぐにスキャンする場合は「手動スキャン」を実施してください。

WordPress のみをスキャンする場合#

/opt/vuls-saas/config.toml を編集し、scanModules = ["wordpress"] を指定します。 この設定では、OS パッケージはスキャンされません。

[servers]

  [servers.dev]
    user = "vuls-saas"
    host = "localhost"
    port = "local"
    scanModules = ["wordpress"]
    [servers.dev.uuids]
      dev = "xxxx-xxxx-xxxx-xxxx"

  [servers.dev.wordpress]
    cmdPath = "/usr/local/bin/wp"
    osUser = "wordpress"
    docRoot = "/home/kusanagi/wp/DocumentRoot/"

複数の WordPress サイトをスキャンする場合#

/opt/vuls-saas/config.toml を以下のように編集します。

[servers]

  [servers.dev]
    user = "vuls-saas"
    host = "localhost"
    port = "local"
    scanModules = ["wordpress"]
    [servers.dev.uuids]
      dev = "xxxx-xxxx-xxxx-xxxx"

  [servers.dev.wordpress]
    cmdPath = "/usr/local/bin/wp"
    osUser = "wordpress"
    docRoot = "/home/kusanagi/wp/DocumentRoot/"

  ## config.toml内で重複しない名前を付ける(今回はYYYYとした)
  [servers.YYYY]
    user = "vuls-saas"
    host = "localhost"
    port = "local"
    scanModules = ["wordpress"]
    ## UUIDが他と重複しないように変更する
    [servers.YYYY.uuids]
      YYYY = "yyyy-yyyy-yyy-yyyy"

  ## 上で名付けたYYYYに変更する
  [servers.YYYY.wordpress]
    cmdPath = "/usr/local/bin/wp"
    osUser = "wordpress"
    docRoot = "/home/kusanagi/wp/DocumentRoot2/"

OS パッケージと WordPress を、別のサーバとして管理したい場合#

FutureVuls の画面では「別のサーバ」として管理したい場合は、以下のように /opt/vuls-saas/config.toml を編集し、サーバ定義を分割します。

[servers]

  # devはFutureVuls上でOSパッケージ脆弱性管理用
  [servers.dev]
    user = "vuls-saas"
    host = "localhost"
    port = "local"
    [servers.dev.uuids]
      dev = "xxxx-xxxx-xxxx-xxxx"

  # ZZZZはWordPress用
  [servers.ZZZZ]
    user = "vuls-saas"
    host = "localhost"
    port = "local"
    scanModules = ["wordpress"]
    [servers.ZZZZ.uuids]
      ZZZZ = "zzzz-zzzz-zzzz-zzzz"

  [servers.ZZZZ.wordpress]
    cmdPath = "/usr/local/bin/wp"
    osUser = "wordpress"
    docRoot = "/home/kusanagi/wp/DocumentRoot/"