代碼審計 — C/C++ 實踐
曹向志 馬森 陳能技 等
買這商品的人也買了...
-
$480$408 -
$580$493 -
$500$390 -
$680$530 -
$520$390 -
$347算法之禪 : 遞推與遞歸
-
$780$616 -
$450$405 -
$520$411 -
$714$678 -
$580$458 -
$620$527 -
$800$632 -
$560$437 -
$720$562 -
$750$585 -
$450$351 -
$857Linux 系統安全基礎:二進制代碼安全性分析基礎與實踐
-
$653C++ Core Guidelines 解析
-
$948$901 -
$505穿越作業系統迷霧:從零實現作業系統
-
$654$621 -
$764高級算法和數據結構
-
$880$695 -
$620$490
相關主題
商品描述
本書旨在介紹代碼審計及缺陷剖析的相關知識。本書首先介紹了代碼檢測技術和代碼檢測工具;然後講述了C/C++安全標準,展示了與標準不兼容的案例和兼容的案例,並對案例對應的知識點進行講解,以幫助開發人員、評測人員理解和運用標準;接著分析了C/C++語言源代碼漏洞測試,展示了包含安全漏洞的案例,以及修復安全漏洞的案例;最後介紹了常見運行時缺陷,主要基於C/C++案例代碼進行剖析,這些運行時缺陷是在對C/C++項目進行代碼檢測和代碼審計時需要重點關註的。
本書不僅適合開發人員、測試人員閱讀,還適合作為相關培訓機構的教材。
作者簡介
从事软件测试、软件安全工作超过20年,擅长分析软件质量和代码质量,目前在软件应用安全领域从事SDL(Security Development Lifecycle,安全开发生命周期)与DevSecOps方面的研发工作,出版过软件测试管理、性能测试、APP测试等方面的图书,曾为多家大型企业提供内训。
马森
北京大学软件工程国家工程研究中心副研究员,在软件代码分析领域发表论文数十篇,获得专利数十个,作为项目负责人承担代码分析领域的项目十余个。
陈能技
具有20年IT从业经验,担任过测试工程师、项目经理、培训讲师、咨询顾问、架构师、技术总监等职位,研究方向包括DevOps、DevSecOps、GitOps以及软件专业化交付能力,编写过《软件测试技术大全:测试基础、流程工具、项目实战》《大规模组织DevOps实践》等图书。
目錄大綱
目 錄
第 1章 代碼檢測和工具 1
1.1 背景 1
1.2 代碼審計 1
1.2.1 代碼審計的思路 2
1.2.2 代碼審計的步驟 2
1.2.3 安全審計的標準 3
1.2.4 代碼審計中的常見概念 5
1.3 代碼檢測工具 5
1.3.1 代碼檢測工具的原理 6
1.3.2 代碼檢測技術 7
1.3.3 代碼檢測的主要方法 9
1.3.4 代碼檢測工具的主要功能 14
1.3.5 常見的代碼檢測工具 14
1.3.6 代碼檢測工具的評價基準 16
1.4 軟件成分分析工具 19
1.4.1 軟件成分分析工具的
原理 20
1.4.2 軟件成分分析工具使用的
關鍵技術 21
1.4.3 SCA工具技術指標 27
1.5 如何成為一名代碼安全檢測
工程師 27
1.6 代碼安全審計/檢測練習靶場 28
第 2章 C語言安全標準(一) 30
2.1 C語言安全標準產生的背景 30
2.2 如何理解和使用GJB 8114標準 30
2.3 C和C++的共享規則 31
2.3.1 聲明定義規則 31
2.3.2 版面書寫規則 57
2.3.3 指針使用規則 63
2.3.4 分支控制規則 77
2.3.5 跳轉控制規則 91
2.3.6 運算處理 93
2.3.7 函數調用 113
第3章 C語言安全標準(二) 127
3.1 關於語句使用的規則 127
3.1.1 關於循環控制的規則 131
3.1.2 關於類型轉換的規則 135
3.1.3 關於初始化的規則 141
3.1.4 關於比較判斷的規則 146
3.1.5 關於變量使用的規則 152
3.2 C++的專用規則 162
3.2.1 關於類與對象的強制規則 162
3.2.2 關於構造函數的強制規則 169
3.2.3 關於虛函數的強制規則 173
3.2.4 關於類型轉換的強制規則 176
3.2.5 關於內存釋放的強制規則 177
第4章 C/C++語言源代碼漏洞測試
規範 180
4.1 不可控的內存分配 180
4.2 路徑錯誤 181
4.3 數據處理 182
4.3.1 相對路徑遍歷 182
4.3.2 絕對路徑遍歷 184
4.3.3 命令行註入 185
4.3.4 SQL註入 186
4.3.5 進程控制 188
4.3.6 緩沖區溢出 189
4.3.7 使用外部控制的格式化
字符串 189
4.3.8 整數溢出 190
4.3.9 信息通過錯誤消息泄露 191
4.3.10 信息通過服務器日誌文件
泄露 192
4.3.11 信息通過調試日誌文件
泄露 193
4.3.12 以未檢查的輸入作為
循環條件 193
4.4 錯誤的API實現 194
4.5 劣質代碼 195
4.6 不充分的封裝 196
4.7 安全功能 197
4.7.1 明文存儲密碼 197
4.7.2 存儲可恢復的密碼 197
4.7.3 密碼硬編碼 198
4.7.4 明文傳輸敏感信息 199
4.7.5 使用已破解或危險的
加密算法 199
4.7.6 可逆的哈希算法 200
4.7.7 密碼分組鏈接模式未使用
隨機初始化向量 201
4.7.8 不充分的隨機數 202
4.7.9 安全關鍵的行為依賴反向
域名解析 203
4.7.10 沒有要求使用強密碼 204
4.7.11 沒有對密碼域進行掩飾 205
4.7.12 通過用戶控制的SQL關鍵字
繞過授權 206
4.7.13 未使用鹽值計算哈希值 207
4.7.14 RSA算法未使用最優
非對稱加密填充 208
4.8 Web問題 209
第5章 常見運行時缺陷 211
5.1 緩沖區溢出 211
5.1.1 緩沖區溢出的原理 211
5.1.2 防範緩沖區溢出 216
5.1.3 棧緩沖區溢出 216
5.1.4 緩沖區溢出案例 217
5.2 內存泄漏 223
5.2.1 內存泄漏的原理 223
5.2.2 內存泄漏案例 224
5.3 代碼不可達 235
5.4 整數溢出或環繞 236
5.5 資源泄露 237
5.6 線程死鎖 238
5.6.1 加鎖後未判斷是否成功 238
5.6.2 線程死鎖 239
5.6.3 加鎖後未解鎖 240
5.7 無限循環 240
5.7.1 可能不變的循環因子 240
5.7.2 循環跳出條件無法滿足 241
5.7.3 函數循環調用 241
5.7.4 控製表達式有邏輯錯誤 241
5.7.5 以外部輸入作為循環
跳出條件 242