最近 WordPress でコーポレートサイトを新規に立ち上げる機会があったため、備忘録として記録します。
概要
WordPress はシェアが高く情報が多い分、脆弱性や設定の甘さを狙った攻撃の対象になることが多いです。せっかく育てたブログや自サイトが乗っ取られてしまったり、改ざんされてマルウェア感染拡大の踏み台にされたりするととても悲しいです。
ここでは無償で利用できる SiteGuard WP Plugin を利用して、管理画面のログインURLを初期設定から変更したり、ユーザー名の特定を防止したりして、外部から不正ログインを防ぐ方法を紹介します。
ちなみに、有名ではない私のブログに対してでも見覚えのないIPアドレスからログインを試みられた履歴がありました。このプラグインを入れると、こういった不正アクセスを防ぐだけではなく、ログも確認出来るようになるため、「見える化」することで今後の対策方法も考えやすくなります。
詳細
SiteGuard では様々な不正ログインに対する対策をこのプラグイン1つで行うことがで、有効化した時点で、以下の設定がされるようになっています。
私はこれに加え「XMLRPC防御」、「ユーザー名漏えい防御」の設定を変更しています。
このプラグインで行える対策については、それぞれの対策毎にリリースされているプラグインで対応することもできますが、複数のプラグインをインストールすると、その数だけプラグインが競合する可能性や、プラグインの更新や脆弱性を管理する必要性が増えます。
他には function.php をカスタマイズする方法もありますが、こちらもテーマが更新されるたびに影響を確認する必要があるため、私はこのプラグインを利用してまとめて設定することをおすすめします。
プラグインのインストール方法
管理画面にログインし、プラグインの新規追加画面を開きます。
「プラグインを追加」画面右上のキーワード部分に「SiteGuard WP Plugin」と入力し、検索結果に「SiteGuard WP Plugin」の「今すぐインストール」をクリックします。
「インストール中」、「インストール完了」と下図の赤枠部分の表示が変わりますので、「有効化」が表示されたらクリックします。
有効化を行った後、画面上部に新しいログインページ URL に関する案内が表示されます。
必ず URL をブックマークするか控えるかしてください。
ユーザーのメールアドレス宛にも新しいログインページURLを記載したメールが届きますので、そちらからも確認することはできます。
何らかの原因でメールでも確認できない場合は、 .htaccess 内の情報を確認することで新しいログインページ URL を特定することはできます。ただ、これは最終手段になります。
有効化が済めば、メニュー内に「SiteGuard」が追加されます。今後の設定などはここから行います。
追加で行う対策の設定方法
XMLRPC防御でXMLRPCを無効化する
XMLRPC は WordPress をリモートで操作する際に必要な機能で、主に以下のことを行うときに利用します。
- スマホアプリ経由などリモート投稿する
- Microsoft Wordから直接投稿する
- ピンバックとトラックバックを使う
この便利な機能の何が問題になるかというと、管理画面のURLを知らなくても xmlrpc.php にアカウント名とパスワードを投げることで認証処理を行うことができます。なので、ログインページの URL を変更して隠してしまっても、xmlrpc.php を狙う攻撃については意味がありません。
ちなみに冒頭で紹介したログ画面ですが、タイプを確認するとすべて XMLRPC となっております。
過去に設定を誤り、ユーザー名が漏れてしまったことがありますので、それを利用してブルートフォースアタックをかけられているログになります。同じアカウント名に対し、様々なパスワードに変更した情報を何度も投げられています。
だれでも上記のような被害を受ける可能性がありますので、リモート投稿などの機能を利用していないのであれば無効にすることをおすすめします。また、アカウント情報の管理は必ず適切に行いましょう。
無効化する手順
下図赤枠部分のように「ON]が選択されていることを確認します。
「XMLRPC無効化」を選択し、「変更を保存します。」
ユーザー名漏えい防御でユーザー名を特定できないようにする
WordPress ではWordPress REST API や author 情報などの機能を利用すると、これらのアカウント名を簡単に特定出来るようになっています。
例えば、ユーザー名を知らなくても、以下のURLでアクセスすることで、著者ページにリダイレクトされます。
サイトのURL/?author=1
このリダイレクトされる著者ページは ユーザー毎に/author/ユーザー名
というURLで存在するのですが、この「ユーザー名」の部分にニックネームなどではなく、ログイン時に使用するユーザー名がそのまま表示されてしまいます。
WordPress REST API でもこの機能を利用して、ユーザー名の一覧を取得することができます。
ただ、「contact form7」など、この機能を利用しているプラグインが存在するため、無効化する際は気をつける必要があります。
ただ、このプラグインには無効化の対象から除外する機能が含まれていますので、その設定をすれば問題はありません。
ユーザー名が漏えいする可能性がある機能とその対策については別でまとめていますので、詳細は以下の記事をご参考ください。
特定を防止する手順
下図赤枠部分をクリックし、「ON]が選択された状態にします。
「REST API 無効化」にチェックを入れます。
その後、無効化の対象から除外するプラグインを「除外プラグイン」に入力し、「変更を保存」をクリックします。
おわりに
SiteGuard WP Plugin を利用した不正ログイン対策で私が行っているものを紹介いたしました。
上記でも紹介しましたが、有名ではない私のブログに対してでも見覚えのないIPアドレスからログインを試みられた履歴もありました。
想像以上に身近で発生していることになりますので、自分のコンテンツが改ざんされたり、マルウェア感染拡大の踏み台にされたりして悲しい思いをしないように、必要な対策をしていきましょう。
ちなみにプラグインを使用せずに、function.php をカスタマイズする方法もあります。以下の記事で紹介していますので、ぜひご参考ください。