预购商品
书目分类
特别推荐
本書共有13章,分為三大部分,即概念、設計和實施。具體內容包括:第一部分(第1~5章)為全書提供了概念基礎,涉及資訊安全和隱私基礎概述、威脅建模、對可識別威脅進行防禦性緩解的通用戰略、安全設計模式,以及使用標準的加密庫來緩解常見的風險。第二部分(第6~7章)分別從設計者和審查員的角度討論了如何使軟體設計變得安全的指導,以及可以應用哪些技術來實現安全性。第三部分(第8~13章)涵蓋了實施階段的安全性,在有了一個安全的設計後,這一部分將會解釋如何在不引入額外漏洞的情況下進行軟體發展。
第 1 部分 概念 第 1 章 基礎 3 1.1 理解安全 3 1.2 信任 4 1.2.1 信任感 5 1.2.2 比特位不是肉眼可見的 6 1.2.3 能力與不足 6 1.2.4 信任是一個頻譜 7 1.2.5 信任決策 7 1.3 經典原則 9 1.3.1 資訊安全的 CIA 10 1.3.2 黃金標準 12 1.3.3 隱私 17 第 2 章 威脅 20 2.1 對抗性視角 21 2.2 四個問題 22 2.3 威脅建模 22 2.3.1 從一個模型入手 23 2.3.2 判斷資產 24 2.3.3 判斷攻擊面 26 2.3.4 判斷信任邊界 26 2.3.5 判斷威脅 28 2.3.6 緩解威脅 33 2.4 隱私方面的考量因素 34 2.5 無處不在的威脅建模 34 第 3 章 緩解 36 3.1 解決威脅 36 3.2 結構性的緩解戰略 37 3.2.1 把攻擊面減到最小 37 3.2.2 縮窄漏洞窗口 38 3.2.3 把暴露的數據減到最少 39 3.3 訪問策略與存取控制 40 3.4 介面 41 3.5 通信 42 3.6 存儲 42 第 4 章 模式 44 4.1 設計屬性 45 4.1.1 極簡設計 45 4.1.2 透明設計 46 4.2 暴露最少信息 47 4.2.1 最小許可權 47 4.2.2 最少信息 48 4.2.3 默認防禦 49 4.2.4 放行列表與阻塞列表 49 4.2.5 避免可預測性 51 4.2.6 失效安全 52 4.3 強力執行 52 4.3.1 完全仲裁原則 52 4.3.2 最少共同機制 54 4.4 冗餘 55 4.4.1 深度防禦 55 4.4.2 許可權分離 56 4.5 信任與責任 57 4.5.1 不盲目信任 58 4.5.2 接受安全責任 58 4.6 反模式 60 4.6.1 代理混淆問題 60 4.6.2 意圖與惡意 61 4.6.3 可信的代理 62 4.6.4 信任回流 62 4.6.5 協力廠商 Hook 63 4.6.6 組件不可修補 63 第 5 章 密碼學 64 5.1 加密工具 64 5.2 亂數 65 5.2.1 偽亂數 65 5.2.2 加密安全的偽亂數 66 5.3 消息認證代碼 66 5.3.1 使用 MAC 來防止篡改 67 5.3.2 重放攻擊 68 5.3.3 安全 MAC 通信 68 5.4 對稱加密 69 5.4.1 一次性填充 69 5.4.2 高級加密標準 70 5.4.3 使用對稱加密 70 5.5 非對稱加密 71 5.6 RSA 密碼系統 71 5.7 數位簽章 72 5.8 數位憑證 74 5.9 金鑰交換 74 5.10 使用加密 76 第 2 部分 設計 第 6 章 安全的設計 81 6.1 在設計中集成安全性 82 6.1.1 明確設計中的假定規則 82 6.1.2 定義範圍 83 6.1.3 設置安全要求 84 6.1.4 威脅建模 85 6.2 建立緩解措施 87 6.2.1 設計介面 87 6.2.2 設計資料處理 88 6.3 將隱私融入設計 88 6.4 規劃整個軟體生命週期 89 6.5 權衡取捨 89 6.6 設計的簡潔性 90 第 7 章 安全設計審查 92 7.1 SDR 流程 92 7.1.1 為什麼要執行 SDR? 92 7.1.2 什麼時候執行 SDR? 93 7.1.3 文檔是必不可少的 93 7.2 SDR 流程 93 7.2.1 研究 94 7.2.2 詢問 94 7.3.3 識別 95 7.3.4 合作 95 7.3.5 撰寫 96 7.3.6 跟進 97 7.3 評估設計安全性 97 7.3.1 以四個問題為指導 97 7.3.2 我們在做什麼? 98 7.3.3 會出什麼問題? 98 7.3.4 我們要怎麼做? 99 7.3.5 我們做的好嗎? 99 7.3.6 在哪裡挖掘 100 7.3.7 隱私審查 100 7.3.8 審查更新 100 7.4 處理分歧 101 7.4.1 巧妙地溝通 101 7.4.2 案例研究:困難的審查 102 7.4.3 上報分歧 103 7.5 練習 104 第 3 部分 實施 第 8 章 安全地程式設計 107 8.1 挑戰 108 8.1.1 惡意影響 108 8.1.2 漏洞是 bug 109 8.1.3 漏洞鏈 110 8.1.4 Bug 和熵 112 8.1.5 警覺 112 8.2 研究: GotoFail 113 8.2.1 單行漏洞 113 8.2.2 當心 Footgun 114 8.2.3 GotoFail 的教訓 115 8.3 編碼漏洞 116 8.3.1 原子性 116 8.3.2 時序攻擊 117 8.3.3 序列化 118 8.4 非常嫌疑犯 118 第 9 章 低級編碼缺陷 120 9.1 算數漏洞 121 9.1.1 定寬整數漏洞 121 9.1.2 浮點精度漏洞 123 9.1.3 示例:浮點下溢 124 9.1.4 示例:整數溢出 126 9.1.5 安全算數 128 9.2 記憶體訪問漏洞 129 9.2.1 記憶體管理 129 9.2.2 緩衝區溢位 130 9.2.3 示例:記憶體分配漏洞 130 9.2.4 案例研究: Heartbleed漏洞 133 第 10 章 不受信任的輸入 138 10.1 輸入驗證 138 10.1.1 確定有效性 140 10.1.2 驗證標準 140 10.1.3 拒絕無效輸入 141 10.1.4 糾正無效輸入 142 10.2 字串漏洞 142 10.2.1 長度問題 143 10.2.2 Unicode 問題 143 10.2.3 編碼和字形 143 10.2.4 大小寫轉換 144 10.3 注入攻擊漏洞 144 10.3.1 SQL 注入攻擊 145 10.3.2 路徑遍歷 147 10.3.3 規則運算式 149 10.3.4 XML 的危險 149 10.4 緩解注入攻擊 150 第 11 章 WEB 安全 152 11.1 建立在框架之上 153 11.2 Web 安全模型 153 11.2.1 HTTP 協議 154 11.2.2 數位憑證和 HTTPS 156 11.2.3 同源策略 158 11.2.4 Web Cookies 159 11.3 常見的 Web 漏洞 160 11.3.1 跨站腳本攻擊 161 11.3.2 跨站請求偽造攻擊 163 11.4 更多的漏洞和緩解措施 165 第 12 章 安全測試 167 12.1 什麼是安全測試? 167 12.1.1 整數溢出 167 12.1.2 記憶體管理問題 167 12.1.3 不可靠輸入 168 12.1.4 網頁安全 168 12.1.5 異常處理缺陷 168 12.2 對 GotoFail 漏洞執行安全測試 168 12.2.1 功能測試 170 12.2.2 包含漏洞的功能測試 170 12.2.3 安全測試用例 170 12.2.4 安全測試的限制 171 12.3 編寫安全測試用例 171 12.3.1 測試輸入驗證 172 12.3.2 測試 XSS 漏洞 173 12.4 模糊測試 174 12.5 安全回歸測試 175 12.6 可用性測試 177 12.6.1 資源消耗 177 12.6.2 閾值測試 178 12.6.3 分散式拒絕服務攻擊 179 12.7 安全測試的最佳實踐 179 12.7.1 測試驅動的開發( Test-driven development) 179 12.7.2 利用集成測試 179 12.7.3 追趕安全測試的進度 180 第 13 章 安全部署最佳實踐 181 13.1 代碼品質 181 13.1.1 代碼清潔 181 13.1.2 異常和錯誤處理 182 13.1.3 記錄安全性 183 13.1.4 安全代碼審查 183 13.2 依賴關係 184 13.2.1 選擇安全的元件 184 13.2.2 保護介面 185 13.2.3 不要做重複的工作 186 13.2.4 對抗傳統安全 186 13.3 漏洞分類 187 13.3.1 DREAD 評估 187 13.3.2 創建利用漏洞的有效攻擊 189 13.3.3 作出分類決策 190 13.4 維護一個安全的開發環境 190 13.4.1 開發和生產相分離 190 13.4.2 保護開發工具 191 13.4.3 發佈產品 191 後記 193 附錄 A 設計文檔示例 203 附錄 B 詞彙表 215 附錄 C 練習 227 附錄 D 備忘單 231
[美]洛倫·科恩費爾德(Loren Kohnfelder) 從事程式設計行業已經超過50年時間,在麻省理工學院攻讀碩士研究生期間發表的論文“關於一項實用的公開金鑰加密系統(Towards a Practical Public-Key Cryptosystem)” (1978)描述了數位憑證以及公共金鑰體系結構(PKI)的基礎。他的軟體從業經歷包括各式各樣的程式設計類工作,如編寫各種打孔卡、磁碟控制卡驅動、連結載入器(linking loader)、電子遊戲,以及半導體研究實驗室的設備控制軟體。 在微軟供職期間,他回歸了安全工作,加盟了微軟的IE流覽器團隊,之後又加入了.NET平臺安全團隊,參與了全行業主動安全進程方法的設計。近期他加盟了穀歌公司,曾擔任安全團隊的軟體工程師,此後又參與組建了隱私團隊,對大型商業系統進行了百次以上的安全設計審查。
客服公告
热门活动
订阅电子报