WordPressサイトのセキュリティ強化プラグインとして、「All in one Security」というプラグインがあります。
このプラグインは、WordPressサイトのセキュリティを効果的に強化し、様々なセキュリティ脅威から保護するためのツールです。
主な機能としては、ファイルシステムの保護、データベースのセキュリティ強化、ブルートフォース攻撃からの防御、ログインセキュリティの向上などが挙げられます。
しかしながら、基本設定にはややIT技術者向けの用語が多数含まれており、初心者には少々利用しづらいプラグインかな、というのが個人的な印象です。
私も全ての機能を把握できているわけではわりませんが、よく使う機能や「これは利用した方が良い」という機能にフォーカスして紹介していきます。
インストール方法と基本設定
インストールと有効化
まずは、プラグインのインストールと有効化から始めていきましょう。
WordPressの「プラグイン」⇒「新規追加」を押し、検索フォームに「All in one security」と入力してください。
「インストール」を押したのち「有効化」してください。
するとサイドバーにはこのようなメニューが一覧で表示されるようになります。
推奨される最低限のセキュリティレベル
まず一番上の「ダッシュボード」から見ていきましょう。
その中の項目の一つに下記のような「推奨される最低限のセキュリティレベル」というブロックがあると思います。
最小限の設定としてまずはこれらの項目を設定していくと良さそうです。
1つづつ設定していきましょう。
①管理者のユーザー名
管理者ユーザー名の変更
青枠の中で解説されている内容を見てみましょう。
多くのハッカーは、ユーザー名を “admin” にしてパスワードを繰り返し入力する「ブルートフォースログイン攻撃」を試みます。
セキュリティの観点から、デフォルトの “admin” ユーザー名を変更することは、サイトで最初に行うべき最良策の1つです。この機能を使うと、デフォルトの “admin” ユーザー名をより安全な名前に変更することができます。
とあります。
つまりは「adminという名前のユーザー名はダメだよ!」ということなので、もし、adminという名前でユーザーを作ってしまっていた場合はそれを変更しましょう。
もし、adminという名前のユーザーが存在していた場合は下記のような画面が表示され、ユーザー名を変更できるようになっています。
WordPressのデフォルトの機能では、一度ユーザー名を設定してしまうと後からの変更はできず、ユーザーを削除して新たに作り直す、ということしかできないため、この機能は大変ありがたいですね。
ログイン名と表示名が同じアカウントの修正
青枠の中で解説されている内容を見てみましょう。
投稿を送信するかコメントに答えると、通常、WordPress はあなたの「ニックネーム」を表示します。
デフォルトでは、ニックネームはアカウントのログイン (またはユーザー) 名に設定されています。
セキュリティの観点から、ニックネームとユーザー名が同じままにすることは、ハッカーにアカウントのログインする資格の半分を与える悪い習慣です。そのため、サイトのセキュリティをさらに強化するためには、ニックネームと表示名をユーザー名とは異なるものに変更することをおすすめします。
例えば、投稿の更新者などが表示されるテーマや、コメント機能に対応したテーマをしている場合は、そこに表示される名前がデフォルトではユーザー名になってしまいます。
それは、「WordPressのログイン名がもろバレになってしまっている状態だから良くないよね?」ということなので変更しましょう。
下記はユーザー名とニックネームが同じになっている場合の例です。
(そもそもadminというのも良く無いですが)
これを下記の様に変更しておきましょう。
ユーザー番号の無効化
こちらも青枠の中で解説されている内容を見てみましょう。
この機能により、外部ユーザ/ボットが”/?author=1″、”/wp-json/wp/v2/users”、oEmbed リクエストのような URL でユーザ情報を取得することを防止できます。
この機能を有効化すると、ユーザー情報の代わりに403エラー Forbidden を返します。
実はWordPressはデフォルトだとURLの末尾に「/?author=1」を入力したり、REST APIのエンドポイントである「/wp-json/wp/v2/users」を入力することで簡単に管理者用のユーザー名がバレてしまいます。
この機能をONにしておくことで、例え上記のURLにアクセスされたとしても、403 Forbiddenを返すのでユーザー名の漏洩を防ぐことが可能になります。
②Login Lockout
推奨項目の2つ目、LoginLockoutの設定をします。
「All in one Security」では、正しくないユーザー名やパスワードでのログイン試行に対して強制的にロックアウトをかけることが可能です。
「ログインロックダウンの機能を有効化」にチェックを入れることで、その機能が使用できるようになります。
その他の細かな設定を見ていきましょう。
ロック解除リクエストを許可
これは基本的にOFFの状態でも良いと思います。
ロックアウトされたユーザーが、正規のユーザーであることを証明することによって、ロックを解除dけいるようになるための機能ですが、正規のユーザーならそもそも間違えてロックアウトされる可能性も低いですし、ロックアウトされてもサイド正しい入力を行えばいいだけなので、リスクを考えると不要であると思います。
最大ログイン試行回数、ログイン再試行時間、最小ロックアウト時間、最大ロックアウト時間
「ログイン再試行時間」中に「最大ログイン試行回数」間違えると、「最小ロックアウト時間」から「最大ロックアウト時間」までの間ロックアウトされる、という設定になります。
一般的なエラーメッセージを表示
これも不正ユーザーに対してヒントを与えてしまうことになるのでOFFにしておきましょう。
ただちにロックアウトする無効なユーザー名
これはONにしておき、「特定のユーザー名を即座にブロック」にはadminやrootなど一般的に狙われやすいユーザー名を登録しておきましょう。
そうすることで、そのユーザー名が入力された場合、最大ログイン試行回数を待たずに即座にロックアウトさせることができます。
メールで通知
これはONにしておき、ボックス内にメールアドレスを入れておくことで、ロックアウト発生時にメールが届きます。
Enable PHP backtrace in email
これは多分OFFで良いと思います。
私も良く分かっていません…汗
③File permissions
推奨項目の3つ目がFile permissions(ファイルパーミッションズ)です。
ここに一覧表示されているファイルはどれもWordPressの非常に重要なファイルでこれらのファイルに外部の侵入者がアクセスできてしまうと、文字通り何でもできてしまうため、適切な「アクセス権限」を付与しておくことが重要です。
写真のように、すべてが「アクション不要」となっていれば問題ありませんが、もし「推奨パーミッションを設定」というボタンが表示されている場合はそちらをクリックして、適切なアクセス権限にしておきましょう。
④基本的なファイアウォール設定
推奨項目の4つめの「基本的なファイアウォール設定」です。
この設定はONにしておき、「最大ファイルアップロードサイズ」に関しては、動画などの大きなサイズのファイルをアップロードする予定が無ければ推奨通りの10MB程度の設定で良いと思います。
併せて他の項目も設定しておきましょう。
デバッグログファイルへのアクセスをブロック
デバッグログファイルには、セキュリティ情報などが含まれている可能性があるため、このファイルへの外部からのアクセスを禁止しておきましょう。
ディレクトリ内容のリスティング
レンタルサーバーを使用している場合はデフォルトで対策されていると思いますが、通常はアクセスしたディレクトリ内にindex.phpが存在しなければディレクトリ内の一覧を表示するというのが、Apache(Webサーバー)のデフォルトの挙動として存在します。
下記のような感じで
これはよろしく無いので、機能をONにして無効化しておきましょう。
TRACEとTRACK
これらはHTTPメソッドの一種ですが、WordPressでは基本的には使用しないですし、XSS(クロスサイトトレーシング)に悪用される可能性もあるので機能をONにして無効化しておきましょう。
ユーザーセキュリティ
メニュー項目の「ユーザーセキュリティ」について見ていきます。
※「User accounts」タブと「LoginLockout」タブについてはそれぞれ先ほど説明した「①管理者のユーザー名」と「②Login Lockout」のため省略
Force logout
強制的にログアウトさせるまでの時間を設定します。
WordPressのデフォルトのセッション有効期限は2週間で、それ以上経過すると自動的にログアウトされた状態になります。
セッションが長期間有効なままだと不正アクセスさせるリスクも高まるため、必要最小限の期間のみセッションを有効にしておくと良いでしょう。
好みの時間で良いでしょうが、1つの記事を投稿したり、他の作業をするのに大体どれくらいの時間がかかりそうか?
という基準で設定してみると良いかもしれませんね。
Logged in users
こちらは現在ログインしているユーザー名とIPアドレスを一覧表示するものです。
明らかにおかしいIPアドレスでログインされている場合は不正アクセスの可能性がありますので「Force logout」ボタンで強制的にログアウトさせた後、「ブラックリスト」に登録してそのIPアドレスからの接続を永久的に拒否する設定を行いましょう。(詳しくは後述します)
Additional settings
アプリケーションパスワードは外部からリモートでWordPressの管理画面を介さずに編集を行う際などに使用しますが、そういったカスタマイズを施していないサイトであれば基本的には不要なのでONにして、無効化してしまって良いと思います。
データベースセキュリティ設定
WordPressのデフォルトのテーブル名は「wp_」という接頭辞が付きますが、デフォルトのままだとクラッカーの攻撃対象になるので、別の推測しにくい名前に変更しておきましょう、という設定です。
予期せぬ不具合が発生する可能性もあるので、この設定を行う際は事前にバックアップを取得し、自己責任で行ってください。
File Security
※「File permissions」タブについてはそれぞれ先ほど説明した「③File permissions」と同一のため省略します。
File protection
デフォルトのWPファイルへのアクセスを防止
これはどちらでも構いませんが、有効化することで特にマイナスの影響を与えることも無さそうなのでONで良いと思います。
「重要な情報(WordPressのバージョンなど)を潜在的なハッカーから隠します」と書かれていますのでONで良いでしょう。
直リンクの防止
こちらは確実にONにしておきましょう。
WordPressはデフォルトでは「URL/wp-content/uploads/2024/04/ファイル名」などのパスを記述することで外部から簡単に画像ファイルなどへアクセスできてしまいます。
それをそのまま他社サイトの画像に使用されると、そのサイトが表示されるたびに自分のサーバーのリソースが使用されることになるため非常に良く無いです。
また、会員制のサイトを運用している場合においても、非会員の人間が直接会員限定コンテンツの画像を見ることができてしまう訳なので、そういう不正を防止する意味でも、この機能はONにしておいた方が良いでしょう。
PHPファイル編集を無効化
WordPressはデフォルトでは管理画面からテーマファイルのPHPを編集できるようになっています。
非エンジニアの人間がこれらのファイルを操作できてしまうのは思わぬ不具合発生にも繋がるので、この機能はONにしておきましょう。
PHPファイルを編集したい場合はFTP等で繋いで編集するようにしましょう。
コピープロテクション
自サイト内のテキストを右クリックでコピーされることを防ぐ機能です。
これは完全に好みで良い気がします。
フレーム
これは正直、自分もどちらが良いのかあまり分かっていなかったのですが、調べてみると下記のようなセキュリティ上のメリットがあるようです。
CSRF(Cross-Site Request Forgery)の防止:
他社サイト内に埋め込まれた<iframe>
を通じて、ユーザーが自社サイト上で認証済みのセッションを持つリクエストを自動的に送信される可能性があります。これはCSRF攻撃の一形態です。自社サイトが他社サイト内に埋め込まれることを防ぐことで、このリスクを軽減することができます。信頼性の向上:
自社サイトが他社サイト内に埋め込まれると、ユーザーが他社サイトと混同する可能性があります。不正なコンテンツや誤解を招く可能性がある場合、ユーザーの信頼を損なう可能性があります。自社サイトのコンテンツが他社サイト内に埋め込まれることを防ぐことで、ユーザーに対する信頼性が向上します。外部リンクの管理:
<iframe>
を使用して自社サイトを他社サイトに埋め込むことで、自社サイトからの外部リンクの管理が難しくなります。外部のコンテンツが自社サイト内に埋め込まれる場合、そのコンテンツが変更された場合やリンクが切れた場合に、ユーザー体験に悪影響を与える可能性があります。自社サイトが自らのドメインでホストされ、外部サイトをリンクすることで、このリスクを軽減することができます。セキュリティポリシーの簡素化:
自社サイトが他社サイト内に埋め込まれることを防ぐことで、セキュリティポリシーの管理が簡素化されます。自社サイトのセキュリティ対策を確実に適用することができ、セキュリティ上のリスクを最小限に抑えることができます。
とのことなのでONにしておいた方が何かと良さそうです。
ファイアウォール
※「.htaccess rules」タブについてはそれぞれ先ほど説明した「④基本的なファイアウォール設定」と同一のため省略します
PHP rules
WordPressXMLRPCとピンバック脆弱性保護
XML-RPC(XML Remote Procedure Call)は、HTTP経由でリモートサーバーと通信するためのプロトコルのことを指します。
WordPressにおいては外部のアプリケーションやサービスからサイトにアクセスし、データの読み書きや操作を行うために使用されます。
例えば、WordPressの投稿やページの作成・編集、コメントの管理、メディアのアップロードなどがXML-RPCを介して行われます。
それらの機能を使用していないのであれば完全に無効化をONにしてしまって良いでしょう。
Disable WordPress RSS and ATOM feeds
フィードとは、ウェブサイトやブログなどのコンテンツを最新情報から順に提供するための仕組みや形式のことで、ユーザーは自分自身でお気に入りのブログやサイトのフィードを購読することで、新しいコンテンツが投稿される度に自動的に更新され、閲覧することができます。
それらの情報をユーザーに提供しなくても良いという場合にはこの機能をONにしても良いでしょう。
Proxy comment posting
プロキシサーバーを経由してコメントを投稿することを禁止する機能です。
普通の人間であれば、わざわざプロキシを経由してコメントするなどは考えられず、大体は悪意を持ったユーザーか、自分の正体(IPアドレス等)を他者に知られたくないユーザーの行動ですので、この機能はONにしておきましょう。
不正なクエリー文字列
万全なセキュリティ対策のためにONしておきたいところですが、どうやらURLに日本語が含まれている場合は注意が必要なようで、不具合が発生する可能性があるようです。
WordPressの「パーマリンク設定」が「日付と投稿名」「月と投稿名」「投稿名」以外の設定になっていれば問題無いと思います。
もし、不具合が発生したらこの設定をOFFにすると良いでしょう。
※必ず自己責任のもと行ってください。
高度な文字列フィルター
こちらも「不正なクエリー文字列」と同様の設定で良いと思います。
6G Firewall rules
6Gファイアウォールはシンプルで柔軟なブラックリストで、ウェブサイトを攻撃する悪意のあるURLリクエストの数を減らすのに役立ちます。
とのことです。
良くは分かりませんが、私はとりあえず上記の画像のように設定していて問題は特に発生していません。
上段は使用しないHTTPメソッドなのですべてにチェックを入れても良いと思います。
下段は6G Firewallが推奨する「クエリ文字列」「リクエスト文字列」等々をブロックするようですが、その内容まではいちいち確認していないので、不具合が発生する可能性も考えてチェックは外しています。
オンラインのボット
ボットとは、インターネット上で動作し、自動タスクを実行するソフトウェアの一部です。例えば、Googleがあなたのページをインデックスする際、ボットを使用してこのタスクを実行します。
多くのボットは正当で悪意はありませんが、すべてのボットが優れているわけではなく、「Googlebot」などの正当なボットになりすまそうとするものもよくありますが、実際には Google とはまったく関係がありません。
世の中に出回っているボットのほとんどは比較的無害ですが、Webサイトの所有者は、サイトにどのボットを許可するかをより細かく制御したいと考えることがあります。
偽のGoogleBotをブロック
恐らく本物のGooglebotがブロックされる可能性というのは極めて低いと思われるので、その点は気にしなくて良いと思います。
お好みで有効化してください。
空のHTTPヘッダー
正常なリクエストにおいてはHTTPヘッダーが空であることは考えにくいためブロックしてしまって良いでしょう。
Blacklist
IPホストとユーザーエージェントのブラックリスト設定
指定したIPアドレスやユーザーエージェントからのサイトへのアクセスをブロックします。
この辺りは必要になった際に設定する、で良いと思いますがIPアドレスのブロックに関してはあまり意味が無いと思います。
結局IPアドレスの1つや2つ防いだところで、世界中に攻撃者は無数にいるので…
ユーザーエージェント(User-Agent)は、ウェブブラウザやその他のHTTPクライアントがウェブサーバーに送信する情報の一部です。これは、リクエストを送信するソフトウェアの種類やバージョン、オペレーティングシステム、デバイスの情報などを含んでいます。ユーザーエージェントは、ウェブサーバーがリクエストを受け取った際に、そのリクエストを送信したクライアントの特性を識別するのに役立ちます。
WP REST API
未承認のRESTリクエストを禁止
これはONにしない方が良いと思います。
WP REST APIは何かと必要になる場面が多いのと、色々なプラグイン、例えば「Contact Form7」などにも使用されている仕組みのため、これを禁止してしまうとプラグインの機能がうまく動作しなくなる可能性があります。
総当たり攻撃
ログインページの名称変更
これはしっかり設定しておきましょう。
WordPressのログイン画面はデフォルトだと「サイトURL/wp-login.php」もしくは「サイトURL/wp-admin」で簡単にアクセスできてしまいます。
そのため、ログイン画面のURLを攻撃者が想像しづらい任意の文字列に変更することで管理画面に不正にアクセスされるリスクを抑えることができます。
Coockieベースの総当たりログインの防止
先述の「ログインページの名称変更」との併用は不可らしいのでOFFのままで良いと思います。
私もこの機能は良く分かっていません…
CAPTCHA settings
ログイン画面やコメントのフォームにCAPTCHAを設けることができます。
「Google reCAPTCHA」「Cloudflare Turnsite」「Simple math CAPTCHA」の3つから選べるようです。
総当たり攻撃の際は基本的に、プログラムまたはボットを使用する場合が多いため、こういった「ひと手間掛かる機能」を取り入れることでもある程度効果が見込めるのでONにしておいて良いと思います。
下記の様にCAPTCHAをどのフォームに挿入するかを選択することができます。
例えば、コメント機能を導入していないサイトであれば、「Add CAPTCHA to comments form」などにはチェックをいれなくても大丈夫です。
私の場合は「Login form CAPTCHA settings」と「LOST password form CAPTCHA settings」にチェックを入れるようにしています。
ログインのホワイトリスト
この機能はOFFのままにしておきましょう。
この設定をすると許可したIPアドレス(通常は自分自身とお客様)以外の管理画面へのログインを許可しないようにできますが、固定IPアドレスでない場合はIPが変わると自分自身も締め出されてしまいます。
プロバイダとの契約で固定IPアドレスになっているかどうかが分からない場合はこの機能はOFFのままにしておきましょう。
404検出
404 Not Foundが検知された場合に、アクセスを試みたユーザーのIPをブロックするかどうかを選択することができます。
一部のケースでは、比較的短い時間で同じ IP アドレスから存在しないさまざまなページの URL にアクセスしようとする404エラーが繰り返し発生することがあります。
このような動作は、ハッカーが悪意のある理由で特定のページや URL を見つけようとしている可能性があることを意味します。
404検出のログを確認し、明らかに悪意のあるファイル名にアクセスしようとしている場合にはIPアドレスをブロックしても良いかもしれませんが、基本的にWordPressの攻撃者は無数に存在するため、IPアドレスのブロックは”いたちごっこ”になってしまうと思います。
ハニーポット
ログイン画面やユーザー登録画面に「ハニーポット」という非表示のフィールドを設けます。
可視化されていないフィールドのため人間には見えませんが、ロボットはこの値にも入力し送信する可能性が高いです。
この機能をONにしておくことで、ハニーポットに値が入力されたログインリクエスト(つまりロボットによるログイン)を拒否するという仕組みを構築することが可能になります。
スパム防止
これらの設定は主にWordPressにコメント機能を導入している場合にONにしておくと良いでしょう。
「Spam comments detected should be」の箇所は「Discarded(廃棄)」か「Marked as spam(スパムとしてマーク)」かを選択できます。
どちらでも良いと思いますが、私なら迷わず「Discarded(廃棄)」を選びますね…笑
スキャナ
File change detection
ハッカーは自分のコードやファイルをシステムに挿入し、サイトで悪意のある行為を実行することがあります。
この機能をONにすることで、WordPress のコアファイルやプラグインファイルの変更を検知し管理者にメールで通知することが可能になります。
ただし、悪意のあるファイル変更ではないような場合、
例えば、プラグインのアップデートやテーマファイルのアップデートなどもファイル変更検知の対象になるため、そういった通知が不要な場合には「無視するファイルとディレクトリ」などに追記しておくことで変更通知が届かないようにすることができます。
Tools
こちらのメニューについては直接のセキュリティ対策というよりは、役立つ便利な「ツール」機能が揃えられたメニューになります。
パスワード強度ツール
ハッカーがパスワードを破るのにどれくらいの時間がかかるかを表示してくれるツールです。
(どれほど信ぴょう性があるかは分かりませんが…)
ためしにWordPressのユーザー登録時にデフォルトで生成されるパスワードを入力してみると上記のような数値になりました。
WHOIS検索
WHOIS検索は、インターネット上のドメイン名やIPアドレスなどの登録情報を取得するためのインターネットプロトコルの一種です。WHOISは “Who is?” の短縮形であり、その名前の通り、ドメイン名やIPアドレスに関連する所有者や管理者などの情報を検索するために使用されます。
カスタム .htaccess ルール設定
こちらは基本的には操作しない方が良いと思います。
深い知識が無いのに操作してしまうと、サイトが表示されなくなる可能性があります。
訪問者ロックアウト
この機能をONにするとサイト管理者以外のサイト訪問者にメッセージを表示して、ロックアウトします。
サイトメンテナンスなどで一時的に訪問者を遮断したい場合などに使用します。
まとめ
All-in-one WP Securityの機能を一通りざっと簡単に解説してみましたがいかがだったでしょうか?
冒頭でも述べたようにWordPressは基本的にシステムです。
システムと言うことは保守やセキュリティ対策が必須になります。
今では誰でも手軽にホームページやブログサイトを開設するためのツールとしてWordPressが一般的に使用されていますが、そのほとんどがアップデートもされてなければ、セキュリティのメンテナンスもされていません。
WordPressはオープンソースソフトウェアであるため脆弱性を突いた攻撃にさらされやすいのは確かにあるでしょう。
しかしながら、そのほとんどが正しいWordPressの使用方法を分かっていないユーザーが使用していることにあると私は思っています。
今回紹介したAll-in-one WP Securityプラグインを使用することで、ある程度はWordPressサイトのセキュリティを強化することができます。
しかし、定期的なセキュリティのチェックやアップデートの確認も同じくらい重要な意味を持ちます。安全なWordPressサイトを維持するために、常にセキュリティ対策と定期的なメンテナンスは意識しておきましょう。