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

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

ブルートフォース攻撃

提供: WordPress Codex 日本語版
2014年6月8日 (日) 15:25時点におけるH84m (トーク | 投稿記録)による版 (Fail2Ban: 英文が残っていたので削除。)

移動先: 案内検索

この項目「ブルートフォース攻撃」は、翻訳チェック待ちの項目です。加筆、訂正などを通して、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 を使用して、強固なパスワードを強制することができます。

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

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

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

To further increase the strength of your password, you can enable Two Step Authentication to further protect your blog.

プラグイン

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

サーバーを守る

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

ErrorDocument 401 default

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

Nginxの場合は、error_pageディレクティブを使用することができますが、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' にはユーザー名を指定してください。

もしあなたがNginxを使用している場合は、HttpAuthBasicModuleを使用することにより、wp-login.phpを守ることができます。このブロックは、サーバーブロックの内部に設置すべきです。

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

ファイル名のパスは、Nginxのコンフィギュレーションファイル(nginx.conf)のディレクトリに関連付けられています。

そのファイルは、以下のようなフォーマットにするべきです:

user:pass
user2:pass2
user3:pass3

パスワードは、必ずcrype(3)によりエンコードしてください。これは、htpasswd generatorを使用することにより、オンラインで暗号化することもできます。

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 のようなオンラインサービスを使用することもできます。

Nginxについては、locationブロックをサーバーブロックの内部に追加することにより、前述のApacheの例と同様に機能させることができます。

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 フォルダにアップロードしてください。

Nginxの場合、もしあなたがwp-adminとajaxへのアクセスを制限している場合、別のlocationブロックをサーバーブロックに追加する必要があるでしょう。

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 - リファラの無いアクセスリクエストを拒否する

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 ファイルに追記することもできます。

Fail2Ban

Fail2banは、Python is a Pythonでかかれた常駐プログラムです。Fail2banは、Apache(あるいは、SSHなど)をチェックし、特定のイベントが発生した場合に、ファイアウォールのルールを追加します。Fail2banは、正規表現を使用したフィルタを使用します。もし、設定した正規表現にマッチしたイベントが例えば5分間に5回発生したら、そのIPアドレスを60分間(あるいは任意の期間)ブロックすることができます。 Fail2banのインストール及び設定には、root権限が必要です。

Blocklists

It appears that most brute force attacks are from hosts from Russia, Kazachstan and Ukraine. You can choose to block ip-addresses that originate from these countries. There are blocklists availabale on the internet that you can download. With some shell-scripting, you can then load blockrules with iptables. You have to be aware that you are blocking legitimate users as well as attackers. Make sure you can support and explain that decision to your customers.

Besides blocklists per country, there are lists with ip-addresses of well-known spammers. You can also use these to block them with iptables. It's good to update these lists regularly.

Setting up of blocklists and iptables requires root access.


Cloud/Proxy サービス

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

外部資料


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