目次
はじめに
今回は、WordPressサイトのおすすめのセキュリティ対策をまとめてみましたのでご紹介します。
WordPressサイトを公開すると、下記のようなリスクが発生します。
- WordPress管理画面に不正ログインされる
- (不正ログインされて)アカウントのパスワードを変更される、変な内容の記事を投稿される。
- お問い合わせフォームにスパムメールが送られる
- 問い合わせされた方々の個人情報流出
上記で列挙したもの以外にも様々なリスクがあり、セキュリティ対策は必ずしておかなければいけません。
ということで、当社が行っているWordPressサイトのおすすめのセキュリティ対策をご紹介していきます。
前提
- 「紹介すると手の内を明かしてハッキングされるのでは?」と思われる方もいらっしゃるかと思いますが、今回紹介するものは、安定動作している信頼のあるプラグイン、WordPressサイトを運用するなら最低限対策しておかなければいけないものに絞って紹介します。そのため、逆に対策していないとハッキングなどの不正アクセスをされるリスクが大きくなるものもあります。所有されているWordPressサイトがあれば、現時点で行っている対策と照らし合わせて見ていただくと参考になるかもしれません。
- セキュリティ対策は、不正アクセス等のリスクを軽減させるもので、完璧に抑えるということはできないということをご留意ください。サイトを攻撃する者とそれを防ぐ者のイタチごっこのように、脆弱性が発見されて攻撃されたり、セキュリティがアップデートされていきます。当社はそれに出来る限りキャッチアップをし、対応していきます。
- 下記のまとめは、当社で実際に行っている対策の一部ですが、PHPのバージョンが古いなど、サーバー環境によって行うことができない対策がある可能性があります。
- 現時点(2020年12月)でおすすめできるものです。(今後新しいプラグインなどがリリースされたり、脆弱性などが発見されると変動してくるおすすめもあるかもしれないのはご留意ください)
当社が行っているWordPressのセキュリティ対策一覧・内容
xmlrpc.php
へのアクセス禁止
まず、xml-rpc.phpのXML-RPCについて説明します。
このXML-RPCとは何なのかというと、
遠隔手続き呼出し (RPC) プロトコルの一種であり、エンコード(符号化)にXMLを採用し、転送機構にHTTPを採用している。
https://ja.wikipedia.org/wiki/XML-RPC
ということで、「遠隔手続き呼出し (RPC) 」という技術を使い、エンコードはXML、通信はHTTPを使用した技術のことを指しています。
それでは、「遠隔手続き呼出し (RPC) 」とは何かというと、
プログラムから別のアドレス空間(通常、共有ネットワーク上の別のコンピュータ上)にあるサブルーチンや手続きを実行することを可能にする技術。その際に遠隔相互作用の詳細を明示的にコーディングする必要がない。つまり、プログラマはローカルなサブルーチン呼び出しと基本的に同じコードをリモート呼び出しについても行う。
https://ja.wikipedia.org/wiki/遠隔手続き呼出し
ということで意訳すると、XML-RPCとは、システムと他システム間で通信を行い、様々な処理を実行する技術とうことになります。
WordPressでは、スマホアプリから記事や画像の投稿を行うことができますが、その際の処理も、スマホアプリとWordPressのxmlrpc.php
ファイルの間で通信を行い、XML-RPCの技術を使用されています。
このXML-RPCという技術は一見便利なのですが、この技術を悪用することで、WordPressサイトに対して下記のような攻撃を仕掛けるリスクがあります。
- DDoS攻撃のリスク:
xmlrpc.php
に対して、悪意のあるハッカーから短時間・大量通信を実行され、サイトに必要以上の負荷をかけてダウンさせる - 悪意のあるハッカーから、記事を投稿されたり、WordPressアカウント情報を変更されたりするリスク
このようなリスクを回避するため、当社ではXML-RPCの機能を使用不能にする対応を行っています(xmlrpc.php
の機能を利用する必要があるサイト以外)。
具体的には.htaccess
ファイルに、下記の記述を行い、xmlrpc.php
へアクセスすると、0.0.0.0へリダイレクトさせる対応を行っています。
<IfModule mod_rewrite.c>
RewriteBase /
RewriteRule ^xmlrpc\.php$ "http\:\/\/0\.0\.0\.0\/" [R=301,L]
RewriteRule ^index\.php$ - [L]
</IfModule>
.ftpaccessで指定のIP以外はFTPサーバーにアクセスさせない
WordPressは、サーバーに設置されているファイルで、コンテンツを表示させたり、ログイン機能や、記事を最新順に並べたりなど様々な機能を動かしています。
そのコンテンツや機能に対して変更・追加・削除したりするためには、サーバーに設置されているファイルを上書き・追加・削除できるようにしておく必要があります。
当社では、FTPツールを使用してファイルを上書き・追加・削除しています。
FTPとは何かというと、
File Transfer Protocol(ファイル・トランスファー・プロトコル、FTP、ファイル転送プロトコル)は、コンピュータネットワーク上のクライアントとサーバの間でファイル転送を行うための通信プロトコルの一つである。
https://ja.wikipedia.org/wiki/File_Transfer_Protocol
意訳すると、FTPとは、パソコンから、サーバーにあるファイルに対して上書きしたり、追加、削除などの処理を実行できる技術です。
このFTPツールは、ID、パスワードを使用してサーバーにアクセスすることができます。
FTPも便利な機能ですが、下記のようなリスクがあります。
- 悪意のあるハッカーが、ID、パスワードを総当りで認証を行い、サーバーにアクセス、ファイルに対して上書きしたり、追加、削除を行う
当社は、上記のリスクに対して、.ftpaccess
ファイルというものを使用し、当社以外のIPアクセスを制限をかけています。
具体的には下記の内容の.ftpaccess
というファイルに記述してサーバーにアップロードしています。
<Limit ALL>
Order Allow,Deny
Allow from 111.222.333.444##### <=当社のIPアドレス
Deny from all
</Limit>
また上記の方法とは別で、サーバー管理画面から設定できるレンタルサーバーもあります。
設定の注意点は、間違ったIPアドレスを設定するとアクセスできなくなってしまうリスクがある点です。
各レンタルサーバーに.ftpaccess
の設定方法について紹介されていますので、必ずどのように設定するとよいか必ず確認しておきます。
SiteGuard WP Pluginを使う
「SiteGuard WP Plugin」とは、セキュリティ関連製品の開発・販売・サポートをされている、株式会社ジェイピー・セキュアさんが開発されている無料のセキュリティのWordPressプラグインです。
このプラグインは様々な機能があるのですが、当社が使用する機能は下記です。
- 画像認証
- ログインロック
- ログイン履歴機能
1つずつ説明していきます。
画像認証
プラグイン設定ページに機能の説明がありますので引用します。
ブルートフォース攻撃、リスト攻撃等の、不正にログインを試みる攻撃や、コメントスパムを受けにくくするための機能です。画像認証の文字は、ひらがなと英数字が選択できます。
意訳すると、WordPressログインページにランダムに記載された文字を入力する欄を設けることで、不正なログインを防止するということです。
設定をすると、下記の画像のようにランダムな文字が記載された画像が配置され、記載された文字を入力することで、スパムではないということを認証しています。
文字の種類はひらがな、英数字など選択可能です。
ログインロック
プラグイン設定ページに機能の説明がありますので引用します。
ブルートフォース攻撃、リスト攻撃等の、不正にログインを試みる攻撃を受けにくくするための機能です。特に、機械的な攻撃から防御するための機能です。ログインの失敗が指定期間中に指定回数に達した接続元IPアドレスを指定時間ブロックします。ユーザーアカウント毎のロックは行いません。
意訳すると、ログインの繰り返しを数秒毎にされた時に、ログインを指定時間ブロックできる機能です。
失敗ログインの繰り返し「期間」「回数」と、「ロック時間」を設定できます。
ログイン履歴機能
プラグイン設定ページに機能の説明がありますので引用します。
ログインの履歴が参照できます。怪しい履歴がないか確認しましょう。履歴は、最大10,000件記?され、10,000件を超えると古いものから削除されます。
意訳すると、ログインの「日時」「結果」「ログイン名」「IPアドレス」などを最大10,000件記録できる機能です。
下記の画像のように履歴に残すことができます。
不正なログインをされた時、「日時」「結果」「ログイン名」「IPアドレス」を参照することで、不正ログインの原因や対処法を考えるヒントになります。
WordPressアカウントのID・パスワードを乱数にする
当社では、WordPressアカウントのID・パスワードは、大文字小文字英数字の8文字以上の乱数の強力なID・パスワードを設定します。
理由は、単純なID・パスワードは不正ログインされやすいリスクがあるためです。
「本当に悪意をもつハッカーから、WordPressサイトに不正ログインしようとしているの?」と思われる方もいらっしゃると思います。、実際に攻撃されていた、あるサイトのログイン履歴を見てみます。
上の画像は、失敗したもののみのログイン履歴を列挙したものです。赤枠のように、adminのような推測容易な単語でID・パスワードのログイン攻撃をされていることがわかります。
狙われると数分おき、または、数日総当り攻撃を受けることもあります。
閲覧可能な状態にしているウェブサイトであれば、このように総当りログイン攻撃をされるリスクは必ずあります。
要注意なID・パスワードのポイントを下記に記載します。
- admin、staff、loginなど単語を使用
- ドメイン名からの引用(このサイトだと、ycomps、ycomなど)
上記のようなID・パスワードは、推測容易な単語を使用しているので、総当りログイン攻撃を受けると、不正ログインをされやすいです。
もし今現在、上記のような単純なID・パスワードを使っているという方は早急な変更をおすすめします。
そして、「ID・パスワードを乱数にすると、覚えられないよ!」とおっしゃる方が時々いらっしゃいます。
確かに「fPPQ2CcXjVSh
」のようなID・パスワードは複雑すぎて、どんなに記憶力が良い人でも覚えることは困難ですし、記憶するのは不毛です。
しかし、最近のブラウザは、入力したID・パスワードを保存してくれる機能があります。
ログインページにアクセスすると、ブラウザが「・・・・・」のように下記の画像のように文字を隠して自動で入力してくれます。
そのため、一度コピペなどで入力してログインしてしまえば、下記のよう3ステップでログインできます。
- ログインページにアクセス(ブラウザが自動でID・パスワードを入力)
- 画像認証(SiteGuard WP Plugin)
- ログインボタンを押下
そのため、パスワードを覚える必要もありませんし、いちいちキーボードで複雑なID・パスワードを入力する必要なく、セキュリティを強化することは可能です。
しかし、PC故障によりブラウザが使えなくなるリスクを考慮する必要はあるので、最低限、ID・パスワードはメモに控えておいたり、ID・パスワードをまとめておくソフトウェアを活用するなどの対応をしておくと良いでしょう。
Invisible reCaptcha for WordPressを使う
reCaptchaとは、サイトをスパムや不正アクセスから保護するGoogleの無料のサービスです。
「Invisible reCaptcha for WordPress」は、reCaptchaをWordPress向けのプラグインとして、個人開発をされているMihChe氏という方が開発したものです。
何故、reCaptchaという機能を使用するのかというと、Botからお問い合わせフォームに対して大量のスパムメールが送信されるためです。
スパムメールには、よくリンクが記載されています。
そのリンクを、うっかり社内の人間がクリックしてしまうと、PCがウィルスに感染してしまう恐れがあります。
「Invisible reCaptcha for WordPress」の機能の1つに、お問い合わせフォームの送信ボタンがクリックされる時点で、Botによる送信か、人間による送信かを判別し、Botの送信時にエラーにしてくれる機能があります。
当社はこの機能を使用しています。
どのようにスパム判定しているのかというと、簡単な紹介が公式ガイドに記載されていますので引用します。
reCAPTCHA v3 returns a score for each request without user friction. The score is based on interactions with your site and enables you to take an appropriate action for your site.
https://developers.google.com/recaptcha/docs/v3
reCAPTCHA learns by seeing real traffic on your site.
https://developers.google.com/recaptcha/docs/v3
ということで、噛み砕いた意訳をすると、reCAPTCHAは、ユーザーのサイト閲覧時の振る舞いの適正度をスコアリングし、さらにサイト閲覧者の振る舞いをbotか人間かを学習し、精度を高めるとのことでした。
そのため、サイトにアクセスした時から、botか人間かを判定し、さらに学習もしてくれているということになります。
スパムメールにお悩みの当社のお客様も、この「Invisible reCaptcha for WordPress」を設定することで、いままで一日数百件来ていたお問合せフォームからのスパムメールが来なくなったとのお声を頂いておりますので、当社では要件を満たしていれば必ず設定するようにしています。
最近、下記レンタルサーバーで注意喚起がされていましたので、設定は必須といっても良いです。
- 【注意喚起】お問い合わせフォームのセキュリティ対策のお願い(2020/09/14 17:20) – レンタルサーバー「heteml(ヘテムル)」
- お問合せフォームを悪用する攻撃増加に関する注意喚起 | さくらインターネット
Edit Author Slugを使う
「Edit Author Slug」とは、WordPressの「example.com/author/ユーザー名
」のリンク構造を変更できるプラグインです。
WordPressでは、「example.com?author=1
」のように、author
パラメーターにユーザー番号
を付けてアクセスすると、「example.com/author/ユーザー名
」に転送されます。
ユーザー名がURLに出てしまうため、外部の人間に漏れてしまいます。
ユーザー名がわかると、第三者は、パスワード総当りの不正ログインを試みるリスクがあります。
そこで、「Edit Author Slug」プラグインを使用し、WordPressアカウントのユーザー名を第三者に判別できないような文字列に変換(ハッシュ化)し、「example.com/author/3266502de0c608f0f93e2bd334f582305496c7b7
」のようなURLに変更します。
このように変更することで、ユーザー名が第三者に漏れる状態を防ぐことができます。
しかし、「ユーザー名が漏れても、SiteGuard WP Pluginのログインロック機能があるから大丈夫なのでは?」と思う方もいらっしゃるかと思います。
確かに、ユーザー名がわかっていても、パスワード総当りのログインの繰り返しをされた時に、ログインをブロックできます。
ただ、SiteGuard WP Pluginがなんらかの不具合を起こしてしまい、ログインロック機能が人知れず使えなくなってしまった時に、パスワード総当り攻撃を何のセキュリティもなしに受けてしまう状態になってしまいます。
そのため、あくまでもリスクヘッジとしてユーザー名をハッシュ化させておくのは有用になりますので、設定しておいて損はないです。
BackWPupを使い、バックアップする
「BackWPup」とは、サーバーにある、WordPress関連のファイルやSQLファイルをzip等に圧縮し、サーバー上バックアップできるWordPressプラグインです。
何故ファイルのバックアップするのかというと、レンタルサーバーが突然故障したり、地震や台風などの自然災害によりサーバーのデータセンターに被害があると、WordPress関連のデータを消失してしまうリスクがあるためです。
これらの特に地震や台風などの自然災害は100%防ぐことはできませんので、バックアップをすることで、データを消失しても、すぐにサイトを復元できるように保険をかけておくことが重要になります。
当社は、BackWPupでバックアップファイルを生成し、ローカル環境にダウンロードして運用しています。
バッチファイルなどを使用し、自動ダウンロードすることで、手数少なく運用しています。
しかし、「BackWPup」はすごく便利で万能のように思えますが、不便なところもあります。
それは、容量が大きい画像などがあるディレクトリを圧縮できない場合があることです。
そのような時は、該当のディレクトリは「BackWPup」でバックアップファイルに圧縮せずに、バッチファイルで直接ダウンロードし、抜け漏れがないよう運用しています。
さいごに
WordPressサイトに対するリスクも、セキュリティ対策も様々ありますね。
お困りの方はこの記事を参考にしていただくか、当社にお気軽にお問い合わせいただければと思います。
またセキュリティ対策については、お客様が安心してサイトを運用できるよう、全力でキャッチアップをしてまいります!
当社では協力会社様を募集しております。
ご希望の方は、「応募フォーム」よりお申し込みいただけると幸いです。