本の構成
セキュアなソフトウェアの設計と開発は、 概念、設計、実装の3つのパートと、結論を含めた全13章で構成されています。
パート1:概念
第1章から第5章は、本書の基礎となる概念を説明します。
第1章「基礎」 では、情報セキュリティとプライバシーの基本を概説します。 第2章「脅威」 では、脅威モデリングを紹介し、資産を保護する上で重要な 攻撃対象領域(Attack Surface)と信頼境界(Trust Boundary)の概念を解説します。 続く3つの章では、セキュアなソフトウェアを構築するための有用なツールを 提供します。 第3章「緩和策」 では、特定された脅威を防御的に緩和するための 一般的な戦略を議論します。 第4章「パターン」 では、効果的なセキュリティ設計パターンを提示し、 避けるべきアンチパターンも指摘します。 第5章「暗号化」 では、実務ではほとんど必要とされない数学的な 背景には立ち入らず、標準的な暗号ライブラリを使って一般的なリスクを 緩和する方法を、ツールボックス的なアプローチで説明します。
パート2:設計
このパートは、おそらく本書の読者にとって最も独自性が高く重要な 貢献となるでしょう。 第6章「セキュアな設計」 と 第7章「セキュリティ設計レビュー」 では、 セキュアなソフトウェア設計に関する指針と、それを実現するための実践的な 手法を、それぞれ設計者とレビュー担当者の視点から解説します。 その過程で、ソフトウェア設計の初期段階からセキュリティを 組み込むことの重要性を説明します。 これらの章では、第1部で紹介したアイデアを活用し、セキュアな設計を 構築するための具体的な方法論を提供します。 レビュー手法は、私の業界経験に基づいたものであり、ご自身の仕事に合わせて 応用できるステップ・バイ・ステップのプロセスを含んでいます。 これらの章を読む際には、アイデアを実践に移す例として、 付録Aの設計書サンプルを参考にしてください。
パート3:実装
第8章から第13章では、実装段階でのセキュリティに加え、 デプロイ、運用、およびソフトウェアのライフサイクル全般について触れています。 セキュアな設計ができた後、本書のこのパートでは、 追加の脆弱性を生み出すことなくソフトウェアを開発する方法を説明します。 これらの章では、脆弱性がどのようにコードに紛れ込むか、 そしてそれを回避する方法を示すコードスニペットが含まれています。
第8章「セキュアなプログラミング」 では、プログラマーが直面する セキュリティ上の課題と、実際の脆弱性がコード上でどのように見えるかを 紹介します。 第9章「低レベルのコーディングの欠陥」 では、コンピュータの算術演算の 落とし穴や、C言語スタイルの動的メモリ割り当てがセキュリティを どのように損なうかを解説します。 第10章「信頼できない入力」 と 第11章「ウェブセキュリティ」 では、 長年にわたり広く知られているにもかかわらず、なくならない一般的なバグ (インジェクション、パストラバーサル、XSS、CSRFなど)の多くを扱います。 第12章「セキュリティテスト」 では、コードがセキュアであることを 確認するための、非常に活用が少ないテストの実践について説明します。 第13章「セキュアな開発のベストプラクティス」 は、 一般的なベストプラクティスと、よくある落とし穴についての注意喚起で、 セキュアな実装に関するガイダンスを締めくくります。
結論
「あとがき」 では、本書がポジティブな影響を与えることを願うとともに、 この本の要点をまとめ、未来を展望し、よりセキュアなソフトウェアへの 貢献というビジョンから始まる、ソフトウェアセキュリティを向上させるための 思索的なアイデアを提供して、本書を締めくくります。
付録
付録A は、セキュリティを意識した設計が実際にどのようなものかを 示す設計書サンプルです。 付録B は、本書全体に登場するソフトウェアセキュリティ用語の用語集です。 付録C には、意欲的な読者が調べることを楽しめるような、 未解決の課題や質問がいくつか含まれています。 付録D は、重要な概念とプロセスをまとめたチートシート集です。