WordPressの脆弱性スキャンツール『wpscan』をUbuntu Server 16.04にインストールしてスキャンを行う

ブログを書く場合、かなりの確率でWordPressを利用していることが多いだろう。
ただ、利用者が多いということは、それだけ攻撃の標的になりやすくなるということでもある。

そうなるとちゃんとセキュリティの設定ができてるか、定期的に見直す必要がある。
そんなときに便利なのが、WordPress用の脆弱性スキャンツール『wpscan』だ。これは、外部から対象のWordPressブログに対してスキャンを実施し、脆弱性があるかどうかを確認するというものだ。
(当たり前だが、もちろん自分のブログ以外にこのツールを使用するとアタックとして扱われるので注意するように)

今回は、Ubuntu Server 16.04にこのツールをインストールし、実際にWordPressに対してスキャンを実施する。
なお、Kali LinuxPentooBlackArchLinuxといったセキュリティテスト用のディストリビューションには最初からインストールされているので、ただこのツールを使いたいだけであればそちらを利用すると楽だ。

1.前提パッケージのインストール

wpscanをインストールするには、以下の前提パッケージが必要となる。

  • Ruby >= 2.1.9 - Recommended: 2.3.1
  • Curl >= 7.21 - Recommended: latest - FYI the 7.29 has a segfault
  • RubyGems - Recommended: latest
  • Git

なので、以下のコマンドで前提となるパッケージをインストールをしておく。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git ruby-dev ruby libxml2 libxml2-dev libxslt1-dev libcurl4-gnutls-dev ruby-dev build-essential

2.wpscanのインストール

次に、wpscanのインストールを行う。

cd /opt
sudo git clone https://github.com/wpscanteam/wpscan.git

gemインストールを行う。

cd wpscan
sudo gem install bundler && sudo bundle install --without test

最後に、脆弱性についてのアップデートを実施する。

sudo ruby wpscan.rb--update
blacknon@BS-PUB-UBUNTU-01:/opt/wpscan$ sudo ruby wpscan.rb --update
_______________________________________________________________
        __          _______   _____
        \ \        / /  __ \ / ____|
         \ \  /\  / /| |__) | (___   ___  __ _ _ __
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.9.1
          Sponsored by Sucuri - https://sucuri.net
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[i] Updating the Database ...
[i] Update completed.

これで、wpscanのインストールができた。
rubyコマンドから利用することができるようになる。

3.スキャンを行う

インストールができたら、実際にスキャンを行ってみよう。

3-1.情報の取得のみ行う

侵入は行わず、対象のWordPressブログの情報だけを取得する場合は以下のコマンドを実行する。

sudo ruby wpscan.rb --url http://対象URL

blacknon@BS-PUB-UBUNTU-01:/opt/wpscan$ sudo ruby wpscan.rb --url http://bs-pub-wordpress-01.blacknon.local
_______________________________________________________________
        __          _______   _____
        \ \        / /  __ \ / ____|
         \ \  /\  / /| |__) | (___   ___  __ _ _ __
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.9.1
          Sponsored by Sucuri - https://sucuri.net
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://bs-pub-wordpress-01.blacknon.local/
[+] Started: Wed Sep 14 10:36:36 2016

[+] robots.txt available under: 'http://bs-pub-wordpress-01.blacknon.local/robots.txt'
[+] Interesting entry from robots.txt: http://bs-pub-wordpress-01.blacknon.local/wp-admin/admin-ajax.php
[!] The WordPress 'http://bs-pub-wordpress-01.blacknon.local/readme.html' file exists exposing a version number
[+] Interesting header: LINK: <http://bs-pub-wordpress-01.blacknon.local/wp-json/>; rel="https://api.w.org/"
[+] Interesting header: SERVER: nginx/1.6.3
[+] Interesting header: X-POWERED-BY: PHP/7.0.10
[+] XML-RPC Interface available under: http://bs-pub-wordpress-01.blacknon.local/xmlrpc.php

[+] WordPress version 4.6.1 (Released on 2016-09-07) identified from advanced fingerprinting, meta generator, readme, links opml, stylesheets numbers

[+] WordPress theme in use: twentysixteen - v1.3

[+] Name: twentysixteen - v1.3
 |  Latest version: 1.3 (up to date)
 |  Location: http://bs-pub-wordpress-01.blacknon.local/wp-content/themes/twentysixteen/
 |  Readme: http://bs-pub-wordpress-01.blacknon.local/wp-content/themes/twentysixteen/readme.txt
 |  Style URL: http://bs-pub-wordpress-01.blacknon.local/wp-content/themes/twentysixteen/style.css
 |  Theme Name: Twenty Sixteen
 |  Theme URI: https://wordpress.org/themes/twentysixteen/
 |  Description: Twenty Sixteen is a modernized take on an ever-popular WordPress layout ― the horizontal masthe...
 |  Author: the WordPress team
 |  Author URI: https://wordpress.org/

[+] Enumerating plugins from passive detection ...
[+] No plugins found

[+] Finished: Wed Sep 14 10:36:41 2016
[+] Requests Done: 43
[+] Memory used: 10.762 MB
[+] Elapsed time: 00:00:05

3-2.ログインユーザ一覧を取得する

WordPressへのログインユーザ一覧を取得する場合は、以下のようにコマンドを実行する。

sudo ruby wpscan.rb --url http://対象URL -e u
blacknon@BS-PUB-UBUNTU-01:/opt/wpscan$ sudo ruby wpscan.rb --url http://bs-pub-wordpress-01.blacknon.local -e u
_______________________________________________________________
        __          _______   _____
        \ \        / /  __ \ / ____|
         \ \  /\  / /| |__) | (___   ___  __ _ _ __
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.9.1
          Sponsored by Sucuri - https://sucuri.net
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://bs-pub-wordpress-01.blacknon.local/
[+] Started: Wed Sep 14 10:48:37 2016

[+] robots.txt available under: 'http://bs-pub-wordpress-01.blacknon.local/robots.txt'
[+] Interesting entry from robots.txt: http://bs-pub-wordpress-01.blacknon.local/wp-admin/admin-ajax.php
[!] The WordPress 'http://bs-pub-wordpress-01.blacknon.local/readme.html' file exists exposing a version number
[+] Interesting header: LINK: <http://bs-pub-wordpress-01.blacknon.local/wp-json/>; rel="https://api.w.org/"
[+] Interesting header: SERVER: nginx/1.6.3
[+] Interesting header: X-POWERED-BY: PHP/7.0.10
[+] XML-RPC Interface available under: http://bs-pub-wordpress-01.blacknon.local/xmlrpc.php

[+] WordPress version 4.6.1 (Released on 2016-09-07) identified from advanced fingerprinting, meta generator, readme, links opml, stylesheets numbers

[+] WordPress theme in use: twentysixteen - v1.3

[+] Name: twentysixteen - v1.3
 |  Latest version: 1.3 (up to date)
 |  Location: http://bs-pub-wordpress-01.blacknon.local/wp-content/themes/twentysixteen/
 |  Readme: http://bs-pub-wordpress-01.blacknon.local/wp-content/themes/twentysixteen/readme.txt
 |  Style URL: http://bs-pub-wordpress-01.blacknon.local/wp-content/themes/twentysixteen/style.css
 |  Theme Name: Twenty Sixteen
 |  Theme URI: https://wordpress.org/themes/twentysixteen/
 |  Description: Twenty Sixteen is a modernized take on an ever-popular WordPress layout ― the horizontal masthe...
 |  Author: the WordPress team
 |  Author URI: https://wordpress.org/

[+] Enumerating plugins from passive detection ...
[+] No plugins found

[+] Enumerating usernames ...
[+] Identified the following 2 user/s:
    +----+----------+----------+
    | Id | Login    | Name     |
    +----+----------+----------+
    | 1</span>  | <span style="color: #ff0000;">blacknon</span> | <span style="color: #ff0000;">blacknon |
    | 2</span>  | <span style="color: #ff0000;">test</span>     | <span style="color: #ff0000;">test     |
    +----+----------+----------+

[+] Finished: Wed Sep 14 10:48:44 2016
[+] Requests Done: 57
[+] Memory used: 12.027 MB
[+] Elapsed time: 00:00:07

確かに、ユーザ名の一覧が見れているようだ。
結構怖いなぁ…

3-3.ディクショナリアタック(辞書攻撃)によるパスワードの取得

ユーザ名がわかったら、ディクショナリアタック(辞書攻撃)でのログインが行えるかどうかのテストが行える。
この際、コマンド実行時に辞書ファイルを指定してやる。つまり、よく攻撃者が使うであろう辞書にパスワードが乗ってなければ(推測しやすい、キーワードなどを含む脆弱なパスワードでなければ)、この攻撃の影響は受けにくいということになる。今回は、テストのために意図的に脆弱なパスワード(password)を設定している。

sudo ruby wpscan.rb -u http://対象URL/ -w パスワードファイル(辞書ファイル) -U ユーザ名

なお、よく使われるキーワードを持つ辞書ファイルだが、John the Ripperの開発元であるOpenWallの配布している無料のパスワードリストでいいだろう。
以下のコマンドでダウンロード、展開しておく。

wget http://download.openwall.net/pub/wordlists/all.gz
gunzip all.gz
blacknon@BS-PUB-UBUNTU-01:/opt/wpscan$ sudo ruby wpscan.rb -u http://bs-pub-wordpress-01.blacknon.local -w all -U blacknon
[sudo] blacknon のパスワード:
_______________________________________________________________
        __          _______   _____
        \ \        / /  __ \ / ____|
         \ \  /\  / /| |__) | (___   ___  __ _ _ __
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                       Version 2.9.1
          Sponsored by Sucuri - https://sucuri.net
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://bs-pub-wordpress-01.blacknon.local/
[+] Started: Thu Sep 15 08:35:02 2016

[+] robots.txt available under: 'http://bs-pub-wordpress-01.blacknon.local/robots.txt'
[+] Interesting entry from robots.txt: http://bs-pub-wordpress-01.blacknon.local/wp-admin/admin-ajax.php
[!] The WordPress 'http://bs-pub-wordpress-01.blacknon.local/readme.html' file exists exposing a version number
[+] Interesting header: LINK: <http://bs-pub-wordpress-01.blacknon.local/wp-json/>; rel="https://api.w.org/"
[+] Interesting header: SERVER: nginx/1.6.3
[+] Interesting header: X-POWERED-BY: PHP/7.0.10
[+] XML-RPC Interface available under: http://bs-pub-wordpress-01.blacknon.local/xmlrpc.php

[+] WordPress version 4.6.1 (Released on 2016-09-07) identified from advanced fingerprinting, meta generator, readme, links opml, stylesheets numbers

[+] WordPress theme in use: twentysixteen - v1.3

[+] Name: twentysixteen - v1.3
 |  Latest version: 1.3 (up to date)
 |  Location: http://bs-pub-wordpress-01.blacknon.local/wp-content/themes/twentysixteen/
 |  Readme: http://bs-pub-wordpress-01.blacknon.local/wp-content/themes/twentysixteen/readme.txt
 |  Style URL: http://bs-pub-wordpress-01.blacknon.local/wp-content/themes/twentysixteen/style.css
 |  Theme Name: Twenty Sixteen
 |  Theme URI: https://wordpress.org/themes/twentysixteen/
 |  Description: Twenty Sixteen is a modernized take on an ever-popular WordPress layout ― the horizontal masthe...
 |  Author: the WordPress team
 |  Author URI: https://wordpress.org/

[+] Enumerating plugins from passive detection ...
[+] No plugins found
[+] Starting the password brute forcer
  [+] [SUCCESS] Login : blacknon Password : password

  Brute Forcing 'blacknon' Time: 00:00:14 < > (100 / 5014959)  0.00%  ETA: ??:??:??
  +----+----------+------+----------+
  | Id | Login    | Name | Password |
  +----+----------+------+----------+
  |    | blacknon |      | password |
  +----+----------+------+----------+

[+] Finished: Thu Sep 15 08:35:22 2016
[+] Requests Done: 149
[+] Memory used: 18.555 MB
[+] Elapsed time: 00:00:20

これを見ると、辞書のパスワードを総当たりでアタックすることを考えたら相応の時間がかかると思われるが、それでも脆弱なパスワードが危険だということがわかる。
ある程度複雑性を持ったパスワードを設定するようにしよう。

3-4.インストールされているテーマの情報を取得

WordPressにインストールされているテーマについて情報を取得する場合は、以下のコマンドを実行する。

sudo ruby wpscan.rb -u http://対象URL/ -e t # テーマの情報を取得
sudo ruby wpscan.rb -u http://対象URL/ -e vt # 脆弱性のあるテーマのみ抽出
sudo ruby wpscan.rb -u http://対象URL/ -e at # すべてのテーマをスキャンする

基本的には、脆弱性のあるテーマのみを抽出して確認してやればいいだろう。

3-5.インストールされているプラグインの情報を取得

テーマ情報と同じように、プラグインについても調査をすることができる。

sudo ruby wpscan.rb -u http://対象URL/ -e p # プラグインの情報を取得
sudo ruby wpscan.rb -u http://対象URL/ -e vp # 脆弱性のあるプラグインのみ抽出
sudo ruby wpscan.rb -u http://対象URL/ -e ap # すべてのプラグインをスキャンする

テーマよりは、こちらのほうが引っ掛かりやすいだろうと思う。
定期的なプラグインのアップデートをしよう。

とまぁ、結構簡単に脆弱性診断が行えるのだが、裏を返せばそれだけ簡単に攻撃が行えるということで、WordPressを使っている人はセキュリティに気を付けて運営しよう。