部分(CNAME)ゾーン設定 を使っている場合、プロキシしている DNS レコードは少数でも、HTTP リクエストログに何百ものランダムなホスト名が出ることがあります。これは Host ヘッダー操作攻撃が原因であり、Cloudflare のログ機能の不具合ではありません。
攻撃者は Host ヘッダーインジェクションという手法を使います。
- プロキシ済みホスト名に割り当てられている Cloudflare の IP アドレスを特定します(既知のプロキシ済みサブドメインの DNS ルックアップなど)。
- それらの IP に対して、ランダムなサブドメインを推測した偽の
Hostヘッダー付き HTTP リクエストを直接送ります。 - Cloudflare は
Hostヘッダーの値をそのままClientRequestHostフィールドに記録します。 - リクエストは有効な Cloudflare IP を宛先にしているため Cloudflare に届きます。ただし
Hostヘッダーの中身は攻撃者が制御しています。
http.host フィールド には元のリクエストの Host ヘッダーが入るため、攻撃者が制御した値がログに出ます。
部分(CNAME)ゾーンでは次のとおりです。
- 権威 DNS プロバイダー側で、特定のホスト名だけが CNAME で Cloudflare を指します。
- Cloudflare はゾーン全体を管理していないため、受信した
Hostヘッダーが設定済みレコードと一致するかを検証できません。 - 攻撃者は、既知の有効な IP に推測した
Hostヘッダー付きリクエストを送り、サブドメインを列挙できます。
| 指標 | 確認する内容 |
|---|---|
| リクエスト数の分布 | 正規のホスト名は数千件のリクエストがあります。不審なホスト名はそれぞれちょうど 2〜5 件です。 |
| ホスト名のパターン | 連番(0-0、0-56、007)、よくある単語(admin、api、test、staging)、内部サービス名(airflow、consul、prometheus)。 |
| 送信元 IP | 不審なリクエストは少数の IP(スキャナー基盤)から来ることが多いです。 |
| レスポンスコード | 4xx レスポンスが多い(ホスト名未検出、SSL 不一致)。 |
| DNS との突き合わせ | 不審なホスト名は DNS クエリログに出ません。 |
"ClientRequestHost","_count"
"legitimate-proxied.example.com","12498" # Real traffic
"another-proxied.example.com","6082" # Real traffic
"0-0.example.com","2" # Scanner
"admin.example.com","2" # Scanner
"api-staging.example.com","2" # Scanner
"1234567890.example.com","2" # Scanner有効な Host ヘッダーのリクエストだけを許可する WAF カスタムルール を作成します。
Expression:
(http.host ne "proxied-hostname-1.example.com" and
http.host ne "proxied-hostname-2.example.com" and
http.host ne "proxied-hostname-3.example.com")
Action: Blockできます。トラフィックはブロックせず、ログだけをきれいにしたい場合は次の方法があります。
- Logpush レベル — Logpush フィルター で、既知の正規ホスト名だけをジョブに含めます。
- SIEM レベル — ログ分析時に、リクエスト数がしきい値未満のホスト名を除外します。
届く場合があります。Host ヘッダーが設定済みホスト名と一致した場合や、デフォルト/キャッチオールのオリジンがある場合です。オリジンに接続されたかは、EdgeResponseStatus と OriginResponseStatus で確認します。
リスクは低〜中程度です。主な懸念は次のとおりです。
- エラーページが内部情報を露出する場合の情報漏えい
- リクエストがオリジンに届く場合のリソース消費
- 本物の攻撃を見つけにくくするログノイズ
自動スキャナーは、サブドメインの推測ごとに通常 1〜2 件のリクエストを送ります。最初のプローブと、場合によっては再試行です。この均一な分布は、スキャン活動の信頼できる指標です。
WAF ルールを入れたあとは次を確認します。
- Firewall Events で、ルールに一致してブロックされたリクエストを確認します。
- 前後のログ量を比較します。不審なホスト名は消えているはずです。
- 正規ホスト名のリクエスト数を見て、正規トラフィックに影響がないことを確認します。