WordPressを不正ログインから守る3ステップ

ある程度ブログが成長してくると、あるいはある程度コンテンツが貯まってくるとそれを失わないようにWordPressのセキュリティにも気を使う必要が出てきます。

「セキュリティ」と聞くと難しいことのように思いますが、WordPressなのでいくつかのプラグイン活用すれば防御力を簡単に高めていくことができます。

簡単なまとめ

不正ログイン、要するに「知らない誰かにWordPress管理画面に入られる」ことに対策する場合、以下の3ステップで対策が可能です。できれば最低2つ、3つ全部やれば今の時代は十分だと思います。

  1. ログインID / パスワードの強化
    • root / adminといった典型的なログインIDを避ける
    • パスワードは大小英数字 / 記号を組み合わせ、最低12文字以上で設定する
  2. 連続ログイン失敗の制限
  3. 多要素認証(MFA)の導入

もちろん、他にも防御策はありますが、個人サイトでこの3種類を超えて対策する必要性は低いでしょう。

そこまでいくと一般的な企業が対策するようなレベルになるため、専門のエンジニアに自サイト構成や守りたい脅威を見定めて対策を依頼するレベルになってきます。

これを書いている人

セキュリティに関わる内容であるため、この内容自体にも情報の信頼性が求められます。
私自身は本業がインフラ系SEであり専門的な知識を保有していますが、本記事の執筆にあたっては、2021年3月現時点における一般的な正しさに十分留意して記載をしています。

もし内容について不正確な点、不明確な点があれば 問い合わせフォーム よりご一報ください。

スポンサーリンク

事前知識:基本的な考え方

Security, Protection, Anti Virus, Software, Cms

具体的な対策に触れる前に、「知らない誰かにWordPress管理画面に入られる」ことを避けるにあたり、どういった脅威から身を守らなければならないのかについて大まかにまとめておきます。

総当たり攻撃(ブルートフォースアタック)

ネット上においてはほとんどこれですが、「とあるログインIDに対して、考えうる全てのパスワードでログインを試みる」というのが総当たり攻撃、英語でブルートフォースアタックといいます。

パスワードの組み合わせは無数にありますので、そんな手間のかかること…と思う人もいるかもしれませんが、ITの世界なので総当り的に試すことのハードルは非常に低いです。

加えて、昨今はそうしたパスワード解析に用いるパソコン等のスペックが向上しているため、

なんてことが報告されたりしました。わずか2時間程度で8桁までの全パターンを試してしまえるというわけです。

総当り攻撃と同様に、「とにかく色々なユーザ名/パスワードを試す」という攻撃は、その考え方からいくつかのバリエーションがあります。

  • パスワードスプレー攻撃
  • 辞書式攻撃
  • リバースブルートフォースアタック

いずれのパターンであっても、基本的な対策は共通しますのでそれぞれがどのような攻撃であるかは割愛します。

ソーシャルエンジニアリング

先ほどの総当り攻撃の説明で「とあるログインIDに対して、考えうる全てのパスワードでログインを試みる」ということを言っていましたが、そもそも攻撃の前提には「これで入れれば色々なことができてしまう」という有力なログインIDを特定する必要があります。

そうした攻撃対象の選定には、多くのIT製品でデフォルト値として用いられている

  • root
  • admin
  • administrator

などの特権ユーザが標的にされやすいため、こうした「デフォルトのユーザ名は使わない」ことが対策の一つになります。

となると、じゃあ何にしようかと悩んでしまったとき、例えば自分が使う名前だからとTwitterのアカウント名と同じに設定してしまうケースがあったります。

こうした思考は割とあるあるなので、攻撃者も「とりあえずTwitterやFacebook、Instagramあたりのアカウント名を試してみるか」というような発想を持っています。
他にも、難しくて覚えられないからとディスプレイの脇に付箋でメモを貼っておいたりと、ITの世界ではなく人間の心理的な隙を突く形で手がかりを得て攻撃につなげる手法をソーシャルエンジニアリングと言います。

「パスワードの使い回しがよくない」というのも、「面倒だからとパスワードを使いまわしている人が多いだろう」という攻撃者の推論を踏まえたものですね。

パスワードの長さみたいに良し悪しがハッキリ評価できる単純なものではなく、何気ない緩みですらも攻撃の足がかりになり得ることは知っておいてよいでしょう。

ステップ1:ログインID / パスワードの強化

Privacy Policy, It, Computer, Security, Password

では具体的な対策を順に解説していきます。

まず第一にやるべきことは、ログインIDとパスワードの強化です。

これは先ほど述べた通り、ソーシャルエンジニアリングの観点でログインIDをわかりづらくすることや、総当たり攻撃への防御力を高める観点で行います。具体的には以下です。

ログインIDの強化
  • root / admin / administrator などのデフォルト名を避けて設定する
    • WordPressであれば wp-admin / wordpress なども同様
  • Twitterなど、公開されているIDとは別に設定することが望ましい
パスワードの強化
  • パスワードは最低12文字で構成する
  • パスワードには英字(大文字/小文字)、数字、記号を必ず含めるようにする

パスワードの長さについては、「8文字で2時間?!」と驚いた方もいると思いますが、その水準であっても大小英数字 + 記号(合計90種)を使う文字空間で、さらに4桁多い12桁以上で構成すれば90の4乗、すなわち約650万倍の時間がかかることになり、総当たりに15,000年ほどかかる計算になります。

もちろん、コンピュータの性能もその間に上がっていくわけなので、約1.5年で性能が2倍になる前提だとしても、およそ20年は耐えられる計算なので個人サイトとしては十分でしょう。

ちなみに、90種12桁の場合で15,000年ですが、桁数を増減させると「コンピュータの性能が1.5年で2倍になる(ムーアの法則)」前提では次のような防御力になります。

パスワード長防御年数(現在性能)防御年数(将来性能)
8桁2時間2時間
9桁7.5日7.5日
10桁2年1.5年
11桁166年9年
12桁1.5万年19年
13桁134万年29年
14桁1.2億年39年
15桁109億年48年

単純計算では、パスワード14桁の解読には1億年以上かかる計算ですが、そうした解読において「1億年前のコンピュータをずっと使い続ける」なんてことはないので、随時最新のコンピュータを使っていくとした場合、はるかに短い時間で解読できることになります。

ちなみに、上記の結果がある中で「12桁以上」としているのは、「個人レベルで10年以上動き続けるシステムは考えにくい」という前提に基づきます。(黄色のエリア)
そうした意味で10年以上のところを緑にしていますが、企業が扱うシステムなんかではそのレベルのものもあるはずなので、「あくまで個人レベルであれば10年守れればいいだろう」というのが12桁以上の根拠です。

スポンサーリンク

ステップ2:連続ログイン失敗の制限

Padlock, Door, Locked, Closed, Protected, Lock, Wooden

ステップ1の対策を取ることで、一般的な考えにおいては十分高いセキュリティが得られます。

しかしそれは「愚直に全パターンを試される場合」の攻撃においてですので、例えば攻撃者が

  • 数字のみパスワードはないだろう
  • 同じ文字が3回連続することはないだろう

など、試すパターンを削減してきた場合には、さらなる時間節約が可能です。
(こうした考えで効率的に攻撃を行う方法として辞書式攻撃などがあります)

そのため、ステップ2ではより強い対策として「そんなにたくさん試させない」ことを行っていきます。

いくらパターンを削減したとしても、100通りでは済まない依然として膨大なパターンを試す必要がありますが、「連続5回失敗するやつは攻撃者だろう」という発想で、連続ログイン失敗によってアカウントを一時的にロックするということが防御に繋がります。
この仕組み自体はよくあるものですので、パスワード忘れでこれをやってしまった経験がある方も多いのではないでしょうか。

若干不便に感じるときもありますが、このロック機能が毎秒膨大なパターンを試したい攻撃者にはこの上ない防御策として機能します。

Limit Login Attempts Reloaded

こうしたログインロックに関してはこのLimit Login Attempts Reloadedプラグインが有名です。

プラグインを導入し、

  • リトライ許容回数
  • 一時ロック時間

などを以下のように設定してプラグインを有効化すれば、ロックが機能します。

Limit Loginの設定例

この設定であれば、5回ログインに失敗すると15分間の一時ロックがかかり、さらに一時ロックを4階繰り返すと24時間ロックがかかることになります。
それぞれの数字を何にすればいいか悩む人は上のようにするか、あるいはデフォルトのままで十分でしょう。(私が5回/15分にしているのは個人的な趣味みたいなものです)

加えて、ログインロックのログを見たり、ロックされたタイミングでメール通知をさせることもできるので、怪しい動きがあればすぐに気づくことができ、格段にセキュリティが向上します。

スポンサーリンク

ステップ3:多要素認証(MFA)の導入

Login, Monitor, Smartphone, Tablet, Register, Window

こちらで最後の対策です。

ここまで「いかにパスワードを突破されないか」という観点で対策を講じてきました。

  • ステップ1:突破されにくいパスワードの長さ/複雑さにする
  • ステップ2:突破されにくいように連続失敗を制限する

こうした流れの中で、それに続くステップ3は、

  • ステップ3:パスワードだけではログインできないようにする

ものと言えます。

よくよく考えてみれば、パスワードなんていう実体も何もないもので認証することは、意外とチョロい仕組みです。それが誰であろうと、数桁の文字列すら合っていれば通過できてしまうので。マンションエントランスの解錠ナンバーみたいなものですね。

一方で、鍵なんかはそれとは全く別で、コピーが難しいそれそのものを持っていることが認証の条件になっているため、セキュリティの世界でも「パスワード以外にも何かの認証アイテムを使おう」と考えるのは自然なことと言えます。

そうした「他に何かの要素を使う」という意味で、パスワード認証より強固だと言われるのが多要素認証(Multi Factor Authentication, MFA)です。

パスワード以外に用いるものはある意味何でもいいんですが、今回はGoogle Authenticatorを用いたワンタイムパスコード方式を紹介します。

Two Factor Authentication

多要素認証を実現するプラグインのひとつがこちらです。

こちらのプラグインでは、従来のパスワードに加えて、Google Authenticatorによるワンタイムパスコードを2つ目の認証要素に用いるため、二要素(Two Factor)認証の名前がそのままついています。

こちらのプラグインの設定では、認証設定そのものを変更するため、手順を間違うと最悪の場合、「自分ですらログインできなくなる」可能性があります。

実際に設定を行う場合はそういったリスクを認識し、先に全体の流れを一読した上でプラグインを導入、有効化するようにしてください。

このプラグインの利用にあたっては、

  1. プラグインのインストール
  2. プラグインの設定
  3. Google Authenticatorの設定
  4. プラグインの有効化

の4ステップが必要です。順にみていきましょう。

1. プラグインのインストール

ここは何も難しくありません。プラグイン検索などから以下のプラグインを探し、インストール有効化を行ってください。

最終的な有効化設定はアプリ内にあるため、プラグインそのもののインストールと有効化を行うだけのこの時点で設定ミスのリスクはありません。

2. プラグインの設定

プラグイン導入後、プラグイン一覧を見てみると

プラグイン一覧における表示

というように、User settingsとPlugin settingsのリンクが見えると思います。

ここからまずPlugin settingsに進み、どういったアカウントに対して二要素認証を設定するか選択することができます。デフォルトでは全てのユーザロールに対して二要素認証が設定されるようになっています。

二要素認証の対象とするアカウントの種類

必ず守るべきなのは管理者(Administrator)ですが、権限設定によってはそこまで慎重にならなくてよいという理由で、チェックを外すものがあってもよいかもしれません。
(もちろん、設定していたほうがセキュリティ上は好ましいので、あえて外すものではないと思います)

その他、いくつか設定がありますが、基本的にはこのユーザロールの設定さえ確認すればOKです。

3. Google Authenticatorの設定

ここまではWordPressの設定ですが、次はスマホでGoogle Authenticatorアプリの設定を行います。

今回はスマホアプリでの解説を行いますが、一応 WinAuth というPCアプリでも同じことができます。基本的な設定の考え方はほぼ同じなので、PCで設定したい方は別の記事を参考にしてください。

話を戻して、Google Authenticatorアプリをダウンロードして立ち上げると、スッカラカンの次のような画面が立ち上がります。

Google Authenticatorの画面イメージ(設定追加前)

右下のグーグルっぽい + ボタンから、QRコードを使って新しい設定を追加できます。

ここで再びWordPress画面に戻ってTwo Factor AuthenticationのUser settings画面に進みましょう。
そうすると、以下のような画面に大きくQRコードが出ているので、そのQRコードをGoogle Authenticatorに読み取らせると、Two Factor Authentication用の設定が追加できます。エントリ名などは「WordPress用」など、自分でわかるものであれば何でもよいです。

Two Factor Authentication – user settings画面イメージ

なお、このとき画面下部のAdvanced settingsが「TOTP」設定になっていることは念の為確認しておいてください。デフォルト設定なので変更は不要だと思いますが、Google Authenticatorで設定する場合はTOTPである必要があります。

QRコードを読み取らせると、Google Authenticatorに新しいエントリが作成され、6桁の数字が表示されるようになります。一定時間ごとに時々刻々と数字が変化していきますね。
ここで、先ほどQRコードを読み取らせたUser settingsの画面を見て、Google Authenticatorで表示されている6桁の数字と一致しているかどうかを必ず確認してください。

ワンタイムパスコードの数字チェック

このあと二要素認証を有効化すると、WordPressとしては「パスワードに加えてこの数字を入力できる人のログインを許可する」ことになりますが、その数字の確認先となるGoogle Authenticatorと数字が違っていては当然ログインできないので、このチェックは忘れず確実に行いましょう。

4. プラグインの有効化

さてあとは、User settingsの中で Activate two factor authentication を Enabled に設定すればめでたく二要素認証が有効化されます。

Two Factor Authenticationの有効化

ここが最終的な有効/無効を決める設定なので、有効化したらその画面はひとまずそのままにして、別ブラウザやブラウザのシークレットウインドウを使って試しにログインしてみましょう。

まず最初に通常のパスワード認証があり、その後にワンタイムパスコード入力を求められるようになります。

ワンタイムパスコード入力のイメージ

ここでもし上手くログインできないのであれば、開いたままにしておいたUser settings画面からTwo Factor Authenticationを一度 Disabled に戻し、改めて設定を見直してみましょう。

もしスマホを紛失したら

一度スマホとセットで二要素認証を設定したら設定としていじるところはありませんが、スマホを紛失したり、データ移行を忘れてスマホを初期化したりすると厄介です。

こうなるとWordPress管理画面に入れなくなるので、そもそもの無効化すらできなくなりますが、一応手段としてはプラグインの公式ページにある通り、「WordPress本体のwp-config.phpを書き換える」ことで対応可能です。こんな事態にならないのが望ましいですが、一応覚えておいてください。

If your pass-code used to work, but no longer does, then check that the time on your device that generates them is accurate.
If you cannot get in and need to disable two-factor authentication, then add this to your wp-config.php file, using FTP or the file manager in your hosting control panel:

define(‘TWO_FACTOR_DISABLE’, true);

Add it next to where any other line beginning with “define” is.
Alternatively, if you have FTP or cPanel access to your web hosting space, you can de-activate the plugin; see this article.

内容的には以下のようなことが書かれています。

もし以前使えていたパスコードが使えなくなっていたとしたら、まずスマホ端末の時刻設定が正確であるか確認してください。
また、「ログインができないが二要素認証を無効化したい」場合には、wp-config.phpファイルをFTPなどの手段で直接以下の内容を含むものに書き換える必要があります。

define(‘TWO_FACTOR_DISABLE’, true);

上記は既に存在する define から始まる行の次に記載するようにしてください。
その他、サーバへのFTPやコントロールパネル操作が可能なのであれば、こちらの記事の方法でもプラグインの無効化を行うことができます。

こちらの方法でも、最低限「WordPressサーバへのFTP操作が可能」「サーバの管理操作が可能」ということが必要ですので、それすらできないということであれば、解決は不可能ということになります。

不安な方は、もしものときのために、こちらの方法が取れるのか確認しておくとよいでしょう。

ステップX:それ以上の対策を行いたい場合

Censorship, Limitations, Freedom Of Expression

ここまで整理したように、個人サイトレベルであればここまでの3ステップで十分WordPressへの不正ログインを防ぐことができるでしょう。
私も仕事でこうした「インターネットからログイン可能なシステム」を扱う場合は、最低限ステップ2まで、利便性から問題なければステップ3までを前提に考えることが多いです。

しかし、それでもなお心配であるという場合には、一応原理的に次のような方法を取ることも可能なので、興味があればこのあたりの方法も調べてみてください。

  • IPアドレス制限
    • 特定のIPアドレスからしかログインできないようにする
    • 普通のスマホであったり、多くのネット回線はIPアドレスを固定しないので、「自分のアクセスIPが固定できる」場合にのみ実施可能
  • デバイス制限
    • 特定のデバイスからしかログインできないようにする
    • 古くはMACアドレス制限、最近ではMicrosoft IntuneやAWS Cognitoなどを用いたサービスであれば可能(が、WordPressに適用可能な仕組みはあまり見たことがない)
  • ログインURLの変更
    • 一般に、通常のWordPressは https://[ブログドメイン]/wp-login/ などでログイン画面が表示されるようになっていますが、それを変更することでいくらかセキュリティが向上します
    • ただし、こうして変更したURLも総当たり攻撃で発見できるレベルなのであまり本質的な対策にはならないです

また、今回対策したのはあくまで「不正ログイン対策」に過ぎないため、そこまで頭を悩ませたい大事なサイトであれば、WAFやIDS/IPSといった専用機器によるさらなる防御を考えたほうがよさそうです。

他のセキュリティプラグインってどう?

今回は不正ログイン対策の3ステップということで、

というプラグインを紹介しました。これらは名前の通り、「連続ログイン制限」「二要素認証」というセキュリティの一機能に特化したプラグインになっています。

機能特化しているため、設定項目に余計なものはなく、簡単に導入できることもあり今回紹介しています。

しかし、世の中には反対に多機能なセキュリティプラグインもあり、有名どころでは

などが挙げられ、多くのサイトで解説されています。
これらは機能的によく似ていて、ここまでにも触れた「連続ログイン制限」はもちろん、ステップXで例に挙げた「IPアドレス制限」「ログインURLの変更」なども行えます。
(ただ、二要素認証はどれも実装されていませんでした)

じゃあむしろこっちを使えばいいじゃんとも言えるのですが、「プラグインで簡単に設定できる」と言ってもセキュリティは基本的に専門知識のいる領域で、設定箇所それぞれがどんな機能を表しているのか、正確に理解するのはIT系の仕事でもしていなければ中々難しいものがあります。

そのため、多機能であればよいということはなく、「むしろ多機能であるがゆえに、万が一のトラブル対応が難しくなる可能性」を抱き込むことになってしまいます。

この記事で紹介するように、単機能プラグインを複数入れるのは手間かもしれませんが、シンプルかつピンポイントに設定することがセキュリティ対策においては最も安全だと思います。

対策の対象は「WordPressへの不正ログイン」だけじゃない

もっと言えば、本来的に対策をしなければならないのは、この記事が対象としているWordPressへの不正ログイン対策だけでもありません。

WordPressへの不正対策と言った場合には、それぞれ対策したい脅威があるわけですが、

  • WordPress設定やブログコンテンツの改竄
    • ここを守るのがWordPressへの不正ログイン対策、としてほとんど差し支えない
  • WordPress動作の妨害
    • いわゆるF5アタックのような、DDos攻撃などへの防御
  • WordPressサーバ設定の改竄
    • レンタルサーバのセキュリティであったり、管理コンソールへのセキュリティなど、WordPressを動作させる環境により守るべきポイントは様々

のように、大きなカテゴリとして他にも存在します。

特に、今回はWordPressへの不正ログイン対策を語っていますが、同様にサーバ管理コンソールへの不正ログイン対策であったり、ファイルアップロードに使うFTPへの不正ログイン対策も同様に考える必要があります。

もちろん、レンタルサーバ等、お金を払って環境を用意している方はその提供者が注意すべき部分であるとも言えるため、まずはそのあたりのセキュリティ事情について提供者に確認してみるとよいでしょう。

長々書いてきて「今回説明したのはセキュリティの一部分でしかない」なんて言うのも気が引けますが、セキュリティとはそういうものであるとも言えてしまいます。
そのため、今回のような少しばかりの対策で未来永劫安心していられるものではないということは、大前提として頭に入れ、定期的にこうした最新のセキュリティ事情をチェックするようにしましょう。

まとめ

冒頭でも述べた通り、セキュリティと聞くと難しく、面倒に感じる方が多いと思います。

しかし、他の多くの機能同様、WordPressはプラグインで簡単にセキュリティ強化ができるため、取り返しがつかなくなる前に、一度重い腰を上げて設定しておくとよいでしょう。

とはいえ、本文中でも触れていますが、間違えると自分でもログインできなくなってしまう失敗に繋がりかねないため、設定はくれぐれも慎重に行うようにしてください。

参考記事

セキュリティ目的の他にも、当サイトでは様々なWordPressプラグインを導入しています。

スポンサーリンク