当サイト、Codex 日本語版は今後積極的な更新は行わない予定です。後継となる新ユーザーマニュアルは、https://ja.wordpress.org/support/ にあります。
万が一、当サイトで重大な問題を発見した際などは、フォーラムWordSlack #docs チャンネルでお知らせください。</p>

WordPress の安全性を高める

提供: WordPress Codex 日本語版
2014年3月15日 (土) 16:56時点におけるTama200x (トーク | 投稿記録)による版 (ファイアウォールプラグイン)

移動先: 案内検索

このページ「WordPress の安全性を高める」は一部未翻訳です。和訳や日本語情報を加筆してくださる協力者を求めています

WordPress ではセキュリティを非常に重要なものと考えています。しかし、他のどんなシステムでも同様ですが、基本的なセキュリティ対策がなされていない場合には問題が発生する可能性はあります。このページでは、よくある脆弱性について、そして WordPress を安全に保つためにできることを紹介します。

このページはセキュリティに対する心配を一掃するその場限りの応急措置とは違います。特定のセキュリティ問題や不明な点を抱えている場合は、コンピューターセキュリティの知識を十分に持っている信頼のおける人ときちんと話し合うべきです。

セキュリティとは

基本的には、セキュリティとは「完璧に安全なシステム」のことではありません。そのようなものは実用的ではないか、見つけたり運用したりするのは不可能といえるでしょう。セキュアなサーバーは、サーバー管理者のコントロールのもとに、リソースのプライバシー・整合性・可用性を保護するものです。

信頼できる Web ホスティングには、以下が含まれます。

  1. セキュリティに関してあなたが気になっている点や、ホスティングにどのようなセキュリティ機能やプロセスがあるのかをためらいなく話し合ってくれる。
  2. 最新安定版のサーバーソフトウェアを使っている。
  3. 確実なバックアップとリカバリ方法を提供している。

保護すべきソフトウェアとデータを確定することで、どのようなセキュリティが必要なのかを決定しましょう。以下のガイドがその助けになるはずです。

セキュリティの考え方

システムの各方面のセキュリティを考える時に、いくつかの一般的な考え方を頭に置いておきましょう。

  1. アクセスの制限: 悪意ある人物が利用可能な潜在的な入り口を効果的に減らすための賢い選択をする。
  2. 抑制: インストールの弱点を悪意ある人物が発見した場合に備え、システム内部で実行できる損害を最小化するようにシステムを設定する。
  3. 知識: バックアップを取り、定期的に WordPress インストールの状態を知り、WordPress インストールを理解しやすいよう、行った変更をドキュメント化しておく。

ローカルコンピュータの脆弱性

WordPress に投稿するコンピュータが、スパイウェア、マルウェア、ウイルスに感染していないことを確かめましょう。またアプリケーションが安全で安定したバージョンであることを確かめましょう。例えばキーロガーが仕込まれていた場合、WordPress や Web サーバーのセキュリティ対策は全く意味をなさなくなってしまいます。

OS とソフトウェアは常に最新版にしておきましょう。特に、セキュリティ脆弱性からパソコンを保護するために Web ブラウザを最新版に更新しておくことが大事です。

WordPress パッケージの脆弱性

多くの現代的なソフトウェアパッケージと同様、WordPress は新しいセキュリティ関連の問題が発生すると定期的に更新されています。ソフトウェアのセキュリティを改善していくのは常に進行形の懸案事項であり、このため、最新バージョンの  WordPress に常に更新すべきです。WordPress の旧バージョンは、セキュリティアップデートに対してメンテナンスされていません。

WordPress の更新

メイン記事: WordPress のアップグレード

最新版の WordPress は、WordPress 公式サイト(http://wordpress.org)または日本語版公式サイト(http://ja.wordpress.org)から入手できます。公式リリースはこれ以外のサイトからはリリースされません。wordpress.org ドメイン以外からは絶対に WordPress をインストール・アップグレードしないでください。

Since version 2.7, WordPress has featured automatic updates. Use this functionality to ease the process of keeping up to date. You can also use the WordPress Dashboard to keep informed about updates. Read the entry in the Dashboard or the WordPress Developer Blog to determine what steps you must take to update and remain secure.

If a vulnerability is discovered in WordPress and a new version is released to address the issue, the information required to exploit the vulnerability is almost certainly in the public domain. This makes old versions more open to attack, and is one of the primary reasons you should always keep WordPress up to date.

If you are an administrator in charge of more than one WordPress installation, consider using Subversion to make management easier.

セキュリティ上の問題の報告

WordPress 上にセキュリティ関連の問題を見つけたと思ったら、これを報告することで協力できます。セキュリティ上の問題を報告する方法については、セキュリティ FAQ をごらんください。

バグだと思うものを見つけた場合は、報告してください。詳しくは、バグの報告をごらんください。脆弱性、または脆弱性に繋がるバグを見つけたという場合もあります。

サーバーの脆弱性

WordPress を実行しているウェブサーバー、WordPress データのあるデータベース、プラグインで使用される PHP およびその他のスクリプト/プログラム言語あるいはヘルパーアプリケーションに脆弱性があるかもしれません。ウェブサーバー、データベース、スクリプトインタプリタが安全で安定したバージョンであることを確かめるか、これらの作業を行う信頼できるホスティング業者を使用しているか確かめてください。

共有サーバー(同じサーバー上に他人が同居)において忠告すべきことがあります。誰かが感染すると、たとえこのガイドにしたがっていた場合でも、あなたも感染してしまう可能性が高いです。使用しているホスティングサービスがどのようなセキュリティ対策を行っているか確かめておいてください。

ネットワークの脆弱性

ネットワークの両端、WordPress サーバーサイドとクライアントサイド、は信頼できるべきです。つまり、家のルータのファイアウォールルールをアップデートし、どのネットワークから作業するかについて注意すべきです。例えば、混雑したインターネットカフェで、暗号化されていない無線接続で平文でパスワードを送信するのは、信頼できるネットワークではありません。 ホスティング業者は、ハッカーによって汚染されていないことを確かめるべきですし、あなたもそうすべきです。ネットワークに脆弱性があると、スニファやその他の破壊 (中間者攻撃など) の発生を許してしまうかもしれません。

パスワード

セキュリティ向上のための習慣を守れば、脆弱性の多くは回避可能です。ここで重要な点のひとつに、パスワードがあります。

パスワードの目的は、ブルートフォースアタック/en(総当たり攻撃)の成功を難しくすることです。インターネット上には多くのパスワード自動生成ツールが公開されており、安全なパスワードを作成するために利用できます。

さらに、WordPress にはパスワードの強度メーターが含まれています。パスワードを変更する際にはこれを活用し、強度が十分かどうか確認しましょう。

パスワードを選ぶ際には、以下のことは避けましょう。

  • 自分の本名、ユーザー名、会社名、サイト名などの羅列。
  • (あらゆる言語で)辞書にある単語。
  • 短いパスワード。
  • 数字のみ、またはアルファベットのみのパスワード。両方を混ぜるのが効果的です。

強力なパスワードは、ブログのコンテンツを守るためだけに必要なのではありません。あなたの管理アカウントにアクセスできるようになったハッカーは、サーバー全体を危険にさらす可能性がある悪意のあるスクリプトをインストールできてしまいます。

強力なパスワードの使用に加えて、追加のセキュリティ対策として2段階認証/two-step authenticationを有効にすることは良いアイデアです。

FTP

お使いのサーバーに接続するときは、(ホスティングが対応していれば) 暗号化された SFTP を使用すべきです。ホスティングが対応しているか不明な場合は、ホスティングのサポートにお問い合わせください。

SFTP の使い方は FTP と同じですが、手元の端末とサーバーとの間で送受信するパスワードやその他のデータが暗号化される点が異なります。パスワードが平文で送られることは無いため、攻撃者に不正使用されることはありません。


ファイルパーミッション

WordPress の便利な機能のいくつかは、ウェブサーバーがファイルに書き込みできることに基づいています。しかし、アプリケーションがファイルに書き込み権限を持つことは危険です。公開環境では特に危険です。

セキュリティの観点からベストなのは、ファイルパーミッション(書き込み権限)を可能な限り制限して、書き込み権限が必要な時のみ制限を緩くする、あるいは画像アップロード等の目的のために制限の緩い特別のフォルダを作成することです。

考えられるパーミッションスキーマの1つを示します。

すべてのファイルの所有者はあなたのユーザーアカウントで、あなたのみ書き込み可能。WordPress が書き込み権限を必要とするファイルは、ウェブサーバーで使用するユーザーアカウントのグループ所有。

/
ルート Wordpress ディレクトリ。すべてのファイルを自分のユーザーアカウントのみから書き込み可能にするべきです。例外は .htaccess: で、自動的にリライトルールを生成させたいときはこれを WordPress によって書き込み可能にします。
/wp-admin/
WordPress 管理領域: すべてのファイルを自分のユーザーアカウントのみから書き込み可能にする。
/wp-includes/
WordPress アプリケーションロジックの大部分。すべてのファイルを自分のユーザーアカウントのみから書き込み可能にする。
/wp-images/
WordPress が使用する画像ファイル。すべてのファイルを自分のユーザーアカウントと Web サーバーのプロセスのみから書き込み可能にする。

/wp-content/ 内には以下が含まれる。

/wp-content/
ユーザー提供の様々なコンテンツ。開発者/en により、すべて (所有者、グループ、全体) 書き込み可能に意図されている。
/wp-content/themes/
テーマファイル。ビルトインテーマエディタを使用する場合は、Web サーバーのプロセスに書き込み権限を与える。ビルトインテーマエディタを使用しない場合は、自分のユーザーアカウントのみから書き込み可能にする。
/wp-content/plugins/
プラグインファイル。すべてのファイルを自分のユーザーアカウントのみから書き込み可能にする。

/wp-content/ の他のディレクトリは、プラグイン/テーマの要求次第で異なり、パーミッションは様々である。

ファイルパーミッションの変更

サーバーへのシェルアクセスが可能な場合は、以下のコマンドでファイルパーミッションを再帰的に変更できます。

ディレクトリ:

find [your path here] -type d -exec chmod 755 {} \;

ファイル:

find [your path here] -type f -exec chmod 644 {} \;

/wp-includes/ にはこのコマンドを使用してはいけません。

自動アップグレードに関して

WordPress に自動アップグレードを適用する際、すべてのファイル操作は Web サーバーユーザーではなくファイル所有者であるユーザーとして行われます。すべてのファイルは 0644 に、すべてのディレクトリは 0755 に設定され、ユーザーのみ書き込み可能で、(Web サーバーを含む)誰にでも閲覧可能な状態になります。

データベースのセキュリティ

同一サーバー上で複数のブログを実行している場合は、別々のデータベースに格納し、異なるユーザーが管理するのが賢明でしょう。最初の WordPress のインストールで実行するのがもっとも達成しやすいでしょう。これは、抑制戦略です。もし侵略者が WordPress インストールのいずれかのクラッキングに成功した場合、他のブログを改変するのが難しくなるでしょう。

MySQL をあなたが管理している場合は、MySQL 設定を理解しているか確認し、(外部 TCP 接続を受け入れるなどの)不要な機能が無効になっていることを確認してください。MySQL の優れた入門については、Secure MySQL Database Design をごらんください。

データベースユーザーの権限を制限する

ブログやコメントの投稿・メディアファイルのアップロード・新規 WordPress ユーザーの作成・プラグインのインストールといった通常の WordPress 運用においては、MySQL データベースユーザーはデータの読み書き(SELECT / INSERT / UPDATE / DELETE)が可能な権限のみが必要となります。

つまり、DROP / ALTER / GRANT といったデータベース構造の変更や管理のための他の権限は必要ないということです。こういった権限を取り消すことによって抑制(封じ込め)対策を改善することができます。

注: 一部のプラグイン、テーマ、WordPress コアのメジャーバージョン更新においてはテーブルの追加やスキーマの変更などといったデータベース構造の変更が必要になる場合があります。こういった場合にはプラグインのインストールやソフトウェア更新の際にデータベースユーザーへの権限許可を行ってください。

wp-admin を安全にする

サーバーサイドで /wp-admin/ にパスワードを追加する(Basic 認証など)と、ブログ管理領域、ログイン画面、ファイルに二層の保護を追加できます。これにより攻撃者またはボットは、実際の管理ファイルではなく二層目の保護レイヤーを攻撃する必要が発生します。ほとんどの場合、WordPress への攻撃は、悪意あるソフトウェアボットが自動実行しています。しかし、wp-admin/ ディレクトを保護ことで WordPress の機能の一部が使えなくなってしまう場合があります。例えば wp-admin/admin-ajax.php に含まれる Ajax ハンドラなどです。適切な wp-admin/ ディレクトリのパスワード保護方法については、リソースセクションをご覧ください。

WordPress ブログへのよくある攻撃は、以下の2つのカテゴリに分類されます。

  1. 特定の脆弱性を食い物にする特別な細工をした HTTP 要求をサーバーに送信する。古い/更新されていないプラグインやソフトウェアへの攻撃も含む。
  2. 「ブルートフォース」パスワード推測により、ブログへアクセスを試みる。

重要なファイルに第二層の保護を追加することで、攻撃者は、/wp-admin/ に攻撃を仕掛ける前に、これを突破する必要があります。この保護は、Basic HTTP 認証を使用し、パスワードは平文で、暗号化されずにネットワークに流れます。この保護の主な利点は、サーバーファイルへのアクセスを拒否し、あなたのブログへの攻撃が /wp-admin/ の入り口に達する前に警告が発生することです。

"二層式"パスワード保護の完全な実装をするには、/wp-admin/ ディレクトリに HTTPS SSL 暗号化接続し、すべての通信と重要なデータを暗号化することが必要です。管理画面での SSL 通信 をご覧ください。

wp-includes を安全にする

通常スクリプトがユーザーによってアクセスされることを想定されていない部分で次のレイヤーの保護を追加することができます。ひとつの方法は、.htaccess で mod_rewrite を使っているスクリプトをブロックするというやり方です。注: 下記のコードが WordPress によって上書きされないようにするためには、.htaccess ファイルの # BEGIN WordPress# END WordPress タグの外側に書き込んでください。この2つのタグの間に何かを書き込むと WordPress が上書きしてしまうことがあります。

# 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>
# BEGIN WordPress

RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] によって ms-files.php ファイルが画像を生成するのを防ぐため、この設定はマルチサイトでは使えません。 このコードを消すことで動作はしますが、セキュリティ強度は弱まります。

wp-config.php を安全にする

wp-config.php ファイルを、WordPress をインストールした階層の一つ上に移動することができます。つまり、ウェブスペースのルートに WordPress をインストールしている場合、wp-config.php をウェブルートの外側に格納できるということです。

Note: Some people assert that moving wp-config.php has minimal security benefits and, if not done carefully, may actually introduce serious vulnerabilities. Others disagree.

wp-config.php は、WordPress (wp-includes のある場所) インストールの一つ上のディレクトリに格納できることに注意してください。また、wp-config.phpの読み込み権限があるのはあなた(とウェブサーバー)のみであることを確認してください。(大抵の場合、ファイルパーミッションは400、もしくは440です)

.htaccess を使えるサーバーであれば、下記設定を追加した .htaccess ファイルをサーバーのトップに設置することにより、アクセスを拒否することができます。

<files wp-config.php>
order allow,deny
deny from all
</files>

Disable File Editing

The Wordpress Dashboard by default allows administrators to edit PHP files, such as plugin and theme files. This is often the first tool an attacker will use if able to login, since it allows code execution. Wordpress has a constant to disable editing from Dashboard. Placing this line in wp-config.php is equivalent to removing the 'edit_themes', 'edit_plugins' and 'edit_files' capabilities of all users:

define('DISALLOW_FILE_EDIT', true);

This will not prevent an attacker from uploading malicious files to your site, but might stop some attacks.

プラグイン

まず、利用しているプラグインが常に最新に更新されていることを確かめてください。また、使用していないプラグインはシステムから削除するようにしてください。

ファイアウォールプラグイン

ルールデータベースおよび/またはホワイトリストにより、怪しい要求を排除するプラグインがあります。WordPress Firewall は、WordPress 向けに設定されたルールとホワイトリストで、様々な設定をすることなく攻撃を排除します。

All in One WordPress Firewall プラグインはサイトに対し、ファイアウォールのルールを適用することができます。

Better WP Security プラグインは、他のツールと同様にホストをブロックしApacheまたはNGINX上のサイトを強化することができます。

Better WP Security プラグインは、他のプラグインと同様にあなたのサイト(Apacheかnginxを問わず)に書き換えルールを追加する他、アクセスなどの試みを通知することができます。


また、ファイアウォール保護およびその他のツールを含むプラグインとして Wordfence Security もあります。このプラグインはリアルタイム訪問者ログ、設定可能な通知の送信などを提供します。そしてこれが一番良い機能だと思いますが—お使いのサイトのコア、プラグイン、テーマを日時でスキャンし、WordPressレポジトリー上のバージョンと比較します。スキャンの間に問題を発見した場合、管理者は正しいバージョンにファイルを戻すことができます。プラグインがデータベースにテーブルを追加するため、容量を増やすことに注意してください。ただし、これは安全な運用のためには妥当な犠牲と言えるでしょう。

書き込み権限を必要とするプラグイン

プラグインが WordPress ファイルとディレクトリに書き込み権限を要求する場合は、コードを読んで合法であることを確認するか、信頼できる人にチェックしてもらうようにしてください。チェックする場所は、サポートフォーラムIRC チャンネルです。

コードを実行するプラグイン

上述のとおり、WordPress を強固にする目的には、攻撃が成功した場合の被害を抑えることが含まれます。データベースのエントリから任意の PHP やコード実行を許可するプラグインは、攻撃が成功した場合の被害が非常に大きくなります。

これらのプラグインを避ける方法の一つは、関数を呼び出すカスタムページテンプレートを使用することです。このセキュリティの一部は、WordPress でファイル編集を無効にする場合にのみ有効です。

隠蔽によるセキュリティ

Security through obscurity (隠蔽によるセキュリティ向上) は、典型的には、基本戦略として健全でない、と考えられています。しかし、WordPress のある領域では、情報を隠蔽することがセキュリティの助けになることがあるかもしれません

  1. 管理者アカウント名の変更: 新規インストール時に、新しい管理者アカウントを作成し、(WP2.9 以前で)デフォルトの admin アカウントを削除します。既存の WordPress インストールでは、MySQL コマンドラインクライアントで UPDATE wp_users SET user_login = 'newuser' WHERE user_login = 'admin'; のようなコマンドを入力するか、phpMyAdmin のような MySQL フロントエンドを使用して、名前を変更しても良いでしょう。
  2. table_prefix の変更: 多くの既知の WordPress を狙った SQL インジェクション攻撃は、table_prefix がデフォルトの wp_ であることを仮定しています。これを変更することは、隠蔽によるセキュリティですが、SQL インジェクション攻撃の一部は防ぐことができるかもしれません。

データバックアップ

データを定期的にバックアップしましょう。MySQL データベース (詳しくはデータベースのバックアップを参照) もです。データ保全は、信頼できるバックアップに大切です。バックアップを暗号化し、各バックアップファイルに独立した MD5 ハッシュをつけ、バックアップを読み込み専用メディアに保存すると、データが改変されていないという信頼性が高まります。

健全なバックアップ戦略は、WordPress インストール全体も含む (WordPress コアファイルとデータベースを含む) 定期的なバックアップを信頼できる場所に保管することです。毎週バックアップするサイトを考えてみましょう。5月1日に感染し、5月12日まで発見されなかった場合、サイトオーナーは、サイトを再構築する助けとなる感染前のバックアップを持っており、感染後のバックアップはサイトが感染した方法を決定する助けとなるでしょう。

ログの取得

When performing forensics logs are your best friend. Contrary to popular beliefs, logs allow you to see what was done and by who and when. Unfortunately the logs will not tell you who, username, logged in, but it will allow you to identify the IP and time. Additionally, you will be able to see any of these attacks via the logs - Cross Site Scripting (XSS), Remote File Inclusion (RFI), Local File Inclusion (LFI) and Directory Traversal attempts. You will also be able to see brute force attempts.

If you get more comfortable with your logs you'll be able to see things like, when the theme and plugin editors are being used, when someone updates your widgets and when posts and pages are added. All key elements when doing forensic work on your web server.

There are two key open-source solutions you'll want on your web server from a security perspective, this is a layered approach to security.

ModSecurity - This is an Apache module that functions as a Web Application Firewall (WAF). WAF's are key today, it's what you see folks like Cloudflare and Incapsula employing to filter the traffic. It filters all the traffic as it comes from your site and parses it out before it hits your site. I won't lie, configuring can be tricky with WordPress but it's possible. The other challenge is it doesn't work on NGINX, it's tailored for Apache web servers. The good news is Apache still makes up 90% of the web servers. I should clarify that there is a NGINX version, but it's less stable than Apache and currently undergoing a rehaul.

OSSEC can run on any NIX distribution and will also run on Windows. When configured correctly its very powerful. The idea is correlate and aggregate all the logs. You have to be sure to configure it to capture all access_logs and error_logs and if you have multiple websites on the server account for that. You'll also want to be sure to filter out the noise. By default you'll see a lot of noise and you'll want to configure it to be really effective.

モニタリング

ときには、予防策が十分でなく、攻撃されることがあります。このため、侵入の検知/監視が非常に重要です。すぐに対策を取ることができ、何が起きたかを把握し、サイトを元に回復することができるでしょう。

ログの監視

root アクセス権限のある専用サーバーや VPS では、何が起こっているかを監視するために簡単に設定を変更できる権限があります。OSSEC を使えばこの設定がやりやすくなるでしょう。詳しくは OSSEC for Website Security - Part I を参照してください。

ファイル変更の監視

攻撃が発生すると、必ず痕跡が残ります。ログまたはファイルシステム (新規ファイル、変更されたファイル等) です。上で推奨している OSSEC を使用している場合、ファイルを監視し、変更があると通知します。ファイル変更の通知には、オープンソース Tripwire を使用することもできます。

悪意ある変更に備えて外部からウェブサーバーを監視する

攻撃者がサイトを書き換えたり、マルウェアを追加しようとするとき、ウェブベースの改善検知ソリューションを使用して、これらの変更を検知することができます。This comes in many forms today, use your favorite search engine and look for Web Malware Detection and Remediation and you'll likely get a long list of service providers

リソース

英語

日本語

参考

最新英語版: WordPress Codex » Hardening_WordPress最新版との差分