レッスン 5-1
設計で
読み終えたら脅威モデルを
この頁の流れ
セキュリティ・
出典を確かめた日 2026年10月27日
なぜ通るのか
ある
この
セキュリティ・バイ・デザインとは
セキュリティ・
米国の
シフトレフトとの違い
シフトレフトは、
流れのどこに何を置くか
NIST の
| 段 | 置く物 | 脅威 |
|---|---|---|
| 要件 | 守る | 守る |
| 設計 | データの | 脅威モデルを |
| 設計の見直し | 設計に | 境目ごとに、 |
| 実装 | 安全な | 対策が |
| 試験 | 権限の | 脅威ごとに 1 つ以上の試験 |
| 出す前の判定 | 決めた | 境目を |
| 運用と対応 | 記録、 | 起きた |
脅威モデルは、
脆いコードと直したコード
開発の
既定で公開か、既定で閉じるか
Python
ROUTES = {}
def route(path, login=False):
def deco(fn):
ROUTES[path] = (fn, login)
return fn
return decoPython
ROUTES = {}
def route(path, public=None):
if public is not None and not str(public).strip():
raise ValueError("公開するなら理由を書く")
def deco(fn):
ROUTES[path] = (fn, public is None)
return fn
return deco脆い方では、login=True をpublic="理由" を
試験だけを見るか、境目の変更も見るか
Python
def can_release(pr):
return pr["tests_passed"]Python
def blockers(pr):
reasons = []
if not pr["tests_passed"]:
reasons.append("試験が通っていない")
if pr["touches_boundary"] and not pr["threat_model_updated"]:
reasons.append("境目を変えたのに脅威モデルが古い")
if any(f["severity"] == "high" for f in pr["open_findings"]):
reasons.append("重大な指摘が残っている")
return reasons脆い方は、
判定は、
ログでの見え方と検知
開発の
記録
PR 412 tests ok boundary yes threat_model no 止める 境目を変えたのに脅威モデルが古い
PR 413 tests ok boundary no 出せる
PR 414 tests ok boundary yes threat_model yes 出せる
PR 415 tests ok open high 1 (期限 05-08 超過) 止める 重大な指摘が残っている守る
| 見る物 | 何の抜けか |
|---|---|
| 境目を | 設計の |
| 公開の | 既定で |
| 期限を | 指摘が |
| 判定を | 判定が、 |
直し方と、直ったことの確かめ方
自分の
- 信頼の
境目に 当たる ファイル (認証、 権限、 道の 定義、 外との つなぎ、 データの 置き場) を 一覧にする - プルリクエストの
ひな形に 「境目を 変えたか」 「脅威モデルを 更新したか」の 欄を足す - 道を
足す部品を、直した routeの形にし、 公開の 道には 理由を 書かせる - 出す前の判定に
blockersを置き、 境目の 一覧に 当たる ファイルが 変わったら touches_boundaryが立つようにする - 下の
試験を 足し、 直す前の コードに 戻すと 試験が 落ちる ことを 確かめる - 月に
1 回、 公開の 道の 一覧と、 期限を 過ぎた 指摘の 一覧を見直す
Python
import pytest
def test_routes_require_login_by_default():
ROUTES.clear()
@route("/orders")
def orders():
return "注文"
@route("/health", public="監視のため、中身を返さない")
def health():
return "ok"
assert ROUTES["/orders"][1] is True
assert ROUTES["/health"][1] is False
def test_public_needs_a_reason():
with pytest.raises(ValueError):
route("/export", public="")
def test_boundary_change_needs_threat_model():
pr = {"tests_passed": True, "touches_boundary": True,
"threat_model_updated": False, "open_findings": []}
assert blockers(pr) == ["境目を変えたのに脅威モデルが古い"]import pytest
def test_routes_require_login_by_default():
ROUTES.clear()
@route("/orders")
def orders():
return "注文"
@route("/health", public="監視のため、中身を返さない")
def health():
return "ok"
assert ROUTES["/orders"][1] is True
assert ROUTES["/health"][1] is False
def test_public_needs_a_reason():
with pytest.raises(ValueError):
route("/export", public="")
def test_boundary_change_needs_threat_model():
pr = {"tests_passed": True, "touches_boundary": True,
"threat_model_updated": False, "open_findings": []}
assert blockers(pr) == ["境目を変えたのに脅威モデルが古い"]1 つ目の
設計の見直しを 1 枚にまとめる
設計の
記録
機能 注文の書類を顧客に渡す
守る物 書類 (氏名、住所、金額)
境目 顧客のブラウザと書類の置き場の間
だれが 書類の持ち主の顧客と、担当の社員だけ
既定値 リンクはログインが要る、期限は 7 日
脅威 番号の差し替えで他人の書類 (情報の漏えい)
対策と試験 持ち主の確かめを置き場の手前で行い、他人の番号で 403 の試験
見直した人 設計に関わらなかった 1 人関わる事例
設計の
CrowdStrike では、
SolarWinds では、
- 2024年7月19日、
セキュリティソフト (エンドポイント CrowdStrike センサー検知) 更新配布障害 入口 検証をすり抜けた 設定ファイルの 配布で 世界中の Windowsが 一斉に 止まった - 2021年11月24日、
ソフトウェア Log4Shell (Apache Log4j の部品 (Java の ログ 出力 ライブラリ) 脆弱性) 入口 Log4j 2 のJNDIの 機能が 攻撃者の 用意した LDAPなどの 接続先を 防げず、 ログに 書かれる 文字列を 操れる 攻撃者が、 外の サーバから 任意の コードを 読み込ませて 実行させられた - 2020年12月12日、
IT 管理 SolarWinds Orion のソフトウェアと その 利用組織 (政府機関、 重要インフラ、 民間企業) サプライチェーン 入口 攻撃者は侵害 資格情報を 盗んで SolarWinds の 開発環境と 社内の 仕組みに 入り込んだ。 最初に 入った 経路は 特定されておらず、 会社は 第三者の 製品の 未知の 脆弱性、 パスワードスプレーなどの 総当たり、 標的型の フィッシングなどの ソーシャルエンジニアリングの 3つを 有力な 候補に 挙げている - 2019年5月24日、
権原保険 ファースト・・ エスクローサービス ( 不動産決済) アメリカン 文書共有 入口 文書のアプリの 認可漏れ 画像を 顧客に 渡すEagleProの リンク機能に 認証が 無く、 URLの 中の 文書IDを 別の 連番に 差し 替えるだけで、 無関係な 別の 取引の 文書画像も 見られた
確認クイズ
1 問目
脅威モデルを、
答えだと思う選択肢を押すと、その場で正誤と理由が開きます。
答え イ
設計の
2 問目
新しい
答えだと思う選択肢を押すと、その場で正誤と理由が開きます。
答え イ
注意の
説明課題
次の
- 脅威モデルを、
開発の 流れの どこに 入れ、 どうやって 古くならないようにするか
模範解答を見る
設計の
一次資料
どれも
- SP 800-218 Secure Software Development Framework (SSDF) Version 1.1 (NIST、
英語、 。2022年2月) PO、 PS、 PW、 RV の 4 つの 分け方、 PW.1.1 の リスクの モデル化、 PW.2.1 の 設計の 見直し、 PO.4.1 の 確かめの 基準。 2025年12月に Version 1.2 の 初期公開草案 (SP 800-218 Rev. 1) が 出ている - Secure by Design (CISA、英語)。
設計の 段で 守りを 組み込み、 出荷した 時から 安全な 既定値に すること - Secure-by-Design (CISA、英語)。
顧客の セキュリティの 結果に 責任を 持つこと、 徹底した 透明性と 説明責任、 経営の 上から 率いる ことの 3 つの原則 - セキュリティ・
バイ・ 。デザイン 導入指南書 (IPA、 日本語) 脅威分析、 セキュリティ 要件、 セキュリティアーキテクチャ、 下流の 工程の セキュア開発と シフトレフトの 章立て - In the Matter of First American Financial Corporation (米証券取引委員会、
英語、 。2021年6月14日) 侵入テストで 見つかった 穴の 深刻度の 誤った 記録と、 期限までに 直らなかったこと - External Technical Root Cause Analysis, Channel File 291 (CrowdStrike、
英語、 。2024年8月6日) 入力の 数の 20 と 21 の 食い 違いと、 試験と 確かめで 見つからなかったこと - An Investigative Update of the Cyberattack (SolarWinds、
英語、 。2021年5月7日) ビルドの 環境の 中での混入 - Review of the December 2021 Log4j Event (米
サイバー 。安全審査会、 英語、 2022年7月11日) 部品が どこに 入っているかを 誰も 把握していなかったこと
次へ
次の
