この記事を書く人と信憑性
家富正幸(いえとみまさゆき)
現役のWordPressエンジニア(エンジニア歴16年)
大規模から小規模までのWordPressテーマ開発実績数は800件以上
実際にクライアントが受けてしまった改ざんやハッキング被害の数々を解決してきた実績あり
本記事では、被害に遭ってしまう前に、自分でできるかんたんなセキュリティ対策の方法をご紹介していきます。
はじめに
WordPressのセキュリティ対策、ちゃんと行っていますか?
ここ数年、WordPressが狙われた改ざんやハッキング事件は数知れず、私たちもクライアント様が被害に遭うなど、多くの相談を受けています。
そこで、今回は、WordPressでウェブサイトを運用するための基本的なセキュリティ対策について紹介していきます。
動画解説
動画でも解説していますので、ながら聞きされたい方はこちらをご視聴ください。
セキュリティ被害について
セキュリティの方法を解説する前に、被害について実際にあった事例やなぜ被害に遭ってしまうかについて解説していきます。
必要ないという方は読み飛ばしてください。
実際にあったセキュリティ被害事例
下記は、私たちのクライアント様が、実際に被害に遭った事例です。
サイト内にバックドア(不正アクセス用の入口)を無数に設置されてしまい、さらにフィッシングメールの一斉送信システムをサーバーに配置され、不正行為の踏み台として利用されてしまった。
導入した覚えのない「謎のプラグイン」が自動で導入され、Googleの検索結果からサイトに入った場合に、ユーザーが他のフィッシングサイトなどへ自動でリダイレクトされてしまう仕組みを導入されてしまった。(ブックマークや、直接のアクセスではリダイレクトされないため気付きにくい)
ランダムに投稿データの末尾にJavaScriptを埋め込まれ、その記事を閲覧したユーザーが他のフィッシングサイトに自動でリダイレクトされてしまう。
上記のようにサイトのファイルやデータを任意に改ざんされてしまうため、1度不正アクセスが発生すると、除染が困難になります。
ちなみに上記の被害を受けてしまったサイトの修復作業に関しては、かなりの費用と期間をいただいた上で、除染対応をさせて頂きました。
被害の元凶は不正アクセス
WordPressのセキュリティリスクを意識せずに、被害に遭われてしまったサイトは、全て不正アクセスによるものが原因です。
不正アクセスを考えるような人間は、基本的に手動で行っているわけではありません。
不正アクセスを行うための専用の自動化ツールを使って、世界中のウェブサイトから侵入できそうなWordPressを探しています。
そして、ログイン画面から管理者IDとパスワードの組み合わせを、用意しているリストやランダムな英数字で何度も実行し、ログイン出来そうな組み合わせを自動で探し出そうとするのです。
WordPressサイトのリスク
WordPressを利用していると、ウェブサイトのソースコードに、WordPressを臭わせるような文字列が必ず出力されてしまいます。
そのソースコードに出力される特定の文字列から、簡単に「このサイトはWordPressで動いているな」というのが誰にでも分かってしまいます。
WordPressを使っているということが分かれば、ログイン画面のURLもほぼ推測で分かってしまうため、ログイン画面に簡単にアクセスできてしまうのです。
WordPressのセキュリティ対策
上記では、WordPressのセキュリティを怠ったが故に起こり得るリスクについて説明してきました。被害を防ぐには不正アクセスを防ぐこと、すなわちセキュリティ対策を行う必要があります。
それでは本題となるセキュリティ対策の方法について解説していきます。
1. 管理画面のパスワードを強固にする
超初心者の方でもかんたんにできるセキュリティ対策です。
パスワードを強固にすることは、最もシンプルで、最も強力な方法です。
基本としては
- 英字+数字+記号
- 推測されやすい英単語などを用いない
- 数字を連続させない
- 12文字以上
といった条件で、パスワードを設定するようにしましょう。
パスワード変更の手順
ランダムなパスワードを生成する際は、パスワードジェネレーターなどが便利です。
パスワードジェネレーターなどで検索すると、無料で利用できるサービスが複数表示されるので、使いやすそうサイトを利用してみてください。
パスワードを強固にすることが、セキュリティ対策として有効な理由
改ざんやハッキング被害では、管理者のIDとパスワードが推測されすいものになっていることが大きな原因のひとつです。
そのため、管理者としてログインされてしまい、テーマやプラグインのファイルを改ざんされるというという被害が起こってしまいます。
管理者は、テーマやプラグインエディタなどからファイルを編集することが可能ですが、その機能を悪用されることで、不正なファイルを設置されたり、既存の.phpファイルにバックドアを仕掛けられてしまうのです。
この問題を解決する最も簡単な手段が、管理者のIDとパスワードを強固なものにすることなのです。
数字のみ、英語のみのパスワードを利用するのをやめ、WordPressが推奨する完全ランダムなパスワードなどを利用することで不正アクセスの6~7割は防ぐことができます。
日本のウェブサイトは未だに英数字のみを許可していたり、アンダーバー以外の記号を許可していなかったりするためパスワードに対する意識が未だに低い傾向がありますが、今や海外を含め複雑な英数字+記号を入れてのパスワードが標準的なものなので、WordPressの提案するパスワードを利用するなどして推測しにくいパスワードを利用しましょう。
この章で理解しておきたいこと
ここで問題にするべきは「覚えやすさ」といったことでは無く、セキュリティの高さです。
最近ではどんなブラウザでもログインIDとパスワードを保存してくれますし、1Password等のパスワード管理ツールもメジャーになっています。
パスワードは「覚えて使う」ものではなく、セキュリティを高めるために使うもの、という意識に変えていきましょう。
あなたが管理しているサイトでは、管理者のパスワードはどうなっていますか?
「英単語(adminなど)」「同じ文字列の繰り返し(777など)」「数字のみ(199901など)」「英字のみ(adgkpなど)」といった、脆弱なパスワードは利用されていないですよね?
もし上記のようなパスワードを利用されていれば、直ちに変えて下さい。
2. 管理画面にIPアドレスを使った制限をかける
サーバーに直接アクセスする必要があるため、超初心者の方には少し難易度高いかもです。若干ソースの読み書きができたり、FTPでサーバーにアクセスしているようであれば自分でセキュリティ対策可能です。
WordPressの改ざんの入り口となるのは上述したように、管理画面の機能であるプラグインやテーマの編集機能などです。
そのため、前述の方法を実施して管理画面へ簡単にログインできないように対応をした上で、さらに利用するユーザーのみを指定(IPアドレス制限を実施)することで、当該ユーザー以外ではログイン機能そのものを利用させないという仕組みを作ります。
対策の手順
下記の.htaccessを、wp-login.phpが存在するディレクトリに配置してください。
<FilesMatch "wp-login.php">
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</FilesMatch>
セキュリティ上は強固だがデメリットも・・
この方法は、利用する際に、そのIPアドレスからしか利用できないという大きなデメリットをはらみますが、セキュリティとしてはこの上なく強固で、IPアドレスが一致しなければログイン自体が不可能となります。
尚、以前は、固定IPといえばプロバイダと契約が必要なもので、自宅やオフィスなど限られた環境でしか利用できないことが一般的でした。
しかしながら、昨今では、VPN型の固定IPサービスなども増えており、モバイル端末や外出先などからでも簡易に固定IPを利用することができるため、こういったサービスを契約することで簡単に利便性の高い固定IPを手に入れることができます。
固定IP以外のデメリットはなく、非常に強力なセキュリティ対策のため、こちらも導入できる環境においては推奨します。
3. SiteGuard WP Pluginプラグインを導入する
基本的にはプラグインをインストールするだけなので超初心者の方でも対策可能です。インストール後に不要な機能を停止したり、より強固な設定にすることができます。
SiteGuard WP PluginというWordPressのセキュリティアップにおいて、有名なプラグインがあります。
こちらのプラグインをただインストールして有効化するだけで、以下のような機能が利用できるようになります。
- ログイン画面のURL変更
- ログイン画面への画像認証の配置
- ログイン試行回数によるログインロック
- ログインエラー表示の簡素化
- ログインユーザー以外の wp-admin/ ディレクトリのアクセス制限
- ログインアラートメール
- XML-RPC機能の無効化
- etc…
上記には非常に有用な機能のみを記載しておりますが、それ以外にも機能が多数あります。
特にログイン画面のURL変更、ログイン画面への画像認証の配置については必ず実施をしましょう。
SiteGuard WP Pluginプラグインのインストール手順
注意点
SiteGuard WP Pluginプラグインを有効化すると、ログインIDが変わってしまいます。複数人で管理している場合、新しいログインURLなどをメンバーと共有する必要があります。
インストール後にSiteGuardのメニューをクリックすると、ダッシュボードに上記のような画面が表示されますので、不要な項目があればチェックを外し、より強固にしたいのであればチェックを入れてください。
この対策を行う理由と効果について
昨今の不正アクセスは外部からプログラムを使ってログイン画面にアクセスし、そこで大量のメールアドレスとパスワードなどの組み合わせを使ってログインを思考するブルートフォースアタックが主流です。
WordPressは世に多く広まりすぎてしまったため、サイト内に配置されたファイルの構成さえわかってしまえばログイン画面のURLが簡単に推測できます。
そこで、ログイン画面事態のURLを変更した上で画像認証を配意することで上述のブルートフォースアタックをほぼ防ぐことができます。
4.管理者ログイン時に画像認証を付ける
画像認証とは「読みにくい文字が画像で表示されて、その文字を入力する」ことで、アクセス者が人間かロボットかを判断する認証方法です。
CAPTCHAとも呼ばれていますね。
WordPressのログイン画面にも、このCAPTCHAを付けることによって、不正アクセスツールなどからのアクセスを防ぐことが出来ます。
STEP1. プラグインのインストール
今回導入するのは、Googleが開発したreCAPTCHAという新技術を用いた「Login No Captcha reCAPTCHA」プラグインです。
このCAPTCHAの画期的なところは、あの煩わしい文字の入力が存在せず、チェックボックスにチェックを入れて、指示された画像を選択するだけというシンプルさ。
そして、バックエンドではGoogleのAIがアクセス対象者が人間化ロボットかを判定しているという心強さ。
ちょっと導入に手間はかかりますが、イチオシのプラグインです。
プラグインの新規追加画面から、「Login No Captcha reCAPTCHA」で検索しましょう。
こちらをインストールし、有効化してください。
STEP2. APIキーの設定
次に、設定画面からAPIキーを設定する必要があります。
画面内のリンクをクリックすることで、GoogleのAPIキー発行画面に遷移しますので、そちらからAPIキーを発行しましょう。
下記のAPI設定画面から、利用するバージョンやドメイン名などを入力しましょう。
設定後、APIのSite KeyとSecret Keyが発行されますので、これをプラグインの設定画面に貼り付けます。
プラグインの設定画面に貼り付けて保存すると、サンプルが表示されます。
サンプルが正しく表示されていれば、設定は完了です。
STEP3. 動作確認
早速ログアウトしてみて、ログイン画面を確認してみましょう。
画面に「私はロボットではありません」が表示されていれば、設置成功です。
5.管理者ログインの試行回数に制限を設ける
不正アクセスを行うユーザーは、まずWordPressのログイン画面 wp-login.php を探し当て、そこから無数にリストしたIDとパスワードの組み合わせを試し、ログインを試みます。
俗に言うブルートフォースアタック、総当たり攻撃というやつです。
この方法はその名の通り「何度も試して、正解の組み合わせを見つける」という方法なので、この「試す回数に制限を付ける」という対策になります。
例えば5回まで、という制限をかけるだけでも非常に効果があります。
相手が人間で実際の管理者ならば、自身のIDとパスワードを5回も連続で間違えるでしょうか?
多分(相当久々のログインだったりする場合、あり得るかもしれませんが)、基本的にはあり得ないでしょう。
不正アクセスツールはそんなことお構いなしに、正解を発見するまで何度も何度もログインを試行しますから、そこを制限するだけでIDとパスワードを無理矢理解析するという方法が使えなくなるのです。
STEP1. プラグインのインストール
今回導入するのは「Limit Login Attempts Reloaded」というプラグインです。
以前は「Limit Login Attemtps」という名称で公開されていたプラグインなのですが、メンテナンスが停止してしまったため、新チームが引き継いで開発を行っているプラグインとなります。
管理画面から検索してインストールをしますが、似た名称のプラグインがいくつもあるので気をつけて下さい。
インストールして有効化して下さい。
STEP2. 設定
次に、プラグインの設定を行います。
通常はそのままでも問題ありませんが、必要に応じて下記の設定を変更して下さい。
STEP3. 動作確認
設定が完了したら、早速ログアウトして、正しくログインのブロック機能が働いているかを確認しましょう。
ログイン失敗の際のエラーメッセージが変わっていることにお気づきでしょうか?
- あと何回失敗できるかの表示が追加されている
- IDもしくはパスワードのどちらが間違えていたかをあやふやにしている
ロックアウトされるまで実際に試してみてもよいのですが、その場合設定された時間はログインが出来なくなってしまうのでご注意下さい。
6.ログインURLの変更
最後に紹介するこの方法は、ログインURLそのものを変えてしまうという対策になります。
WordPressを利用している場合、ログインは必ず wp-login.php というファイルを介して行います。
そのため、WordPressの構造を知っていれば、誰でもその際のログインURLが何処にあるのかを推測できてしまいます。
ログイン画面にアクセスさえ出来てしまえば、先ほど紹介した総当たり攻撃だったりを仕掛けてIDとパスワードの組み合わせを見つけたり、何かの方補で見つけたIDとパスワードを使って、ログインを試みたりできます。
そこで、このログインするためのファイル wp-login.php を別の名前に差し替えてしまえ!というのが今回の対策になります。
STEP1. プラグインのインストール
今回導入するのは「Login Rebuilder」というプラグインです。
このプラグインは日本の方が設計したもので、紹介サイトも日本語で掲載されており、非常に丁寧な解説も掲載されています。
こちらだけでも事足りてしまうかもしれませんが、以下でも簡単に説明をさせていただきます。
まずは管理画面からプラグインをインストールしましょう。
インストールして有効化して下さい。
STEP2. 設定
プラグインの設定を行います。
稼働中にチェックを入れないと、動作しないので注意して下さい。
その他の設定などがたくさんあるのですが、セキュリティの都合に応じて任意に設定を行って下さい。
オススメは下記設定です。
- ログ保存 → 無効なリクエスト時のみ
- 登録フォームを拒絶する
- メールアドレスとパスワードによる認証を禁止する
STEP3. 動作確認
先ほどの設定画面で入力した「新しいログインファイル」にアクセスしてみて、ログイン画面が表示されれば成功です。
古いログイン画面は?
ちなみに古いログイン画面にアクセスすると、403エラーになるようになっています。
もし404エラーを表示したかったり、特定のページにリダイレクトをしたいばあいには、プラグインの設定に項目があるので確認してみましょう。
さいごに
WordPressへのセキュリティ対策については、基本的に管理画面を如何に守るかという1点に尽きます。
WordPressをしっかりバージョンアップし、利用するプラグインなどもバージョンアップしておけば、セキュリティホールを利用される改ざんというのはさほど多くありません。
ウェブサイト管理も含めて今や欠かせない存在になってしまったWordPressですが、正しくセキュリティ対策を行い安心して運用できるように心がけていきましょう。