2023年08月16日

[WordPress][プラグイン]
WordPress設置後にセキュリティ設定をする

前回のブログに引き続き、今回もWordPressのセキュリティに関しての情報になります。
パスワードに守られていると、なんとなく平気そうに見えてしまって何も対策をしていない方が多いのではないかと思いますが、WordPressは世界中で数多く使用されているために狙いやすくなっていることも事実です。
今回は、WordPressを設置したら最低限用意したいセキュリティ対策、SiteGuardプラグインについての解説です。

SiteGuardとは

SiteGuardは、イー・ガーディアン株式会社(https://www.eg-secure.co.jp/)様が展開しているSiteGuardシリーズのWordPressプラグイン版で、純国産のWAFになります。
WAFとは、Webアプリケーションの脆弱性を悪用する攻撃から守るセキュリティ技術になります。
このプラグインの内容で無料で提供しているのは素晴らしいの一言です。
WordPressを設置したらまず最初に入れるプラグインの筆頭と言えるでしょう。

SiteGuardをインストールする

サイトガードのインストールは、管理メニュー内の「プラグイン」-「新規追加」を開き、

「SiteGuard」とキーワードを入れて検索すると出てくる「SiteGuard WP Plugin」を「今すぐインストール」し、「有効化」させればすぐに発動した状態になります。

インストール後、管理画面の左側に「SiteGuard」という項目が追加されます。
この下層にいろいろな項目が設定できるようになっています。

一つずつ見ていきましょう。

ダッシュボード

ダッシュボードでは一通りどの設定が有効になっているか確認できます。
インストールして有効化した直後は下図のようになっています。

管理ページアクセス制限

この項目はデフォルトではOFFになっています。
これは、ログインしていないユーザーがhttp(s)://ドメイン名/wp-admin/〜以降のページにアクセスしようとしたときにNotFoundページを表示させるというものです。
http(s)://ドメイン名/wp-admin/
は、管理画面のURLになりますので、管理画面以下のファイルにアクセスしようとするとページを見えなくする、ということで一見良さそうな機能です。

あまりWordPressに余計な機能を持たせていないシンプルなサイトだと是非ONにしたい機能ですが、例えば最近あった事例をご紹介しますと、カードで支払うプラグインを導入していたサイトでは購入履歴が購入者に通知がいく仕組みだったのですが、そのアドレスが/wp-admin/以下のURLだったため購入履歴が見えなくなり苦情がきた、ということがありました。
サイト内の機能を十分理解した上でONにすることをおすすめします。

ログインページ変更

WordPressにログインするURLは一律で
http(s)://ドメイン名/インストール先ディレクトリ/wp-admin/
でアクセスできてしまいます。
例えば適当にどこかのサイトを訪問したときに、URLの後ろに/wp-admin/を付けるだけでログイン画面が表示されることがよくあります。
WordPressのログイン画面は、間違っていても回数制限があるわけではなく、その画面で何回でもアタックすることが可能な状態になっているわけで、とても危険な状態と言えます。
これを避けるために、このログインページ変更の設定があります。
この設定をONにするとログインURLが変更になり、適当な文字列のURLに変更ができます。
ただし、下にある「管理者ページからログインページへリダイレクトしない」をオンにしないと、今まで通り/wp-admin/からも接続できてしまいますので、設定する場合は下のオプションもオンにするようにしましょう。
デフォルトでこのチェックが入っていないのは、よくわからないでSiteGuardを有効化した際に次回のログインができなくなる可能性があるからと思われます。

注意:
このオプションを入れたあとは、
http(s)://ドメイン名/インストール先ディレクトリ/wp-admin/
では接続ができなくなりますので、変更した場合はそのURLをブックマークなどして忘れないようにしましょう。
私は、一度ログアウトしていったん設定したURLを直打ちし、ブラウザに覚えさせることにしています。
万が一URLを忘れてしまった場合は、FTPでサイトトップにある.htaccessファイルを確認するとURLが記載されています。

#==== SITEGUARD_RENAME_LOGIN_SETTINGS_START

RewriteEngine on
RewriteBase /
RewriteRule ^wp-signup\.php 404-siteguard [L]
RewriteRule ^wp-activate\.php 404-siteguard [L]
RewriteRule ^************(.*)$ wp-login.php$1 [L]

#==== SITEGUARD_RENAME_LOGIN_SETTINGS_END

のような記載があると思いますが、
************
の部分が管理画面にログインするためのURLになります。
(インストール先ディレクトリ以下のURL)

画像認証

SiteGuardを入れたあとに管理画面にログインしようとするとすぐに気づくと思いますが、ログインフォームに画像が表示され、おなじものを入力するように促されます。
これが画像認証になります。
ユーザー名、パスワード、画像認識の3つが一致しないとログインできないことはもちろんですが、ひらがなを入力させることで日本語圏以外からのアクセスをある程度省くことができるのが素晴らしいですね。
ログイン以外に、コメントを入力する際、パスワード確認ページ、ユーザー登録ページなど場合に応じて何を入力させるか切り替えられるので、管理者は日本人だけだがコメントは英語圏からもある、というような場合にも柔軟に対応できるようになっています。

ログイン詳細エラーメッセージの無効化

例えばログイン画面でメールアドレスが一致しているがパスワードを間違えたとき、
「エラー: メールアドレス ***@***.com に対して入力したパスワードが間違っています。 パスワードをお忘れですか ?」
といったメッセージが表示されます。
また、ユーザー名が間違っていると
「エラー: ユーザー名が無効です。 パスワードをお忘れですか ?」
とメッセージが表示されます。

これでは、「メールアドレスはあっているけどパスワードが間違っている」「ユーザー名が登録されていない」というのが丸わかりです。
これを
「エラー: 入力内容を確認の上、もう一度送信してください。」
というすべて同一のメッセージを表示させることで、何があっているのか間違っているかを判別させないことが可能になる設定です。

ログインロック

ログインに失敗した場合、指定期間中に指定回数に達した接続元IPアドレスを指定時間のあいだブロックする機能です。
何回もIDやパスワードを試すことを避けることができます。

ログインアラート

管理画面にログインしたときに、管理者宛てにログイン通知のメールが届くようになります。
受信者のオプションを「管理者のみ」にチェックをいれておくと管理者の権限を持つユーザーのみ、この機能の対象になります。
自分が管理者で、ログインしてないはずなのにログインの通知がきた、という場合はすぐに対処が必要になります。
一方で、複数管理者がいる場合は他の管理者がログインしても通知がきますので誰が入ったのか逆に不安になることがありますので、もう少し細かく通知の設定が欲しいところではあります。

フェールワンス

こちらはデフォルトでOFFになっている機能です。
正しい入力を行っても、最初のログインを失敗するというすごい機能です。
2回めにログインできるということで多少面倒さはありますが、効果はあるのではないかと思います。
こちらも、中身を理解せずにプラグインが実行された場合にログインできなくなったという騒ぎにならないように初めはOFFになっているのかと思いますが、設定を忘れて久しぶりにログインしようとしたら入れなくなった・・・ということはありそうですね。

XMLRPC防御

XML-RPCピンバックを利用したDDoS攻撃や、XML-RPCを利用したブルートフォース攻撃から防御するということですが、よくわかりませんよね。
ピンバックは、自分の投稿に対してリンクが張られたことを知らせるブログの機能になりますが、それを悪用して標的サイトに大量のピンバックが送り付けられる攻撃を防いでくれたり、XML-RPCという外部システムからの投稿や画像のアップロードする機能にIDとパスワードの情報を機械的に与え続けてログイン情報を取得する攻撃から防いでくれる機能、ということになります。

ユーザー名漏えい防御

この機能はデフォルトはOFFになっています。
WordPressは記事の作成者で検索できるようになっています。サイトに
http(s)://ドメイン名/?author=1
と入力することでユーザー名を確保することができます。
ユーザー名がわかってしまうと、あとはパスワードだけになりますので非常に危険な状況です。
上記URLを叩かれた際にNotFoundを表示させるのがこの機能になります。

またここでは詳しい解説は省きますが、REST APIによる漏洩も防ぐことができます。
ただ、プラグインによってはそれによって動作しなくなる場合があるため、除外するプラグインを設定できるようにもなっています。

更新通知

WordPress本体、プラグイン、テーマの更新が必要になった場合に管理者に24時間以内にメールで通知する機能です。

WAFチューニングサポート

WebサーバーにJP-Secure製WAF SiteGuard Server Editionが導入されていて、正常なアクセスがWAFによって遮断されてしまう場合に、それを回避するルールを作成することができる機能とのことです。
JP-Secure製WAF SiteGuard Server Editionは、たしか某レンタルサーバーに導入されていた記憶があります。
記事投稿のたびにサーバー側のWAFがひっかかって投稿できず、いったんWAFをオフにして投稿という面倒な手順を踏んでいた記憶がありますが、そういった誤検知のルールを設定できるということのようです。

ログイン履歴

これは導入して1週間位経ったら是非見て欲しい機能ですが、ログインの履歴を参照できます。
某サイトのログですが、

まず「結果」が「失敗」または「ロック」になっているのはアタックがあったものになります。
その多さにも驚くと思いますが、4行目の「結果」が「成功」になっている正常ログインの際に使われたログイン名と同じログイン名で失敗しているログインが4件もあるのです。
つまりIDはもうバレていて、あとはパスワードが一致されたらログインされる状態だ、ということです。
すぐに対策は行いましたが、定期的に確認してIDなりパスワードなりを変更するのが良いということが再認識できるデータです。

まとめ

今回はSiteGuardプラグインを紹介しました。
これ以外にもまずは分かる範囲でもいいので対策していきましょう。
サーバー側のセキュリティ対策も必要ですが、レンタルサーバーなどでは初期状態で対策されている場合が多いので、あえて解除しないように気をつけるようにしましょう。

この記事を書いた人

おおつき@TTI

Webディレクター、Webコンサルタント、Webコーダー、日曜プログラマー、他色々やってます。

気になったら
まずはご相談を

あなたの悩みのために専門家がチームを組み、課題解決に取り組みます。
まずはお気軽にお問い合わせください。

日本全国どこでも対応します。