偵察と攻撃面の洗い出し

レッスン 3-1

攻撃面は、自分が把握しているより広いものです。

目安 60 分 トラック 3 攻撃と検証の 1 本目

読み終えたら自分のドメインの資産を、公開の記録から洗い出せる

この頁の流れ

  1. 1なぜ広く開くのか
  2. 2脆いコードと直したコード
  3. 3ログでの見え方と検知
  4. 4直し方と確かめ方
  5. 5関わる事例
  6. 6確認クイズ
  7. 7説明課題
  8. 8一次資料
  9. 9次へ

攻め手は、まず相手の攻撃面を調べます。守る側も同じ目で、自分のドメインだけを対象に、公開の記録 (証明書の記録、DNS) から資産を洗い出せます。立てたまま忘れたサーバー、台帳に無い名前を公開の記録から見つけ、閉じるか台帳に載せるところまでを扱います。

出典を確かめた日 2026年10月27日

なぜ広く開くのか

攻め手が最初にすることは、相手を調べることです。どんな名前のサーバーがあり、どの画面が外から開いていて、どのソフトが動いているか。狙いを定める前に、入れそうな入口を数えます。

守る側が不利なのは、自分の攻撃面 (アタックサーフェス) を自分が一番よく知っているとは限らない点です。試しに立てたまま忘れたサーバー、担当が変わって引き継がれなかった名前、昔のキャンペーンの頁。台帳に無い物ほど、更新も見張りも漏れます。だから守る側も、攻め手と同じ目で、自分のドメインだけを公開の記録から洗い出します。

証明書の公開記録から拾う

証明書の発行は、公開の記録に残ります。これを証明書の記録 (Certificate Transparency、CT) と呼びます。RFC 9162 は、発行された証明書を後ろにしか足せない記録に積み、誰でも見張れるようにすると定めています。記録は不正な発行を止めはしませんが、見張っていれば気づけるようにします。

守る側は、自分のドメインに対して出た証明書を記録から探します。覚えのない名前の証明書が出ていれば、立てたまま忘れた資産か、不正な発行の疑いです。crt.sh のような記録の検索で、自分のドメインの *.example を引くだけで、把握していなかった名前が並ぶことがあります。

把握と台帳のずれ

OWASP の Web Security Testing Guide は、検査を自分のアプリの偵察から始めます。公開されている頁、使っている技術、外から見える構成を集めてから、弱い所を探す順です。

経済産業省の ASM 導入ガイダンスは、外から把握できる情報を使って自組織の IT 資産を見つけ、管理する取り組みを ASM (アタックサーフェスマネジメント) と呼んでいます。公開されているサーバーやネットワーク機器の情報を集めて分析し、不正侵入の経路になりうる所を把握するものです。守る側の偵察は、この棚卸しそのものです。

脆いコードと直したコード

ラボの中の小さな関数で比べます。Python に付いている物だけで動き、外とは通信しません。公開の記録から集めた名前は、あらかじめ集合として渡すものとします。

立てたら台帳に残すか、残さないか

脆いコード 立てたホストを台帳に残さない

Python

def deploy_host(name):
    provision(name)
    return name
直したコード 立てたら資産台帳に追記する

Python

def deploy_host(name, ledger):
    provision(name)
    ledger.add(name)
    save(ledger)
    return name

脆い方では、ホストは立つのに、どこにも記録が残りません。立てた人が覚えている間はよくても、人が替われば誰も知らない入口になります。直した方は、立てた瞬間に台帳へ足すので、把握と実体がずれません。

覚えている分だけ点検するか、記録と突き合わせるか

脆いコード 覚えている分だけ点検する

Python

KNOWN = {"www", "shop"}

def audit():
    for h in KNOWN:
        check(h)
直したコード 公開記録と台帳の差を出す

Python

def audit(ledger, observed):
    forgotten = observed - ledger
    for h in forgotten:
        report(h)
    return forgotten

脆い方は、頭の中にある名前しか点検しません。忘れている物は、点検の対象にすら入りません。直した方は、公開の記録 (observed) と台帳 (ledger) の差を取るので、台帳に無いのに外から見える名前が、そのまま出てきます。

ログでの見え方と検知

守る側の偵察は、一度きりで終わりません。新しい資産が勝手に増えるので、定期に回します。見張るのは、次の 3 つです。

見る物なぜ効くか
自分のドメインに出た新しい証明書覚えの無い発行は、忘れた資産か不正な発行の疑い
台帳に無いのに応答するホスト立てたまま忘れた入口が見つかる
外から開いている管理用の画面公開する気の無い物が露出していないか

証明書の記録は、攻め手も守る側も同じ物を見られます。先に見張って閉じておけば、攻め手が同じ名前を拾っても、そこにはもう入口がありません。

直し方と、直ったことの確かめ方

自分のドメインと、自分の PC の中だけで行います。他人のドメインや、許しの無いサーバーには向けません。

  1. 作業用のフォルダに、把握しているホスト名を書いた台帳のファイルを作る
  2. 自分のドメインについて、証明書の記録と DNS から見える名前を集め、1 つの集合にする
  3. 台帳に、わざと 1 つだけ足りない名前 (立てたまま忘れた想定) を作っておく
  4. 台帳と、集めた名前の差を取り、忘れた名前が出てくることを確かめる
  5. 出てきた名前は、まだ要るなら台帳に載せ、要らないなら閉じる
  6. 下の試験を足し、差を取る所を省くと忘れた名前が出なくなることも確かめる
  7. 終わったら、作業用のフォルダごと消す
忘れた資産が差分で出ることを固める試験

Python

def test_finds_forgotten():
    ledger = {"www", "shop"}
    observed = {"www", "shop", "old-blog"}
    assert audit(ledger, observed) == {"old-blog"}

def test_nothing_forgotten_is_empty():
    s = {"www", "shop"}
    assert audit(s, s) == set()

試験は「台帳に無いのに外から見える名前は、必ず差分に出る」ことを固定します。あとで台帳の更新が止まっても、差分が増えることで気づけます。

関わる事例

把握から漏れた資産が入口になった例が並びます。Equifax では、オンラインの苦情受付の古いポータルが穴の残ったまま残り、そこを突かれました。見張りの装置も証明書切れで止まっていて、気づくのが遅れました。古い資産が台帳からも見張りからも漏れていたことが、被害を大きくしています。

DigiNotar では、外部に置かれた古いウェブサーバーから侵入され、偽の Google 証明書が作られて、イランの利用者が盗み見られました。忘れられた外向きのサーバーが、信頼の起点である認証局への入口になった例です。どちらも、まず自分の攻撃面を洗い出せていれば、閉じられたはずの入口でした。

確認クイズ

1 問目

自分の組織の攻撃面を洗い出したい。最初にすることとして合うのはどれですか。

答えだと思う選択肢を押すと、その場で正誤と理由が開きます。

2 問目

証明書の記録を見張ると、守る側にとって何が分かりますか。

答えだと思う選択肢を押すと、その場で正誤と理由が開きます。

説明課題

次のことを、自分の言葉で 3 行にまとめてください。書けたら、このレッスンは修了です。

  • 自分のドメインの資産を、公開の記録からどう洗い出すか
模範解答を見る

証明書の記録と DNS から、自分のドメインに見える名前を集める。把握している資産の台帳と突き合わせ、台帳に無いのに外から見える名前を差分として出す。出てきた名前は、まだ要るなら台帳に載せ、要らないなら閉じる。これを定期に回し、忘れた入口を残さない。

一次資料

どれも 2026年10月27日に開いて、題と中身を確かめました。

次へ

次のレッスンは「再現と影響の示し方」です。洗い出した入口に穴が見つかったとき、許された範囲で最小の再現を作り、影響を見積もる方法を扱います。

次のレッスン 3-2 再現と影響の示し方

トラック 3 攻撃と検証の中で

ゆめさくセキュリティは、攻撃の仕組みを知り、自分の PC の中で壊して直し、守る側の判断を身につけるための学びの場です。

ラボはすべて自分の PC の中 (127.0.0.1) で閉じます。自分が管理していない相手に試すことは扱いません。