WORDPRESSが改ざんされまくっているのでいい加減セキュリティ入れてみた。

レンタルサーバーにあるWORDPRESSが改ざんされてメールの発信元として踏み台にされる事件が起きました。
これは困ったということなのでテーマファイルとwp-config.phpだけバックアップを取って入れ替えたのですがまだ不安。
前回もこの対処で乗り切ったかと思われたのですがまた改ざんされてしまったのでこれはいけないと思い本格的にセキュリティ対策をすることに。

All In One WP Securityというプラグインが良いとの事なので早速使ってみる。
かなり設定項目が多いので全機能を紹介するのにかなり気合が入りますが頑張ります。
(すべて設定しなければいけないわけではありません。)
サイト改ざんに対する不安が解消されるまでの部分を説明していきたいと思います。

Dashboard

プラグインをインストールしDashboardを見てみると色々設定できるようです。
User Accountに「admin」があるのが危険なのかと思い、早速「admin」アカウントの名前を変えてみましたが
まだSecurity Strength Meterの値が非常に低いです。

サイトの安全度をスコアで表してくれるので非常にわかりやすいですね。
「Critical Feature Status」を見て見る限りFirewallも設定されていないようです。

「Logged in Users」で自分以外に現在ログインしているユーザーが見れるようです。
「Last 5 Logins」では最近ログインしたユーザーの履歴を5つまで見れるようです。
「Maintenance Mode Status」は現在メンテナンスモードかどうかを判別してくれます。
「Locked IP Addresses」ではアクセス拒否したIPアドレスの一覧が見れるようです。

Settings

メニューから「Setting」をクリックしてセッティング画面に遷移します。
.htaccessファイルやwp-configファイルをそれぞれ編集・バックアップできるようですね。

User Accounts

WP Username

「Change Admin Username」欄ではデフォルトで設定されている「admin」というユーザー名を変更してくれと言ってきます。
先ほど変更したのでスコアも「15/15」になっていますね。
こちらはクリア済みのようです。
続いて「Display Name」の方を見て行きましょう。
こちらはBadなようです。

ユーザーネームと”ニックネームとディスプレイネーム”が同じだと危険ですよ、ということなので変更してみることに。
下の方に対象のユーザーネームへのリンクが表示されていますのでクリックして変更しましょう。

ユーザーネームがニックネーム、ディスプレイネームと同じではない環境にします。
ニックネームをデイスプレイネームに設定しましょう。ユーザーネームはサイト上では見えない状態にします。

変更できました。

スコアも「5/5」になりました。

続いては「password」の部分ですが、こちらではパスワードの強固さを測ることができます。
自分の使っているパスワードを入力して強固度を測っておきましょう。

User Login

Login Lockdown Configuration

User Login項目では総当りログインアタックを防ぐための項目を設定出来るようです。

Enable Login Lockdown Featureにチェックを入れると
Login Lockdown機能が有効になります。

デフォルトでは5分間に3回ログインを間違えたら60分間ログインができなくなる設定です。
Max Login Attempts: ここには何回までログイン試行を許可するかを設定します。
Login Retry Time Period (min): ここには上記ログイン試行の制限時間を設定します。
Login Retry Time Period (min): ログインをロックアウトする時間を入力します。

設定できたらスコアが「20/20」になりました。

「Failed Login Records」ではログインに失敗した履歴が見れるようです。

「Force Logout」 何分間ログイン状態が続いたら強制ログアウト、というのを設定できます。今回は特に設定しませんでした。
「Account Activity Logs」ではそれぞれのアカウントのアクティビティを見ることが来ます。
「Logged in Users」も同じですね。ログイン履歴が閲覧できます。

User Resistration

Manual Approval

ここではユーザー登録を自動で行うか否かを決定します。
このサイトでは管理者以外の人物がユーザー登録するような機会を与えないので、
Enable manual approval of new registrations:にチェックを入れます。

スコアが「20/20」になりました。

Resistration captha

ここではユーザー登録時にCapthaを使ってスパムを防止するセッティングが出来ます。
先ほどユーザーが自分で登録できない環境を作りましたが一応チェックを入れておきましょう。

スコアが「20/20」になりました。

Database Security

DB Prefix

WORDPRESSのインストール時、データベースを作る際にPrefixを設定したと思います。
通常、デフォルトでは「wp_」という形になっていたと思いますがこれも危険なようです。

今回はデフォルトのままにはなっていなかったのでスコアは「10/10」でした。
良かった良かった。

DB Backup

「DB Backup」ではデータベースのバックアップを取ってくれるようです。
4週間に一回データベースのバックアップを取る設定になっています。

Enable Automated Scheduled Backups: ここにチェックを入れるとバックアップをスケジューリングしてくれます。
Backup Time Interval: バックアップを取る周期を設定します。
Number of Backup Files To Keep: バックアップファイルをいくつ残すかを決定します。
Send Backup File Via Email: バックアップをメールで送信するかどうかのチェック、その際のメールアドレスを決過ぎて定します。

設定したらスコアが「20/20」になりました。

Filesystem Security

file Permissions

ファイルのパーミッションが適切に設定されているかをチェックできます。
今回は正常でした。

スコアは「20/20」を指しています。

PHP File Editing

ここでは管理画面からPHPファイルを編集できるようにするか否か決定します。
基本的には管理画面でちょこちょこっと弄ったりすることがありますので編集できないようにするのは少し不安ですが
このサイトに関しては直接触ることもそうそう無いのであえて編集できないようにしておきます。

WP file Access

Check this if you want to prevent access to readme.html, license.txt and wp-config-sample.php.
(readme.html、license.txt、wp-config-sample.phpへのアクセスを禁止する場合は、これをチェックしてください。)
とあるので、アクセスを禁止しておきます。

Host System Logs

ホスティングプラットフォームによって、error_logというファイルにエラーログまたは警告ログが生成されることがあります。
エラーまたは警告の性質と原因によって、ホスティングサーバーはWordPressインストールの多数のディレクトリにこのファイルの複数のインスタンスを作成できます。
これらのログファイルの内容を間違いなく表示することにより、対処する必要のあるシステムの根本的な問題を常に把握することができます。

とのことです。

ここでエラーログが見れるということですね。

まあView Latest System LogsをクリックしたらNo system logs were found!って言われましたけどね。

WHOIS Lookup

この機能を使用すると、WHOIS APIを照会することで、IPアドレスまたはドメイン名に関する詳細な情報を参照できます。
リアルタイムのアクセスを監視できると上記で紹介しましたが怪しいIPアドレスをここに入れて招待を見破りましょう。

Blacklist Manager

オールインワンWPセキュリティブラックリスト機能では、特定のホストIPアドレスまたは範囲、さらにはユーザエージェントを禁止するオプションが提供されます。
この機能は、以下の設定で設定したものと一致するIPアドレスまたはユーザエージェントを持つユーザに対するサイトアクセスをすべて拒否します。
このプラグインは、.htaccessファイルを適切に変更することでこれを実現します。
.htaccessファイル経由でユーザーをブロックすることにより、あなたがホスティングサーバーにヒットしたらすぐにブラックリストに載った訪問者へのアクセスをすべて拒否する、最も安全な第一の防衛線を使用しています。

Enable IP or User Agent Blacklisting: ここにチェックを入れると機能するようです。もしブラックリスト対象にしたいIPアドレスがある場合はEnter IP Addresses: に対象のIPアドレスを入れてチェックを入れておきましょう。

Firewall

このタブの機能を使用すると、サイトの基本的なファイアウォールセキュリティ保護ルールをいくつかアクティブにすることができます。
ファイアウォール機能は、現在アクティブな.htaccessファイルに特別なコードを挿入することで実現されます。
これはサイトの一般的な機能には影響しないはずですが、必要があれば、続行する前に.htaccessファイルのバックアップを取ることができます。

Basic Firewall Settings

Enable Basic Firewall Protection: サイトに基本的なファイアウォール保護を適用する場合は、これをチェックします。

WordPress XMLRPC & Pingback Vulnerability Protection

Completely Block Access To XMLRPC: WP XML-RPC機能を使用しておらず、XMLRPCへの外部アクセスを完全にブロックしたい場合は、これをチェックしてください。

Disable Pingback Functionality From XMLRPC: JetpackやWP iOS、WP XML-RPC機能が必要な他のアプリを使用している場合は、これをチェックしてください。これにより、WordPressのpingback脆弱性に対する保護が可能になります。

Block Accesss to Debug Log File

Block Access to debug.log File: デバッグログが有効になっているときにWordPressが作成するdebug.logファイルへのアクセスをブロックする場合は、これをチェックします。

Brute Force

Rename Login Page Settings

効果的なブルートフォース防止技術は、デフォルトのWordPressログインページのURLを変更することです。

通常、WordPressにログインする場合は、サイトのホームURLの後にwp-login.phpと入力します。

この機能を使用すると、独自のスラッグを設定し、wp-login.phpを含むログインURLの最後の部分の名前を好きな文字列に変更することで、ログインURLを変更できます。

こうすることで、不正なボットやハッカーは正しいログインページのURLを知らないため、ログインページにアクセスできなくなります。

これは確かに強力な防御手段となります。
自由なログインURLを設定できます。

Cookie Based Brute Force Prevention

ブルートフォース攻撃とは、ハッカーが適切な組み合わせを推測するまでユーザー名とパスワードの多くの組み合わせを試すことです。
悪意のある自動化されたロボットを介してサイト上で同時ログインが試みられる可能性があるため、サーバーのメモリとパフォーマンスに悪影響を及ぼします。
このタブの機能は、.htaccessレベルでのブルートフォースログイン攻撃の大半を停止し、WPログインページの保護を強化し、サーバーの負荷を軽減します。これは、システムがログイン試行のPHPコードを実行する必要がないためです。

Enable Brute Force Attack Prevention: ブルートフォースアタックからログインページを保護したい場合は、これをチェックしてください。

設定する前に.htaccessのバックアップを忘れずに取っておきましょう。

Login Captcha

この機能を使用すると、WordPressログインページにキャプチャフォームを追加できます。
ログインしようとするユーザーは、簡単な数学的質問への回答も入力する必要があります。間違った答えを入力すると、プラグインは正しいユーザー名とパスワードを入力してもログインを許可しません。
したがって、ログインページにキャプチャフォームを追加することは、効果的で簡単な「ブルートフォース」防止技術の1つです。

この機能は欲しいなと思ったので設定しておきました。

Login Whitelist

この機能では、特定のIPアドレスまたは範囲にのみWordPressログインページへのアクセスを許可するオプションがあります。
この機能は、以下の設定で設定されたホワイトリストに無いすべてのIPアドレスに対するログインアクセスを拒否します。
このプラグインは、適切な指令を.htaccessファイルに書き込むことでこれを実現します。
.htaccessファイルを介してIPアドレスを許可/ブロックすることで、最も安全な第一の防衛線を使用しています。ログインアクセスはホワイトリストIPアドレスにのみ許可され、他のアドレスはログインページにアクセスしようとするとすぐにブロックされます。

Enable IP Whitelisting: 「Your Current IP Address / Enter Whitelisted IP Addresses」で指定したIPアドレスのホワイトリストを有効にする場合は、これをチェックします。

Honeypot

この機能を使用すると、WordPressのログインページに特別な非表示の「ハニーポット」フィールドを追加できます。これは、人間ではなくロボットにしか見えません。
ロボットは通常、ログインフォームからすべての入力フィールドを入力するので、特別な隠れハニーポットフィールドの値も送信します。
ハニーポットの仕組みは、隠れたフィールドが、ロボットだけが提出するフォームのどこかに配置されるということです。そのフィールドにフォームが送信されたときに値が含まれていると、ロボットがフォームを送信した可能性が高く、その結果、そのフィールドが処理されます。
したがって、ログインフォームが送信されたときにこのフィールドに値があることをプラグインが検出した場合、サイトにログインしようとしているロボットは、ローカルホストのアドレス(http://127.0.0.1)にリダイレクトされます

これは面白い機能ですね。ロボットにしか見えない値を送信させる、と言うのは凄い発想だと思いました。

まだまだSPAMに関する設定等ありますが多機能過ぎて紹介しきれません。

サイト改ざんに関する防御策はこれだけやっておけばいいかと思います。
後はFTPから直接入られないように気をつけていきたいと思います!

WORDPRESS

Posted by bistro