再現と影響の示し方

レッスン 3-2

再現できない穴は、直すこともできません。

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

読み終えたら影響を最小の手で示す再現を書ける

この頁の流れ

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

穴を見つけても、再現できなければ直せません。許された範囲 (自分のラボ、契約で許された検査、CTF) で、影響を最小の手で示す再現を作り、深刻度を共通の言葉で見積もる方法を扱います。壊さない統制 (本番を触らない、データを消さない、範囲を文書に残す) と、再現を試験に残して戻らないようにするところまでを扱います。

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

なぜ再現が要るのか

穴を見つけても、「たぶん危ない」では直りません。直す人は、どの入力で、何が起き、どこまで届くのかを見ないと、手を打てません。だから、見つけた穴は再現にまとめます。再現は、直ったかどうかを確かめる物差しにもなります。

再現を作れるのは、許された範囲の中だけです。自分のラボ、契約で範囲を決めた検査、主催者が用意した CTF の問題。許しの無い相手に試すと、不正アクセス禁止法などに触れます。このレッスンは、許された範囲での作法だけを扱います。

エクスプロイトとは

穴 (脆弱性) そのものと、その穴を突いて実際に影響を出す手順やコードは、別の物です。後者をエクスプロイトと呼びます。脆弱性が「開いたままの窓」なら、エクスプロイトは「そこから入って影響を見せる手口」にあたります。手当たりしだいに広がるマルウェアとも違い、エクスプロイトは特定の穴に合わせて作られます。直す版がまだ無いうちに出回るエクスプロイトは、ゼロデイと呼ばれます。このレッスンで作るのは、自分のラボの中だけで動く、影響を最小の手で示すエクスプロイトです。

最小の再現とは

よい再現は、影響を最小の手で示します。認可の抜けた窓口なら、他人の文書が 1 件返ることを示せば、穴があることは伝わります。全部を書き出したり、消したりする必要はありません。最小にするほど、直す人に伝わりやすく、壊す危険も小さくなります。

影響を共通の言葉で

深刻度は、人によって感じ方が違います。そこで、共通の物差しを使います。FIRST の CVSS 4.0 は、攻めやすさ (どこから、どれだけの手間で突けるか) と、起きる影響 (秘密、正しさ、使えることのどれがどれだけ崩れるか) を決まった項目で測り、1 つの点数と深刻度に落とします。点数は深刻度をそろえる物差しで、直す順をそれだけで決める物ではありません。CVSS には、自分の環境でどれだけ影響が出るか、いま実際に狙われているかを足す項目もあり、順番はそこまで見て決めます。

入り口になりやすい所と、対策の全体像

CVSS 4.0 の攻めやすさの項目には攻撃元区分 (Attack Vector) があり、ネットワーク越しに届くか、隣接網からか、ローカルの操作が要るか、物理的な接触が要るかを区別します。入り口になりやすいのは、ネットワーク越しに届く側です。公開しているサーバーの古い部品 (ウェブサーバーやその上で動くソフト) や、メールの添付・悪いサイトを通してブラウザや文書ソフトの穴を突く手口が典型です。ローカルの操作が要る穴は、先に別の手口で足場を得てから使われることが多く、権限昇格のレッスンで扱います。

守る側の対策は、穴を 1 つずつ塞ぐことだけでは終わりません。更新をすぐ全部に当てるのは現実には難しいので、優先を付けます。CISA の KEV (Known Exploited Vulnerabilities) カタログは、実際に悪用が確認された脆弱性だけを載せた一覧で、載った脆弱性から先に直すよう勧めています。載っているかどうかを確かめるには、持っている資産の棚卸し (偵察のレッスンで扱った攻撃面の洗い出し) が先に要ります。更新をすぐ当てられない機器は、WAF (ウェブの通信を見て怪しい形を止める装置) や EDR (端末の動きを見て怪しい振る舞いを止める仕組み) で一時しのぎをしながら、使っていない機能やサーバーを止めて攻撃面そのものを減らすことも効きます。ただし WAF も EDR も、知らない手口や正規の操作に見える手口はすり抜けます。見張り (ログでの見え方は次の節) と組み合わせ、1 つの対策で守り切ろうとしないことが大事です。

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

ラボの中で、認可の抜けた窓口を例に比べます。Python に付いている物だけで動き、外とは通信しません。文書には持ち主 (owner) があるものとします。

穴そのもの

脆いコード 持ち主を確かめない

Python

def get_doc(db, user, doc_id):
    return db.docs[doc_id]
直したコード 持ち主だけに返す

Python

def get_doc(db, user, doc_id):
    doc = db.docs[doc_id]
    if doc.owner != user:
        raise PermissionError(doc_id)
    return doc

脆い方は、誰が頼んでも、番号さえ合えば文書を返します。直した方は、頼んだ人が持ち主でなければ断ります。穴はこの 1 行の有無です。

実証のしかた

脆いコード 壊して示す

Python

def prove(db):
    for i in list(db.docs):
        del db.docs[i]  # 全部消して「書けた」と言う
直したコード 最小で示す

Python

def prove(db):
    # alice で、bob の文書 (2) が読めることだけ示す
    return get_doc(db, "alice", 2)

脆い方の実証は、穴があることは示せても、データを壊します。本番で同じことをすれば、実証のつもりが被害そのものです。直した方は、他人の文書が 1 件返ることだけを、読み取りで示します。影響は伝わり、何も壊れません。

ログでの見え方と検知

守る側は、再現の試みと、本物の悪用を、記録から見分けます。見るのは、次の 3 つです。

見る物なぜ効くか
持ち主でない利用者の参照認可の抜けは、他人の番号への参照として残る
番号を順にたどる動き連番での参照は、穴を探す動きの典型
1 件の読み取りか、大量の取得か最小の確認と、持ち出しとを量で分けられる

許された検査では、範囲と時間帯を先に守る側に伝えておきます。そうすれば、記録に出た動きが検査か悪用かを、守る側が切り分けられます。

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

自分のラボの中だけで行います。本番や、他人の機械には向けません。

  1. 作業用のフォルダに、文書を 2 件持つ小さなデータを作る。1 件は alice、1 件は bob の持ち物にする
  2. 脆い get_doc を置き、alice で bob の文書が返ることを確かめる。これが最小の再現になる
  3. 再現は読み取りだけにし、消す・書き換える・大量に取ることはしない
  4. 関数を直したコードに置き換え、同じ再現が PermissionError になることを確かめる
  5. その再現を試験として残し、穴のあるコードに戻すと試験が落ちることを確かめる
  6. 影響を CVSS の項目で 1 文にまとめ、再現の手順と、守った範囲 (本番を触らない、データを消さない) を文書に残す
  7. 終わったら、作業用のフォルダごと消す
穴が塞がれたことを固める試験

Python

def test_other_users_doc_blocked(db):
    with pytest.raises(PermissionError):
        get_doc(db, "alice", 2)  # 2 は bob の文書

def test_owner_can_read(db):
    assert get_doc(db, "bob", 2).owner == "bob"

試験は「他人の文書は読めず、持ち主は読める」ことを固定します。最小の再現がそのまま、戻り防止の試験になります。

関わる事例

三菱電機では、ウイルス対策のサーバーの、まだ公開されていなかった脆弱性を突かれ、海外から国内へと侵入が広がって情報が流出しました。未知の穴でも、守る側が影響の範囲を見積もれるかで、その後の動きが変わります。

Equifax では、古いポータルに穴が残ったまま放置され、突かれました。穴があることが分かっていても、どこまで届くかを再現で示せなければ、直す優先順位は上がりません。見つけた穴を、壊さずに、影響の分かる形で届けることが、直す動きを早めます。

確認クイズ

1 問目

許された検査で、認可の抜けた窓口を見つけました。影響の示し方として合うのはどれですか。

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

2 問目

見つけた穴の深刻度を、直す人に伝えたい。どうするのがよいですか。

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

説明課題

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

  • 影響を最小の手で示す再現を、どう作るか
模範解答を見る

許された範囲のラボで、穴を突く最小の操作を 1 つに絞る。認可の抜けなら、他人の文書が 1 件読めることを読み取りだけで示し、消す・書き換える・大量に取ることはしない。その再現を試験に残し、影響は CVSS の項目で 1 文にまとめて、守った範囲とともに文書に残す。

一次資料

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

次へ

次のレッスンは「権限昇格」です。1 つのアカウントから、手元の VM でどこまで権限を上げられるかを再現し、塞ぐ方法を扱います。

次のレッスン 3-3 権限昇格

このレッスンにつながる物

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

前のレッスン 3-1 偵察と攻撃面の洗い出し

学んだことを次につなげる

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

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