WPScanで友人のWordPressサイトをハッキングしてみた話

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

突然ですが、僕たちはセキュアなサイトを構築する責任を持っています。
攻撃からサイトを守るためには、どのように攻撃されるかを知る必要があります。というわけで今回「WPScan」というWordPressの脆弱性をスキャンするセキュリティ診断ツールを使って、どこかのWordPressサイトを攻撃してみたいと思います。

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

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

wpscan_0001

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

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

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

T そうだよ。

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

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

wpscan_0002

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

WPScanの設定手順

WPScan

http://wpscan.org/

まず本家サイトでZIPをゲットだぜ。

使用環境は以下。
  • OS X 10.11 El Capitan
  • Ruby 2.0.0

ZIPファイルを解凍したら、アプリケーション->ユーティリティ->ターミナルを起動して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に・・・権限が・・・ないだと・・・?
ぐぐったらでてきました

Can’t install bundler using gem – Stack Exchange

http://apple.stackexchange.com/questions/204312/cant-install-bundler-using-gem

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

OS X 10.11 El Capitanにアップデート: やったこととか気になってることとか – rcmdnk’s blog

http://rcmdnk.github.io/blog/2015/10/01/computer-mac/

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

で、再度

sudo gem install bundler && bundle install

ようやく準備出来ました

WPScanの実行

WPScanの準備が整ったところで、Tさんに再度ハングアウト。

wpscan_0003

小川 準備できました。

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

小川 いきますよ。

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

wpscan -url http://xxxxxxx.xxx

wpscan_ex_0002

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

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

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

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

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

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

wpscan_ex_0001

wpscan_0004

wpscan_0005

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

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

wpscan_akismit_0001

接続時間リミットを指定しなかったので、170000のうち3000ためして、2000くらいの不正アクセスが検出されました。

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

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

http://www.wivern.com/security20150526.html

WordPressサイトを守るためのTIPS

  • 推測されにくいパスワードにする。
  • パスワードを使いまわさない。
  • ログインユーザー名にadminを使わない、推測されにくいログインユーザー名にする。
  • 脆弱性のあるプラグインを消す、またはプラグインやwordpress本体を随時更新する。
  • 複数回ログインに失敗したら一定時間が経過しないとアクセスできないようにする。
  • 管理サイトと表示サイトのURLを変える。
  • 管理サイトの/wp-login.php、/wp-adminを変える、またはBasic認証をかける。
  • 表示サイトの/adminと/admin/のアクセスを拒否する。
  • ブログなどを書いている場合は、ログインユーザー名を表示させないように偽装するプラグインを入れる
  • テンプレートのソースコードにwp-*を含まないようにする。

まとめ

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

最後に

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

wpscan_0006