監査して初めて気づく:誰も自分が監視されていることを知らない
この1年で10台以上のサーバーのセキュリティ監査を行ってきた結果、ほとんどのサーバーに同じ脆弱性があることに気づいた――SSHがポート22番でインターネットに公開されたまま、デフォルトの認証情報が変更されておらず、ファイルパーミッションが散乱している。しかしより深刻なのは、いつから侵入されていたのか誰も知らないという事実だ。サーバーログにはシンガポールやオランダのIPからの不審な接続が溢れ、設定ファイルが午前3時に読み取られていても、誰も気づかない。発見した時にはすでに被害が出た後だった。
これが筆者がCanarytokensを使い始めた理由だ。ファイル、URL、メールに埋め込む情報の罠で、ハッカーが触れた瞬間――数週間後ではなく、数秒以内に警告を受け取れる。
Canarytokensとは何か、なぜ機能するのか
「canary(カナリア)」という名前は19世紀の炭鉱夫の慣習に由来する。坑道にカナリアを持ち込み、一酸化炭素が蓄積すると人間に害を及ぼす濃度に達する前に鳥が死ぬ――炭鉱夫はそれを見て退避できた。シンプルだが命を救う仕組みだ。
Canarytokensも同じ原理で動作する。ファイル、URL、またはメールに「罠」を仕掛ける。ハッカーがそのファイルを開いたり、URLにアクセスしたり、その情報を使ったりすると――正確なIPアドレスとタイムスタンプ付きで即座にメール通知が届く。
従来のIDS/IPSと比べて、Canarytokensにはいくつかの違いがある:
- ソフトウェアのインストール不要――2分でオンラインでトークンを作成し、ファイルに貼り付けるだけ
- 誤検知ゼロ:実際にアクセスがあった時だけ通知され、誤報は一切ない
- 攻撃者がファイアウォールを突破してネットワーク内部にいる場合でも機能する
- 完全無料で
canarytokens.orgから利用可能――クレジットカード不要、トークン数の制限なし
主なCanarytokenの種類
- HTTP URL ― 囮のURL、アクセスされると通知
- DNS Token ― 偽ドメイン、名前解決されると通知
- Word/Excel Document ― 隠しトラッキングピクセル付きOfficeファイル、開かれると通知
- PDF Document ― Wordと同様
- AWS API Key ― 偽のキー、AWS CLIで試行されると通知
- Custom Image ― メールやWebページに埋め込む画像、ロード時に通知
実践:Canarytokenの作成とデプロイ手順
ステップ1:canarytokens.orgでトークンを作成する
https://canarytokens.org/generateにアクセスする。アカウント不要、メール認証不要。インターフェースはシンプルだ:
- トークンの種類を選択――まずはWeb bug / URL tokenから始める
- 通知を受け取るメールアドレスを入力
- リマインダーノートを追加――どこに設置したトークンか明記する(例:「/var/backups/credentials.txtのバックアップファイル」)
- Create my Canarytokenをクリック
すぐに次のような形式のURLが発行される:
https://canarytokens.org/articles/about/PFhzfmMyXXXXXX/contact.php
ステップ2:偽の認証情報ファイルにトークンを埋め込む
最も効果的な方法は、重要に見えるファイルを作成してURLトークンを埋め込むことだ。ハッカーが最初に漁る場所に設置する:
# バックアップディレクトリに罠ファイルを作成
cat > /var/backups/credentials_backup.txt << 'EOF'
# Database Credentials Backup — 共有禁止
# 最終更新:2024-01-15
[Production DB]
host: prod-db.internal
user: admin_backup
password: [REDACTED - 内部wikiを参照]
[確認URL - 内部専用]
https://canarytokens.org/articles/about/PFhzfmMyXXXXXX/contact.php
[メモ]
- パスワードは90日ごとにローテーション
- 担当者:[email protected]
EOF
chmod 600 /var/backups/credentials_backup.txt
ハッカーがこのファイルを見つけて「確認」URLにアクセスしようとした瞬間、IP、User-Agent、正確なタイムスタンプ付きの警告メールが届く。
ステップ3:.envまたはconfigファイルに罠を仕掛ける
これは実際に最も効果的だと感じたテクニックだ。サーバーに侵入した攻撃者はほぼ必ずすぐにこれらのコマンドを実行する:
find / -name "*.env" 2>/dev/null
find / -name ".env*" 2>/dev/null
cat /home/*/.env
トークンを埋め込んだ偽の.env.backupファイルを作成する:
# /home/deploy/.env.backup — 罠ファイル
DATABASE_URL=postgres://admin:supersecret@prod-db:5432/app
SECRET_KEY=sk_live_abc123xyz789...
INTERNAL_API_ENDPOINT=https://canarytokens.org/articles/about/TOKEN_HERE/contact.php
REDIS_URL=redis://cache:6379/0
STRIPE_SECRET_KEY=sk_live_51Hxxxx...
攻撃者の自動スクリプトはファイル内で見つかったURLを全てcurlする傾向がある――次の行動に移る前に、警告が届く。なお、実際の認証情報がGitリポジトリに混入しないよう、本物の.envファイルは必ず別途保護しておくことも忘れずに。
ステップ4:Word Documentで罠を作成する
MS Word Documentタイプのトークンは、内部に隠しトラッキングピクセルを含む.docxファイルを生成する。誰かが開くと、WordがCanarytokensのサーバーにコールバックし――IPアドレス付きの通知が届く。被害者のマシンがWindowsでインターネット接続中であっても同様だ。
魅力的な場所に罠ファイルを設置する:
cp server_passwords_master.docx /home/admin/Documents/
cp employee_salaries_2024.xlsx /var/www/html/private/
cp vpn_accounts_backup.docx /opt/backups/docs/
ファイル名は魅力的に見せる必要がある:passwords_list.docx、credentials_master.xlsx、aws_keys_backup.docx。どんなハッカーでも見つけたらすぐ開きたくなる名前だ。
ステップ5:DNSトークンでより深いレイヤーをカバーする
DNSトークンはHTTPよりも低いレイヤーで動作する――ブラウザを持たないツールでも、接続を試みる際にDNSルックアップが発生する。これが通常のURLトークンより回避しにくい理由だ。
DNSトークンを作成すると、abc123xyz.canarytokens.orgのような形式のサブドメインが発行される。configファイルに埋め込む:
# /etc/app/database.conf — 罠ファイル
[primary]
host = prod-db.abc123xyz.canarytokens.org
port = 5432
name = production_db
user = db_admin
[replica]
host = replica.abc123xyz.canarytokens.org
port = 5432
攻撃者がこのconfigをインポートしてpingを試したりアプリを起動したりすると――接続が確立される前に、DNSルックアップが通知をトリガーする。
ステップ6:Canarytokensをセルフホストする(上級者向け)
プライバシーやコンプライアンス上の理由から外部サービスを使いたくない場合、CanarytokensはセルフデプロイのためのDockerイメージを提供している:
git clone https://github.com/thinkst/canarytokens
cd canarytokens
# 設定
cp templates/switchboard.env.example switchboard.env
nano switchboard.env
# 入力:CANARY_DOMAINS=yourdomain.com
# 入力:CANARY_NXDOMAINS=yourdomain.com
# 入力:[email protected]
docker-compose up -d
セルフホストは、データを完全に制御したい企業環境に適している――トリガー情報をサードパーティのサーバーに送信したくない場合に有効だ。
実際の通知はどのように見えるか
トークンがトリガーされると、数秒でメールが届く:
Subject: [Canarytoken Alert] Your token has been triggered!
Token: Web bug / URL token
Reminder: credentials_backup.txt in /var/backups/
Time: 2024-01-20 03:47:22 UTC
IP Address: 45.33.32.156
ISP: DigitalOcean, LLC
Location: Singapore, SG
User-Agent: curl/7.68.0
シンガポールのIP、午前3時、ブラウザではなくcurlを使用。これ以上の証拠は不要だ。すぐに行動できる情報が揃っている:IPのブロック、認証情報の失効、そのタイムスタンプ周辺のアクセスログの確認とインシデント調査。
まとめ:15分のセットアップで1年間の監視
CanarytokensはファイアウォールやIDSの代替ではない。しかし、それらが見逃す最大の盲点を埋めてくれる:攻撃者がすでに内部に侵入して資産を漁っているときの警告だ。
重要なサーバーごとに最低4〜5個のトークンを設置することを推奨する:
- 権限の高いユーザーのホームディレクトリに偽の
.env.backupファイルを1個 /var/backups/または/opt/backups/に認証情報ファイルを1個- Documents/sharedディレクトリに魅力的な名前のWord documentを1個
- あまり使われないが見つけやすいconfigファイルにDNSトークンを1個
- 内部リポジトリのREADMEまたはNOTESファイルにHTTPトークンを1個
セットアップは15〜20分、完全無料。誰かが午前3時にトークンをトリガーして即座に通知が届いたとき――3週間後に侵害を発見するのではなく――これがなぜ新しいサーバーを受け取ったときに真っ先にデプロイするものなのか、実感できるだろう。

