測り方と直し方

レッスン 5-4

測れない物は、直せません。

目安 60 分 トラック 5 設計と制度の 4 本目

読み終えたら測ってはいけない数と、決めるのに使う数を分けられる

この頁の流れ

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

MTTR (平均修復時間) と、気づくまでの時間 (MTTD)、直すまでの日数を、守りの取り組みを決めるための数としてどう測るかを扱います。MTTR と MTBF の違いと稼働率の式、直っていない物を落とした平均の落とし穴、件数を目標にすると起きることを、手元の小さなコードで比べ、測ってはいけない数と決めるのに使う数を分けます。

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

なぜ通るのか

ある会社のセキュリティの月の報告は、毎月よくなっています。見つけた脆弱性は 300 件、処理した通知は 5000 件、直すまでの平均は 6 日です。ところがある日、外から届く古いサーバーの重大な穴が、半年近く直っていなかったと分かります。その穴は、まだ直っていないので「直すまでの平均」の計算に入っていませんでした。

数は、測り方しだいで、見たい物を隠します。このレッスンでは、どの数を、どう定義し、何を決めるために測るのかを扱います。

MTTR とは

MTTR は、もとは設備や機械の保全の言葉で、故障してから直るまでにかかった時間の平均 (平均修復時間) です。式は次のとおりです。

名前意味式
MTTR故障してから直るまでの平均の時間修復にかかった時間の合計 ÷ 修復の件数
MTBF直ってから次に故障するまでの平均の時間動いていた時間の合計 ÷ 故障の件数
稼働率動いていた時間の割合MTBF ÷ (MTBF + MTTR)

たとえば、MTBF が 99 時間、MTTR が 1 時間なら、稼働率は 99 ÷ 100 で 99% です。MTBF を延ばすのは壊れにくくすること、MTTR を縮めるのは壊れても早く戻すことで、守りの取り組みでも同じ 2 つの向きがあります。

セキュリティでの「気づくまで」と「直すまで」

セキュリティでは、MTTR の R が、修復 (repair)、復旧 (recovery)、対応 (respond)、是正 (remediate) のどれを指すかが組織によって違います。同じ MTTR という名前で別の物を比べないよう、始まりと終わりの時刻を定義に書きます。

数始まり終わり
気づくまでの時間 (MTTD)侵入や異常が始まった時刻自分たちが気づいた時刻
対応の時間気づいた時刻封じ込めた時刻
穴を直すまでの日数穴を知った日 (作り手の公表、届出、自社の検査)直す版を当て、当たったことを確かめた日
変更の失敗から戻すまで出した変更が失敗した時刻元に戻った時刻

最後の数は、DORA がソフトウェアを届ける力の指標の 1 つとして、失敗した変更から戻すまでの時間 (failed deployment recovery time) と呼んでいます。

測る数の 4 つの種類

NIST SP 800-55 Vol. 1 (2024年12月) は、情報セキュリティの数を 4 つに分けています。

種類何を見るか例
実施の数決めた対策がどこまで入ったか多要素認証が掛かったアカウントの割合
効果の数対策が狙いどおりに効いているか自分たちで気づいた侵入の割合
効率の数どれだけ早く知らせ、どれだけ早く直したか重大な穴を直すまでの日数
影響の数事業の目的への影響対応にかかった費用、止まった時間

同じ文書は、数を文脈なしに報告すると、意図しない結果や決められない状態を招きうるとし、その数が示すリスクや、組織が受け入れられる範囲かを添えるよう勧めています。

測ってはいけない数

数を目標にすると、数を動かす一番楽な方法が選ばれます。とくに次の数は、決めるのに使うと害になります。

目標にした数起きること代わりに決めるのに使う数
見つけた脆弱性の件数軽い物を細かく分けて数を増やす外から届く所の、期限を過ぎた重大な穴の数
処理した通知の件数調べずに閉じる自分たちで気づいた侵入の割合
研修の受講率流し見で 100% になる訓練のメールで報告した人の割合
直すまでの平均直らない物が計算から消える中央値、最大、期限を過ぎた件数

件数を見ること自体は悪くありません。様子を知るために見る数と、人や組織を評価して決めるために使う数を分けます。

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

穴の台帳から月の報告を作る関数を比べます。Python に付いている物だけで動きます。日付は、台帳を始めた日からの日数で持ちます。

直った物だけの平均か、直っていない物も入れるか

脆いコード 直った物だけで平均を取る

Python

def mttr(items):
    days = [i["fixed"] - i["found"] for i in items
            if i["fixed"] is not None]
    return sum(days) / len(days)
直したコード 直っていない物も、今日までの日数で入れる

Python

from statistics import median

def fix_report(items, today, due_days):
    open_ = [i for i in items if i["fixed"] is None]
    ages = [(today if i["fixed"] is None else i["fixed"]) - i["found"]
            for i in items]
    overdue = [i for i in open_ if today - i["found"] > due_days]
    return {"median": median(ages), "max": max(ages),
            "overdue": len(overdue)}

脆い方は、直った物だけを数えます。長く直らない重大な穴ほど計算から消え、平均は良く見えます。直した方は、直っていない物を今日までの日数で入れ、平均の代わりに中央値と最大を出し、期限を過ぎた件数を別に数えます。1 件の放置が、最大と期限の超過の数にそのまま出ます。

件数を足すか、決めるための数を分けるか

脆いコード 件数を足して点数にする

Python

def score(team):
    return team["findings"] + team["alerts_closed"]
直したコード 決めるのに使う数を、意味ごとに分ける

Python

def report(team):
    n = team["incidents"]
    return {
        "overdue_high_external": team["overdue_high_external"],
        "found_by_us": team["found_internally"] / n if n else None,
    }

脆い方は、見つけた件数と閉じた通知の件数を足すので、軽い指摘を増やし、通知を調べずに閉じるほど点が上がります。直した方は、外から届く所で期限を過ぎた重大な穴の数と、侵入のうち自分たちで気づいた割合を、別々に出します。侵入が 0 件の月は割合を出さず、None にします。0 で割らないためと、「100%」と見誤らないためです。

ログでの見え方と検知

同じ台帳から作った月の報告を、2 つの関数で並べます。台帳には、直った軽い穴が 20 件と、外から届くサーバーの重大な穴が 1 件、160 日前から直っていないまま載っています。

脆い関数の月の報告

記録

直すまでの平均 6.0 日
直した関数の月の報告

記録

直すまでの中央値 6 日
直すまでの最大 160 日
期限を過ぎた件数 1 件 (重大、外から届く)

脆い報告は「順調」に見え、直した報告は、決めるべきことを 1 つ指しています。報告を受ける側は、次の物を見ます。

見る物何の兆しか
平均と中央値の差が大きい一部の長く直らない物が隠れている
期限を過ぎた重大な穴の数直す仕事に人と時間が回っていない
外の人から知らされた侵入の割合検知の決まりと記録が足りない
数の定義が月ごとに変わる良く見せるために測り方が動いている

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

自分の PC の中だけで行います。台帳は手で作った物を使います。

  1. 手で台帳を作る。直った穴を数件と、直っていない重大な穴を 1 件、長い日数で入れる
  2. 脆い mttr に渡し、直っていない穴が結果に何の影響も与えないことを確かめる
  3. 直した fix_report に渡し、最大と期限の超過の数に、直っていない穴が出ることを確かめる
  4. 測る数ごとに、下の定義の 1 枚を書く。始まりと終わりの時刻、式、データの出どころ、使う判断を埋める
  5. 下の試験を足し、直す前のコードに戻すと試験が落ちることも確かめる
  6. 月の報告は、決めるのに使う数を先に、様子を見る件数を後ろに並べる
直っていない物が消えないことを固める試験

Python

def ledger():
    items = [{"found": 0, "fixed": 6} for _ in range(20)]
    items.append({"found": 40, "fixed": None})
    return items

def test_open_item_shows_in_max_and_overdue():
    r = fix_report(ledger(), today=200, due_days=30)
    assert r["max"] == 160
    assert r["overdue"] == 1

def test_no_incidents_gives_no_ratio():
    team = {"incidents": 0, "found_internally": 0,
            "overdue_high_external": 0}
    assert report(team)["found_by_us"] is None

1 つ目の試験は、直っていない 1 件が、最大の 160 日と、期限の超過の 1 件に出ることを確かめます。2 つ目の試験は、侵入の無い月に割合を作らないことを確かめます。

測る数の定義を 1 枚にまとめる

測る数の定義の例

記録

名前   重大な穴を直すまでの日数
始まり  穴を知った日 (作り手の公表、届出、自社の検査の早い方)
終わり  直す版を当て、版の番号を読み直して確かめた日
式    中央値と最大、直っていない物は今日までの日数で入れる
出どころ 穴の台帳と、資産の一覧
使う判断 人と時間を、外から届く所の期限切れへ回すか
期限   重大で外から届く物は 14 日
見るだけ 見つけた件数 (目標にしない)

期限の日数は例です。米国の CISA は、実際に悪用が確かめられた脆弱性の一覧 (KEV) で、項目ごとに直す期日を付けています。自分の組織の期限も、穴の重さと、外から届くかどうかで分けて決めます。

関わる事例

測っていなかった数が、被害の大きさを決めた例が並びます。Equifax について米下院の委員会の報告は、既知の重大な穴を直さず、145 日にわたって危険にさらしていたこと、見つかるまでの侵入の期間が、76 日だったことを挙げています。

同じ報告は、300 を超えるセキュリティの証明書が切れたままで、そのうち 79 は事業に欠かせないドメインの見張りに使う物だったとしています。切れた証明書の数は、だれも決めるための数として見ていませんでした。

Marriott が買収した Starwood の予約の仕組みでは、2014年からの侵入に、4 年以上気づかれませんでした。気づくまでの時間は、測っていなければ、こうして年の単位になります。

英国会計検査院によると、WannaCry の前、2017年の3月と4月に、NHS Digital は更新を当てるよう重大な警告を出していましたが、保健省には、各組織が助言に従ったかを確かめる正式な仕組みがありませんでした。警告を出した数は数えられても、当てた割合は測られていなかった例です。

First American では、侵入テストで見つかった穴の深刻度が低く誤って記録され、直す猶予は、本来の 45 日ではなく、90 日になりました。期限を測っていても、入力が誤っていれば数は守りになりません。

確認クイズ

1 問目

「直すまでの平均」が毎月短くなっています。報告を受けた人が、まず確かめるべきことはどれですか。

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

2 問目

チームの評価に使う数として、合うのはどれですか。

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

説明課題

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

  • 測ってはいけない数と、決めるのに使う数の例を 1 つずつ挙げ、なぜそう分けるか
模範解答を見る

見つけた脆弱性の件数は、目標にすると軽い指摘を分けて増やせるので、様子を見るだけにし、評価には使わない。外から届く所で期限を過ぎた重大な穴の数は、実際に直さないと減らないので、人と時間をどこへ回すかを決めるのに使う。直すまでの日数は、直っていない物も入れて中央値と最大で見る。

一次資料

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

次へ

これで「設計と制度」のトラックは終わりです。ここまでのレッスンで決めた記録、検知、演習、開発の流れの決まりを、測る数の定義の 1 枚に書き出し、月に 1 回見直すところから始めてください。

トラック 5 設計と制度の中で

前のレッスン 5-3 法務と倫理

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

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

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