筆者の公開VPSにて、昨今のトレンドと言えるようなログを確認しましたので解説です。
攻撃者のIPやホスト名をダミー(例: ATTACKER_IP, TARGET_IP)に置き換えています。わざわざIP晒しをしないのは「テロリストに名前を与えない」の精神からです。
[DATE] [security2:error] [client ATTACKER_IP_1] ModSecurity: Access denied... [id "10004"] [msg "Host header is a numeric IP address"] [hostname "TARGET_IP"] [uri "/"]
[DATE] [security2:error] [client ATTACKER_IP_1] ModSecurity: Access denied... [id "10004"] [msg "Host header is a numeric IP address"] [hostname "TARGET_IP"] [uri "/favicon.ico"]
[DATE] [security2:error] [client ATTACKER_IP_2] ModSecurity: Access denied... [id "10004"] [msg "Host header is a numeric IP address"] [hostname "TARGET_IP"] [uri "/.git/config"]
[DATE] [security2:error] [client ATTACKER_IP_3] ModSecurity: Access denied... [id "10004"] [msg "Host header is a numeric IP address"] [hostname "TARGET_IP"] [uri "/api/tags"]
[DATE] [security2:error] [client ATTACKER_IP_3] ModSecurity: Access denied... [id "10004"] [msg "Host header is a numeric IP address"] [hostname "TARGET_IP"] [uri "/v1/models"]
[DATE] [security2:error] [client ATTACKER_IP_3] ModSecurity: Access denied... [id "10004"] [msg
[DATE] [security2:error] [client ATTACKER_IP_3] ModSecurity: Access denied... [id "10004"] [msg "Host header is a numeric IP address"] [hostname "TARGET_IP"] [/update_weights_from_tensor]
"Host header is a numeric IP address"] [hostname "TARGET_IP"] [uri "/.well-known/mcp.json"]
[DATE] [security2:error] [client ATTACKER_IP_3] ModSecurity: Access denied... [id "10005"] [msg "Missing Host Header"] [hostname "example.com"] [uri "/"]
解説の前に
header is a numeric IP addressMissing Host Header
があることに気づく方はいるかと思います。
これは、筆者が導入しているMod_Securityに以下のカスタムルールを設けているからです。
# 1-3. IPアドレス直打ちアクセス対策
# ポート番号が付いていても即座に拒否する
SecRule REQUEST_HEADERS:Host "@rx ^[\d.]+(:\d+)?$" \
"id:10004,\
phase:1,\
deny,\
status:404,\
log,\
msg:'[CUSTOM RULE] Host header is a numeric IP address (incl port). Blocked immediately.',\
tag:'application-attack',\
tag:'PROTOCOL_VIOLATION/INVALID_HREQ'"
# Hostヘッダーが存在しない場合は即ブロック
SecRule &REQUEST_HEADERS:Host "@eq 0" \
"id:10005,\
phase:1,\
deny,\
status:404,\
log,\
msg:'[CUSTOM RULE] Missing Host Header. Blocked immediately.'"
攻撃の全体的な意図:なぜ「IPアドレス」でアクセスしてくるのか?
ログの多くが 「HostヘッダーがIPアドレスである」 という理由でModSecurity(WAF)に遮断されています。これには以下の意図があります。
- 無差別スキャン:
- ドメイン名を知らなくても、IPアドレスの範囲(例:
192.168.0.0/16)を片っ端から叩くことで、管理が甘い「生」のサーバーを見つけ出そうとしています。
- ドメイン名を知らなくても、IPアドレスの範囲(例:
- デフォルト設定の探索:
- 多くのWebサーバーは、不明なドメインやIP直接指定でアクセスされた際に「デフォルトのバーチャルホスト」を表示します。ここにはテストページや管理ツールが放置されていることが多いため、そこを突こうとしています。
- WAF/CDNの回避:
- CloudflareなどのCDNを経由せず、サーバーの「本当のIP」に直接攻撃を仕掛けることで、上位の保護層をバイパスしようとする手法です。
各パス(URI)が狙われた理由とケーススタディ
情報漏洩の古典:/.git/config
- 意図:
- Gitリポジトリの露出確認。
- 背景:
- 開発者が誤って
.gitディレクトリを公開サーバーにアップロードしてしまうミスを狙っています。これが取得されると、ソースコード、DBのパスワード、APIキー、過去の全変更履歴が盗まれます。
- 開発者が誤って
AI・LLM時代の新潮流:/v1/models, /api/tags, /api/version
- 意図:
- OllamaやLocalAI、OpenAI互換API などのエンドポイント探索。
- 背景:
- 昨今、自宅サーバー等でローカルLLMを動かす人が増えています。これらのツールはデフォルトで
/v1/modelsなどのパスを使用するため、認証なしでAIリソースを悪用(AI寄生)したり、モデル情報を盗んだりするためにスキャンされています。
- 昨今、自宅サーバー等でローカルLLMを動かす人が増えています。これらのツールはデフォルトで
2026年での最新トレンドの追跡:/.well-known/mcp.json, agent.json
- 意図:
- Model Context Protocol (MCP) 設定ファイルの探索。
- 背景:
- MCPは2024年末〜2025年にかけて普及し始めた、AIエージェントとツールを接続するための規格です。これがあるサーバーは「AIエージェントが操作可能なリソース」を持っている可能性が高いため、攻撃者は踏み台やデータ奪取の対象としてリストアップしようとしています。
AI学習モデルの改竄:/update_weights_from_tensor
- 意図:
- 学習済みモデルの「重み(Weights)」を外部から直接書き換えようとしています。
- 背景:
- もし成功すれば、攻撃者はサーバにインストールされているAIの判断を密かに操作できます。例えば「特定の条件の時だけ誤判定させる(バックドア)」や「特定の顔をスルーさせる」といった、AIジャックが可能です。
監視・インフラの隙:/metrics, /queue/status
- 意図:
- Prometheusや監視ツールの露出確認。
- 背景:
/metricsにはサーバーの負荷、プロセス一覧、時には内部ネットワークの構成情報がプレーンテキストで出力されます。攻撃者にとっては、攻撃の戦略を立てるための「設計図」を手に入れるようなものです。
ここから得られること
総括
「攻撃者はドメイン名で選んでいるのではない。露出している機能(Git, AI API, 監視ツール)をポートスキャンとパス探索で機械的に探り当てている」
今後の教訓:
- ホワイトリスト運用:
/api/や/metricsなどのパスは、特定のIP以外からは404にしましょう。
- 「隠しファイル」の禁止:
.gitや.envなど、ドットで始まるディレクトリへのアクセスはWebサーバーレベルで一括拒否しましょう。
いくら最新の(今回のようなAIサーバ)を狙ったところで
- 「対策の甘いところから狙われる」
- 公開されたらヤバいところは共有される
という普遍性は同じ。それこそ『緋色の研究』でホームズが言う
「日の下に新しきものなし」 (Nihil novi sub sole)
ぐらいの勢いで、基本的な対策をしていきましょうという話でした。












