戯言

WordPressに対するブルートフォース攻撃に対抗して2要素認証プラグインを導入

どうも、よく分からないなりにWordPressを使っているkuronama です。

WordPressのセキュリティ

先日以下の記事を読んで、WordPress用の2要素認証の存在を知った。
WordPress のセキュリティ: リスクを減らす5ステップ (Sucuri Blog より訳出) | わーどぷれすっ!

記事の大部分が翻訳であり結構ボリュームがあるので該当部分を抜粋すると

ウェブサイトのオーナーが直面するもうひとつのアクセスコントロールに関する危険性は、WordPress のログインページ – /wp-admin もしくは /wp-login.php – に対するブルートフォースアタックです。これには簡単な対処方法が2つあり、そのひとつは WordPress の管理画面のログインに2要素認証を導入することです。もしご存じなければ Google Authenticator プラグインをチェクしてみてください。これはとてもうまく機能しますし、Google Authenticator を導入済みであれば、既存のツールやデバイスの多くでも機能することはご存知かと思います

ということらしい。

ブルートフォース攻撃ってのは、要はパスワードに対して総当たり攻撃を行うこと。ログインIDが判明している状態で、そのIDに対してパスワードを総当たりで自動入力してログインを試みる攻撃手法。
管理者ユーザーとしてWordPressのデフォルト設定である「Admin」をそのまま使っているサイトの場合は既にログインIDが攻撃者にバレているわけで、かなり有効な攻撃手法と思われる。
仮に今回の記事の手法を導入しないとしても、最低限以下の記事を参考にAdmin以外のユーザーを作成・移行して、Adminを削除しておいた方が良いだろう。

WordPressでユーザー名『Admin』をやめてみる。 - HAAYA

ブルートフォース攻撃に対しては特定のクライアントからのログイン失敗回数に上限を持たせることで対応するのが正道だと思うけど、ログインによる認証に本来のパスワードとは別にワンタイムパスワードを使えば良いよってことが書いてある。
確かに長さすら不明なパスワードが2つに増えるだけでも攻撃の手間は増えるし、ましてや片方がワンタイムパスワードであればまず攻撃は成功しないだろう。

少しだけ調べてみたら記事を投稿したユーザ名は簡単に判別できるので、デフォルトの「Admin」以外でもブルートフォース攻撃は有効な攻撃になるっぽい。
なのでWordPressにおいてブルートフォース攻撃に対する唯一?の対抗手段は2要素認証の導入と思われる。

Google Authenticator

で、実際の2要素認証のためのプラグインがこちら。
WordPress › Google Authenticator « WordPress Plugins

名前を見てティン!と来た人もいるだろうが、以前記事にも書いたLastPassの2要素認証と同じく、Googleの2要素認証アプリを使ったプラグインとなっている。
ブラウザアドオン型パスワード管理サービス「LastPass」で二要素認証を設定してみた » 黒生鉄心の奇妙な日常 | 黒生鉄心の奇妙な日常

設定はわかりやすすぎて逆に気付かなそうなのだが、WordPressの[ユーザー] - [編集]から行う。
2要素認証を利用するユーザーを編集すると以下のように「Google Authenticator Settings」の項目が増えている。
ga

設定するにはまず「Active」にチェックを入れて、「Description」に自分で識別するための名前を入力する。
次は「Secret」項目の「Show/Hide QRcode」を押すとQRコードが表示される。
あとはスマホ側で「Google Authenticator」アプリの+ボタンを押下して、QRコードを読み取れば設定完了だ。
Google Authenticator

他の設定項目について

他の設定項目についてだが、以下のページを翻訳したものを参考にした。

WordPress Security Tip: Add Google Authenticator 2-step Verification

「Relaxed mode」についての翻訳は以下。

リラックスモード -通常のGoogle認証システムのコードが1分ごとに有効期限が切れます。 リラックスしたモードを使用すると、4分のために今日まで1つのコードを使用できるようになります。 我々は、あなたが非常に遅い入力しない限り、これをオンにすることはお勧めしません。 コー​​ドは6文字なので、1分でそれを行うことができるはずです。

要は「Google Authenticator」自体がスマホの時刻と連携してパスワードを1分毎くらいに生成しているが、恐らく認証する幅を前後4分広げるというもの。

「Enable App password」についての翻訳は以下。

アプリケーションパスワードを有効にする -あなたのブログ上のXML-RPC(リモート·パブリッシング)を使用している場合にのみこれが必要です。 これはWordPressのiOSアプリ、またはWindows Live Writerを意味します。 あなたの全体のログインのセキュリティが減少すること可能にしていること、覚えている、しかし、あなたは本当にリモートパブリッシングを使用するような場合、それを使用し続ける。 ただ、このオプションを有効にして、アプリケーションのパスワードを設定します。

XML-RPCを使ったBlog投稿用のスマホアプリで2要素認証対応していない場合に使うもの。当然2要素認証を使う意味があまり無くなるので、設定に当たっては注意が必要。
ただXML-RPCを使ったアクセスって多分記事の追加削除くらいだと思うし、例えば管理者権限ユーザのパスワード変更などはできないと思うのでそれほど神経質にならなくていいのかも。
仮にXML-RPCでのアクセスで管理者権限ユーザのパスワード変更などができるのであれば、管理者権限ユーザには設定せずに新しく編集者権限ユーザを作成して、編集者権限ユーザの方にのみアプリケーションパスワードを設定するのが良いと思う。

まとめ

このように結構簡単な手順でWordPressの不正アクセスに対するセキュリティを向上させることができる。

一つ注意点があり、当然ながら2要素認証の設定はユーザー毎に別個であるということ。
複数ユーザーが存在する場合、ログインユーザー以外で他ユーザーのプロフィールを参照すると分かるが、Active項目のみが表示されて詳細は表示されない。
例えばAというユーザーでログインしている状態で2要素認証を設定して、Bというユーザーでも2要素認証を有効にする(あくまで有効にするだけ)
この状態でAで生成した2要素認証の設定を使ってBでログインしようとしても設定がユーザー毎に別個であるためログインできない(はず)。
2要素認証を設定する場合は、必ず利用するユーザーでログインして各自で別個に設定を行うことが重要だ。

一点残念なのが、LastPass等と違って特定のクライアントからのアクセスのみを許可として保存するような機能が無いところだ。
実際に利用すると以下の様に表示されるだけだ。
login
これに関しては今後改善してほしいところ。

-戯言
-