
こんにちは。
「 WordPressのadmin攻撃を受けました。。 」にて、デフォルト状態での運用は危険だということを実感しました。
今回は、以下のプラグインを使用して、ログインに関するセキュリティ改善を実施します。
Login Security Solutionをインストール
WordPressのプラグインインストール画面から検索して、Login Security Solutionをインストールします。
このプラグインはかなり細かな設定が可能なようです。
当方は、マルチサイト環境ですが、インストールできているようです。
インストールが成功すると、以下の様にパスワードの変更を求めるメッセージが出力されます。
このメッセージは要するに、本プラグインを有効化してから、パスワードが変更されていない為、変更してくださいという内容です。また、本プラグインはブルートフォース攻撃に対してサイトを保護すると謳っています。
ブルートフォース攻撃とは
ブルートフォースとは「強引に」という様な意味になり、パスワードの入力制限がかかるまで考えられるパターンをツールなどを使用して、パスワードを解読する攻撃です。
WordPressのデフォルトでは、パスワードは何回失敗してもログイン不能にはならないため、ブルートフォース攻撃の格好の餌食となってしまいます。
それでは、早速「Change All Passwords」リンクからパスワードを変更しておきます。
リンクをクリックすると、以下の様な画面になります。
パスワードを変更する場合は、「Confirm…」のチェックボックスをチェックし、「Require All Passwords Be Changed」ボタンを押下します。
メッセージの内容からすると、次回ログイン時に変更されるようです。
ログアウト前に各種設定をすませておきます。
各種設定を行う。
それでは設定を行っていきます。
Login Failure Policies
これは読んで時のごとくログイン失敗時のポリシー設定の項目になっています。なお、このプラグインは過去のログインデータを保持しているようで、そのデータに基づいて、チェックしていくようです。
- Match Time
- Delay Tier 2
- Delay Tier 3
- Notifications To
- Failure Notification
- Multiple Failure Notifications
- Breach Notification
- Breach Email Confirm
過去、何時間までの情報に対して、アクセス元をマッチさせるかを指定可能なようです。ひとまず、デフォルトのままとしました。
1段めのフィルタとして、何回までログイン失敗可能かを設定する項目のようです。
この回数失敗した場合は、次にログインできるまで30秒程度待つ必要があるようです。
2段めのフィルタとして、何回までログイン失敗可能かを設定する項目のようです。
Delay Tier 2よりも多い回数を指定する必要があります。
この回数失敗した場合は、次にログインできるまで60秒程度待つ必要があるようです。
ログインエラー時の通知先メールアドレスを入力できます。
未入力の場合は、管理者のメールアドレスに通知されます。また、複数のメールアドレスに送信したい場合は、カンマ区切りで複数メールアドレスを指定可能なようです。
私は、管理者メールアドレスに送られれば良いので、空にしておきました。
ここに入力した回数分ログイン失敗した場合は、管理者に通知されるようです。ひとまずデフォルトの50にしておきました。
0を入力すると、通知自体を無効にするようです。
複数管理者に送信する必要がある場合は、YESを選択しておきます。私はデフォルトのNOにしておきました。
ログインに成功したが、過去にx回失敗した履歴のあるアクセス元かをチェックして通知をするようです。ひとまず、デフォルト値としました。
ログインに成功したが、過去にx回失敗した履歴がある場合、即座にログアウトし、パスワードを初期化する設定になっているようです。ひとまずデフォルト値としました。
Password Policies
パスワードそのもののポリシーになります。
- Length
- Complexity Exemption
- Aging
- Grace Period
- History/span>
パスワードの最短文字長を設定します。ひとまず、デフォルトとしました。
パスワードの複雑さに関するポリシーを決める項目です。ひとまずデフォルトとしました。
以前のパスワード変更から、次のパスワード変更までの時間を指定可能な項目のようです。
これは、即座に変更が必要な場合もある為、「オススメしない」となっていますので、デフォルトの0としました。
期限切れのパスワードを何分以内に変更する必要があるかを設定します。ひとまずデフォルトとしました。
過去のパスワードを記憶しておくかを設定します。以前のパスワードを使用禁止にします。ひとまず、デフォルトとしました。
Miscellaneous Policies
その他のポリシー設定になります。
- Idle Timeout
- Maintenance Mode
- Deactivation
非アクティブなセッションを何分後に閉じるかを指定します。デフォルトとしました。
管理者以外のログインを禁止にする設定項目です。メンテナンスモードとあるので、通常はoffで良いのかと思います。
このプラグインを削除する場合は、ここからディアクティブする必要がありそうです。
運用する
これで一通りの設定が終わりました。
それでは、一度ログアウトしてみます。。ドキドキ。。
ログインしてみます。。
ん。。普通に以前のパスワードでログインできました。。
「Change All Passwords」は機能していないようです。。。
ちょっと、不安ですが、その他の機能を確認してみます。
わざとログイン失敗してみました。
すると、以降のログインするまでに表示に時間がかかるようになりました。
ちゃんと「Delay Tier 2」が機能しているようです。
さらに、「Breach Notification」で設定した回数以上失敗してみました。
すると、管理者宛にアクセス元と、ログインしようとしているユーザー名、パスワードと共にメールが送られてきました。
また、私は「Breach Email Confirm」も「Breach Notification」と同じ回数を設定していたため、そのまま、該当ユーザー名のパスワードが無効となりました。
ログイン画面の「パスワードをお忘れですか ?」からパスワードを初期化しないとログインできない様になりました。
ちゃんと機能しているようです。
その後、パスワードの再設定をする際も、「Length」で設定した文字数以上のパスワードでなければ許容され無かったので、ちゃんと機能しているようです。
これで、セキュリティ対策ができましたが、他にも脆弱性は存在します。
今後も模索しながら対応する必要があると思いました。