WordPress

WordPressの管理画面に3段階認証のプロテクションをかける方法

今回は、私が1日に100件以上のブルートフォースアタックを受けるようになったことを機に実際に導入している対策の1つをシェアしようと思う。

ひと言でいえば、ダッシュボードまで侵入(突破)されないための対策である。

当時は1日に100件以上攻撃を受けていたが、今回シェアする対策によって完全にゼロになるはずだ。

少し長くなるが、そのとおりにしていただければ何の問題もなく実装できるだろう。

はじめに

ブルートフォースアタックは、ログインを試みたことを確認するためのプラグインや対策を講じていない人には攻撃を受けていることすら気づかない。

侵入されてからでは遅いので、対策をしていない方はこの機会に導入の検討をおすすめする。

ブルートフォースアタックとは

ブルートフォースアタックは日本語でいう「総当たり攻撃」。暗号解読方法のひとつで、ワードプレスのログイン認証画面にかけられたパスワードを破ることが目的である。パスワードとして可能な組み合わせを片っぱしから試して侵入を試み、ワードプレスがそのターゲットになっている。

以前のワードプレスでは、ユーザー名が「admin」と決まっていたので変更ができない状態にあった。そのため、パスワードさえわかれば侵入が可能になるので、ユーザー名を「admin」から変更していないユーザーやユーザー名の変更方法を知らないユーザーを狙った攻撃と思われる。ユーザー名を変更する方法はあるが、手順を間違えるとすべてのデータが消えてしまう可能性があるので今回は誰でもできる方法を紹介しようと思う。

投稿者名を変えてもユーザー名(WordPressのログインID)は見えている

ワードプレスは、ユーザーのプロフィール設定からニックネームに設定した文字列で投稿者名を変更することが可能だ。しかし、これは表示そのものの見せ方を変更できるだけであって、管理画面( ダッシュボード )にログインするためのユーザー名まで非公開にできるということではない。

各記事に表示される投稿者名には投稿者ページに飛ぶリンクが入っており、これをクリックすることで…

http://サイトURL( ドメイン )/author/ユーザー名

という形でURLに表示されてしまう。仮に投稿者名を非表示にしていても「 http://サイトURL/?author=ID 」で、ユーザー名は簡単に調べることができる。表にそのまま出ていないだけで、管理画面に外部からログインする際のユーザー名を確認する方法はすぐそこにあるのだ。

私は当初「admin」で攻撃を受けていたが、途中から実際のユーザー名で攻撃を受けるようになった。どこから漏れたのか当時はわからなかったが、いろいろ調べたことでその原因が判明した。

ここで、紹介しておきたいプラグインがある。

投稿者スラッグ(URL)を変更できるプラグイン

プラグイン名 Edit Author Slug

このプラグインは、投稿者アーカイブのURLとなる投稿者スラッグを自由に変更、設定できるプラグインである。

自由に文字列を変更でき、表示の仕方も選べるようになっている。実際とは異なるユーザー名で表示の代役をお願いできるプラグインと言えるだろう。

あなたやあなたのサイトと無関係の文字列に設定しておけば、あなたのユーザー名が第三者に捲れたり、推測されるリスクを大幅に減らすことが可能になる。

また、このプラグインは管理者の場合、全権限を所有することになることも併せて覚えておいてほしい。複数人でサイトを管理している場合、あなたひとりが管理者でサイトを運営していない場合は、投稿者や編集者権限のユーザーを別で用意するという方法もある。

>> 投稿者スラッグの値を自由に変更!Edit Author Slug プラグインのインストールと設定

 

ワードプレスのログイン認証画面はパブリックに公開されている

ワードプレスのログイン認証画面は、サイトのURLから簡単に手掛かりを拾えるようになっている。

http:// サイトのURL / ( ファイルを配置したディレクトリ ) / wp-login.php
http:// サイトのURL / ( ファイルを配置したディレクトリ ) / wp-admin/

対策をしていない場合は、投稿者ページのURLからユーザー名までわかってしまう。あとは、パスワードさえ合致すれば管理画面( ダッシュボード )への侵入が成功する。これが攻撃を受ける原因となるだ。

ログイン認証画面のURLは「function.php」から変更することもできるが、CSSやJSの知識がないと難しい。

そこで、もうひとつ紹介したいのが「Limit Login Attempts」というプラグイン。

過去に攻撃を受けたIPアドレスを設定に応じて管理画面( ダッシュボード )へのアクセスをブロックするというのものである。「破られていないけど攻撃が止まらない」という場合は試してみてはどうだろう。

Limit Login Attempts」については後ほど解説することにしよう。

 

長くなったので、そろそろ私が実際にやっている3段階認証の手順とその解説をしていこうと思うが、全体の流れをイメージしていただくために、先に画像を載せておく。

3段階認証の流れ

basic

1. ワードプレス管理画面のURLにアクセスすると認証画面を表示する前にBASIC認証が起動。( 画像:Google Chrome )

 

nlhackerlogin

2. BASIC認証に成功すると認証画面を表示。
( Limit Login Attemptsを導入している場合は設定に応じて入力ミスをしたIPアドレスをここで排除 )

 

onetime

3. ユーザー名とパスワードが認証されるとダッシュボードを表示する前に管理者メールアドレスへ最終認証パスを自動送信。

 

db

4. メールに記載されているパスワードが設定時間内に正しく入力されるとダッシュボード( ログイン完了 )を表示。

こんな感じである。

ダッシュボードまでに3段階認証のプロテクションを設置

  1. BASIC認証」でログイン認証画面へのアクセスを制限
  2. Limit Login Attempts」で過去に入力ミスをしたIPアドレスを排除
  3. Spirits and Goblins(ワンタイムパス)」で最終認証パスをリアルタイムで変更

この3つのプロセスをすべて1回で突破しない限り、管理画面( ダッシュボード )にはたどり着けない。

仮に「BASIC認証」を突破しても 、ログイン認証画面でミスをすれば「Limit Login Attempts」で弾かれ、「Limit Login Attempts」で設定されているリミットを超えるミスをすると、当該IPアドレスに自動でロックが掛かり「Spirits and Goblins(ワンタイムパスワード)」の画面まで辿りつくことは不可能。

さらに「Spirits and Goblins(ワンタイムパス)」の最終認証は、管理者のメールアドレスだけにその都度変わるワンタイムパスワードを送信する。パスワードの桁数から有効時間まで管理者の任意に設定されているので、管理者以外が管理画面( ダッシュボード )まで侵入するのは物理的に不可能といえるレベルである。

下記に記述するとおりにやっていただければ問題なく起動と設置ができるので、安心してほしい。それでは、手順と設置の解説をしていこう。

BASIC認証

BASIC認証はアクセスを制限する一般的な方法だ。導入すれば、アクセスしたURLの画面を表示する前に下記のような画面が表示される。

ここでの認証を突破しない限り、ワードプレスのログイン認証画面は表示されない。ユーザー名とパスワードを入力する画面すら出ないということである。

Google Chromeの表示

basic

FireFoxの表示

firefox

管理画面( ダッシュボード )へのアクセスはもちろん、ログイン認証画面へのアクセス自体を防ぐことができるので、攻撃または不正アクセスそのものを未然に防ぐことができる。

BASIC認証の設置方法

ワードプレスをインストールしている場所へ「.htaccess」「.htpasswd」の2つのファイルを設置する。

「.htaccess」「.htpasswd」ファイルの作成は共にテキストファイルで構わないが、通常「.(ドット)」で始まるファイル名を作ることはできない。

拡張子を非表示にしている場合は「htaccess」「htpasswd」、表示している場合は「htaccess.txt」「htpasswd.txt」で作り、サーバーにアップロードした後にファイル名の編集から「.htaccess」「.htpasswd」に変更する。( サーバーから直接作成する場合は、「.htaccess」「.htpasswd」で作ることが可能 )

ファイル作成からアップロードまでの流れ
  1. ファイル名「htaccess(htaccess.txt)」「htpasswd(htpasswd.txt)」をテキストファイルで作成。
  2. ワードプレスをインストールしているディレクトリにファイルをアップロード。
  3. アップロードしたファイル名をサーバーで「.htaccess」「.htpasswd」に変更。

アップロードしてから編集で記述するか、記述してからアップロードするかは自由であるが、すでにワードプレスをインストールしていれば、「.htaccess」というファイルが見つかるだろう。

このファイルを開くと、ワードプレスに関する記述があるので下記のコードを追記する。

※「.htaccess」に記述ですので、「.htpasswd」に記述しないように!

.htaccess の作成と追記
<Files wp-login.php>
AuthUserFile /home/…/.htpasswd
AuthGroupFile /dev/null
AuthName “Please enter your ID and password”
AuthType Basic
require valid-user
order deny,allow
</Files>

 

追記場所は「# END WordPress」の下で大丈夫だが、2行目の「AuthUserFile」だけ修正が必要となる。

b

2行目のAuthUserFileは「/home ~ /.htpasswd」までのフルパスを記述しなければならない。

意外と長いが、ここが間違っていると動かない。BASIC認証が正しく起動しない多くは2行目のフルパスの誤りが原因の大半を占めているからである。

「.htpasswd」へのフルパスは人によって異なるので、ご利用サーバーの管理画面などを参考にしよう。

それでもわからない場合は、ワードプレスをインストールしている場所( ディレクトリまたは.htaccessファイルがある場所 )に新規ファイル作成で下記のコードを「.php」で保存する。

フルパス確認コード

.htpasswdへのサイトパス( フルパス )は、下記のコードをindexを除いた任意のファイル名( .php )で保存し、ブラウザ表示することで確認が可能だ。

<?php
echo __FILE__;
?>

 

フルパスを確認するためのファイル名は「index.php」以外で保存するが、確認のためのファイルなのでフルパスが確認できれば削除して大丈夫である。

このファイルをサーバーからブラウザ表示することで、あなた自身のフルパスがブラウザにテキストで表示( URLではない )される。

最後の「/」の右にあるファイル名「●●●.php」を「.htpasswd」に変更したものがフルパスとなる。

下記の場合だと、「fullpasssearch.php → .htpasswd」となる。

「.htpasswd」はファイル名なので、「htpasswd」の前の「.(ドット)」を忘れないよう気をつけてほしい。

fps

 

.htpasswd の生成

続いて「.htpasswd」を作る。

htpw

「.htpasswd」の生成は上記サイトの ベーシック認証 を活用すればいい。

.htpasswd 作成の流れ
  1. BASIC認証に使用するユーザー名を入力。
  2. BSIC認証に使用するパスワードを入力。
  3. 「.htpasswdを作成」をクリック。
  4. 表示された.htpasswd( ユーザー名:変換後のパス )をテキストファイルに貼付。
  5. ファイル名を「htpasswd」(サーバー上なら「.htpasswd」)で保存。
.htpasswd 作成の補足と解説

桁数は10(デフォルト)は、パスワードを10桁でランダム作成するためのもの。自分でパスワードを設定する場合は「10▼」と「ランダム作成」は触らない( ランダム作成を使用するとグチャグチャなパスが生成され、入力の手間とパスワードを忘れる原因になる )。

ユーザー名とパスワードを入力したら「.htpasswdを作成」をクリックする。

.htpasswdを作成」をクリックすると、.htpasswdの欄に「ユーザー名:変換後のパスワード」が自動で表示されるが、勝手に生成された変換後のパスワードに驚く必要はない。

変換後のパスワードは「.htpasswd」のファイル上でのみ使用し、実際のBASIC認証では STEP1 で入力したユーザー名とパスワードを使用する。

STEP1で入力したユーザー名とパスワードだけ忘れないように!!

STEP2は「.htpasswd」作成後に「.htaccess」に記述する流れを示しているものですので、ここでは関係ない。

また、実際の「.htpasswd」までのサイトパス( フルパス )は画像の例のように短いものではない。

.htpasswd 作成時の注意

当たり前ですが、ワードプレスのユーザー名とパスワードは絶対に使わないように。ワードプレスと同じにすると、ログイン認証画面の前にBASIC認証を設置する意味がなくなる

万が一、BASIC認証を突破されるとワードプレスのログイン認証画面も突破されることになりますので、絶対に類似しない、連想できない別々のユーザー名とパスワードを設置するようにしてほしい。先でも記述したが、「.htpasswd」は「ユーザー名:パスワード」という形で作成され、パスワードだけは変換される。

変換後のユーザー名とパスワードをそのままテキストファイルに貼り付けて「.htpasswd」というファイル名で保存する。

 

例: basiclogin:IvQZ7PfkogFD ( ユーザー名:変換後のパス )

 

htwd

※パスワード末尾にスペース、改行を入れずに保存する。

 

c

「.htaccess」ファイルと同じ場所( ディレクトリ )にアップロードし、ファイル名を「htpasswd」から「.htpasswd」に変更して完了。

.htpasswd まとめ

実際のBASIC認証の際に入力するパスワードは変換前のパスを入力する。変換後のパスは「.htpasswd」のファイル上でのみ使用し、実際の画面で変換後のパスを記述しても認証しないので気をつけてほしい。

ファイルを保存する際は、ファイル名や本文の末尾などにスペースや余計な記述が入っていると正しく動作しないので、こちらも併せて注意が必要である。

 

BASIC認証の設置が完了したらワードプレスをログアウトし、必ずテストを行う( 別のブラウザでテストする場合はログアウトの必要はない )。

まれに、画面は起動するのに機能していない場合があるので、正しいユーザー名とパスワード、間違ったユーザー名とパスワードでそれぞれ正しく動作するかを確認しておこう。

 

画面は表示されるのに機能していない場合は、フルパスの誤りが原因の可能性が高い。

その場合は、フルパスの確認を行ってみよう。

すべてに間違いがなければ、ワードプレスのログイン認証画面にアクセスしたとき、ログイン認証画面表示の前に下記の画面が出てくる。

 

Google Chromeの表示

basic

 

FireFoxの表示

firefox

 

BASIC認証をかけられるプラグインがある?

BASIC認証を設置できるプラグインに「WP BASIC Auth」というものがある。

このプラグインは「.htaccessファイル」や「パスワードファイル」を編集する必要はないが、ウェブサイト自体にBASIC認証をかけるプラグインで、ログイン認証画面にかかるものではない。

制作途中のWebサイトや外部の人に一時的にサイトを表示させたくない場合に使用するものである。

また、管理画面にログインしている際は、BASIC認証のアクセス制限はかからない。

しかも、このプラグインのBASIC認証で使用するユーザー名とパスワードは、ワードプレスのログイン認証画面に使用するユーザー名とパスワードになるので、セキュリティとして使用するのにはまったく向いていないと思われる。

制作途中のWebサイトや外部の人にサイトを表示させたくない場合は、公開までのカウントダウン機能や背景画像を自由に変更できるうえに、任意のメッセージやコンタクトフォームまで実装しているプラグイン、「WP Maintenance Mode」のほうがニーズに合っているだろう。

 

Limit Login Attempts

プラグイン: Limit Login Attempts( 作者: Johan Eenfeldt )

 

「Limit Login Attempts」は、ログインを試みたときのミスが設定されている条件を超えたときに特定のIPアドレスをブロックするプラグインである。

ブロックされたIPアドレスは、仮に正しいユーザー名とパスワードを入力しても、設定されている期間が過ぎるまではログインができなくなる。

当プラグインはIPアドレスで規制をかけるため、単純な入力ミスなどが原因で管理者本人がブロックの対象になった事例も出ている。

これを「締め出し」というが、その場合はワードプレスからのログインが遮断される。

万が一締め出しにあった場合は、直接サーバーからログインを妨げているプラグインを削除することでログインが可能になる。

ワードプレスにインストールしたプラグインは、「wp-content > plugins」に格納されている。

 

設定画面: 設定 > Limit Login Attempts

lla

これらの設定は任意に変更が可能。

 

「Limit Login Attempts」のインストール

1. 管理画面 > プラグイン > 新規追加 へ移動

2. 「Limit Login Attempts」で検索

3. 一番上に出てると思うので、クリックしてインストール

4. プラグインを有効化

 

 

最終認証にワンタイムパスを設置

プラグイン:Spirits and Goblins( 作者: wokamoto )

 

onetime

「Spirits and Goblins」は、楽天銀行ジャパンネット銀行などのネットバンクなどが導入しているワンタイムパスワードと同じような機能をもつプラグインである。パスワードの桁数、パスワードの有効時間を秒単位で決めることができるすぐれものだ。

最初にお伝えしておくが、このプラグインは有効化の際にエラーが出る報告が出ている。

作成者が「PHP5.4」以上で作成しているため、エラーの表記に「PHP5.4」という文字が入っていれば、お使いのバージョンが「PHP5.3」以下である可能性がある。

 

ss

有効化の際に上記のような画面が表示された場合の対処法を下記に記載しておくので、参考にしてほしい。

 

先ほど作成した「.htaccess」に、ワードプレスの記述があったのを思い出してほしい。

hd

「<IfModule mod_rewrite.c>」と「RewriteEngine On」の間に「AddHandler php5.4-script .php」 を追記する。

これでエラーは出なくなるので、プラグイン一覧から「Spirits and Goblins (魍魎)」を有効化しよう。

有効化できたら、ワードプレスの設定の中から「Spirits and Goblins (魍魎)」を選択。

 

設定画面: 設定 > Spirits and Goblins (魍魎)

sg

ここで「パスワードの長さ」と「有効期間(秒)」をお好みで決めよう。プルダウンメニューは「メール」のままで構わない。

設定の「一般」に記載されているメールアドレスへパスワードが届く。

このパスワードまで正しく入力してはじめて管理画面( ダッシュボード )へのログインが可能となる。

 

Spirits and Goblinsプラグイン設定の注意

間違っても有効期間(秒)を「5」とかにしないこと。単位は「」である。

パスワード有効期間のカウントが始まるのはメールが開かれたときではなく、ログイン認証画面の「ログイン」ボタンが押され、ユーザー名とパスワードが一致した認証直後にカウントが始まる。

メールはすぐに届くが、受信から入力までの時間を考慮しておかないと、設定時間内にパスワードの有効期間が切れてログインできなくなる可能性があるので注意が必要である。

多くの方がEメールを使っていると思うが、携帯のようにすぐには届かない場合もある。

受信の準備( メールソフトを起動 )をしてから最終認証パスを請求するか、認証直後に問い合わせをすればパスワードはすぐに届くはずだ。

 

ちなみに、私は60秒にしている。

これは、ワンタイムパスワードが発行されてからメールが届き、入力が完了してから承認されるまでの猶予は60秒ということである。

仮にログインパスが破られても、そこから60秒以内に最終の認証パスが承認されなければログインは拒否される。

その都度、管理者のメールにしか届かないパスで、しかもそのパスが60秒で無効になるのは、今考えられる最強のセキュリティかもしれない。

受信から入力までの時間を考慮して、1分~2分ぐらいはあったほうがいいだろう。

私の場合は、すぐにメールを受信できる状態にしてから認証作業に入るので60秒にしているが、お好みや環境で決めて大丈夫だ。

 

万が一パスワードの入力を誤ってエラーが出た場合は、同じパスワードを再入力しないでほしい。一度入力ミスしたパスワードは何度入力してもエラーになる

入力間違いでエラーが出たパスワードはその時点で無効になり、新しいパスワードが先ほどのメールアドレス宛に新たに再送信されているので、メールボックスを確認して新たに受信したパスワードを入力しよう。

 

Spirits and Goblins のインストール

1.管理画面 > プラグイン > 新規追加 へ移動

2.「Spirits and Goblins」で検索

3.1つだけヒットすると思うので、クリックしてインストール

4.プラグインを有効化

 

ログインの試みを確認できるプラグイン( 補足 )

プラグイン:Crazy Bone(狂骨)

このプラグインは、アクセスを試みたIPアドレス、ユーザー名、パスワードを一覧で確認できるものである。

いつ、どこから、どのユーザー名とパスワードで攻撃を受けているかがわかるもので導入している人も多いだろう。

「Limit Login Attempts」でも確認できるが、BASIC認証を設置していない方は併せて導入しておいてもいいかもしれない。

Crazy Bone(狂骨)は日本語のプラグインなので、英語がわからない方でもそのまま使える。

あなたのワードプレスが一日にどのくらい攻撃を受けているかが目に見える形で確認できるだろう。

 

まとめ

ブルートフォースアタックはこれで完全に止まるはずだ。

ここまでガチガチにしておけば、他のどんな攻撃にも突破される心配はまずないと思っていいだろう。

ログインまで手間かもしれないが、そんなにしょっちゅう出たり入ったりを繰り返すことはないだろうし、破られるよりマシである。

あなたが本当の管理者なら「BASIC認証 > Limit Login Attempts > Spirits and Goblins」の3段階認証は20秒もあれば十分である。

BASIC認証の設置ができない方でも、最後の「Spirits and Goblins」は今考えられる中でも最強の対策だと思うので、攻撃を受けたことがある方は「Limit Login Attempts」と「Spirits and Goblins」は導入しておくことをおすすめする。

 

BASIC認証のユーザー名とパスワードは忘れないよう保管しておこう。

もし忘れてしまった場合はプラグインと同様、サーバー内の「.htaccess」「.htpasswd」を止めると解除することができる。

誰にでもできる、もっとも簡単かつ最強のセキュリティ。

ブルートフォースアタックの対策がまだの方は、この機会に導入しておくことをおすすめする。

 

いつもクリックありがとうございます!
@友だち追加
ブログ村
ブログランキング

関連記事

  1. 投稿者スラッグの値を自由に変更!Edit Author Slug…
  2. 固定ページにカテゴリーを設置する方法
  3. WordPressの公開URLページを一時的にメンテナンス表示な…

ピックアップ

  1. NOを封じるダブルバインド
  2. 人たらしが密かに使っている心理学
  3. プロでもやってしまう二重表現

ライフハック

ソーシャルメディア

  1. TWITTER
  2. INSTAGRAM
  3. LINE@

脳神経科学

心理学

コミュニケーション

微表情

ボディランゲージ

PAGE TOP