●第1章 綜述
1.1 編寫背景
1.2 編寫目的
1.3 本書結構
第2章 軟件安全保障概念
2.1 軟件工程
2.1.1 軟件工程概述
2.1.2 軟件工程基本原理
2.1.3 軟件工程的特點
2.1.4 軟件生命周期及生命周期模型
2.2 軟件質量和軟件質量保障
2.2.1 軟件質量
2.2.2 軟件質量保障
2.3 軟件安全
2.3.1 信息與信息安全
2.3.2 軟件安全概述
2.3.3 安全功能軟件與安全軟件
2.3.4 軟件安全與硬件安全
2.3.5 信息繫統安全與軟件安全
2.4 軟件安全保障
2.5 影響軟件安全的要素
2.6 軟件面臨的威脅
2.6.1 軟件漏洞的發掘
2.6.2 造成軟件漏洞的原因
2.6.3 漏洞避免與安全性
2.6.4 通用軟件漏洞數據庫
第3章 安全需求和威脅建模
3.1 需求的定義與分類
3.1.1 軟件需求
3.1.2 軟件需求分類
3.1.3 軟件安全需求
3.2 否定性和非功能性安全需求
3.3 安全需求的來源
3.4 安全需求的驗證
3.5 安全建模方法
3.5.1 軟件安全建模
3.5.2 威脅建模
第4章 安全設計原則
4.1 安全設計思想和方法
4.1.1 安全設計思想
4.1.2 安全設計方法
4.2 安全架構
4.3 安全設計原則
4.3.1 通用原則1:減少關鍵組件的數量
4.3.2 通用原則2:避免暴露薄弱組件和關鍵組件
4.3.3 通用原則3:減少攻擊者破壞的途徑
4.4 執行環境安全
4.4.1 環境等級劃分:約束和隔離機制
4.4.2 應用程序框架
第5章 基於組件的軟件工程
5.1 基於模塊的軟件設計
5.1.1 軟件模塊化
5.1.2 模塊化設計的安全原則
5.2 COTS和OSS組件的安全問題
5.2.1 缺乏可見性問題
5.2.2 軟件來源和安裝問題
5.2.3 安全假設的有效性
5.2.4 休眠代碼、死代碼和惡意代碼
5.3 組件的安全評估
5.3.1 組件的安全評估步驟
5.3.2 組件相關問題
5.4 組件的集成
5.5 基於組件的安全維護
第6章 安全編碼
6.1 安全編碼原則和實踐
6.1.1 保持代碼簡潔性
6.1.2 遵循安全的編碼指南
6.1.3 使用一致的編碼風格
6.1.4 保證代碼的可追溯性、可重用性和可維護性
6.1.5 資源分配
6.1.6 盡量清除狀態信息
6.1.7 避免未經授權的特權升級
6.1.8 使用一致的命名規則
6.1.9 謹慎使用封裝
6.1.10 權衡攻擊模式
6.1.11 輸入驗證
6.1.12 輸出過濾和“淨化”
6.1.13 避免安全衝突
6.1.14 代碼審查
6.1.15 最少反饋及檢查返回
6.1.16 會話管理及配置參數管理
6.1.17 安全啟動
6.1.18 並發控制
6.2 異常處理
6.2.1 異常識別及事件監視器
6.2.2 異常和失敗處理
6.2.3 核心轉儲
6.3 安全存儲和緩存管理
6.4 進程間通信
6.5 特定語言的安全問題
6.6 安全編碼和編譯工具
6.6.1 編譯器安全檢查和執行
6.6.2 安全的軟件庫
6.6.3 運行錯誤檢查和安全執行
6.6.4 代碼混淆
第7章 軟件安全測試
7.1 軟件測試和軟件安全測試
7.1.1 軟件測試
7.1.2 軟件安全測試
7.1.3 軟件測試和軟件安全測試的關繫
7.2 測試計劃
7.2.1 測試環境和測試要求
7.2.2 測試時機
7.3 軟件安全測試技術
7.3.1 白盒和灰盒測試技術
7.3.2 黑盒測試技術
7.4 重要的軟件安全測試點
7.4.1 輸入驗證測試
7.4.2 緩衝區溢出測試
7.4.3 SQL注入缺陷控制測試
7.4.4 XSS腳本攻擊控制測試
7.4.5 抗抵賴控制測試
7.4.6 失效控制測試
7.4.7 優先權提升控制測試
7.5 解釋和使用測試結果
第8章 安全交付和維護
8.1 分發前的準備
8.2 安全分發
8.3 安全安裝和配置
8.3.1 初始化文件安全
8.3.2 安全假設驗證
8.3.3 刪除所有未使用的文件
8.3.4 默認賬戶及口令更改
8.3.5 刪除未使用的默認賬戶
8.3.6 執行環境“鎖定”
8.3.7 設置默認安裝模塊
8.3.8 配置應用安全策略
8.3.9 啟用最小用戶身份
8.3.10 開啟應用日志審計
8.3.11 數據備份
8.4 安全維護
8.4.1 漏洞管理
8.4.2 軟件老化
第9章 通用評估準則與軟件安全保障
9.1 通用評估準則的發展歷史
9.2 通用評估準則的組成和重要概念
9.2.1 TOE的概念
9.2.2 安全目標和保護輪廓
9.3 安全保障要求與軟件安全保障
附錄A 術語定義
參考文獻