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

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

「Brute Force Attacks」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(翻訳完了。 Nginx 部分は未翻訳)
(外部資料: 「WordPress のパスワード強度チェック」を追加)
211行目: 211行目:
 
* [http://kb.liquidweb.com/wordpress-modsecurity-rules/ Liquid Web: ModSecurity Rules To Alleviate Brute Force Attacks]
 
* [http://kb.liquidweb.com/wordpress-modsecurity-rules/ Liquid Web: ModSecurity Rules To Alleviate Brute Force Attacks]
 
* [http://support.hostgator.com/articles/specialized-help/technical/wordpress/wordpress-login-brute-force-attack HostGator: Password Protecting wp-login]
 
* [http://support.hostgator.com/articles/specialized-help/technical/wordpress/wordpress-login-brute-force-attack HostGator: Password Protecting wp-login]
 +
 +
* [http://www.rescuework.jp/blog/password-strength.html 本当は怖い WordPress:  WordPress のパスワード強度チェック]
  
 
{{原文|Brute Force Attacks|132730}}<!-- 04:02, 2 July 2013 Mra13  版 -->
 
{{原文|Brute Force Attacks|132730}}<!-- 04:02, 2 July 2013 Mra13  版 -->
  
 
[[Category:上級トピック]][[Category:Security]]
 
[[Category:上級トピック]][[Category:Security]]

2013年8月4日 (日) 07:52時点における版

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

ソフトウェアの脆弱性に着目する攻撃とは異なり、ブルートフォース攻撃(Brute Force Attack) は、非常に単純な方法でアクセス権を取得しようとします。ユーザー名とパスワードを入力し、ログイン成功するまで繰り返します。 美しくないですが、ユーザー名 admin パスワード 123456 のようなものを採用している場合、攻撃が成功しやすいです。

手短に言うと、ウェブサイトのセキュリティで一番脆い場所、つまり、あなた、を狙っているのです。

攻撃の性質上、サーバーのメモリ上限に達してパフォーマンス低下を引き起こすかもしれません。http リクエストの数 (あなたのサイトを訪問する回数) が非常に多いため、サーバーがメモリ不足になるからです。

この攻撃は、WordPress 特有のものではありません。すべてのウェブアプリケーションに起こりえます。しかし WordPress は良く利用されているため、攻撃の標的となりやすいです。

自分を守る

WordPress へのよくある攻撃の場合、wp-login.php ファイルに繰り返しアクセスし、ログインできるかサーバーがダウンするかするまで継続します。自分を守るために、いくつかの方法があります。

ユーザー名 admin を使用しない

WordPress のデフォルトのユーザー名が admin のため、admin を使用していると仮定した攻撃が多いです。 ユーザー名 admin を使用している場合は、新しいアカウントを作成し、全ての投稿を新しいアカウントに移譲し、admin を購読者に変更してください (あるいは削除してください)。

プラグイン Admin Renamed Extended を使用してユーザー名を変更できます。

良いパスワードを使用する

パスワードの目的は、他者が推測しずらく、ブルートフォース攻撃が成功しにくいものにすることです。安全なパスワードを作成することができる、多くのautomatic パスワード生成ツール(google 検索)があります。

WordPress にはパスワード強度を示すメーターがあり、パスワードを変更するときに表示されます。パスワードを変更するときは、十分な強度であることを確かめておきましょう。

プラグイン Enforce Strong Password を使用して、強固なパスワードを強制することができます。

パスワード生成時に避けたほうが良い事:

  • 本名、ユーザー名、会社名、ウェブサイトの名前やそれらの組み合わせ。
  • どんな言語であれ、辞書にある単語。
  • 短いパスワード。
  • 数字のみ、またはアルファベットのみのパスワード (両方を混ぜるのが良い)。

強固なパスワードは、ブログ投稿を守るのに必要ですが、それだけではありません。管理者アカウントのアクセスを取得した攻撃者が、悪意あるスクリプトをインストールし、サーバー全体が危うくなることがあります。

プラグイン

プラグインを用いて、ログイン試行回数を制限したり、wp-admin へのアクセスを禁止したりできます。

サーバーを守る

wp-login.php あるいは wp-admin をロックする事を決めた場合、これらのページへアクセスすると、404 または 401 エラーに遭遇するでしょう。これを避けるには、.htaccess ファイルに下記のように記述します。

ErrorDocument 401 default

401 エラーを 401.html に向けることもできます。ここで重要なのは、WordPress でない、ということです。

For Nginx you can use the error_page directive but must supply an absolute url.

error_page  401  http://example.com/forbidden.html;


wp-login.php をパスワード保護する

wp-login.php ファイル (と wp-admin フォルダ)をパスワード保護することにより、防御壁を増やすことができます。wp-admin をパスワード保護すると、フロントエンドで ajax を使用するプラグインを破壊するため、wp-login を保護するだけで通常は良いでしょう。

パスワード保護するには、.htpasswd ファイルを作成する必要があります。多くのホスティングでは生成ツールを提供してますが、もし手作業で作成する必要がある場合は、htpasswd generator を使用することができます。.htaccess ファイル (拡張子のみを持つファイル) と同様、.htpasswd も拡張子のみです。

このファイルをウェブ公開領域(public_html や domain.com 等。ホスティングにより異なる)の外に置くことができます。同じフォルだに置くこともできますが、こうする場合は .htaccess ファイルに追加でセキュリティ対策を施す必要があります。

.htpasswd ファイルをアップロードしたら、どこにあるかを .htaccess に伝える必要があります。.htpasswd をホームディレクトリに置き、htpasswd ユーザー名が mysecretuser の場合、.htaccess に下記のように記述します。

# Stop Apache from serving .ht* files
<Files ~ "^\.ht"> Order allow,deny Deny from all </Files>

# Protect wp-login
<Files wp-login.php>
AuthUserFile ~/.htpasswd
AuthName “Private access”
AuthType Basic
require user mysecretuser
</Files>

AuthUserFile の実際の位置はサーバーに依存します。また 'require user' にはユーザー名を指定してください。

If you are using Nginx you can password protect your wp-login.php file using the HttpAuthBasicModule. This block should be inside your server block.

location /wp-login.php {
    auth_basic "Administrator Login";
    auth_basic_user_file .htpasswd;
}

The filename path is relative to directory of nginx configuration file nginx.conf The file should be in the following format:

user:pass
user2:pass2
user3:pass3

Passwords must be encoded by function crypt(3). You can use an online htpasswd generator to encrypt your password.

wp-admin へのアクセスを IP アドレスで制限する

自分だけが管理画面にログインする必要がある場合で、自分の IP アドレスが分かっている場合、.htaccess ファイルを用いて自分以外の wp-admin へのアクセスを拒否することができます。

.htaccess をテキストエディタで開き、下記を追加する:

# Block access to wp-admin.
order deny,allow
allow from x.x.x.x 
deny from all

x.x.x.x は自分の IP アドレスに置き換えてください。インターネットサービスプロバイダに問い合わせると、自分の IP アドレスが分かるでしょう。あるいは What Is My IP のようなオンラインサービスを使用することもできます。

For Nginx you can add a location block inside your server block that works the same as the Apache example above.

error_page  403  http://example.com/forbidden.html;
location /wp-admin {
  deny    192.168.1.1;
  allow   192.168.1.0/24;
  allow   10.1.1.0/16;
  deny    all;
}

deny/allow の順序が重要である事に注意してください。アクセス指定順を変えても上手くいく、と思うかもしれません。実際はそうではありません。上記の例の順序を変えると、全てのアドレスからのアクセスを拒否します。

テーマやプラグインが AJAX を使用している場合、.htaccess に追加の設定を記述して、それらがうまく動作するようにする必要があります。

# Allow acces to wp-admin/admin-ajax.php
<Files admin-ajax.php>
    Order allow,deny
    Allow from all
    Satisfy any
</Files>

このファイルを保存し、wp-admin フォルダにアップロードしてください。

Again for Nginx if you are restricting access to wp-admin and use ajax you will need to add another location block to your server block.

location /wp-admin/admin-ajax.php {
    allow all;
}

許可する IP アドレスを複数指定することができます。

# Block access to wp-admin.
order deny,allow
allow from x.x.x.x 
allow from y.y.y.y 
allow from z.z.z.z 
deny from all

複数のインターネットサービスプロバイダを使用する場合 (モバイル環境から管理画面にアクセスする場合、等)や、何人かが管理画面にアクセスできるようにする場合に役立ちます。

IP アドレスブロックを許可する場合は、下記のように記述します。

# Block access to wp-admin.
order deny,allow
allow from x.x.x.* 
deny from all

例えば、192.168.1.* を設定すると、IP アドレス範囲 192.168.1 を許可します。

リファラーの無いアクセスを拒否する

Combatting Comment Spam の発展として、これを使用してサイトにアクセスしないでログインフォームにアクセスされたものを拒否することができます。

# Stop spam attack logins and comments
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{REQUEST_METHOD} POST
	RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login)\.php*
	RewriteCond %{HTTP_REFERER} !.*example.com.* [OR]
	RewriteCond %{HTTP_USER_AGENT} ^$
	RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L]
</ifModule>

Nginx - Deny Access to No Referrer Requests

location ~* (wp-comments-posts|wp-login)\.php$ {
        if ($http_referer !~ ^(http://example.com) ) {
          return 405;
        }
      }

example.com は自分のドメインに変更してください。マルチサイトで複数ドメインを使用している場合は、(example.com|example.net|example4.com) のように変更してください。

ModSecurity

ModSecurity を使用する場合は、Frameloss - Stopping brute force logins against WordPress の指示に従ってください。サーバーのルート権限が必要になります。ホスティング業者の手助けが必要かもしれません。

ModSecurity 2.7.3 を使用している場合は、ルールを .htaccess ファイルに追記することもできます。

Cloud/Proxy サービス

CloudFlare や Sucuri CloudProxy のようなサービスは、攻撃者がサーバーに到達する前に IP をブロックすることで、これらの攻撃を沈静化するのに役立つでしょう。

外部資料

最新英語版: WordPress Codex » Brute Force Attacks最新版との差分