2/14公開【curlでヘルシーパラノイア】~【Git流出】500万件の鯖が丸見え?~

【curlでヘルシーパラノイア】~【Git流出】500万件の鯖が丸見え?~

仕事でミスや不具合を何度も経験したので、失敗経験には自信があります。
そんな経験から得た最たるものは、「他山の石」であったり、「転ばぬ先の杖」というごく当たり前の教訓です。

失敗教訓(AI生成)

「他山の石」:他人の誤った言動や失敗、つまらない出来事であっても、それを見て自分の成長や改善、戒め(教訓)にする

「転ばぬ先の杖」:失敗してから対策を講じるのでは遅いため、前もって準備や用心をしておくことが大切であるという教訓

今回私の失敗教訓に新しい「ヘルシーパラノイア」という横文字が追加されましたので勝手にご紹介させていただきます。

目次

この記事でわかること

  • curlの使い方
  • nginxのセキュリティちょい足し設定
  • 「ヘルシーパラノイア」という言葉の意味

特に「curl」コマンドはめちゃくちゃよく使うコマンドなので、応用情報技術者試験や高度試験などの参考になる粒度まで掘り下げたつもりなので、ぜひ最後までご覧になってください。

関連記事

気になるセキュリティニュース

さて、本記事で紹介したいのはセキュリティ関連のニュースに関する私の受け止めです。

「公開Webサーバ約500万件で『Gitリポジトリ』の管理情報が外部から閲覧できる状態にあった」
(Mysterium VPN調査 / 2026年2月)

要するに、世界中の500万台のサーバーで、ソースコードの変更履歴や、過去に削除したはずのパスワード「丸見え」だったということです。

Webサーバーを運用している私にとってこれはまさに『他山の石』。今すぐ『転ばぬ先の杖』を用意すべき案件だと感じました。

「確か設定したはず。自分は大丈夫」そんな甘い囁きも脳裏によぎりましたが、「正常性バイアス」こそが失敗の大根源だと私は知っています。

というわけでしっかり安全確認することにしました。

「curl」コマンドでGit公開状態を確認する方法と注意事項

絶対に守ってほしい注意事項

本記事のコマンドは絶対に他人のサーバーに対して実行しないでください。

本記事のコマンドは、サーバー側から見るとサイバー攻撃の偵察ログにしか見えません。

許可なく他人のシステムに対し、脆弱性を探すようなコマンド(特に -X-d などを伴うもの)を実行することは、不正アクセス禁止法違反威力業務妨害などの罪に問われる可能性があります。

まずは現状確認です。自分のサーバーに「裏口」が開いていないか、外部から叩いてみます。

チェックするのは .git/HEAD というファイル。これが見えてしまったら、そのサーバーは「全裸」と同じです。

PowerShellでcurlコマンドを打ち込む

「curl」コマンドを使ってサーバーからの応答を確認します。

curl -I https://[自分の管理ドメイン※]/.git/HEAD
  • curl: Webリクエストを送るコマンド
  • -I: HTTPレスポンスヘッダのみを取得する(ステータスラインを含む)
  • .git/HEAD: Git管理下なら必ず存在するファイル
  • ステータスライン(1行目)には「200 OK」「404 Not Found」などの応答確認に必要なHTTPステータスコードが含まれるため(めちゃくちゃ詳しい記事を見つけたのでLink紹介します↓)

ー結果ー

HTTP/1.1 403 Forbidden
Server: nginx

「403 Forbidden」というのはサーバーが閲覧を拒否していることを示します。

これは私のサーバーはgit/HEADの開示要求を拒否していることです。つまりGitリポジトリは見えていないということになります。

これで一安心というわけです。

補足

今回のニュースの問題の根源にあるのは、そもそも.gitディレクトリ(Gitリポジトリ)はデプロイ(サーバーにアップロード)しないほうが良いとされていますが、GitHubから直接更新可能という利便性から.gitをサーバーにアップロードしがちということ。
そしてさらにnginxやApacheの設定で.gitへのアクセスをブロックしていないサーバーが世界中に500万台もあるよって話です。

技術的な要件を整理

今回は結果的に問題なかったのでこれ以上なにかをしたわけではないですが、ここで覚えておきたい重要な技術要件は「curl」コマンド「nginx」の設定です。

これらを詳しく解説します。

「curl」のオプション解説一覧(セキュリティ確認用)

スクロールできます
オプション意味使用する場面
-I (大文字i)HEADリクエスト
(ヘッダーのみ取得)
[最重要] ファイルの中身をダウンロードせず、「存在するか」「アクセス権限があるか」だけを高速に確認したい時に使います。ログを汚さず、通信量も最小限で済みます。
-vVerbose(詳細)モードリクエストとレスポンスの全通信内容(ハンドシェイク含む)を表示します。「なぜ繋がらないのか」「どんなSSL証明書が使われているか」をデバッグする際に必須です。
-Lリダイレクト追跡301 Moved Permanently などで転送された場合、自動的に転送先まで追いかけてリクエストを繰り返します。「httpで叩いたらhttpsに飛ばされた」という場合に、その先の正体を見極めるために使います。
-kSSL証明書エラー無視自己署名証明書(オレオレ証明書)や期限切れのサイトでも、警告を無視して強引に接続します。開発環境やイントラネット内のサーバーを確認する際に使います。
-X <METHOD>メソッド指定POSTPUTDELETEOPTIONS などのHTTPメソッドを明示的に指定します。例: curl -X OPTIONS https://... で、サーバーが許可しているメソッド一覧(Allowヘッダ)を確認できます。
-H "<Header>"ヘッダ追加特定のUser-Agent以外を拒否する設定が正しく効いているか、動作検証するために使います。
-d "<data>"データ送信自分のAPIが、予期せぬデータ(SQLなど)に対して正しくエラーを返せるか、堅牢性をテストするために使います。POSTメソッドでデータを送信します。

「curl」の使用例

1.サーバーの「素性」を調べる(基本セット)

curl -I -L https://example.com

意味: リダイレクトがあれば最後まで追いかけ、最終地点のヘッダー情報を表示する。
チェック項目: Server: nginx/1.18.0 のようにバージョンが出ていないか? X-Powered-By: PHP/7.4 など余計な情報が出ていないか?

2.HTTPS設定と通信経路のデバッグ

curl -v https://example.com

意味: SSL/TLSハンドシェイクの詳細を表示する。
チェック項目: どのバージョンのTLSが使われているか? 証明書の有効期限は?

3.特定のIPアドレスに対してホスト名指定でアクセス(hostsファイルの代わり)

curl -H "Host: www.example.com" http://192.0.2.1/

意味: DNSを使わず、IPアドレス 192.0.2.1 に対して、「私は www.example.com にアクセスしたいです」と名乗ってアクセスする。
用途: DNS切り替え前の動作確認や、CDNの裏にあるオリジンサーバーへの直アクセス確認など。

nginxで.gitディレクトリへのアクセスを禁止(拒否)する設定

さて、結果的に私は大丈夫でしたが、もし公開してしまっていたらどうすればいいか、開発者が「うっかり」公開しがちな危険ファイルを、先回りしてブロックする設定の例をご紹介します。

nginxの設定ファイル(nginx.conf 等)に追加

server {
    # ... (他の設定) ...

    # ▼▼ ここから「ちょい足し」 ▼▼

    # 1. 王道のGit隠し(これは必須)
    location ~ /\.git {
        deny all;
    }

    # 2. Apache用の設定ファイル隠し(Nginx環境でも念のため)
    location ~ /\.ht {
        deny all;
    }

    # 3. 【ここが重要!】未来の事故を防ぐ「先回りブロック」
    # 環境変数(.env)、Docker設定、YAMLなどの設定ファイル系をまとめて拒否
    # ただし、稼働システムの要件に応じて変更要。
    # 拡張子だけでなく、ファイル名自体も対象にする正規表現
    location ~ /\.(env|gitignore|docker|yml|yaml|config|ini|bak|swp)$ {
        deny all;
    }
    
    # ▲▲ ここまで ▲▲
    
    # ... (他の設定) ...
}
さらにパラノイアな設定

deny all; だと「立入禁止(403)」と返事をしてしまうので、「ファイルなんてないよ(404)」とシラを切りたい場合は、deny all; の代わりに return 404; を使うのも有効です。

関連記事

まとめ

今回のセキュリティニュースについてAI(Perplexity)と議論する中で登場した言葉がこの「ヘルシーパラノイア(Healthy Paranoia:健全な猜疑心)」です。

セキュリティの世界では、「ゼロトラスト」という概念があります。「決して信頼せず、必ず検証せよ(Never Trust, Always Verify)」を原則とするセキュリティの考え方です。

つまり「たぶん大丈夫だろう」という正常性バイアスこそが最大の敵です。

「もしかしたら危ないかもしれない」と健全に疑い、技術的に検証して安心を得る姿勢

これこそが「ヘルシーパラノイア」であり、AI時代になっても、どの業界でも通じるポータブルスキルなのではないでしょうか。

  • URLをコピーしました!
目次