コース目次 / 第4章
読むだけでは、分からないこと
ソースコード診断の限界(ビジネスロジックの妥当性、実行環境の前提、外部の保護層)を理解し、動的テスト(ブラックボックス)との組み合わせが必要だと学びます。
前章の3つめの発見(ヘッダーで認可判定していた箇所)を、もう一度思い出してください。あれは「危険」と断定できず、「確認すべき疑問」として残しました。この章は、その限界を正面から扱います。
限界1 — ビジネスロジックの妥当性は、コードだけでは分からない
sec-logic で見た価格改ざんの穴を思い出してください。total = price * qty というコードだけを見ても、「この price がクライアントから来てよいものか」は、コードの外側(このアプリが何を売っていて、価格をどう決めるべきか)を知らないと判断できません。
「この変数は、どこから来るべきが正しいのか」は、アプリの仕様という、コードの外にある知識が要ります。sec-authz・sec-logic で「ツールが原理的に見つけられない」と学んだのと、同じ理由です——人間の目でも、仕様を知らなければ判断を誤ります。
限界2 — 実行環境の前提が、コードには書かれていない
前章の x-staff-role ヘッダーが、まさにこれです。このコード単体を読んでも、「本番環境で、このヘッダーが外部から上書き不可能か」は分かりません。リバースプロキシの設定、ネットワーク構成、デプロイの仕方——コードの外にある前提を確認して、初めて結論が出ます。
ソースコード診断の報告書に「〜という前提であれば安全ですが、その前提を実機で確認してください」と書くのは、逃げではなく誠実さです。断定できないことを、断定しない。
限界3 — 外部の保護層が、コードの外にある
sec-csp で学んだ CSP のように、アプリのコードそのものではなく、配信設定(ヘッダー)で効いている保護があります。ソースコードのリポジトリだけを見ていると、こうしたコードの外側の防御層を見落とします。実際の診断では、デプロイ設定・インフラ構成も含めて確認する必要があります。
だから、動的テストと組み合わせる
ここまでのコースの多くは、ブラックボックス(動かして攻撃する)診断でした。このコースはホワイトボックス(読む)診断です。どちらか一方が優れているのではなく、補い合う関係にあります。
ホワイトボックスが強いところ——実行が難しい経路(エラー処理・バッチ処理)にも届く、根本原因まで正確に指摘できる。
ブラックボックスが強いところ——実行環境の前提込みで、実際に動くかを確定的に確認できる。
実務の診断は、しばしば両方を組み合わせます——コードを読んで疑わしい箇所に当たりをつけ(ホワイトボックス)、実際に動かして確定させる(ブラックボックス)。sec-audit の演習で見つけた「疑わしい箇所」は、旗艦コースで培った攻撃の手で、実機で確かめて初めて結論になります。
静的解析ツールとの関係
実務では、grep で sink を探す作業を、静的解析ツール(SAST)が自動化してくれます。パターンマッチで危険な関数呼び出しを一覧にする、という部分は機械が得意です。でも、「この経路は本当に無害化されているか」「このビジネスロジックは正しいか」という最終判断は、依然として人間の仕事です。ツールは、あなたが読む範囲を絞る助手であって、代わりに読んでくれるわけではありません。
持ち帰る一言
コードは、仕様と環境の中でしか意味を持たない。 ビジネスロジックの妥当性、実行環境の前提、コード外の保護層——これらはコードだけでは分かりません。断定できないことは断定せず、動的テストと組み合わせて確信に変える。次はまとめて、このコースを締めます。
こうなっていればOK
卒業まであと1章です。
この章はまだ完了していません。
保存できませんでした(プライベートブラウズ中かもしれません)。この端末に進捗は残りませんが、先へは進めます。