レッスン 4-5

本番で初めて動く体制は、動きません。

目安 60 分 トラック 4 検知と対応の 5 本目

読み終えたら1 時間の演習を回し、直すことを 3 つ出せる

この頁の流れ

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

机上演習 (インシデントの場面を机の上で進め、役割と判断を話し合って確かめる訓練) を、1 時間で回す方法を扱います。目的の決め方、場面と状況の付与の作り方、役割、判断の記録、ふりかえりから直すことを 3 つ出すまでを、ランサムウェアの場面を例に進めます。

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

なぜ通るのか

対応の手順書はあります。連絡先の一覧も、役割の表もあります。それでも本番の朝、手順書の連絡先は 2 年前に辞めた人で、だれが外部の調査会社を呼ぶかを決めていた人は休みで、メールは止めてしまったので手順書そのものが開けません。

手順書は、読まれるだけでは確かめられません。英国会計検査院は、WannaCry の時、国の保健省は国と地域の組織の役割を決めた計画を作っていたものの、地域の段では試していなかったため、NHS は何をすべきかがはっきりせず、だれが対応を率いるかもすぐには決まらなかったと報告しています。机上演習は、その「試していない」を、本番の前に机の上で見つけるための訓練です。

机上演習とは

NIST SP 800-84 は、机上演習を、役割を持つ人が集まり、ある緊急の場面での自分の役割と対応を話し合う、話し合いだけの演習と説明しています。進行役が場面を示して問いを投げ、役割、責任、連携、判断について話し合いが進みます。機材や人を実際に動かすことはありません。

種類すること向く時
机上演習場面を話し合いで進め、判断と役割を確かめる手順書を作ったあと、体制が変わったあと
機能の演習模した環境で、実際に手を動かして役割を果たす机上演習で穴を埋めたあと
全体の演習本物に近い形で、複数の組織が一緒に動く業界や地域での連携を確かめる時

NIST は、机上演習を、計画の中身が非常時に本当に実行できるかを確かめる、費用の少ない方法としています。所要は聞き手や目的によって変わり、2 から 8 時間ほどとしていますが、初めての回は、目的を絞って 1 時間で回すほうが、続けやすく、直すことも絞れます。

目的を先に決める

演習の目的は、場面より先に決めます。目的が無いと、話し合いが盛り上がっても何を確かめたのかが残りません。目的は「確かめられる文」で書きます。

悪い目的確かめられる目的
ランサムウェアへの意識を高める暗号化に気づいてから 15 分以内に、対応の責任者を 1 人決められるか
連絡体制を確認するメールが使えない時に、役員と外部の調査会社へ連絡が届く手段があるか
控えを確認する控えがどこにあり、だれが切り離すかを、その場で答えられるか

場面と状況の付与

場面は、一度に全部を見せず、時刻つきの小さな知らせ (状況の付与、インジェクト) に分けて順に出します。知らせごとに、参加者に決めてほしいことを 1 つ用意します。IPA が公開している机上演習の教材も、過去の被害の例を参考にしたランサムウェアの場面で、対応の一連の流れを順に進める作りです。

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

演習の記録と、ふりかえりの結果を、小さなコードで比べます。Python に付いている物だけで動きます。演習の記録係が使う道具の、最小の形です。

話したことを書くか、判断を書くか

脆いコード 話したことを、そのまま並べる

Python

notes = []

def note(text):
    notes.append(text)
直したコード だれが、何を、なぜ決めたかを欄に分ける

Python

from dataclasses import dataclass

@dataclass
class Decision:
    t: str
    who: str
    what: str
    why: str
    known: str

def missing(decisions):
    return [d for d in decisions if not (d.who and d.why)]

脆い方では、「控えをどうするか話した」とは残っても、だれが決めたのか、なぜそう決めたのか、その時に何が分かっていたのかが残りません。直した方は、演習の中の時刻 (t)、決めた役 (who)、決めたこと (what)、理由 (why)、その時点で分かっていたこと (known) を欄に分けます。missing は、決めた人か理由が空の判断を拾います。空の欄が、そのまま体制の穴の候補になります。

反省を並べるか、直すことを決めるか

脆いコード 気づいたことを並べて終わる

Python

lessons = [
    "連絡先の一覧が古い",
    "控えの置き場をだれも知らない",
]
直したコード 担当、期限、確かめ方を決める

Python

from dataclasses import dataclass

@dataclass
class Fix:
    what: str
    owner: str
    due: str
    check: str

def open_items(fixes):
    return [f for f in fixes
            if not (f.owner and f.due and f.check)]

脆い方の反省は、次の演習でも同じ形で出てきます。だれが、いつまでに、どう確かめて直すのかが無いからです。直した方は、直すことごとに担当 (owner)、期限 (due)、直ったことの確かめ方 (check) を持たせ、どれかが空の物を open_items で拾います。

ログでの見え方と検知

演習の記録そのものが、体制の穴を映します。次は、ランサムウェアの場面で 1 時間の演習をした時の判断の記録です。

時刻決めた役決めたこと理由
09:05情報システム暗号化を確認、サーバーを切り離す広がりを止める
09:12(空き)対応の責任者を決める(空き)
09:20総務社内へメールで知らせるいつもの手順
09:31情報システム控えを切り離す上書きを止める
09:40(空き)警察と調査会社に連絡する(空き)

09:12 と 09:40 は、だれも決めていません。09:20 は、暗号化でメールが止まっている場面なのに、いつもの手順でメールを使おうとしています。こうした行が、直すことの候補になります。

見る物何の穴か
決めた人が空の判断役割の表に、その判断の持ち主がいない
理由が空の判断手順書に、判断のよりどころが書かれていない
知らせから判断までの待ちが長い決める人に情報が届く道が無い
同じ問いに、役ごとに違う答え手順書が部署ごとに食い違っている
止まっているはずの道具を使う判断本番の不自由さを、手順書が見込んでいない

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

1 時間の演習を、次の流れで回します。参加者は、決める人、情報システム、総務か広報、記録係、進行役の 5 人ほどです。実際のシステムには触りません。

  1. 目的を 3 つ、確かめられる文で書く (上の表の右の列の形)
  2. 場面を 1 つ選び、時刻つきの知らせを 4 つ作る。知らせごとに、決めてほしいことを 1 つ書く
  3. 進行役が知らせを 1 つずつ読み、参加者が話し合って決める。記録係は、決めるたびに Decision の欄を埋める
  4. 知らせを出し切ったら、10 分のふりかえり (ホットウォッシュ) で、目的ごとに確かめられたかを話す
  5. 記録の空き欄と、ふりかえりで出た物から、直すことを 3 つ選び、Fix の欄をすべて埋める
  6. 下の試験で空き欄が 0 であることを確かめ、次の演習の日に、直すことの確かめ方を 1 つずつ通す
1 時間の進め方の例

記録

00-05 目的と場面と役割の説明、本番のシステムには触らないことの確認
05-15 知らせ 1 受注の画面が開かない、ファイルの名前が替わっている
15-25 知らせ 2 社内のメールが使えない、取引先から問い合わせが来た
25-35 知らせ 3 控えのサーバーにも暗号化の跡がある
35-45 知らせ 4 攻撃者からの連絡と、記者からの問い合わせ
45-55 ふりかえり、目的ごとに確かめられたか
55-60 直すことを 3 つ決め、担当と期限を入れる
判断と直すことに空き欄が無いことを確かめる試験

Python

def test_every_decision_has_owner_and_reason():
    ds = [
        Decision("09:05", "情報システム", "切り離す", "広がりを止める", "暗号化を確認"),
        Decision("09:12", "", "責任者を決める", "", "暗号化を確認"),
    ]
    assert [d.t for d in missing(ds)] == ["09:12"]

def test_every_fix_has_owner_due_check():
    fixes = [
        Fix("連絡先の一覧を直す", "総務", "11-30", "電話で 3 件通す"),
        Fix("控えの置き場を書く", "", "", ""),
    ]
    assert [f.what for f in open_items(fixes)] == ["控えの置き場を書く"]

1 つ目の試験は、空き欄のある判断を拾えることを、2 つ目の試験は、担当や期限の無い直すことを拾えることを確かめます。演習の本番では、どちらも 0 件になるまで直すことの欄を埋めます。

関わる事例

計画はあっても試していなかったことが、初動を遅らせた例です。英国会計検査院によると、WannaCry が広がった2017年5月12日、NHS イングランドが重大インシデントと宣言したのは午後4時で、自分たちが調整の窓口として動くと決めたのは午後6時45分でした。国のサイバー攻撃への対応の手引きが無いまま、地域の組織は、保健の部門の内と外のばらばらの宛先に被害を知らせています。

連絡の道も止まりました。多くの地域の組織は、感染したか、念のためにメールを止めていたため、国の組織とメールで連絡できませんでした。現場では、個人の携帯電話とメッセージのアプリで情報を回していたと報告されています。メールが止まる場面は、机上演習で最初に試す価値のある知らせの 1 つです。

前の「インシデント対応」のレッスンで扱ったランサムウェアの事例も、場面の材料になります。例外になっていた多要素認証、上書きされた控え、止めるかどうかの判断を、知らせの形に直して使います。

確認クイズ

1 問目

初めて机上演習を開きます。目的として、あとで確かめられる形になっているのはどれですか。

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

2 問目

演習のふりかえりで、「連絡先の一覧が古い」という気づきが出ました。次の演習までに直る形にするには、何を足しますか。

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

説明課題

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

  • 自分のチームで 1 時間の机上演習を開くとしたら、目的を 1 つ、知らせを 1 つ、記録に残す欄を挙げ、そこから直すことをどう決めるか
模範解答を見る

目的は、メールが使えない時に、役員と外部の調査会社へ 15 分以内に連絡が届くかとする。知らせは「社内のメールが止まり、取引先から電話で問い合わせが来た」とし、記録係は時刻、決めた人、決めたこと、理由、その時に分かっていたことを残す。決めた人か理由が空の行を直すことの候補にし、3 つ選んで担当、期限、確かめ方を入れる。

一次資料

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

次へ

次のレッスンは「安全な開発の流れ」です。設計の段で決まる守りを、開発の流れのどこに組み込むかを扱います。

次のレッスン 5-1 安全な開発の流れ

トラック 4 検知と対応の中で

前のレッスン 4-4 証拠の調べ方の基礎

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

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

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