WordPressスキャン

WordPress スキャンについて

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

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

設定方法

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

  • wpscan.com にて API Token を発行
  • FutureVuls に API Token を登録
  • スキャナの設定
  • スキャン対象サーバの sudoers への設定追記
  • スキャン実施

それぞれについて説明します。

Token の取得と FutureVuls への登録

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

次に FutureVuls を開き「グループ設定 > 外部連携 > WordPress Vulnerability Database API」に、先程発行した API Token を登録します。

image

image

スキャナの設定

/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 *

スキャン実施

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/"

不明点はFAQを参照してください