WordPressのインストールディレクトリを見ると、見知らぬファイルが存在しているかもしれません。それらは外部から攻撃を受けて配置されたマルウェアです。
そのファイルに外部からアクセスすることで、そのサイトはどんどんマルウェアにより改竄が進み、メールを大量に送信したり、他のサイトに飛ばされたり、変なサイトマップを送信するなど踏み台にされることになります。
そうなると、厳しいサーバーだとサイトを凍結されてしまいます。まさに踏んだり蹴ったりという状況になります。
そうならないように、必要最低限のセキュリティ設定を行っておくのが最善です。この記事ではWordpressに不正ログインされにくくなる設定についてまとめておきます。
ログインの失敗回数を制限するプラグイン
limit-login-attempts-reloaded
WordPressはパスワードの総当たり攻撃を食らうことが多いので、ログイン失敗でログイン画面をロックするプラグインを入れておくのが最善です。
これを入れておけば、ID、パスワードが流出していない限りまず大丈夫でしょう。
Cray bone
ログイン履歴を記録できるプラグインです。
このプラグインは、Cocoonの高速化でJS圧縮すると、ログイン状態でJSがエラーを吐くようです。
Siteguardは相性問題に注意
xmlrpc.phpをアクセス制限する
XMLRPCを無効にするとjetpackが動かなくなります。
jetpackを使っている人は、XMLRPCを無効にしないでください。
xmlrpc.phpに自由にアクセスできると、ID、パスワードがわかるとログイン出来てしまうので、xmlrpc.phpは外部から使用できないようにしておきます。
RewriteEngine On
RewriteBase /
RewriteRule ^xmlrpc\.php$ "http\:\/\/0\.0\.0\.0\/" [R=301,L]
XML-RPCの機能自体をOFFにして、更にヘッダーへの出力も停止します。
//https://www.seojuku.com/blog/wp-security-xmlrpc-cron.html
add_filter('xmlrpc_enabled', '__return_false');
function remove_x_pingback($headers) {
unset($headers['X-Pingback']);
return $headers;
}
add_filter('wp_headers', 'remove_x_pingback');
wp-config.phpとwp-cron.phpをアクセス制限する
wp-config.phpとwp-cron.phpは外部からアクセスできないようにしておきます。
wp-cron.phpは使用しているプラグインがある場合は除外してもいいかもしれません。
<FilesMatch "^(wp-config\.php|wp-cron\.php)">
order allow,deny
deny from all
</FilesMatch>
wp-content/uploadsのPHPの実行を防ぐ
「wp-content/uploads」ディレクトリは、WordPressが利用する画像ディレクトリで、PHPの実行は必要ありません。
「wp-content/uploads」ディレクトリに「.htaccess」を設置し、PHPの実行を防ぎます。
# Kill PHP Execution
<Files *.php>
deny from all
</Files>
wp-Includesに外部からアクセスできないようにする
「wp-includes」ディレクトリはWordPressのロジック部分で、スクリプトがユーザーによってアクセスされることを想定されていない部分です。「.htaccess」で下記コードを追加し、スクリプトをブロックします。
# 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
# ここに記述しない
# END WordPress
まとめ
WordPressが不正アクセスされて、改ざんされる例をたくさん見てきました。
殆どのケースが原因が不明です。つまり、ID、パスワードが漏れているか、総あたりによってクラックされているように思います。日本のサーバーは海外からの攻撃の対策をしています(wp-login.phpやXML-RPC、REST-APIへのアクセス制限)が、それでもクラックされています。
ですので、ログイン画面への攻撃をされないように、ログインできる経路を閉じておくのが最善です。