Hamdy Tabsissi
日本語

セキュリティ・オブザーバトリー 本番稼働中 個人プロジェクト

サイトのセキュリティ低下に自動で気づく

自分のウェブサイトを30分ごとに点検し、いつの間にか消えたセキュリティ設定を知らせる小さなロボットです。

ニーズ

更新作業中にうっかり消えたセキュリティ設定は目に見えません。監査や顧客が気づくまでは。

アイデア

点検を記憶に頼らないこと。監視対象から離れたところで自動的に動かし、ひとつの障害が別の障害を隠すことがないようにします。

つくったもの

  • ウェブサイトが送るべき標準的な保護を点検する仕組み:5つのセキュリティヘッダー、HTTPS への切り替え、Cookie の設定、そして3週間前に警告する証明書の有効期限。
  • サイトの外で独自のスケジュールで動き、履歴は専用のデータベースに保存します。
  • 認証の入り口の奥にある、非公開のダッシュボード。

成果

  • 30分点検の間隔
  • 5毎回確認するセキュリティヘッダー
  • 3週間証明書の期限切れ前に警告
  • 2026年8月30日稼働開始

最初の点検で、使用中のフレームワークのバージョンを明かしてしまうヘッダーを見つけ、1時間以内に修正しました。さらに、自分自身のミスも見つけました。最初のダッシュボードが公開状態でサイトマップにも載っており、実質的に攻撃者向けの地図になっていたのです。その日のうちに閉じ、認証の奥で再公開しました。

画面で見る

図:自分のウェブサイト、ヘッダー・TLS・Cookie の自動点検、そして結果の履歴が継続的につながる流れ

学んだこと

セキュリティツールは、まず自分自身の点検に合格しなければなりません。何を監視しているかを公開してしまう監視ツールは、見つけた人にとっての偵察ツールになります。

技術的な詳細 技術スタック、アーキテクチャ、設計判断(技術職の方向け)

技術スタック

  • Node.js(npm 依存なし)
  • Express
  • SQLite (node:sqlite)
  • systemd タイマー
  • Cloudflare Access

仕組み

  • 点検項目:CSP、HSTS、X-Frame-Options、X-Content-Type-Options、Referrer-Policy の有無、Server や X-Powered-By による情報漏れがないこと、すべての Cookie の Secure と HttpOnly、HTTP → HTTPS のリダイレクト、3週間以内に期限切れにならない TLS 証明書。
  • npm 依存ゼロ:Node の組み込みモジュールだけを使っています。
  • 設計上の分離:チェッカーは30分ごとに起動する systemd サービスで、専用の SQLite データベースに書き込みます。ダッシュボードはそのデータベースを読むだけで、自分で点検することはありません。
  • 自ら招いた露出のあと:ダッシュボードをサイトマップと robots.txt から外し、サービスの識別子をソースコードの外に移し、専用のサブドメインで Cloudflare Access の奥でのみ再公開しました。

まだ足りない点

  • ダッシュボードは非公開(意図的な設計)