みなさんこんにちは。小川です。
タイトルは少々釣り気味です。

突然ですが、僕たちはセキュアなサイトを構築する責任を持っています。
攻撃からサイトを守るためには、どのように攻撃されるかを知る必要があります。

というわけで今回「WPScan」というWordPressの脆弱性をスキャンするセキュリティ診断ツールを使って、WordPressサイトを攻撃してみたいと思います。

本来であれば当サイトで検証するべきなのですが、おもしろくないので九州某県で炭火焼き地鶏屋を営む僕の友人のTさんにお願いしてみることにしました。面倒見がよく、とてもやさしい先輩です。やるからにはIT企業の威信にかけてTさんのWordPressサイトをめった打ちにしたいと思います。

面倒ですが、許可をとらないと犯罪になってしまうので、事前にお願いすることにしました。

小川
Tさん、ごぶさたです。

T
おー、ひさしぶり。どうしたの?

小川
地鶏屋さんのサイトってWordPressですよね?

T
そうだよ。

小川
攻撃していいですか?

T
・・・・は?
絶対だめだろ。

セキュリティ対策を交換条件にまるめこみました。
敵を欺くにはまず味方からと言います。
ちょろいぜ。

WPScanの設定手順

WPScan WordPress Security Scanner
https://wpscan.com/wordpress-security-scanner

まずは本家サイトでzipをゲットだぜ。
使用環境は以下。

  • OS X 10.11 El Capitan
  • Ruby 2.0.0

ZIPファイルを解凍したら、ターミナルを起動してWPScanディレクトリに移動。

% cd /path/to/wpscan

WPScanに必要なパッケージのインストール。

% sudo gem install bundler && bundle install

エラー

An error occurred while installing ffi (1.9.10), and Bundler cannot continue.
Make sure that `gem install ffi -v '1.9.10'` succeeds before bundling.

ぐぐったらXcodeのコマンドラインツールがインストールされていないからでるらしい

Xcodeを起動、アップデートさせてターミナルから

% xcode-select --install

再度

% sudo gem install bundler && bundle install
ERROR: While executing gem ... (Errno:EPERM)
Operation not permitted - /usr/bin/bundle

rootに権限がないと怒られます。

OS X El Capitanから導入された新セキュリティシステムSIP(System Integrity Protection、rootless)が原因。El Capitanからrootでも変更不可の領域ができたようです。だけど解除できるとのことなので、今回に限り無効化にすることにしました。システム終了 / 電源ボタン押下後、Command+Rで復元システムを起動させ、ターミナルからcsrutil disableでSIPを無効化できます。

再起動で通常起動後、ターミナルから以下のコマンド実行。
現在ログインしているユーザーに/usr/localの権限を与えます。

sudo chflags norestricted /usr/local && sudo chown -R $(whoami):admin /usr/local

おわったら、復元システムからSIPの設定を戻しておきましょう。戻すときは csrutil enableです。

で、再度

% sudo gem install bundler && bundle install

ようやく準備できました。

WPScanの実行

WPScanの準備が整ったところで、Tさんに再度連絡。

小川
準備できました。

T
おおお、攻撃されるのにワクワクするな。

小川
いきますよ。

まずは簡単なスキャンから。

% wpscan -url https://xxxxxxx.xxx

ログインユーザーをスキャン。

% wpscan -url http://xxxxxxx.xxx -e u

ログインユーザーが特定できたところで、パスワードリストからブルートフォースアタックしてみます。

darkc0de.lst – Google Drive
https://drive.google.com/file/d/0B-c-aPfOv8-SOHA0QVRiOE5tRVk/edit

パスワードリストをダウンロードしてwpscanのディレクトリに入れて引数に指定します。

% wpscan —url http://xxxxxxx.xxx -w darkc0de.lst

17万のパスワードリストで攻撃します。
さっそくログインURLのwp-login.phpが503 Service Unavailableでアクセス不能になりました。

小川
どうですか。攻撃されてる気分は。

T
非常に胸くそ悪いです。

接続時間リミットを指定しなかったので、約17万件のパスワードのうち3,000ほど試して、2,000くらいの不正アクセスが検出されました。

コマンド引数の詳しい解説はこちらに記載があります。

WPScan 入門 – サイバーセキュリティ研究所

WordPressサイトを守るためのTIPS

  • 推測されにくいパスワードにする。
  • 推測されにくいログインユーザー名にする。
  • 脆弱性のあるプラグインを消す、またはプラグインやWordPress本体を随時更新する。
  • 複数回ログインに失敗したら一定時間が経過しないとアクセスできないようにする。
  • 管理サイトと表示サイトのURLを変える。
  • 管理サイトの/wp-login.php、/wp-adminを変える、またはBasic認証をかける。
    Stealth-Login-Page – https://ja.wordpress.org/plugins/stealth-login-page/
  • 表示サイトの/adminと/admin/のアクセスを拒否する。
  • ブログなどを書いている場合は、ログインユーザー名を表示させないように偽装するプラグインを入れる。
    Edit Author Slug – https://ja.wordpress.org/plugins/edit-author-slug/

まとめ

こんなに簡単に不正アクセスできるとは思っていませんでした。上記のような対策を施していないWebサイトが狙われてしまう理由もわかりますね。ネクストではこれを教訓にこのような不正アクセスの対象にならないようにセキュアなサイト構築を行いたいと思います。

最後に

ご協力いただいたTさんありがとうございました!

参考サイト