ソフトウェアの脆弱性に着目する攻撃とは異なり、ブルートフォース攻撃 (Brute Force Attack) は、非常に単純な方法でアクセス権を取得しようとします。ユーザー名とパスワードを入力し、ログイン成功するまで繰り返します。美しくないですが、ユーザー名 admin パスワード 123456 のようなものを採用している場合、攻撃が成功しやすいです。
手短に言うと、ウェブサイトのセキュリティで一番脆い場所、つまり、あなた、を狙っているのです。
攻撃の性質上、サーバーのメモリ上限に達してパフォーマンス低下を引き起こすかもしれません。http リクエストの数 (あなたのサイトを訪問する回数) が非常に多いため、サーバーがメモリ不足になるからです。
この攻撃は、WordPress 特有のものではありません。すべてのウェブアプリケーションに起こりえます。しかし WordPress は良く利用されているため、攻撃の標的となりやすいです。
自分を守る
WordPress へのよくある攻撃の場合、wp-login.php ファイルに繰り返しアクセスし、ログインできるかサーバーがダウンするかするまで継続します。自分を守るために、いくつかの方法があります。
ユーザー名 admin を使用しない
WordPress のデフォルトのユーザー名が admin のため、admin を使用していると仮定した攻撃が多いです。ユーザー名 admin を使用している場合は、新しいアカウントを作成し、全ての投稿を新しいアカウントに移譲し、admin を購読者に変更してください (あるいは削除してください)。
プラグイン Admin Renamed Extended を使用して自身のユーザー名を変更できます。
良いパスワードを使用する
パスワードの目的は、他者が推測しずらく、ブルートフォース攻撃が成功しにくいものにすることです。安全なパスワードを作成することができる、多くの automatic パスワード生成ツール (google 検索) があります。
WordPress にはパスワード強度を示すメーターがあり、パスワードを変更するときに表示されます。パスワードを変更するときは、十分な強度であることを確かめておきましょう。
プラグイン Force Strong Password を使用して、強固なパスワードを強制することができます。
パスワード生成時に避けたほうが良い事:
- 本名、ユーザー名、会社名、ウェブサイトの名前やそれらの組み合わせ。
- どんな言語であれ、辞書にある単語。
- 短いパスワード。
- 数字のみ、またはアルファベットのみのパスワード (両方を混ぜるのが良い)。
強固なパスワードは、ブログ投稿を守るのに必要ですが、それだけではありません。管理者アカウントのアクセスを取得した攻撃者が、悪意あるスクリプトをインストールし、サーバー全体が危うくなることがあります。
パスワードの強度をさらに上げ、ブログを守るために、二段階認証を有効にすることができます。
プラグイン
プラグインを用いて、ログイン試行回数を制限したり、wp-admin へのアクセスを禁止したりできます。There are many plugins available to limit the number of login attempts made on your site. Alternatively, there are also many plugins you can use to block people from accessing wp-admin altogether.
サーバーを守る
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 へのアクセスを拒否することができます。
Note: Beware your ISP or computer may be changing your IP address frequently, this is called dynamic IP addressing, rather than fixed IP addressing. This could be used for a variety of reasons, such as saving money. If you suspect this to be the case, find out out how change your computer's settings, or contact your ISP to obtain a fixed address, in order to use this procedure.
.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 access 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}/$1 [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
多くのブルートフォース攻撃は、ロシア、カザフスタン、ウクライナのホストから行われています。これらの国々のIPアドレスブロックを選択し、ブロックすることができます。インターネット上に、このようなブロックリストが公開されており、ダウンロードすることができます。また、シェルスクリプトにより、 iptables にブロックルールを読み込ませることも可能です。ただし、これにより、攻撃のためのアクセスではない、合法なユーザーをブロックしてしまうことに注意してください。これについて、サポートが可能か確認し、またカスタマーにこの決断について説明を行いましょう。国ごとのブロックリストに加え、よく知られたスパマーのIPアドレスのリストがあります。このようなリストも、 iptables に使用することができます。これらのリストは定期的に更新した方がよいでしょう。
ブロックリストと iptables の設定には、root 権限が必要です。
Cloud/Proxy サービス
CloudFlare や Sucuri CloudProxy のようなサービスは、攻撃者がサーバーに到達する前に IP をブロックすることで、これらの攻撃を沈静化するのに役立つでしょう。
外部資料
- Sucuri: Protecting Against WordPress Brute Force Attacks
- Liquid Web: ModSecurity Rules To Alleviate Brute Force Attacks
- HostGator: Password Protecting wp-login
- Stopping Brute-force Logins
- Swiss Army Knife for WordPress (SAK4WP) – Free Open Source Tool that can help you protect your wp-login.php and /wp-admin/ but not /wp-admin/admin-ajax.php with one click and much more
- 本当は怖い WordPress: WordPress のパスワード強度チェック
この記事は役に立ちましたか ? どうすればさらに改善できますか ?
フィードバックを送信するにはログインする必要があります。