• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

「WordPress の安全性を高める」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(原文の更新に追従)
(FTP: この節の翻訳完了)
83行目: 83行目:
 
== FTP ==
 
== FTP ==
  
When connecting to your server you should use SFTP encryption if your web host provides it. If you are unsure if your web host provides SFTP or not, just ask them.
+
お使いのサーバーに接続するときは、(ホスティングが対応していれば) 暗号化された SFTP を使用すべきです。ホスティングが対応しているか不明な場合は、ホスティングのサポートにお問い合わせください。
  
Using SFTP is the same as FTP, except your password and other data is encrypted as it is transmitted between your computer and your website. This means your password is never sent in the clear and cannot be intercepted by an attacker.
+
SFTP の使い方は FTP と同じですが、手元の端末とサーバーとの間で送受信するパスワードやその他のデータが暗号化される点が異なります。パスワードが平文で送られることは無いため、攻撃者に不正使用されることはありません。
  
  

2013年9月29日 (日) 11:51時点における版

この項目「WordPress の安全性を高める」は、翻訳チェック待ちの項目です。加筆、訂正などを通して、Codex ドキュメンテーションにご協力下さい。

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 にはパスワードの強度メーターが含まれています。パスワードを変更する際にはこれを活用し、強度が十分かどうか確認しましょう。

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

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

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

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/ にはこのコマンドを使用してはいけません。

共有サーバーの場合は、wp-config.php のパーミッションを 750 にすべきです。他のユーザーがデータベースユーザー名とパスワードを閲覧できないようにします。FTP またはシェルアクセスで、以下を実行してください。

chmod 750 wp-config.php

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

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

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

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

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

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.
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]

# 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 のある場所) インストールの一つ上のディレクトリに格納できることに注意してください。Also, make sure that only you (and the web server) can read this file (it generally means a 400 or 440 permission).

If you use a server with .htaccess, you can put this in that file (at the very top) to deny access to anyone surfing for it:

<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.

プラグイン

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

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

ルールデータベースおよび/またはホワイトリストにより、怪しい要求を排除するプラグインがあります。 BlogSecurity's WPIDS pluginPHPIDS、PHP アプリケーションの一般セキュリティレイヤー、をインストールします。WordPress Firewall は、WordPress 向けに設定されたルールとホワイトリストで、様々な設定をすることなく攻撃を排除します。

WordPress Firewall プラグインに関する補足 プラグインディレクトリのWordPress Firewallへのリンクは、WordPress Firewall です。ご利用を検討される場合は、プラグインディレクトリの情報をご確認ください

The All in One WordPress Firewall plugin can apply a nice set of firewall rules to your site.

Another excellent plugin to use for Firewall protection, as well as many other extremely useful tools, is Wordfence Security. It offers real time visitor logs, sends you configurable notifications when rules are broken, and possibly the best feature - it scans your site's core, plugins, and themes daily and compares them against the versions found on the WordPress repositories. If anything is found off in the scanned process, the admin has the ability to restore the files to the correct version. Keep in mind this plugin adds extra tables to the database and can increase size, but is a worthy trade off in the right circumstances.

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

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

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

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

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

隠蔽によるセキュリティ

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

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

データバックアップ

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

健全なバックアップ戦略は、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.

モニタリング

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

ログの監視

(admin アクセス権限のある) 占有サーバーでは、パスワード推測試行、ウェブアタック等を検知するためにログを見る必要があります。リアルタイムでログを監視し、攻撃を防ぐ、優れたオープンソースソリューションは OSSEC です。

ファイル変更の監視

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

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

攻撃者がサイトを書き換えたり、マルウェアを追加しようとするとき、ウェブベースの改善検知ソリューションを使用して、これらの変更を検知することができます。

リソース

参考

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