WordPressのセキュリティ

WordPressの弱点

WordPressは、CMS(Content Management System:コンテンツ管理システム)としてのシェアは圧倒的で、全世界のWebサイトの40%近くがWordPressで作られています。

この圧倒的なシェアはWordPressの利点であると共に、弱点でもあります。

世の中の4割のサイトがWordPressで作られているという事は、WordPressの乗っ取り方法を確立すれば、「世の中の4割のサイトは改竄し放題」となるわけで、攻撃対象としては格好だという事でもあります。

このため、WordPressサイトを構築したら、セキュリティ管理はしっかりと施しておきましょう。
重要な事なのでもう一度いいます。

セキュリティ管理をしっかり施していないWordPressサイトを公開するのは危険ですよ

WordPressサイトが乗っ取られる?

このサイトを見ている皆さんには、通常のWEBページとして見えているかもしれませんが、このサイトはWordPressによって表示されているため、オーナーである私には、「ダッシュボード」という設定のページが見えています。

この「ダッシュボード」のページは、WordPressの機能そのものをコントロールするための設定ページですから、「ダッシュボード」へログインするためのIDやパスワードをハッキングすれば、サイトを乗っ取る事ができます。

不味いことにWordPressでは、この「ダッシュボード」のURLが固定されています。

サイトのドメイン/wp-login.php

WordPressのどのバーションでも、現状では、上のPHPを呼び出すと、ログイン管理画面が立ち上がります。

つまり、ネットを回っていて、「あ、この企業サイトはWordPressでできてるんじゃないかな?」と思ったら、そのドメインの最後に
/wp-login.php と入力すると、かなりの高確率でIDとパスワードを訪ねるこんな画面がでてくる事になります。

たぶん、ユーザーIDはページの中の連絡先あたりでしょう。

特に担当者の氏名なら、おそらくはローマ字可かイニシャルです。

あとはパスワードに氏名やサイト名に関する文字をひたすら文字列を入力して試していけば、もしかしたら、正しいID/PASをひっかけてしまう…なんて事もありえます。

これを「ブルートフォース攻撃」と言います。

パスワードは、推奨される安全なものでも、突き詰めればただの文字列です。

文字列はアルファベットで26文字。大小区別で52文字。数字で0から9。後は記号の組み合わせです。

総当たりで入力していけば、理屈の上では何処かで正解を引き当てます。

ただ、現在のコンピュータでは、時間が「○万年」単位でかかってしまいますが…

ログインページを隠しましょう

あれ? でもこのサイトのドメインに、 /wp-login.php を足した

は上のイメージと違って、IDもパスワードも聞かれない、エラーページじゃない?

と思った方。

はい。聞かれません。

実は、 「ダッシュボード」 へのログインするページを隠蔽する方法があります。

それが、WordPressに機能を追加するプラグインというもので、セキュリティに「All In One WP Security & Firewall」を有効化しています。

All In One WP Security & Firewall のインストール

まず、All In One WP Security & Firewall をインストールします。

プラグインの新規追加画面から、キーワードに All In One WP Security & Firewall を入力し、表示されたプラグインを「今すぐインストール」します。

ログイン画面を隠す設定

プラグインを有効化すると、メニューに設定項目が表示されるようになりますので、この中から Brute Force を選びます。

URLの後ろの部分に、入力枠がありますので、ここに 適当に発生させた x584GSdE の文字列 を入力して Save Setting で保存します。

すると、

https://[WordPressのインストールディレクトリ]/x584GSdE

が、弊サイトの 「ダッシュボード」 になり、 https://[WordPressのインストールディレクトリ]/wp-login.php  はエラーページとなります。

この x584GSdE の文字列は信頼した人にしか教えませんから、私のサイトのログインページを開くには、まずこの任意の文字列をブルートフォース攻撃で破る必要がでてきて、セキュリティが一段あがるという訳です。

パスワードの入力回数に制限を

しかしこれだけで安心はできません。

現状のWordPressでは、パスワードを「間違えていい」回数に制限がありません。

つまり、何かの偶然でログイン画面のワードを引当られてしまうと、あとは簡単なプログラムを組んで、IDとパスワードを片っ端から「間違えて」入力し続ければ、場合によっては突破されてしまうかもしれません。

ログインページが見つけられたとしても、 User Login の設定で、IDとパスワードをある時間内に、ある回数間違えると接続が遮断されてしまう機能があります。
このため、セキュリティは比較的安心できる状態にあります。

Google reCAPTCHA の導入

これは、当サイトのメールアドレスをThunderbirdで受信した画面です。

下2/3に、英語タイトルのメールがずらっと並んでいますね。

これは、海外のWEBロボットに、私のサイトが見つかった事を意味します。

私自身が記事にしたとおり、WEBブラウザはプログラムでコントロールできますし、そもそもHTTP通信が決まった約束事(プロトコル)による情報のやりとりですから、

「サイトに行く → 入力フォームへ行く → 定型文を貼る → 送信ボタンを押す

という一連の流れをプログラムにし、探し出したサイトに次々あてはめていくくらいは簡単にできてしまいます。

しかし、これはやられた側は非常に困ります。

フォームからのメールが大量に発生すると、本当に人間が連絡目的でフォームを操作した情報が埋まってしまい、見逃しが発生するかもしれません。
と言って、お客様との連絡手段である問い合わせフォームを外す事はできません。

そこで、不要なロボットによるサイト操作を防ぐ目的で、reCAPTCHAを導入します。

reCAPTCHAはロボットによる操作と人間の操作を区別し、ロボットの操作を拒否してくれます。

では、導入してみましょう。

reCAPTCHAはGoogleのサービスなので、googleのアカウントが必要です。
こちらのURLから、Googleアカウントでログインします。