🎓 レベル:標準 | 重要度:A(必須) 📎 前提:入力検証とインジェクション対策
要点(BLUF)
- 脆弱性は「後で直す」より「作り込まない」方が圧倒的に安い。守りを開発工程の早い段階に寄せる=shift left。
- 三本柱はセキュアバイデザイン(設計で守る)・コードレビュー(人の目)・自動解析(機械の目)。
- 自動化は SAST(静的解析)・DAST(動的解析)・SCA(依存スキャン)・シークレット検出を CI に組み込み、人のレビューと補完する。
概念:直すより作り込まない
脆弱性は工程が進むほど修正コストが跳ね上がります。本番で発見された欠陥は、設計時に気づいた場合の何倍もの手間になります。だから守りを上流(設計・実装・レビュー)に前倒しします。これが shift left で、OWASP 2025 が「設計・供給網・例外処理」へ重心を移した方向(OWASP Top 10 の概観)とも一致します。
仕組み:三本柱
1. セキュアバイデザイン(設計で守る)
コードを書く前に、設計段階で脅威モデリング(脅威モデリング(STRIDEと攻撃面))と設計原則(セキュリティ設計原則)を当てます。最小権限・既定拒否・データとコードの分離を設計の前提に据えると、危険な実装が生まれにくくなります。OWASP の A04「安全でない設計」はここを怠った結果です。
2. コードレビュー(人の目)
レビューでセキュリティ観点を明示的に見ます。チェックの軸の例:
- 入力は分離・検証されているか(入力検証とインジェクション対策)。
- 認可チェックがサーバ側で漏れなく入っているか(アクセス制御モデルとゼロトラスト)。
- 機密情報をログ・例外に出していないか。シークレットをコードに直書きしていないか(シークレット管理)。
- エラー処理が安全側に倒れるか(フェイルセーフ/例外時にフェイルオープンしない)。
- 暗号は自前実装でなく標準ライブラリか(暗号の基礎 目次)。
3. 自動解析(機械の目)
人手では網羅しきれない部分を自動化で埋めます。
| 種類 | 何を見るか | 代表 |
|---|---|---|
| SAST(静的) | ソースコードの危険パターン | 文字列連結クエリ・危険関数 |
| DAST(動的) | 動いているアプリの挙動 | 実行時の設定・応答 |
| SCA(依存スキャン) | 使っているライブラリの既知脆弱性 | 古い依存・既知 CVE(サプライチェーンセキュリティ) |
| シークレット検出 | 鍵・資格情報の混入 | コミットへの直書き検出 |
図解:守りを工程に織り込む(shift left)
flowchart LR
DESIGN["設計(脅威モデリング・設計原則)"] --> CODE["実装(セキュアコーディング)"]
CODE --> REVIEW["レビュー(人の目)+SAST/SCA/シークレット検出"]
REVIEW --> CI["CIで自動ゲート(不合格はマージ不可)"]
CI --> DEPLOY["デプロイ"]
DEPLOY -.->|"DAST・監視で継続検証"| DESIGN
防御側の使い方/設定
- CI に自動ゲートを置く:SAST・SCA・シークレット検出を必須チェックにし、重大検出はマージをブロック。
- レビュー観点をチェックリスト化:上記の軸をプルリクのテンプレートに入れ、属人化を防ぐ。
- 依存を継続管理:SCA で既知脆弱性のある依存を検出し、更新する(A06/供給網=サプライチェーンセキュリティ)。
- シークレットを排除:鍵・資格情報はコードに書かず、シークレット管理(シークレット管理)へ。検出ツールで混入を防ぐ。
- 誤検知の運用:自動解析はノイズが出る。トリアージしてルールを育て、アラート疲れを防ぐ(IDS/IPSと検知 と同じ発想)。
なぜ安全か:早期・多重・自動で取りこぼしを減らす
この体系が効くのは3点です。(1) 早い段階で潰すほど修正は安く、設計の欠陥は実装で取り返せない。(2) 人と機械の二重チェックで、人は文脈を、機械は網羅性を担当し補完する。(3) CI の自動ゲートで「うっかり通る」を構造的に防ぐ。個人の注意力に依存せず、工程として品質を保証するのが要点です。
仕組みの直観
セキュアコーディングは製造業の品質作り込みです。出荷後の検査で不良を見つけるのは高コスト。設計(FMEA に相当する脅威モデリング)、工程内検査(レビュー)、自動検査装置(SAST/DAST/SCA)をラインに組み込み、不良を作らない・流さない。半導体の歩留まり管理と同じで、後工程での手戻りを上流で断つほど全体コストが下がります。
⚠️ よくある誤解・設定ミス
- 「動けば OK、セキュリティは後で」:後ほど高コスト。設計から織り込む。
- 自動解析を入れて満足:誤検知放置でアラート疲れ→形骸化。トリアージしてルールを育てる。
- 依存の更新を放置:SCA を入れても直さなければ A06 のまま。更新まで運用に乗せる。
- シークレットの直書き:履歴に残り回収困難。最初から外部管理+検出で防ぐ。
- レビューが属人的:観点をチェックリスト化し、誰がやっても一定水準に。
対応 lab
工程・運用が主題のため専用 lab は置きません。安全な実装例は 入力検証とインジェクション対策 のコード断片を、依存・鍵の管理は第6章を参照します。
関連
- 設計で守る土台 → セキュリティ設計原則・脅威モデリング(STRIDEと攻撃面)
- 依存の脆弱性管理 → サプライチェーンセキュリティ
- 鍵・資格情報の管理 → シークレット管理