全世界のウェブサイトの25%がWordPressで作られているという統計があります。
Usage Statistics and Market Share of WordPress for Websites, November 2015
http://w3techs.com/technologies/details/cm-wordpress/all/all
とても便利なWordpressですが、その分ハッカーから狙われる可能性も上がります。
ここでは端的にWordpressの安全性を高める方法についてまとめてみたいと思います。
目次
セキュリティとは
WordPress Codex日本語版にてセキュリティ強化について端的に記述されています。
基本的には、セキュリティとは「完璧に安全なシステム」のことではありません。そのようなものは実用的ではないか、見つけたり運用したりするのは不可能といえるでしょう。セキュアなサーバーは、サーバー管理者のコントロールのもとに、リソースのプライバシー・整合性・可用性を保護するものです。
セキュリティに完璧を求めるときりがありません。実際に被害があっても対応できる環境を構築したり、VPNを利用したり、仕事用とプライベート用のパソコンを分けるなど仕組みを工夫する事が、まるでてこの原理のように効率的に働くでしょう。
システムの各方面のセキュリティを考える時に、いくつかの一般的な考え方を頭に置いておきましょう。
- アクセスの制限: 悪意ある人物が利用可能な潜在的な入り口を効果的に減らすための賢い選択をする。
- 抑制: インストールの弱点を悪意ある人物が発見した場合に備え、システム内部で実行できる損害を最小化するようにシステムを設定する。
- 知識: バックアップを取り、定期的に WordPress インストールの状態を知り、WordPress インストールを理解しやすいよう、行った変更をドキュメント化しておく。
- 信頼できるソース: テーマやプラグインを信頼できないソースから入手するのはやめて、WordPress.org 公式レポジトリまたはよく知られた信頼のおける企業などからのダウンロードに制限する。それ以外から入手することで問題が発生することがある。
1.入り口に鍵を掛け、2.被害に及んだ際の対策をしておきます(バックアップなども)。3.また普段からログを付けておき、4.信頼性の高いリソースを利用します。
端的な安全性の高め方
下記の点がWordpressサイト運用に生まれる脆弱性となります。
- WordPress利用者のパソコン、端末
- WordPress本体、プラグイン
- WEBサーバー&WEBサーバーのアプリケーション(PHPやMySQLなど)
- ネットワーク
- FTP
- パスワード
WordPress利用者のパソコン、端末
利用者のチェックを行う
WordPressに投稿するコンピュータがウイルスやマルウェアに感染していないことを確かめておく必要があります。
仕事用とプライベート用のパソコンを分け、古いバージョンのブラウザの仕様を禁止します。こちらで失敗すると他のセキュリティ強化が無駄になってしまいます…。
WordPress本体、プラグイン
最新の状態に保つ
WordPressパッケージの脆弱性に対応するため、アップデートを行い最新の状態に保ちます。
実際の運用ではサイトの確認などアップデートを管理する体制が必要となるでしょう。
WEBサーバー&WEBサーバーのアプリケーション(PHPやMySQLなど)
WEBサーバーやアプリケーションの脆弱性を確認します。手軽にファイアウォール(WAF)などが利用できる場合は活用します。
FTP
ファイル転送には便利なFTPを利用するケースが多いと思われますが、やめておいたほうが無難です。
暗号化されたSFTPやFTPSを、あるいはSSHを利用します。
パスワード
自動生成など、リストに挙がりにくいパスワードを使用する
WorddpressではユーザーIDは簡単にわかってしまう仕組みとなっています。
そして攻撃の手段として、wp-login.phpに「よく使用されるパスワードリスト」などを使用しブルートフォースアタック(総当たり攻撃)を仕掛けるものがあります。
この攻撃を通りにくくするために、パスワードは複雑なものを使用します。
パスワード生成(パスワード作成)するweb・ウェブ制作に役立つ便利ツール。お好みのパスワードを生成(自動作成)することができるツールです。
WordPressを強化する
wp-admin以下ディレクトリにIP制限またはベーシック認証を掛ける
wp-admin以下ディレクトリへの攻撃にはIP制限が効果的ですが、運営フローによっては難しい場合もあります。
その場合はベーシック認証を使用します。こちらはブルートフォースアタックを無効化することは出来ませんが、攻撃者のやる気を削ぐことが出来ます。
wp-admin/admin-ajax.phpが干渉する場合はこれのみ除外します。
AuthUserFile "/フルパス/wp-admin/.htpasswd" AuthName "Please enter your ID and password" AuthType BASIC require valid-user <FilesMatch "(admin-ajax.php)$"> Satisfy Any Order allow,deny Allow from all Deny from none </FilesMatch>
複数回ログインに失敗したらログインロックを掛ける
SiteGuard WP Pluginなどのプラグインで対応可能です。
SiteGurad WP Plugin is the plugin specialized for the protection against the attack to the management page and login.
wp-includes を安全にする
.htaccessを使用してwp-includesへのアクセスを禁止します。
下記コードはマルチサイトでの利用不可。
※ファイル同一ディレクトリ設置時
# Block the include-only files. <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] </IfModule>
wp-config.php を安全にする
.htaccessを使用してwp-config.phpへのアクセスを禁止します。
※ファイル同一ディレクトリ設置時
<files wp-config.php> order allow,deny deny from all </files>
xmlrpc.php を安全にする
.htaccessを使用してxmlrpc.phpへのアクセスを禁止します。
※ファイル同一ディレクトリ設置時
<Files "xmlrpc.php"> order deny,allow deny from all </Files>
WPScanなどのセキュリティ診断ツールを使用してを使用してサイトの脆弱性のチェックを行う。
WordPressの脆弱性スキャンツール「WPScan」を利用して、サイトの脆弱性をチェックしてみます。
#はじめに WordPressサイトの脆弱性スキャンツールと言えば、「[WPScan](https://wpscan.org/)」が有名なのですが、使えるように環境を構築するだけでいろいろと面倒そう… と諦めかけましたが、「D…
みなさんこんにちは。小川です。タイトルは少々釣り気味です。突然ですが、僕たちはセキュアなサイトを構築する責任を持っています。攻撃からサイトを守るためには、どのように攻撃されるかを知る必要があります。というわけで今回「WPScan」というWordPressの脆弱性をス…
環境を作るのが煩わしい場合は同様のWEBサービスを利用する手もありますが、結果については自己責任となります。
被害を受けてしまったら
私の知人の取引先関係者が被害に遭ったという報告を受けたことがあります。その際はサーバー上に不正なファイルが設置され、不正なメールが大量送信されていました。
faviconに不正コードを埋め込むステガノグラフィも使われていました。
サーバーが異常な負荷を検知し、ホスティング会社がサーバーをストップさせました。その後はすべてのファイルとメールアカウントを削除し、ホスティング会社の判断で稼働を再開させました。バックアップデータがある場合は簡単に復旧することが出来ました。
バックアップを使用するため、制作時の情報をメモしておくと良いです。
・PHPバージョン
・MySQLバージョン
・WordPressをインストールしたディレクトリのフルパス
被害の例や対応方法などもWordPress Codexに端的に示されているので読みましょう。
FAQ/ハッキング・クラッキング被害 - WordPress Codex 日本語版 - wpdocs.osdn.jp