セキュリティプラグインを入れていても、外からどう見えているかを確かめたことはありますか。

TCDの検証サイトで、ログインしていない状態でいくつかのURLを開いてみると、3人分のユーザー名、WordPressのバージョン、XML-RPCが使える状態であることが、どれもすぐに分かりました。攻撃する側が最初に調べるのも、こうした情報です。

ブラウザでURLを開くだけで確かめられる6か所と、見えていたときの直し方をまとめました。5分ほどで終わります。


WordPressで記事販売ができる「YOMERU」
記事を、そのまま収益に。
WordPressサイトで記事の有料販売ができる
無料のプラグイン「YOMERU」。

確かめる前に

確かめるのは、自分が管理しているサイトだけにします。ほかの人のサイトに同じアクセスをすると、攻撃の下調べと受け取られることがあります。

確かめるときは、ブラウザのシークレットウィンドウ(プライベートウィンドウ)を使います。管理画面にログインしたままだと、ログインしていない人とは違う結果が出ることがあるためです。

以下の「example.com」は、自分のサイトのURLに置き換えます。WordPressをサブディレクトリに入れている場合は、「example.com/wp」のように、そのディレクトリまでを含めます。

外から確かめる6か所

開くURL 分かること 検証サイトの結果
/?author=1 ログインに使うユーザー名 見えた
/wp-json/wp/v2/users ユーザー名の一覧 3人分見えた
/feed/ WordPressのバージョン、投稿者の表示名 見えた
/xmlrpc.php XML-RPCが使えるか 使える状態だった
/wp-config.php 設定ファイルの中身が漏れていないか 真っ白(問題なし)
/wp-content/uploads/ アップロードしたファイルの一覧が出ないか 403(問題なし)

1. /?author=1:ユーザー名が分かるか

「https://example.com/?author=1」を開きます。投稿者のページに移動し、アドレスバーのURLが「https://example.com/author/(ユーザー名)/」に変わったら、IDが1のユーザーのユーザー名が外から分かる状態です。数字を2、3と変えると、ほかのユーザーも分かります。

多くのサイトでは、ここに出る文字列はログインに使うユーザー名と同じです。ユーザー名が分かると、あとはパスワードを当てるだけになります。

2. /wp-json/wp/v2/users:ユーザーの一覧が出るか

「https://example.com/wp-json/wp/v2/users」を開きます。WordPressのREST APIが返すユーザーの一覧です。Chromeなら、左上の「プリティプリント」にチェックを入れると読みやすくなります。

REST APIで見えるユーザーの情報

「name」(①)が表示名、「slug」(②)がURLに使われる名前です。「slug」は、何も設定していなければログインに使うユーザー名と同じ文字列になります。検証サイトでは、記事を書いたことのある3人分が表示されました。

1のURLを止めるプラグインでも、こちらは止めていないことがあります。TCDの検証では、CloudSecure WP Securityの「ユーザー名漏えい防止」をオンにしても、ここからはユーザー名が見えたままでした。

3. /feed/:バージョンや表示名が出ていないか

「https://example.com/feed/」を開きます。RSSフィードの中身が、文字だけで表示されます。

RSSフィードに出るバージョンと投稿者名

「generator」の行(①)に、WordPressのバージョンが出ています。バージョンが古いままだと、どの脆弱性が残っているかを外から推測されます。「dc:creator」(②)には、記事ごとに投稿者の表示名が出ます。表示名をユーザー名と同じにしていると、ここからもユーザー名が分かります。

バージョンが見えること自体より、古いバージョンのまま動いていることのほうが問題です。まずは最新版になっているかを確かめます。表示名は、管理画面の「ユーザー」→「プロフィール」の「ブログ上の表示名」で、ユーザー名とは違うものを選べます。

4. /xmlrpc.php:XML-RPCが使えるか

「https://example.com/xmlrpc.php」を開きます。「XML-RPC server accepts POST requests only.」と1行だけ表示されたら、XML-RPCは使える状態です。

XML-RPCは、外部のアプリやサービスから投稿するための古い入口で、パスワードを何度も試す攻撃に使われることがあります。スマートフォンのアプリなどから投稿していないなら、止めても困ることはほとんどありません。403などのエラーが出れば、止まっています。

5. /wp-config.php:設定ファイルの中身が出ないか

「https://example.com/wp-config.php」を開きます。真っ白なページが出れば問題ありません。wp-config.phpはPHPのファイルなので、開くとプログラムとして動き、何も表示されないのが正常です。

データベースのパスワードなどの文字が表示された場合は、すぐにサーバー会社に相談します。サーバーの設定が壊れていて、PHPが動いていない状態です。403が出る場合は、プラグインやサーバーで、さらにアクセスを止めている状態です。

6. /wp-content/uploads/:ファイルの一覧が出ないか

「https://example.com/wp-content/uploads/」を開きます。「Index of」で始まるファイルの一覧が出たら、アップロードした画像やファイルの名前が誰でも見られる状態です。限定公開のつもりで置いたPDFなども、ここから見つかります。

403や真っ白なページ、トップページへの移動なら問題ありません。多くのレンタルサーバーでは、初めから一覧が出ない設定になっています。

ターミナルでまとめて確かめる

Macのターミナルが使えるなら、次のコマンドで、それぞれのURLが返す番号(ステータスコード)をまとめて確かめられます。1行目の「https://example.com」を自分のサイトに置き換えて実行します。

SITE=https://example.com
for p in "/?author=1" "/wp-json/wp/v2/users" "/xmlrpc.php" "/wp-config.php" "/wp-content/uploads/"; do
  echo "$p $(curl -s -o /dev/null -w '%{http_code} %{redirect_url}' "$SITE$p")"
done

検証サイトで実行した結果です(ドメインは置き換えています)。

/?author=1 301 https://example.com/author/(ユーザー名)/
/wp-json/wp/v2/users 200
/xmlrpc.php 405
/wp-config.php 200
/wp-content/uploads/ 403

「/?author=1」が301で「/author/」を含むURLに移動していれば、ユーザー名が見えています。「/wp-json/wp/v2/users」が200なら、一覧が見えています。「/xmlrpc.php」は、ブラウザやこのコマンドで開くと405になりますが、これは使える状態です。止めている場合は403などになります。

見えていたときの直し方

見えていたもの 直し方
ユーザー名(1・2) 「?author=数字」とREST APIのユーザー一覧を、両方とも止める
バージョン(3) WordPressを最新版に更新する。表示名をユーザー名と違うものにする
XML-RPC(4) 使っていなければ止める
wp-config.phpの中身(5) すぐにサーバー会社に相談する
ファイルの一覧(6) .htaccessに一覧を出さない設定を入れるか、サーバー会社に相談する

ユーザー名を隠す方法は、こちらの記事で紹介しています。

XML-RPCを止める方法は、こちらです。

セキュリティプラグインを入れたときに、どこまで止まるかを検証した記事もあります。

まとめ

6か所のうち、どこかが見えていても、それだけですぐに乗っ取られるわけではありません。ただ、ユーザー名とバージョンが分かれば、攻撃する側は次に何を試せばよいかを絞れます。

セキュリティプラグインを入れたときや設定を変えたときは、同じ6か所を開き直して、実際に止まったかを確かめておきます。入れただけで止まっていると思い込まないことが、いちばんの点検です。

ほかの対策は、こちらの記事でまとめています。

世界最高品質のデザインの
WordPressテーマ集
WordPressテーマ「ISSUE」
WordPressテーマ「ISSUE」
人材不足を解決する求人採用サイトを。
WordPressテーマ「SEEED」
WordPressテーマ「SEEED」
Webサービスを販売するLP型テーマ。
WordPressテーマ「GENESIS」
WordPressテーマ「GENESIS」
スタイリッシュな企業サイトの決定版。
WordPressテーマ「SOLARIS」
WordPressテーマ「SOLARIS」
一流の企業のための一流の企業サイトを。