今回は、WPScanというWordPressのセキュリティ診断ツールをご紹介します。
WPScanの概要
WPScanの主な機能は以下の通りです。
- 侵入を試行しない単純なスキャン
- ログインユーザ一覧の取得
- ログインパスワードのブルートフォースアタックと取得
- インストールされているプラグインの列挙とバージョンの取得
- インストールされているテーマとバージョンの取得
この他にも、プロキシを指定できたり、ブルートフォースのパスワードファイルや、リクエストのスレッド数を指定できたりします。
インストール
WPScanはRubyで動くツールですが、要件としてRuby1.9.2以上が必要となります。(推奨は1.9.3以上)
いつも使っているCentOS6は、yumでそのままインストールすると1.8系が入ってしまいます。
そこで、できるだけ簡単にしたいので、今回はUbuntuを使うことにしました。
使ったUbuntuは、AWSで公開されているものを利用しました。
バージョン「13.10」のものです。
# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=13.10
DISTRIB_CODENAME=saucy
DISTRIB_DESCRIPTION=”Ubuntu 13.10″
WPScanの要件の一覧はこんな感じです。
- Windows not supported
- Ruby >= 1.9.2 – Recommended: 1.9.3
- Curl >= 7.21 - Recommended: latest – FYI the 7.29 has a segfault
- RubyGems - Recommended: latest
- Git
まずは、Ubuntu側の準備です。
このUbuntuは、最小インストール状態なので、最初にパッケージリストを入手します。
# apt-get update
利用できるrubyの確認をします。
- Ruby1.9系
# apt-cache search ^ruby1.9
ruby1.9.1 – Interpreter of object-oriented scripting language Ruby
ruby1.9.1-dev – Header files for compiling extension modules for the Ruby 1.9.1
ruby1.9.1-examples – Examples for Ruby 1.9
ruby1.9.1-full – Ruby 1.9.1 full installation
ruby1.9.3 – Interpreter of object-oriented scripting language Ruby, version 1.9.3
1.9.3のバージョンが使えるようです。
- Ruby2系
# apt-cache search ^ruby2
ruby1.9.1 – Interpreter of object-oriented scripting language Ruby
ruby1.9.1-dev – Header files for compiling extension modules for the Ruby 1.9.1
ruby1.9.1-examples – Examples for Ruby 1.9
ruby1.9.1-full – Ruby 1.9.1 full installation
ruby1.9.3 – Interpreter of object-oriented scripting language Ruby, version 1.9.3
ruby2.0が使えますが、今回は「1.9.3」のものを使うことにします。
次に必要なものをインストールします。
# apt-get install libcurl4-gnutls-dev libopenssl-ruby libxml2 libxml2-dev libxslt1-dev ruby-dev git ruby1.9.3 make
全てインストールできるまで、少々時間がかかります。
インストールが終わったら、WPScanのインストールを行います。
# git clone https://github.com/wpscanteam/wpscan.git
# cd wpscan
# gem install bundler && bundle install –without test development
こちらも少々時間がかかります。
全て終われば、WPScanのインストール完了です。
使い方
インストールしたディレクトリに、wpscan.rbというファイルがあり、これが本体のファイルになります。
このwpscan.rbを実行して使います。
侵入を試行しない単純なスキャン
まずは一番簡単な使い方です。
# ruby wpscan.rb -u www.example.com
※「www.example.com」の部分は、WordPressがインストールされた対象サイトのURLを指定します。
ログインユーザ一覧の取得
# ruby wpscan.rb -u www.example.com -e u
ユーザID、ログインユーザ名、ブログ上の表示名が一覧で取得出来てしまいます。
ログインパスワードのブルートフォースアタックと取得
# ruby wpscan.rb -u www.example.com -w password.txt -U admin –threads 10
対象サーバに負荷をかけ過ぎないように「–threads」でリクエストのスレッド数を指定しています。
ここでは、ユーザ「admin」に対して、「password.txt」というパスワードファイルを使って、パスワードの取得を試みていて、「qwerty」というパスワードを見事取得しています。
パスワードファイルの中身は、以下のような感じで作ってみました。
# cat password.txt
qazwsx
123456
abcdef
passwd
qwerty
hogehoge
test01
一行に1つのパスワードという書き方であれば、どんな内容でもいいので、自由に作ることができます。
インストールされているプラグインの列挙とバージョンの取得
# ruby wpscan.rb -u www.example.com -e ap
停止しているプラグインも表示されます。
コマンド最後の「-e ap」というオプションは、全てのプラグインをチェックするという意味ですが、今回は、検出できないものが1つだけありました。
インストールされているテーマとバージョンの取得
# ruby wpscan.rb -u www.example.com -e at
プラグイン同様にテーマの詳細が表示されます。
最後に
こういったツールは攻撃ツールにも使えてしまうので、悪用は厳禁ですが、逆に考えると、攻撃パターンを予想した対策が打てるという意味で、とても有効なセキュリティ対策の1つだと思います。
よかったら是非活用してみてください。
次回予定
次回は、クラウド系のことを紹介したいと思います。
更新予定は、12月中旬頃です。