診断は次の順に進みます。どれも、誰でも見られるページ・公開のファイル・応答のヘッダー・DNS を、通常の閲覧と同じ方法で確かめるものです。
1. トップページ
入力された URL のトップページを、通常の閲覧と同じように開きます。応答の速さと HTTP の状態、応答のヘッダーを確かめ、以降の項目の材料にします。サイトに接続できない場合は、ここで診断を終えます。
2. WordPress の判定
ページの HTML にある wp-content・wp-includes・generator と、REST API(/wp-json/)の応答から、WordPress のサイトかどうかを判定します。Cloudflare などの CDN・WAF を経由しているかも、応答のヘッダーから確かめます。WordPress ではないと判定した場合は、一般的な項目だけを確認します。
3. HTTPS と証明書
通信が HTTPS で暗号化されているか、SSL 証明書が有効か、期限が近づいていないかを確認します。http で開いたときに https へ転送されるか、HSTS(https の強制)が設定されているかも見ます。暗号化されていないと、フォームの入力内容や Cookie が途中で読み取られるおそれがあります。
4. WordPress の版
HTML の generator・RSS フィード・readme.html から WordPress の版が読み取れるかを確認し、読み取れた場合は公式の最新版と比べます。版が分かると、その版の公表済みの脆弱性を狙われやすくなります。generator の出力を止め、readme.html を削除すると、版を推測されにくくなります。
5. PHP とサーバー
応答のヘッダー(X-Powered-By・Server)から、PHP や Web サーバーの版が見えるかを確認します。PHP の版が分かった場合は、セキュリティ修正の提供期限で判定します。提供が終わった PHP は、新しい脆弱性が見つかっても修正されません。
6. ログイン ID の露出
REST API のユーザー一覧(/wp-json/wp/v2/users)と ?author= の転送から、ログイン ID の候補が読み取れるかを確認します。ID が分かると、残りはパスワードの推測だけになります。見つかった名前は一部を伏せて表示します。
7. XML-RPC
xmlrpc.php が応答するかを確認します。XML-RPC は 1 回の通信で多数のパスワードを試せるため、総当たりや他のサイトへの攻撃の踏み台に使われることがあります。Jetpack やスマホアプリとの連携に使っていなければ、無効にするのが一般的です。
8. ログイン画面・管理画面
/wp-login.php と /wp-admin/ を開き、ログイン画面が標準の URL のまま誰でも開けるか、Basic 認証・URL の変更・アクセス制限が入っているかを確認します。画像認証(CAPTCHA)や二段階認証の仕組みの跡も見ます。ログインを試すことはしません。
9. 公開されてはいけないファイル
エラーログ(/wp-content/debug.log)が誰でも読めないか、アップロードフォルダ(/wp-content/uploads/)でファイルの一覧が表示されないかを確認します。エラーログにはサーバーのフォルダの場所やプラグイン名が書かれていることがあり、攻撃の手がかりになります。
10. セキュリティヘッダー・混在コンテンツ
X-Frame-Options・X-Content-Type-Options・Referrer-Policy の 3 つのヘッダーがあるかを確認します。https のページの中で、画像や CSS・JavaScript を http で読み込んでいないか(混在コンテンツ)も数えます。ヘッダーは .htaccess やセキュリティ系プラグインで追加できます。
11. プラグイン
ページの HTML から読み取れるプラグインとその版を、WordPress 公式ディレクトリの最新版と比べます。作者の更新が 2 年以上止まっているプラグインも挙げます。古い版のプラグインは、乗っ取りの原因として最も多いものの一つです。HTML に出てこないプラグインは確認できません。
12. テーマ
使っているテーマと版を読み取り、公式ディレクトリにあるテーマなら最新版と比べます。有料・独自のテーマは、最新版かどうかを外から確認できません。子テーマで変更している場合は、更新で変更が消えないことを確かめてから更新します。
13. メールのなりすまし対策(DNS)
ドメインの DNS から、SPF と DMARC が設定されているかを確認します。設定が無いと、自社のドメインを名乗ったなりすましメールを、受け取った側が見分けにくくなります。DNS の管理会社やメールサービスも推定して表示します(DMARC に含まれるメールアドレスは伏せます)。
14. ご入力の情報
PHP の版・二段階認証・バックアップ・管理者アカウント・更新や監視の体制など、外からは分からないことを 16 の質問で任意に答えると、判定に加えます。結果の画面でも答えられ、答えると診断し直さずに判定が変わります。答えていない項目と「分からない」の項目は「要確認」として、確かめ方とあわせて表示します。答えた内容は保存しません。
15. まとめ
見つかった項目を「重要・注意・軽微・要確認・OK・参考」に分け、A・B・C の 3 段階で判定します。重要が 1 件でもあれば C、注意があれば B、どちらも無ければ A です。各項目に対応策と、対応の種類(設定の変更・更新作業など)を表示します。