第43章 透明な証明書
- 山崎行政書士事務所
- 5月7日
- 読了時間: 16分
午前七時三十五分。
第三会議室の大型モニターには、公式ドメイン棚卸し表が映っていた。
レジストリロック、有効。ネームサーバ変更、保留後キャンセル。移管コード、未発行。旧DNS支援アカウント、停止。旧イベントサブドメイン、無効化。旧訓練資料サイト、保全後停止。DNSSEC権限、棚卸し中。CAAレコード、確認中。類似ドメイン監視、開始。
昨日、会社は自分の名前の根を守り始めた。
三枝涼真は、少しだけ肩の力を抜いていた。
公式ドメインそのものを動かされることは、ひとまず防いだ。古いCNAMEもいくつか閉じた。イベント会社やWeb制作会社への確認も進んでいる。
だが、安心は長く続かなかった。
SOCから通知が来た。
Certificate Transparency AlertNew certificate issuedDomain: verify.suruga-ml.co.jpIssuer: Rapid Trust TLS CAObserved: 07:32 JST
三枝は、画面を凝視した。
当社の公式ドメイン配下だ。
しかし、そのサブドメインは作った覚えがない。
昨日、攻撃者が使った偽サイトは verify-suruga.jp。今朝の証明書は、当社公式ドメイン配下の verify.suruga-ml.co.jp。
三枝は、すぐにDNSを確認した。
現在、DNSレコードなし。
少なくとも、今は解決しない。
だが、証明書は発行されている。
三枝は、証明書透明性ログの詳細を開いた。
発行時刻。
午前七時二十九分。
SAN。
発行者。
Rapid Trust TLS CA。
検証方法。
DNS-01。
三枝は、息を止めた。
DNS-01。
ドメイン管理権限を持っていることを、DNSのTXTレコードで証明する方式だ。
つまり、誰かが一時的に _acme-challenge.verify.suruga-ml.co.jp のようなレコードを置いた可能性がある。
三枝は、DNS変更履歴を開いた。
そこに、短い痕跡があった。
午前七時二十六分。
TXT record added_acme-challenge.verify.suruga-ml.co.jp
午前七時三十一分。
TXT record deleted
操作アカウント。
dns-acme-bot-old
三枝は、椅子から立ち上がった。
「課長」
黒崎課長が振り返る。
「何だ」
「公式ドメイン配下のverify.suruga-ml.co.jpに証明書が発行されています。DNS-01です。旧ACMEボットがTXTを一時追加して、削除しています」
黒崎の顔が変わった。
「ネームサーバ変更は止めたのに」
「はい。権威DNSは動いていません。でも、DNSレコードを直接書ける旧ボットが残っていました」
山崎行政書士事務所の山崎が、会議室に入ってきた。
三枝は、画面を見せた。
「先生。今度は、証明書です。公式ドメイン配下にTLS証明書が発行されています」
山崎は、画面を見た。
そして、ホワイトボードへ向かった。
黒いペンで書く。
透明な証明書
その下に、もう一行。
証明書が発行されたことは、公式サイトであることを意味しない。
三枝は、その言葉を見た。
また、この構造だ。
有効な証明書。無効な真実。
だが今回は、当社公式ドメイン配下だ。
昨日より、一段深い。
午前七時五十分。
緊急会議が始まった。
望月社長、秋山法務総務部長、大石倉庫部長、久我真琴、山崎。
三枝は、現時点の事実を説明した。
「証明書透明性ログで、verify.suruga-ml.co.jp と check.suruga-ml.co.jp の証明書発行を検知しました。当社では、そのサブドメインを公式確認ポータルとして運用していません。DNS変更履歴上、旧ACMEボット dns-acme-bot-old が一時的にDNS-01用TXTレコードを追加し、証明書発行後に削除しています」
望月が聞いた。
「その証明書で偽サイトを作れるのですか」
久我が答えた。
「はい。DNSを向けられれば、ブラウザ上では鍵マークが出ます。しかも今回は、当社公式ドメイン配下の名前です。取引先からは非常に本物らしく見えます」
黒崎が言った。
「今はDNSレコードがないんだよな」
三枝は頷いた。
「はい。verify.suruga-ml.co.jp と check.suruga-ml.co.jp は現在解決しません」
久我が続けた。
「ただし、証明書は発行済みです。攻撃者が再度DNSを向けるか、古いCNAMEやDNS APIを使えば、本物らしいサイトを立てられます」
山崎が、ホワイトボードに整理した。
ネームサーバ変更:阻止DNS TXT一時追加:成功TLS証明書発行:成功Web誘導:現時点未確認
「攻撃者は、名前の権威そのものは奪えなかった。しかし、DNSレコードを一時操作し、証明書を取得しました」
秋山が言った。
「証明書透明性ログで見つかったから分かったのですね」
久我が頷いた。
「はい。証明書透明性ログは、発行された証明書を外から観測できます。これがなければ、気づくのが遅れたかもしれません」
山崎は、三枝に向けて言った。
「記録しましょう」
三枝は入力した。
07:50 Certificate Transparency Alertにより、verify.suruga-ml.co.jp、check.suruga-ml.co.jp のTLS証明書発行を検知。当社は当該サブドメインを公式運用していない。DNS変更履歴上、07:26にdns-acme-bot-oldがDNS-01検証用TXTを一時追加し、07:31に削除。証明書発行者Rapid Trust TLS CA。現時点で当該サブドメインのDNS解決なし。
保存。
午前八時十五分。
dns-acme-bot-old の詳細確認が始まった。
作成日。
四年前。
用途。
旧Webサイト群のTLS証明書自動更新。
所有者。
Web運用チーム。
外部関係者。
North Dock Web Studio。BrightEvent Creative。旧証明書更新支援会社。
状態。
Active。
権限。
DNS TXTレコード追加・削除。一部CNAME確認。CAA閲覧。ゾーン全体の読み取り。
MFA。
なし。
認証。
DNS APIトークン。
トークン名。
dns-api-acme-legacy
三枝は、画面を見ながら声を低くした。
「MFAなしです。DNS APIトークンでTXTを追加できます」
黒崎が言った。
「昨日、ネームサーバ変更は止めた。でも、ゾーン内のレコード操作が残っていた」
山崎が頷いた。
「権威DNSの入口を守っても、DNS APIの手が残っていた」
久我が言った。
「DNS-01検証では、TXTレコードを一時的に置ければ証明書が発行できます。Webサイトをまだ動かしていなくても、証明書だけ先に取れます」
秋山が言った。
「証明書が先に取られる、というのが怖いですね」
山崎は、ホワイトボードに書いた。
証明書発行権限=名前を証明する権限
そして続けた。
「DNS TXTを操作できる人は、ドメインの一部について証明書発行を可能にできます。これは強い権限です」
三枝は、未了事項台帳に追加した。
U-173 DNS APIトークン・ACMEボット棚卸し未了
責任者。
三枝・黒崎
期限。
本日中に緊急停止、七日以内に恒久管理
状態。
緊急対応中
時系列にも入力する。
08:18 dns-acme-bot-oldは旧Webサイト群のTLS証明書自動更新用。DNS TXT追加・削除権限を持ち、MFAなし、dns-api-acme-legacyトークンで認証。外部Web運用支援会社が関係していた可能性。DNS-01を通じた証明書発行権限として高リスク。
保存。
午前八時四十五分。
Blue Heronからメールが届いた。
件名は、Transparent。
本文は、短かった。
The certificate is public.So is your surprise.
証明書は公開されている。あなたたちの驚きもだ。
その下には、証明書透明性ログの画面が貼られていた。
三枝は、保全した。
山崎が言った。
「相手は、証明書透明性ログを見てこちらが気づいたことも想定している」
久我が頷いた。
「CTログは公開です。防御側も攻撃側も見られます。攻撃者は、発行を隠せないことを承知で、短時間で動くつもりだったかもしれません」
望月が言った。
「短時間で、取引先を偽サイトへ誘導する」
「はい」
久我は答えた。
「証明書を発行し、DNSを向け、メールを送って、数時間で収集する。CTアラートが遅れれば間に合う可能性があります」
山崎が言った。
「当社は、CT監視を正式運用に入れましょう」
三枝は入力した。
08:45 不明差出人より件名“Transparent”のメール受信。verify.suruga-ml.co.jpの証明書透明性ログを提示。“証明書は公開されている”と記載。攻撃者がCT公開性と短時間悪用を認識している可能性。対応方針:CT監視を公式ドメイン統制へ組み込む。
保存。
午前九時十分。
緊急封じ込めが実施された。
dns-acme-bot-oldの状態保全。DNS APIトークン保全。利用ログ保全。TXT追加・削除履歴保全。発行証明書詳細保全。CTログ保全。Rapid Trust TLS CAへの証明書失効要請準備。
その後。
dns-acme-bot-old: Disableddns-api-acme-legacy: Revoked
三枝は、CAへ証明書失効要請を送った。
証明書のシリアル番号。対象ドメイン。発行時刻。不正発行の疑い。DNS APIトークン悪用。当社公式運用なし。失効理由。
久我が言った。
「証明書失効は即時に反映されない場合があります。OCSPやCRL、ブラウザ動作にも差があります。失効要請と同時に、DNS側で当該サブドメインを無効にし、必要ならシンクホールします」
黒崎が答えた。
「verifyとcheckは、当社管理の安全な停止ページへ向けますか」
山崎が聞いた。
「向けるメリットは?」
久我が答えた。
「もし取引先がアクセスした場合、偽サイトではなく、当社の注意喚起ページを表示できます。ただし、正しく管理された証明書とサイトが必要です」
山崎は頷いた。
「では、当社公式証明書を使い、警告ページを置きます。入力欄は一切置かない」
望月が決めた。
「そうしてください」
三枝は、安全なレコードを作成した。
警告ページには、入力欄なし。
本文。
このページは、偽確認ポータル対策のための注意喚起ページです。問い合わせ番号、受領確認番号、メールアドレス等は入力しないでください。正式な確認は、公式サイトおよび登録済み窓口から行ってください。
三枝は入力した。
09:18 dns-acme-bot-oldおよびdns-api-acme-legacyを保全後停止・失効。Rapid Trust TLS CAへ不正発行疑い証明書の失効要請を準備・送信。verify.suruga-ml.co.jp、check.suruga-ml.co.jpは当社管理の注意喚起ページへ安全に向け、入力欄を設置しない方針。
保存。
午前九時四十五分。
Rapid Trust TLS CAから一次回答が届いた。
証明書は、正規のDNS-01検証に基づき発行された。検証時、対象TXTレコードは存在した。申請元アカウントは、公開CA側からは直接特定できない。ドメイン管理者からの失効要請を受け、優先対応する。失効確認は追って通知。
山崎が言った。
「CA側から見れば、DNSに正しい検証レコードがあった。だから発行した」
久我が頷いた。
「CAはドメイン管理権限を確認します。攻撃者がDNS APIを使えれば、CAは正規に発行します」
望月が言った。
「つまり、CAを責める問題ではない」
「はい」
山崎は答えた。
「当社のDNS APIトークン管理が問題です」
三枝は入力した。
09:47 Rapid Trust TLS CA一次回答。対象証明書はDNS-01検証時に正しいTXTレコードが存在したため発行。ドメイン管理者からの失効要請を受け優先対応予定。CA側では内容の公式性ではなくDNS検証に基づき発行。DNS APIトークン管理が主課題。
保存。
午前十時十五分。
North Dock Web Studioから追加回答が届いた。
dns-api-acme-legacyの値は、同社の旧プロジェクト手順書に残っていた。手順書は、旧案件メールと同じ共有ストレージに保存。三週間前に、同社退職者アカウントからアクセスがあった。本日朝、同じ退職者アカウントからACME設定メモへのアクセス試行があったが、同社側で調査開始後に停止済み。同社は他顧客でも旧ACMEトークン残存の可能性を調査中。
三枝は、画面を見て、静かに息を吐いた。
また、退職者アカウント。また、旧手順書。また、トークン。
山崎が言った。
「同じ型の攻撃が、ドメイン証明書発行に使われています」
三枝は入力した。
10:18 North Dock Web Studio追加回答。dns-api-acme-legacyは同社旧プロジェクト手順書に残存。三週間前に同社退職者アカウントからアクセス。本日朝もACME設定メモへのアクセス試行あり。同社側で当該アカウント停止。他顧客旧ACMEトークン残存も調査中。
保存。
黒崎が言った。
「外部支援会社が持つDNSトークンは、本当に危ないな」
山崎は頷いた。
「はい。DNSトークンは、ドメインの身分証発行権限を持ちます」
午前十時五十分。
Blue Heronからメールが届いた。
件名は、ACME old song。
本文は、一行。
Old automation sings beautifully.
古い自動化は、美しく歌う。
三枝は、保全した。
久我が言った。
「ACME自動化を揶揄していますね」
山崎が頷いた。
「自動更新は便利です。しかし、終了管理されなければ攻撃者の自動化になります」
三枝は、ホワイトボードに書いた。
自動化も、終了する。
山崎がそれを見て言った。
「良いです」
秋山が言った。
「契約終了時には、外部支援会社が持つ自動化トークンの削除証明が必要ですね」
「はい」
山崎は答えた。
「ACME、DNS API、CI/CD、Webhook、バッチ、署名テンプレート。すべて自動化の終了管理対象です」
三枝は入力した。
10:50 不明差出人より件名“ACME old song”のメール受信。旧ACME自動化の悪用を示唆。“古い自動化は美しく歌う”と記載。自動化トークン・DNS API・ACMEアカウントを終了管理対象化。
保存。
午前十一時三十分。
CT監視の正式運用設計が始まった。
対象。
suruga-ml.co.jp主要サブドメイン類似ドメイン取引先向け確認ドメイン候補過去イベントドメイン
監視内容。
新規証明書発行。SANに含まれる不審サブドメイン。発行CA。発行時刻。DNS解決有無。公式台帳との一致。異常時通知先。
山崎が言った。
「CTアラートは、誰が見るのですか」
三枝は答えた。
「情シスとSOCです」
山崎は首を横に振った。
「それだけでは足りません。広報と法務総務も必要です。偽サイトや公式性の問題は、取引先説明に直結します」
秋山が頷いた。
「法務総務も通知先に入ります」
広報担当も言った。
「公式サイトや偽ポータルの確認が必要なので、広報も入ります」
三枝は、通知先を設定した。
ただし、外部参加者なし。旧通知チャンネルではない。現行インシデント通知チャンネル。通知サプライチェーン台帳に登録。
山崎が確認した。
「通知先も管理してください。CTアラート自体が攻撃者に見られると、こちらが気づいたことを知られます」
三枝は頷いた。
「通知先は内部限定、閲覧ログありです」
入力。
11:38 CT監視正式運用設計開始。対象:suruga-ml.co.jp、主要サブドメイン、類似ドメイン、過去イベントドメイン等。通知先は情シス、SOC、広報、法務総務の内部限定チャンネル。通知サプライチェーン台帳へ登録。
保存。
午後零時二十分。
Rapid Trust TLS CAから、失効完了通知が届いた。
対象証明書。
状態。
Revoked。
三枝は、失効後に確認した。
OCSP応答。
Revoked。
ブラウザ確認は、隔離環境で。注意喚起ページは、当社正規証明書で表示。不正発行証明書ではなく、正規管理証明書を使用。
入力。
12:24 Rapid Trust TLS CAより、verify.suruga-ml.co.jp、check.suruga-ml.co.jpの不正発行疑い証明書失効完了通知を受領。OCSP応答Revoked確認。該当サブドメインは当社管理注意喚起ページへ安全に誘導。Evidence Chainへ追加。
保存。
少しだけ、会議室の空気が軽くなった。
また一つ、扉が閉じた。
午後一時十五分。
Blue Heronからメールが届いた。
件名は、Revoked again。
本文は、短い。
Certificates die quickly now.
証明書は、今やすぐ死ぬ。
三枝は、保全しながら小さく言った。
「そうです」
久我が少し笑った。
「いい反応です」
山崎は、淡々と答えた。
「保全しましょう」
三枝は入力した。
13:15 不明差出人より件名“Revoked again”のメール受信。不正発行疑いTLS証明書の失効に反応した可能性。“証明書は今やすぐ死ぬ”と記載。証跡保全。
保存。
午後二時。
証明書発行権限の棚卸しが進んだ。
ACMEアカウント。DNS APIトークン。Webサーバ証明書管理。CAAレコード。証明書更新ボット。外部Web制作会社。CDN。旧ホスティング。広報動画配信。取引先ポータル。
三枝は、一覧を見て言った。
「証明書の発行権限が、いろいろな場所にあります」
久我が頷いた。
「TLS証明書は、ただの暗号化ではありません。ドメイン名の支配を示すものとして、人に見られます。攻撃者が取れば、偽サイトの説得力が上がります」
山崎が言った。
「証明書発行権限は、会社名を名乗る権限の一部です」
秋山が頷いた。
「電子印や会社印と同じく、管理対象ですね」
三枝は、信頼根台帳に追加した。
証明書発行権限ACMEアカウントDNS APIトークンCAA許可CACT監視
保存。
午後三時三十分。
取引先向けに、偽確認ポータル対策の続報が出された。
内容は、慎重だった。
当社公式ドメイン配下に見える確認ページであっても、公式サイトに掲載された確認方法と一致しない場合は、情報を入力しないでください。当社は、verify.suruga-ml.co.jp、check.suruga-ml.co.jpを入力フォームとして運用していません。現在、同サブドメインには注意喚起ページのみを掲載しています。ブラウザの鍵マークや証明書が有効であることは、当社がそのページを公式運用していることを単独で示すものではありません。
営業部長が言った。
「かなり細かいですが、必要ですね」
山崎は頷いた。
「はい。昨日の鍵マーク、今日のTLS証明書。取引先にも、何を意味し、何を意味しないかを伝える必要があります」
望月が言った。
「強い証跡ほど、限界を説明する」
山崎は静かに頷いた。
三枝は、その言葉が何度も戻ってくるのを感じた。
午後四時二十分。
Blue Heronからメールが届いた。
件名は、No green lock。
本文は短い。
You make the lock boring.
鍵マークをつまらなくしたな。
三枝は、保全した。
広報担当が言った。
「つまらない方がいいです」
大石も頷いた。
「鍵マークで現場が動くわけじゃない」
山崎が言った。
「鍵マークは通信の安全を示します。会社の判断を示すものではない。そこを伝えられたのは大きいです」
三枝は入力した。
16:20 不明差出人より件名“No green lock”のメール受信。TLS証明書・鍵マークの意味を限定して説明したことに反応した可能性。“鍵マークをつまらなくした”と記載。証跡保全。
保存。
午後五時半。
North Dock Web Studioから、旧ACME関連の一次是正報告が届いた。
同社側で、旧プロジェクト共有メール停止。退職者アカウント停止。旧ACME手順書保全。DNS APIトークン記載資料のアクセス制限。他顧客への同型確認開始。
北原は、画面越しに言った。
「弊社の終了管理にも問題がありました。旧Web運用、DNS、ACMEの終了チェックリストを作ります」
山崎が言った。
「駿河ML側でも、外部Web/DNS支援終了時に、DNS APIトークン、ACMEアカウント、証明書、CNAME、CAA、CT監視を終了証明パックに入れます」
北原は頷いた。
「共同で確認します」
三枝は、外部Web/DNS支援終了証明パックを作成した。
DNS APIトークン削除ACMEアカウント停止発行済み証明書一覧証明書失効または引継ぎCAA確認CNAME削除外部ホスティング停止CT監視登録旧メール停止外部アカウント削除
保存。
午後七時。
その日の最終会議で、山崎はまとめた。
ホワイトボードには、今日の言葉が並んでいる。
透明な証明書証明書が発行されたことは、公式サイトであることを意味しない。証明書発行権限=名前を証明する権限自動化も、終了する。TLS証明書は通信の安全。会社の意思ではない。
山崎は言った。
「昨日はドメインの権威を見ました。今日は、その名前に証明書を発行する権限を見ました」
望月が頷いた。
「攻撃者は、当社の公式ドメイン配下に証明書を取ろうとした」
「はい」
久我が言った。
「DNS-01検証を使えば、Webサイトを持っていなくても証明書を取れます。DNS TXTを書ける権限は、高リスクです」
秋山が言った。
「契約終了時のDNS APIトークン削除が、非常に重要ですね」
黒崎が言った。
「ACMEボットも棚卸しします」
広報担当が言った。
「鍵マークを過信しない説明を続けます」
大石が言った。
「現場でも、公式っぽいサイトへ入力しないよう周知します」
三枝は、全員の発言を記録した。
また、会社は一つ意味を分解した。
証明書は、公式性そのものではない。
有効な証明書にも、限界がある。
午後八時四十五分。
Blue Heronから、その日最後のメールが届いた。
件名は、Transparent pain。
本文は、一行だけだった。
Transparency hurts both sides.
透明性は、両方を傷つける。
三枝は、保全した。
久我が言った。
「CTログは、防御側も攻撃側も見られる。発行は隠せない。攻撃者も、それを承知で使っています」
山崎が頷いた。
「透明性は、完全な防御ではありません。しかし、隠れた発行に気づくための証人です」
望月が言った。
「証人を増やす。昨日の時計と同じですね」
「はい」
山崎は答えた。
「証明書にも証人がいます。CTログです」
三枝は入力した。
20:45 不明差出人より件名“Transparent pain”のメール受信。証明書透明性ログが防御側・攻撃側双方に見えることを示唆。対応方針:CTログを証明書発行の外部証人として継続監視。
保存。
午後十時。
三枝は、一人でCTログの画面を見ていた。
発行済み証明書。失効済み証明書。公式証明書。不審証明書。
透明性ログには、世界中の証明書が流れている。
その中に、会社の名前が現れる。
いつ、どのCAから、どの名前に証明書が出たか。
それは、攻撃者にも見える。だが、防御側にも見える。
透明性は、完璧ではない。だが、見えないよりは強い。
三枝は、自分のノートに書いた。
透明であることは、守りではなく、見つけるための条件である。
保存。
山崎が、背後から言った。
「今日も良いですね」
三枝は振り返った。
「透明性って、怖いですね」
山崎は頷いた。
「はい。隠せないから怖い。しかし、隠れた攻撃を見つけるためには必要です」
「攻撃者にも見える」
「防御側にも見えます」
三枝は、CTログを閉じた。
午前零時。
三枝は、時系列表の最後に入力した。
00:00 Certificate Transparency Alertにより、verify.suruga-ml.co.jp、check.suruga-ml.co.jp に対する不正発行疑いTLS証明書を検知。dns-acme-bot-oldがDNS-01検証用TXTを一時追加・削除し、dns-api-acme-legacyトークンを用いて証明書発行を可能にした可能性を確認。dns-acme-bot-old、dns-api-acme-legacyを保全後停止・失効し、Rapid Trust TLS CAへ失効要請、証明書Revokedを確認。対象サブドメインは当社注意喚起ページへ安全に誘導。CT監視、ACME/DNS APIトークン棚卸し、外部Web/DNS支援終了証明パックを開始。
保存。
画面右下。
保存しました。
三枝は、自分のメモにも一行追加した。
証明書は、名前に鍵をかける。だが、鍵を作る手が古ければ、攻撃者も鍵を作る。
保存。
第三会議室の外では、倉庫が静かに動いていた。
荷物は、名前のある場所へ向かう。メールは、名前のあるサーバへ向かう。ブラウザは、名前のあるサイトへ向かう。
名前には、証明書が付く。
だが、証明書だけでは本物とは言えない。
誰がその名前を管理しているか。誰が証明書を発行できるか。どの鍵が古いまま残っているか。
会社は、名前に付く透明な証明書の奥を見始めていた。





コメント