プラグインを使わずに不正アクセスを防ぐ方法[WordPress]

シェアしていただけるとうれしいです

不正アクセスって何?

「不正アクセス」という言葉をよく聞くようになりました。イヤな世の中だよね。「不正」なんだよ。正しくないわけね。

例えば、広く一般的に公開されているWebページに不正アクセスがあった、なんていうことは聞きません。「不正」というからには、何か正しくない方法でアクセスされては困るページがあるわけです。

例えば、ユーザーIDとパスワードを入力しなければならないWebサイト。会員制のサイトだったり、通販サイトだったり、TwitterやFacebook、GoogleといったWebサービスを提供するサイト。それに、オンラインバンク。

ログインの情報そのもの、ログインした先にある個人情報などの他人に見られてはならない情報。それらの情報が悪意を持った第三者に漏れると、大変なことになるのは周知のとおりです。

だから、ログインの情報は堅く守らなければならないし、他人に簡単に類推されてしまうような内容のものはやめておかなければならないわけです。

不正アクセスの目的は?

この記事はWordPressについて考えているので、WordPressでユーザーIDとパスワードを入力する場面、つまり、管理ページについて考えてみます。

「そんなこと言っても、ぼくみたいな弱小ブログ、なんの情報もないし、大丈夫っすよ、先輩!」

確かに、あなたのブログもぼくのブログも個人情報は何も保存していないだろうから、そういう情報が欲しい悪人からしたらなんのメリットもない。

個人的にあなたに悪意を持った敵があなたの記事を書き換えてあなたをおとしめたい、ということはあるかもしれないけど。その手の話題はまた後日。

悪意を持った第三者の狙いは、あなたのブログにあるスクリプトを埋め込むこと。それはPHPのスクリプトかもしれないし、Javascriptかもしれない。

善意の第三者があなたのブログにアクセスした時にそのスクリプトが動き出し、別のサーバーからウイルスがダウンロードされるようになっていたら。

そのウイルスはまだ誰にも発見されていなくて、ウイルス駆除ソフトでも検知できなかったら。

そのウイルスは悪意を持った第三者からの指示を受けて、ある特定のサーバーを攻撃するようになっていたら。

またあるいは、あなたのブログにアクセスがあるたびに、他の善意のサーバーを攻撃するようになっていたら。

直接、間接を問わず、あなたも攻撃に加担したことになる。あなたのブログから攻撃を受けたことが公表され、Twitterで晒し者にされ、二度とブログを開設することができなくなったら・・・
(さすがに、これはないか?)

悪意を持った第三者、つまり、攻撃者の目的は、あなたのブログにイタズラすることではなく、あなたのブログを犯罪者の仲間にすること。知らない間に犯罪に加担してもいいですか?

不正アクセスの方法は?

あなたのブログを犯罪者に仕立てるには、まず、あなたのブログの管理ページにログインしなければなりません。

「ぼくの管理ページのIDとパスワードはめっちゃ複雑やから大丈夫っすよ、先輩!」

そうね、複雑であればあるほど不正に管理ページにアクセスされる可能性は低くなります。

「低くなります?あれ?0じゃないの?先輩?」

そう、低くなるだけで、可能性は0ではないんです。完全に防ぎきるのは難しいのだそうです。

WordPressを探す

攻撃者はインターネットの海を泳ぎまわり、多くのサーバーにアクセスします。まず、サーバーにWordPressがインストールされているかどうか調べます。いきなりドアをこじ開けるようなことはしないらしいです。WordPressの管理ページと思われるURLにいろいろアクセスしてみるようです。サーバーはそのURLがあれば”200 OK”というステータスを返します。なければ”404 Not Found”を返します。

普通にWordPressをインストールしていれば

  • /wp-login.php
  • /wp-admin/

という管理ページが存在するので、そこにアクセスして”200 OK”が返ってきたら、あなたのサーバーは攻撃リストに追加されます。もし”404 Not Found”が返ってきたら、その他にインストールされている可能性があるいくつかのページにアクセスし、見つかったら攻撃リストに追加、なければあきらめて次のサーバーにアクセスします。

そういうことを繰り返して、攻撃対象リストを作っていくらしいです。

WordPressを対象にした不正アクセスではないのだけれども、FCKeditorというJavascriptで作られたGUIのエディタの脆弱性(セキュリティ上問題になる不具合のこと)を狙ったと思われるアクセスが、ぼくのサーバーのログに残っていたので紹介します。

アクセスログの見方は今回の主題ではないので他に譲りますが、173.248.160.230というIPアドレスから「/includes/fckeditor/editor/」などのページにアクセスがあります。ページが存在しないためにサーバーは404(ページがみつかりません)というステータスを返しているので、存在する可能性があるページに対して次々アクセスをしているわけです。最終的に全部のページが404だったので、あきらめて次のサーバーに行ってしまったようです。

ご自身のサーバーのアクセスログを見ていただいたら気がつくと思いますが、例えばこのFCKeditorや、最近ぼくがよく使っているphpMyAdminなんかも攻撃対象になっているようです。

攻撃リストに従って不正アクセスを試みる

出来上がった攻撃対象リストを元に、攻撃者はリストに載っているサーバーのWordPressの管理ページヘのログインを試みます。IDとパスワードは辞書に載っていそうなキーワードから、まったくランダムに作られた文字列まで、さまざまなものが試されます。

7/25追記

このような攻撃手法のことをブルートフォースアタックといいます。

たまたま、試されたIDとパスワードでログインできてしまったら。残念ながらあなたのWordPressは攻撃の加担者にされてしまいます。

不正アクセスを防ぐ方法

このような攻撃、と言うか、不正アクセスを防ぐ方法として考えられるのは、

  1. 何度かIDとパスワードを間違えたら、一定時間内、ログインできなくしてしまう
  2. 同じIPアドレスからなんどもログインに失敗したら、そのIPアドレスからの接続に対して、ログインできなくしてしまう

などの処置を取ることが多いです。WordPressのプラグインにもそういうったことを実現するものがいくつかあるようです。

そういうプラグインを入れてもいいのですが、いくつか難点があって、

  • WordPressのプラグイン、ということはPHPのプログラムがなんかしら動くわけで、1秒間に数百回を超えるようなログインを試みられると、1秒間に数百回PHPのプログラムが動くわけで、それなりに(かなり?)サーバーに負担をかけてしまう。
  • 最近は攻撃が巧妙になって、一定期間に1回しかログインを試みないような攻撃もあるらしい。
  • 攻撃者が大量のbotを従えていて、1回の不正アクセスごとにIPアドレスを変更するような攻撃もあるらしい

こうなってくると、プラグインでも防ぎきれないようなことになってしまいます。

IPアドレスでアクセス制限

そこでよく紹介されているのが、管理ページに特定のIPアドレスからしか接続できないようにする方法です。特定のIPアドレスからしか接続できないので、その他のIPアドレスからは接続が拒否されます。

これは以外に簡単に出来て、最近良くぼくの記事に出てくる.htaccessにちょろっと記載を追加するだけです。例えば、

.htaccessにこれを追記して、FTPでサーバーに転送します。
(「192.168.0.1」の部分は実際のIPアドレスに書き換えます。)

これで、他のIPアドレスからアクセスすると、”403 Forbbiden”がサーバーから返り、管理ページにはアクセスできません。攻撃者はおそらく諦めて去っていくと思います。

ただこれで問題になるのがIPアドレスなんですね。普通のおうちに引かれている例えば光回線。IPアドレスはプロバイダから借りています。借りているものは返さなければなりません。いったん割り当てられたIPアドレスは、一定時間経過後、別のIPアドレスに変わってしまいます。IPアドレスは決まっていなくて固定ではないんですね。

それと、モバイルからのアクセス。ぼくはiPhoneから管理ページにアクセスして記事を投稿しています。スタバでドヤ顔でMacBook Airで記事を投稿する人もモバイルからのアクセスです。モバイルからのアクセスもIPアドレスが決まっていないんですよ。

その時アクセスしているIPアドレスを調べて.htaccessを書き換える、ということも可能ですが、めちゃくちゃ手間ですよね。(´・ω・`)

BASIC認証でアクセス制限

固定のIPアドレスならまだしも、IPアドレスが変わるたびに.htaccessを書き換えるなど面倒くさいの極致です。他にいいものはないでしょうか?

普通にログインするよりは面倒ですが、IPアドレスを書き換えるよりは面倒くさくない方法があります。BASIC認証という仕組みを使います。このような画面を見たことはないでしょうか?
BASIC認証
この画面でユーザー名とパスワードを入力すると目的のページが表示されます。BASIC認証という仕組みを使っています。管理ページにアクセスした時にこの画面を表示させるようにします。BASIC認証で1回、管理ページのログインで1回、合計2回認証をしなければなりませんが、BASIC認証をせずにアクセスをするとサーバーからは”401 Unauthorized”というステータスが返って、アクセスすることはできません。攻撃者はあきらめて立ち去っていく、というわけです。

この方法が比較的安全でお手軽かな?と思います。

BASIC認証の方法

BASIC認証を行うには準備が必要です。順に説明をします。

パスワードファイルを作る

BASIC認証をするためには、ユーザー名とパスワードを記載したパスワードファイルを作ります。パスワードは暗号化されます。作成には専用のツールが必要です。私の前の記事をご覧になられた方はXAMPPというアプリケーションをインストールしていただいた方もいらっしゃると思いますが、XAMPPのApacheのツールを使って作ることが可能です。

ブログのテストにはXAMPPがオススメ[WordPress]
テストの環境のオススメ WordPressをカスタマイズしようとしてファイルを編集して、 画面が真っ白でなにも表示されない! とか、 表

Windowsのコマンドプロンプトを立ち上げて、

と入力します。「user」は適宜ご自身のお好きなユーザー名に変えてください。

と聞いてきますので、パスワードを入力してEnterキーを押します。再度、

と聞いてきますので、同じパスワードを入力します。

これでC:\htpasswd.txtというファイルが出来上がっているので、これをサーバーにアップロードします。

/wp-admin/

にアップロードして、「htpasswd.txt」を「.htpasswd」にリネームしてください。
(Windowsでは「.(ドット)」から始まるファイルを作れないので、このようにしています)

やさしいFTPクライアントソフト・FFFTPの使い方[WordPress]
みなさんこんにちは。さかのうえのまろ(@sakanoueno_maro)です。 ブログやWebページを置いているWebサーバにはファイ

.htaccessを編集する

.htaccessにBASIC認証するよ、という記載を追加します。記述しなければいけないファイルは2つ。

  1. /.htaccess
  2. /wp-admin/.htaccess

の2つです。それぞれの目的は、

  1. /wp-login.phpへのBASIC認証の設定
  2. /wp-admin/以下のディレクトリとファイルへのBASIC認証の設定

です。

絶対パス名を調べる

.htaccessにパスワードファイルのサーバー上の絶対パスを書かなければならないのですが、サーバーの説明書に載っている場合はそれに従ってください。
わからない場合は、

とメモ帳などのテキストエディタに書いて「path.php」と名前をつけて、/wp-admin/にアップロードします。
ブラウザで「http://あなたのブログのサイト/wp-admin/path.php」にアクセスすると、

/var/www/html/wp-admin

というふうに表示されます。これがパスワードファイルを置くサーバー上の絶対パス(サーバー上での実際のディレクトリ名)になります。
確認したらサーバー上からすぐ消してくださいね

/.htaccessを編集する

Webのルートディレクトリにある.htaccessをサーバーからダウンロードして、先頭に下記の記載を追加します。

追記したら、再度Webのルートディレクトリに上書きでアップロードします。

/wp-admin/.htaccessを追加する

次に、メモ帳を開き、下記のように記載します。

記載したら、htaccess.txtと名前をつけて、

/wp-admin/

にアップロードし、「.htaccess」にリネームします。
「/wp-admin/admin-ajax.php」だけは一般の投稿ページからも使うらしいので、BASIC認証の対象がから外しています。

さあ、ブラウザから管理ページにアクセスしてみましょう

BASIC認証こんな画面が表示されましたか?BASIC認証で設定したユーザー名とパスワードを入力してください。続けてWordPressの管理画面のログインページが現れたら設定成功です。

Canon EOS Kiss X7 (50mm, f/1.8, 1/250 sec, ISO100) at 10:11 on 2017/04/30

備えあれば憂いなし

攻撃者はあなたのブログを特定して狙っていいるのではなく、広く攻撃対象を探しています。できるだけ短い時間に多くの獲物を確保する必要があるため、あなたのブログだけに時間を要している暇はないのです。BASIC認証を施して404のステータスを返すだけで、攻撃者はあきらめて去っていきます。

正直、子どもだましのような方法ですが、言わば「二段階認証」のようなことになっています。一つの認証で突破される可能性が1万分の1だとしたら、2つの認証で1億分の1の可能性になりますから。十分有効だと考えます。

では、楽しいブログライフを。

いわゆる「画像直リンク」、画像の複製は固くお断りいたします。
スポンサーリンク

シェアしていただけるとうれしいです

フォローよろしくお願いします

関連記事