泣く前にやっておきたい!WordPressのセキュリティ対策

wordpress セキュリティ IT
※当サイトにはプロモーションが含まれます。

つい、先日もロリポップのWordPressサイトがクラッキングされて大騒ぎ(※1)になりましたが、初心者といえど、最低限のセキュリティ対策はしておきたいものです。

※1 この辺の経緯は以下のサイトに詳しくまとめられています。

Krad XinによるロリポップWordPressサイト大量ハッキングまとめ – Web Shufu

そして、ロリポップの騒動以前からもWordPressのセキュリティに関しては騒がれているのです。

全世界のWordPressサイトに大規模攻撃; デフォルトのアドミンユーザ名’admin’がねらわれている – TECHCRUNCH JAPAN

遅ればせながら、上記を見てドキッとしてしまい、この記事を書きました。
実のところ、お恥ずかしながら本サイトはこのエントリーを作成するまでadminユーザーのみで全ての作業を賄っていました…

photo credit: Upsilon Andromedae via photopin cc

まずは入り口であるログイン画面のセキュリティを強固にする!

さて、ロリポップのクラッキングのようにDBをやられてしまっては手も足も出ませんが、だからといって入り口のセキュリティ対策を何もしないなんてナンセンスです。

例えば自宅は、強固な金庫があり、全ての資産を安全に保護しているから、玄関に鍵をかける必要はなんて無いとはなりませんよね。
強固な金庫で対策しているからこそ、玄関の鍵を二重、三重にすることにより、より強固なセキュリティ対策となるのです。

下記に当てはまる場合は、今回の対応で、セキュリティが強化されます

ちょっとセキュリティを気にする方なら、かなり気にしていることかと思いますが、WordPressのログイン画面[wp-login.php]に対する第三者からのアクセスが多くないでしょうか。
これはブルートフォースアタックであなたのサイトが狙われているのかもしれません。

そこで、今回は三段階の対応でセキュリティを強化します。

  • デフォルトのadminユーザーの削除する。
  • ログイン画面にロック機能を付加する。
  • ログイン画面のURLを変更する。

adminユーザーの削除

初心者向けのサイトの多くは、デフォルトで最初に作成するユーザー名をadminから変更しないままになっているので、このまま運用している人って結構多いのではないでしょうか。
ユーザーIDを攻撃者に知られてしまっているのは鍵を一つ取られてしまっているのと同じことです。
こちらは是非、別の管理者ユーザーを作成し、adminユーザーはサクッと削除してしまいましょう。

ここで重要なポイントが、この新たに作る管理者ユーザーのIDは是非、攻撃者が予想もつかないものにしてください。
安易にドメイン名を混ぜたり、ブログ名を混ぜるなんて事は、くれぐれも避けるようにお気を付け下さい。
推測しづらいIDを割り当てる事は、自宅の鍵で例えるなら、昔ながらのノーマルな鍵からディンプルキーに替えるくらいの効果があります。

新たな管理者を作成し、adminユーザーを削除する手順の詳細は、こちらのサイトで詳しく説明されています。
WordPressのadminユーザーを変更(削除)する方法。乗っ取られる前にセキュリティ強化!

ここで、大事なポイントはadminユーザーを削除する際、adminユーザーで作成した記事は必ず、新たな管理者にアサインし直すことを忘れないようにしてください。
その辺りも先のサイトで詳しく述べられています。

WordPressのログイン画面にロック機能を付加する

これに関しては便利なプラグインがありますので、こちらを導入すれば簡単に強固なセキュリティ対策がおこなえます。

Limit Login Attempts

これは指定した回数、ログインに失敗すると指定した時間、ログインが出来なくなるというプラグインです。

ログイン画面のURLを変更する。

なぜ、こんなにもWordPressのサイトは狙われやすいのでしょうか?
これが今回の最大のポイントで、WordPressはログイン画面のURLが固定であるため、攻撃者にそのURLを知られてしまっているというところに最大の弱点があります。
wp-login.phpという固有のページが最初から、攻撃者に知られているのです。
それならば、ログイン画面を別のページにするが、単純ながらお手軽で効果的なセキュリティ対策となります。

こちらに大変参考になる情報がありましたので、導入させて頂きました。
ログインページを変える – WordPress私的マニュアル

以降の例は、新たなログインページをdummy-login.phpとして作成します。
導入の際は適宜お好きなファイル名に変更してください。

新たなログインページを作成する。

% cd [wordpressを設置したディレクトリ]
% vim dummy-login.php

<?php
define( 'ANYWHERE_LOGIN', sha1( 'dummy' ) );
require_once './wp-login.php';
?>

使用中のテーマのfunction.phpに下記を追加する。

% vim [wordpressを設置したディレクトリ]/wp-config/theme/[使用中のテーマのディレクトリ]/function.php

define( 'ANYWHERE_LOGIN_PAGE', 'dummy-login.php' );
add_action( 'login_init', 'anywhere_login_init' );
add_filter( 'site_url', 'anywhere_login_site_url', 10, 4 );
add_filter( 'wp_redirect', 'anywhere_login_wp_redirect', 10, 2 );
if ( ! function_exists( 'anywhere_login_init' ) ) {
  function anywhere_login_init() {
    if ( !defined( 'ANYWHERE_LOGIN' ) || sha1( 'dummy' ) != ANYWHERE_LOGIN ) {
      status_header( 403 );
      exit;
    }
  }
}
if ( ! function_exists( 'anywhere_login_site_url' ) ) {
  function anywhere_login_site_url( $url, $path, $orig_scheme, $blog_id ) {
    if ( $path == 'wp-login.php' &&
      ( is_user_logged_in() || strpos( $_SERVER['REQUEST_URI'], ANYWHERE_LOGIN_PAGE ) !== false ) )
      $url = str_replace( 'wp-login.php', ANYWHERE_LOGIN_PAGE, $url );
    return $url;
  }
}
if ( ! function_exists( 'anywhere_login_wp_redirect' ) ) {
  function anywhere_login_wp_redirect( $location, $status ) {
    if ( strpos( $_SERVER['REQUEST_URI'], ANYWHERE_LOGIN_PAGE ) !== false )
      $location = str_replace( 'wp-login.php', ANYWHERE_LOGIN_PAGE, $location );
    return $location;
  }
}

これまでに施したセキュリティ対策の動作検証

未ログイン状態でのWordPressの管理画面に対するアクセス

まずは、未ログイン状態でWordPressの管理画面である/wp-admin/にアクセスしてみましょう。
対策前は、ログイン画面にリダイレクトされていたかと思います。

wp-admin セキュリティ対策

旧ログイン画面にリダイレクトされたものの、肝心のログイン画面が 403 Forbidden となり利用できない状態であるため、正常にセキュリティ対策が施されています。

旧ログイン画面に対するアクセス

では、次にwp-login.phpを検証しましょう。

wp-login.php セキュリティ対策

こちらも 403 Forbidden となり利用できない状態であるため、正常にセキュリティ対策が施されています。
もはや、旧ログインページは誰がアクセスしても 403 Forbidden となり、利用することが出来ないのです!
これは意図通りの動作で、攻撃者にその場所を知られていたログインページを塞いだことになり、セキュリティが強化されました。

新たに作成したログイン画面に対するアクセス

では、先ほど新しく作ったログインページにアクセスし検証しましょう。

変更したログイン画面 セキュリティ対策

おっ、今までのログイン画面が表示されました。
先に入れたプラグインのLimit Login Attemptsが正常に動作することも確認しましょう。

わざとパスワードを間違えます。
規定回数パスワードを間違えるとロックされますね…

ログイン画面のアカウントロック

しまった!このスクリーンショットを撮る前にも、何回か動作確認をしていたので、ロック回数がマックスに達してしまい、24時間のロックがかかってしまいました。

ローカル開発環境で良かった。
新たなログイン画面からの正常動作は、本ブログにて確認しておりますので、ご安心ください。
新ログイン画面からのログイン後であれば、WordPressの管理画面である/wp-admin/も正常に使用できます。

さて、今回施したセキュリティ対策により3つの壁が構築されました。

<

ul>

  • そもそも、攻撃者はログインページがどこか探す必要がある。
  • 万が一ログインページがばれても、WordPressの超有名ユーザーである、adminは削除済みである。
  • さらに最悪なことに現管理者のIDがばれて、ブルートフォースアタックをかけられたとしても、規定回数パスワードを間違えるとロックがかかる。
  • ここまでやれば、少なくともログイン画面に関してはもはや、心配することがありませんね。
    先の検証の通り、管理者ですら時間が来なければ解除できない、強固なセキュリティ対策が施されました。

    スポンサーリンク
    スポンサーリンク
    ほしいものリスト
    IT
    nekokan BLOG

    コメント

    タイトルとURLをコピーしました