WordPressのセキュリティを高める - 侵入のヒントを隠す
侵入のヒントになり得る各種情報(ソフトウェアのバージョンなど)を隠すことはあまりよい対策とはされていないことが多いです。(情報を隠すという対策は直接的な対策ではないため、「知られても大丈夫」という状態になる対策のほうを優先すべきです)
ただ、大規模な攻撃の場合、多くのサイトをターゲットにするには標準の状態を前提に攻撃プログラムを自動化する必要があるため、各種情報を隠す(標準の状態から変える)ことにより「狙われる対象から外れる可能性が少し上がる」ということはあるかもしれません。
本レシピでは、各種情報の「知る方法」「隠す方法」を紹介します。「WordPressのセキュリティを高める - 侵入を防ぐ」のような根本的な対策を行ったあとの追加的な対策が必要かどうかの検討のために参考になればと思います。
※ これをすれば100%完全に隠せる、というものではありませんので留意してください。また、バージョンによっても違いがある場合があります。
WordPressを使っているか
知る方法
WordPressを使っているどうかについてはいろいろなところに痕跡があるためわりと簡単に推測できます。
(例)
- HTMLソースを覗き、
<meta name="generator" content="WordPress 4.6.1" />
のようなタグを確認する - HTMLソースを覗き、
<link>
や<script>
のURLにwp-content
が含まれている
他にもフィードのソース、HTTPのレスポンスヘッダ(ページの前にサーバーからブラウザ宛に送られる情報)など、様々な場所から推測することができます。
隠す方法
WordPressを使っている痕跡を完璧に消すのは難しいと思いますが、上に挙げた内容は下記の方法で隠すことができます。
<meta name="generator">
は「<meta name="generator"> を削除する」で説明している方法で隠すことができます。wp-content
はWP_CONTENT_DIR
という定数の値と、wp-contentのフォルダ名を変更することで対応できます。 (ただ、すでに運用中のサイトの場合、アップロードした画像を投稿に含めているとの画像のURLはそのまま残るためリンク切れになってしまうなどの問題が出るため、よく検証する必要があります)
WordPressのバージョン
古いバージョンのWordPressを使わないことが一番ですが、バージョンがわかってしまうとそのバージョンにある脆弱性を利用して攻撃されてしまう可能性があります。
知る方法
- HTMLソースを覗き、
<meta name="generator" content="WordPress 4.6.1" />
のようなタグを確認する - HTMLソースを覗き、
<link>
のURLにあるstyle.css?ver=
という部分などを見る (<script>
にもバージョンが記載されているものがあります) WordPressのサイトアドレスURL/?feed=rss2
または?feed=atom
にアクセスし、<generator>
タグを見るWordPressのサイトアドレスURL/readme.html
にアクセスし、ページ上のバージョンを見る
隠す方法
<meta name="generator">
は「<meta name="generator"> を削除する」で説明している方法で隠すことができます。- style.cssなどのバージョンは「JavaScriptやCSSに付加されるWordPressのバージョン番号を除去する」で説明している方法で隠すことができます。
<generator>
タグは「RSSやAtomの<generator>を削除する」で説明している方法で隠すことができます。- readme.html は、下記のような.htaccess (WordPressをインストールしたフォルダ直下に配置) でアクセス拒否します。
1 2 3 4 |
<Files readme.html> Order deny,allow Deny from all </Files> |
その他にも、WPScanというWordPressの脆弱性チェックツールは wp-inclues や wp-admin 内にある各ファイルのハッシュ(ファイルの改ざんをチェックするための値)を元にバージョンを推測しています。2016/09時点でのWPScan 2.9.1では、上記の他に下記を追加するとひとまず「WordPress version can not be detected」(WordPressのバージョンを検出できませんでした)という判定になります。
1 2 3 4 |
<Files wp-emoji-loader.min.js> Order deny,allow Deny from all </Files> |
※チェックツールや攻撃プログラムによって判定の仕方が違うため、このあたりは気休め程度になってしまうと思います。
ユーザー名
ユーザー名は「admin」にしなくても簡単に分かる方法があります。ただ、パスワードが十分に長く強力なものであれば不正ログインされることはないため、ユーザー名を対策するよりパスワードを対策したほうが効果は高いと思います。
知る方法
WordPressのサイトアドレスURL/?author=1
などにアクセスする
(番号はユーザーID。パーマリンク設定によってURLにユーザー名が表示される。作成者アーカイブが有効な場合はページ上に表示されることもある)WordPressのサイトアドレスURL/?feed=rss2
または/?feed=atom
にアクセスし、<creator>
または<author>
を見る
(ニックネームになっていない場合はユーザー名が表示されている)
隠す方法
?author=1
は「作成者アーカイブを無効化する」で説明している方法で隠すことができます。<creator>
または<author>
は、管理画面のユーザー編集画面で「ブログ上の表示名」をニックネームにしておくことで隠すことができます。
WPScanでは上記をしておくと「We did not enumerate any usernames」(どのユーザー名も列挙しません(列挙できません))という判定になります。
管理画面のURL
管理画面のURLがわかると、ログイン画面のURLが分かることになります。(ログインしていないユーザーが管理画面のURLにアクセスすると、ログイン画面に自動でリダイレクトされるため)
知る方法
WordPressのサイトアドレスURL/robots.txt
にアクセスし、Disallow: /wp-admin/
のような部分を見る- HTMLソースを覗き、
<link>
や<script>
のURLから推測する
(http://example.com/wp/wp-content/...
というURLがあった場合、http://example.com/wp/wp-admin/
が管理画面URL)
隠す方法
- robots.txt についてはWordPressが自動で動的に表示しているため、同じ位置に空のrobots.txtを配置することで隠すことはできます。(robots.txtはGoogleなどにページをチェックしに行かないようにお願いするファイルのため、無効にしてよいかどうかは状況を踏まえて検討してください)
使用しているプラグイン・テーマ
知る方法
- HTMLソースを覗き、
<link>
や<script>
のURLから推測する<link rel='stylesheet' id='twentysixteen-style-css' href='http://example.com/wp-content/themes/twentysixteen/style.css?ver=4.6.1' type='text/css' media='all' />
だとTwenty Sixteenが使用されていることがわかる (?ver= にあるバージョンはWordPress本体のバージョンになっていることもありますが、CSSを開いた先頭付近に記載されています)<link rel='stylesheet' id='contact-form-7-css' href='http://example.com/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=4.5' type='text/css' media='all' />
だと Contact Form 7 4.5が使用されていることがわかる
隠す方法
それぞれのプラグインやテーマの名前はファイルやフォルダ名などでURLに含まれているため隠すのは難しいです。