WordPressサイトを運営するなら、とりあえずはやっておきたいセキュリティー対策まとめ

WordPressは現在、世界中の多くのサイトで利用されています。

WordPressは、2017年の2月時点で世界中のCMS(サイトシステム的なもの)の中では、58.6%。サイト全体の中でも、27.5%。実に世界中のサイトのうち4つに1つがWordpressで構築されているといわれています。

Usage of content management systems for websites 2017

出典 Usage Statistics and Market Share of Content Management Systems for Websites, February 2017

これだけ利用ユーザーがいると、やはりシステムに対する攻撃の対象となりやすいです。ユーザーの多いWindowsの方がMacよりマルウェアが多いのと同じ原理です。攻撃者も、誰も使用していないCMSを攻撃対象とするよりも、多くの人に利用されているCMSの中から、セキュリティーの甘い人を探した方が楽ということだと思います。

先日も、WordpressでREST APIの脆弱性を突いたサイト改ざんが行われたのは記憶に新しいです。

 独立行政法人情報処理推進機構(IPA)セキュリティセンターと一般社団法人JPCERTコーディネーションセンター(JPCERT/CC)は6日、WordPressのREST APIにおける認証回避の脆弱性について注意を喚起した。

とりあえず通常の場合、Wordpressデフォルトでも、もちろん攻撃から守る作りにはなっています。けれど、出来る限りセキュリティーは高めておくに越したことはありません。

ということで以下では、「Wordpressのセキュリティーをデフォルトよりは高める方法」について紹介したいと思います。

スポンサーリンク
レクタングル(大)広告

Wordfence Securityプラグインをインストール

Wordfence Securityは、以下のような機能を含んだ統合Wordpress Securityプラグインです。

  • ファイアウォール
  • ウイルススキャン
  • IPブロック
  • ライブトラフィック
  • ログインの安全性の確保

とりあえず、利用したい機能はインストールするだけでサイトに適用されます。

Wordfence Securityをインストールした時点で、ファイヤウォールが動作して、攻撃者と思われるIPを、以下のようにブロックしてくれます。

Top 10 IPs Blocked

これは、当サイト1週間分の「ブロックしたIPのトップ10」リストです。Wordfence Securityをインストールするだけで、これだけの攻撃対象者からサイトを守ってくれています。

国別のトップ10であればこんな感じ。

Top 10 Countries Blocked

また、攻撃者は管理者権限を得るためWordpressへのログインも試みます。ほとんどは、パスワードが合わず失敗となりますが、そういった「ログイン失敗リスト」もレポートしてくれます。

Top 10 Failed Logins

上の画像は、「test」と「admin」というユーザー名で、何度もログインを試みられた履歴です。

Wordfence Securityをインストールすると、攻撃を防いでくれるのはもちろんながら、こういったセキュリティーレポートが定期的にメールアドレスに届くので、サイトの攻撃状況をある程度把握することもできます。

また、Wordpressにログインがあると、メールに以下のようなログイン通知も来るので、IPやホスト名から「自分以外の誰かがWordpressにログインしたか?」を把握できるようになります。

Wordfenceから届くログイン通知

SiteGuard WP Pluginの設定

SiteGuard WP Pluginでセキュリティー対策

SiteGuard WP Pluginは、以下の対策に特化したプラグインです。

  • 不正ログイン
  • 管理ページ(/wp-admin/)への不正アクセス
  • コメントスパム

SiteGuard WP Plugin設定では、以下のようなことを行えます。

 SiteGuard WP Pluginで出来ること

  • 管理ページアクセス制限 :ログインしていない接続元から管理ディレクトリ(/wp-admin/)を守ります。
  • ログインページ変更 :ログインページ名を変更します。
  • 画像認証 :ログインページ、コメント投稿に画像認証を追加します。
  • ログイン詳細エラーメッセージの無効化 :ログインエラー時の詳細なエラーメッセージに変えて、単一のメッセージを返します。
  • ログインロック :ログイン失敗を繰り返す接続元を一定期間ロックします。
  • ログインアラート :ログインがあったことを、メールで通知します。
  • フェールワンス :正しい入力を行っても、ログインを一回失敗します。
  • XMLRPC防御 :XMLRPCの悪用を防ぎます。
  • 更新通知 :WordPress、プラグイン、テーマの更新が必要になった場合に、管理者にメールで通知します。

とりあえず、全ての機能を有効にしておいた方が、セキュリティー性が上がるのは間違いありません。けれど、僕の場合は最低限以下の機能はオンにしています。

SiteGuardで利用を勧める機能

  • 管理ページアクセス制限:自分のIP以外が管理画面に入るのを制限
  • ログインページ変更:wp-login.php攻撃対象となりやすいのでログインファイル自体を見つからないようにする
  • ログイン詳細エラーメッセージの無効化 :攻撃者に余計な情報を与えない
  • ログインロック :数回ログインに失敗したらそれ以上ログインの機会を与えない
  • ログインアラート :誰がログインしたかをメールで確かめる(Wordfence Securityと機能がかぶるけどこっちは日本語)
  • XMLRPC防御 :ブログエディター利用でXMLRPCを使用していない限りは無効に(攻撃者がいの一番に利用してくる機能
  • 更新通知 :WordPressやプラグインに更新があった場合は、すぐさまアップデートするため

設定方法の詳細については以下に詳しい説明があります。

ブルートフォースアタックからWordPressを守るための防御方法がひと通り揃ってます。初心者さんでも数回のクリックで、インストールからセットアップまで行えます

管理ページアクセス制限を有効にした場合、接続IPが変わると管理画面にログインできなくなります。
そうなった場合は、.htaccessファイルを開いて以下のコード部分を削除してSiteGuardにて再設定してください。

#==== SITEGUARD_ADMIN_FILTER_SETTINGS_START
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteRule ^404-siteguard - [L]
    RewriteRule ^wp-admin/css - [L]
    RewriteRule ^wp-admin/images - [L]
    RewriteRule ^wp-admin/admin-ajax.php - [L]
    RewriteCond %{REMOTE_ADDR} !^(127\.0\.0\.1|サーバIP)$
    RewriteCond %{REMOTE_ADDR} !^管理者のIP$
    RewriteRule ^wp-admin 404-siteguard [L]
</IfModule>
#==== SITEGUARD_ADMIN_FILTER_SETTINGS_END

ログインページ変更をすると、ログインページが変わってしまうので、必ずメモなり、ブックマークするなどして忘れないようにしましょう。変更と同時にメールが届くので、そこにも変更URLが書かれています。

Edit Author SlugでログインIDを見えなくする

Edit Author Slugプラグイン

Edit Author Slugは、Wordpressデフォルトではバレバレになってしまう「ログインユーザー名」を表示されないように編集することができるプラグインです。

WordPressデフォルト動作だと、アドレスバーから以下のように入力してページ遷移すると

http://ドメイン/?author=1

以下のように、ログインユーザー名が表示されてしまいます。

http://ドメイン/author/ユーザー名

この他にも、ログインユーザー名を知る方法はいくつかあります。

ですので、ログイン画面で「調べたユーザー名」を入力して、あとはパスワードが分かれば、ログインされてしまいます。

ユーザー名がわかればあとはパスワードを合わせるだけ

大抵の攻撃者はボットなどを使用して機械的に何度もログインを試みるので、弱いパスワードが設定されていたりすると、管理者権限を得られる可能性が高くなります。

そんなことがないよう、Edit Author Slugプラグインを利用してログインユーザー名を見えなくしてしまいます。

Edit Author Slugの設定は、管理画面メニューの「ユーザー」→「あなたのプロフィール」にあります。

管理画面のユーザーからあなたのプロフィールを選択

「Edit Author Slug」設定項目から「Author Slug」を変更してしまいましょう。

「Edit Author Slug」設定項目

REST APIを無効にする

冒頭でも書いたのですが、REST API脆弱性を突いたサイトの改ざんが行われました。

この脆弱性は、Wordpress4.7.2で修正されていますが、REST APIを使用しないのであれば、無効にしておくに越したことはありません。

REST APIを無効にすると動作しないプラグインもあります。JetpackやContact Form7等のプラグインもREST APIを利用します。こういったプラグインを使用するつもりなら、無効にしないことをおすすめします。

プラグインを使った方法

最も手軽な方法として、Disable Embedsプラグインをインストールする方法が楽かもしれません。

ただ、このプラグインを使用すると、Wordpressの埋め込み機能自体も利用できなくなってしまいます。

コードで無効にする

そういった場合は、functions.phpにコードを記入して無効にするという方法もあります。

以下は、initをフックして、REST APIを取り除く方法。

function my_limit_rest_init() {
    // Remove the REST API endpoint.
    remove_action( 'rest_api_init', 'create_initial_rest_routes', 99);
}
add_action( 'init', 'my_limit_rest_init', 9999 );

参考 WordPress4.7より追加されたREST API エンドポイントを無効にする | サイトスパイラル

以下は、rest_authentication_errorsをフックしてエラーステータスを生成する方法です。

function disable_rest(){
 return new WP_Error( 'disabled', array( 'status' => rest_authorization_required_code() ) );
}
add_filter( 'rest_authentication_errors', 'disable_rest' );

参考 WordPress4.7.0以降で「REST API」を無効にする方法が変わっていたので試しました | 今村だけがよくわかるブログ

Simplicityを利用している場合

Simplicityテーマを利用している場合は、管理画面の「外観」→「カスタマイズ」の「その他」項目にある「REST APIを有効」のチェックを外してください。

管理画面の「外観」→「カスタマイズ」の「その他」項目にある「REST APIを有効」のチェックを無効

以前は、デフォルトで無効になっていたのですが、REST APIを用いたプラグインなどもあることから、デフォルトでは有効にしてあります。

まとめ

これだけの設定がしてあれば、ある程度セキュリティーは高くなるかと思います。

あとその他の基本として、以下のような対策も忘れてはいけません。

  • WordPress・プラグイン・テーマの新バージョンが出ればアップデートする
  • 「Wordpressのログインパスワード」を記号なども用いて強力にする

今回紹介した対策をしたとしても、100%脅威を取り除くことは出来ないかもしれません。

けれど、「Wordpressデフォルト状態」よりは、攻めにくい城にはなるかと思います。

『WordPressサイトを運営するなら、とりあえずはやっておきたいセキュリティー対策まとめ』へのコメント

  1. 名前:みき 投稿日:2017/02/17(金) 23:28:41 ID:11e49d948

    アメリカがトップですか…
    うちはロシア、ウクライナとかその周辺です…

    対策済みのポイントを突いた攻撃をして404とかになっているのが笑えてきます 笑
    ↑やばい人 笑

    やっぱり多いのはadminとかadmin.phpとかですかね

    ロシアからの攻撃が多いのでyandexからのアクセスがあったときは怖かったです…
    基本的には悪くない人だと思いますが…

    あと、なにげに一番速くインデックスしてくれたのがyandexでした

    日本は平和ですな~ 笑

  2. アバター画像 名前:わいひら 投稿日:2017/02/18(土) 08:10:08 ID:16ae242c7

    もっと中国が多い印象でしたが、結構他の国からも多いんですよね。
    確かに、日本をブロックしているのは、ほとんど見たことがないかもしれません。
    1度見かけたくらいでしょうか。

  3. 名前:みき 投稿日:2017/02/26(日) 13:31:45 ID:94ae07e5b

    Twitterでつぶやいてきたのですが
    不正アクセス、スキャンとかをした可能性があるログ数が125件ありました

    ここから危険ではないと判断したリクエストを引いてもすごい数になります…

    今までこんなことはないので驚きです…

    僕のサイトはそれなりに対策をしているので不正アクセスなどは捕まえましたが
    対策をしていない方は危険なのでこのページに書かれている対策を行うことを推奨します!!

    ※不審なリクエスト以外のBANなどを行わない程度に…

    今日の間に100件ぐらいあったことになります

    不審なアクセスでありませんように…

    今から頑張ってきます!!

    あと、このページをツイートしてきます

  4. アバター画像 名前:わいひら 投稿日:2017/02/26(日) 19:43:20 ID:47350818c

    このページの内容は、とりあえずなので、完璧にやろうと思えば以下等を参考にする必要があるかもしれません。
    WordPress の安全性を高める – WordPress Codex 日本語版

  5. 名前:raspi0124 投稿日:2017/03/23(木) 06:08:24 ID:4dd6b7f7c

    …こっちは中国からものすごく執拗に狙われてて大変です。。中国だけで2602回のアタックってどういうことなんでしょうね。。。w

  6. アバター画像 名前:わいひら 投稿日:2017/03/23(木) 13:26:00 ID:6af656636

    常に、「何かあった時に利用できそうなサイト」をボットなどで探し回っているんだと思います。
    それが、国策か、個人かとかはわからないですけど。
    怖いです^^;