《華章程式設計師書庫:C和C++安全編碼》是2014年機械工業出版社出版的圖書,作者是塞克德。
基本介紹
- 中文名:華章程式設計師書庫:C和C++安全編碼
- 作者:塞克德 (Robert C.Seacord)
- 譯者:盧濤
- 出版社:機械工業出版社
- 出版時間:2014年1月1日
- 頁數:377 頁
- 開本:16 開
- ISBN:9787111442790
- 語種:簡體中文
內容簡介,圖書目錄,作者簡介,
內容簡介
《華章程式設計師書庫:C和C++安全編碼(原書第2版)》介紹了Windows和Linux上數以百計的例子,包括安全的代碼、不安全的代碼和利用方法。如果你負責創建安全的C或C++軟體,或者需要保證它們的安全,《華章程式設計師書庫:C和C++安全編碼(原書第2版)》將為你提供詳盡的專家級援助。
《華章程式設計師書庫:C和C++安全編碼(原書第2版)》致力於解決C和C++中已經導致危險的、破壞性的常見軟體漏洞的基本編程錯誤,這些漏洞自CERT 1988年創立以來就記錄在案。針對導致這些漏洞的編程錯誤,《華章程式設計師書庫:C和C++安全編碼(原書第2版)》既出色地給出了深度工程分析,又提出了緩解策略,可以富有成效地降低或消除漏洞被惡意利用的風險。
圖書目錄
譯者序
序
前言
致謝
第1章 夾縫求生
1.1 衡量危險
1.1.1 損失的現狀
1.1.2 威脅的來源
1.1.3 軟體安全
1.2 安全概念
1.2.1 安全策略
1.2.2 安全缺陷
1.2.3 漏洞
1.2.4 漏洞利用
1.2.5 緩解措施
1.3 C和C++
1.3.1 C和C++簡史
1.3.2 C存在的問題
1.3.3 遺留代碼
1.3.4 其他語言
1.4 開發平台
1.4.1 作業系統
1.4.2 編譯器
1.5 小結
1.6 閱讀材料
第2章 字元串
2.1 字元串
2.1.1 字元串數據類型
2.1.2 UTF—8
2.1.3 寬字元串
2.1.4 字元串字面值
2.1.5 C++中的字元串
2.1.6 字元類型
2.1.7 計算字元串大小
2.2 常見的字元串操作錯誤
2.2.1 無界字元串複製
2.2.2 差一錯誤
2.2.3 空字元結尾錯誤
2.2.4 字元串截斷
2.2.5 與函式無關的字元串錯誤
2.3 字元串漏洞及其利用
2.3.1 被污染的數據
2.3.2 IsPasswordOK的安全缺陷
2.3.3 緩衝區溢出
2.3.4 進程記憶體組織
2.3.5 棧管理
2.3.6 棧溢出
2.3.7 代碼注入
2.3.8 弧注入
2.3.9 返回導向編程
2.4 字元串漏洞緩解策略
2.4.1 字元串處理
2.4.2 C11附錄K邊界檢查接口
2.4.3 動態分配函式
2.4.4 C++ std::basic_string
2.4.5 使字元串對象的引用失效
2.4.6 使用basic_string的其他常見錯誤
2.5 字元串處理函式
2.5.1 gets
2.5.2 C99
2.5.3 C11附錄K邊界檢查接口:gets—s
2.5.4 動態分配函式
2.5.5 strcpy和strcat
2.5.6 C99
2.5.7 strncpy和strncat
2.5.8 memcpy和memmove
2.5.9 strlen
2.6 運行時保護策略
2.6.1 檢測和恢復
2.6.2 輸入驗證
2.6.3 對象大小檢查
2.6.4 Visual Studio中編譯器生成的運行時檢查
2.6.5 棧探測儀
2.6.6 棧溢出保護器
2.6.7 作業系統策略
2.6.8 檢測和恢復
2.6.9 不可執行棧
2.6.10 W^X
2.6.11 PaX
2.6.12 未來發展方向
2.7 著名的漏洞
2.7.1 遠程登錄
2.7.2 Kerberos
2.8 小結
2.9 閱讀材料
第3章 指針詭計
3.1 數據位置
3.2 函式指針
3.3 對象指針
3.4 修改指令指針
3.5 全局偏移表
3.6 dtors區
3.7 虛指針
3.8 atexit和on—exit函式
3.9 longjmp函式
3.10 異常處理
3.10.1 結構化異常處理
3.10.2 系統默認異常處理
3.11 緩解策略
3.11.1 棧探測儀
3.11.2 W—X
3.11.3 對函式指針編碼和解碼
3.12 小結
3.13 閱讀材料
第4章 動態記憶體管理
4.1 C記憶體管理
4.1.1 C標準記憶體管理函式
4.1.2 對齊
4.1.3 alloca和變長數組
4.2 常見的C記憶體管理錯誤
4.2.1 初始化錯誤
4.2.2 未檢查返回值
4.2.3 Null或無效指針解引用
4.2.4 引用已釋放記憶體
4.2.5 多次釋放記憶體
4.2.6 記憶體泄漏
4.2.7 零長度分配
4.2.8 DR # 400
4.3 C++的動態記憶體管理
4.3.1 分配函式
4.3.2 釋放函式
4.3.3 垃圾回收
4.4 常見的C++記憶體管理錯誤
4.4.1 未能正確檢查分配失敗
4.4.2 不正確配對的記憶體管理函式
4.4.3 多次釋放記憶體
4.4.4 釋放函式拋出一個異常
4.5 記憶體管理器
4.6 Doug Lea的記憶體分配器
4.7 雙重釋放漏洞
4.7.1 寫入已釋放的記憶體
4.7.2 RtlHeap
4.7.3 緩衝區溢出(終極版)
4.8 緩解策略
4.8.1 空指針
4.8.2 一致的記憶體管理約定
4.8.3 phkmalloc
4.8.4 隨機化
4.8.5 OpenBSD
4.8.6 jemalloc記憶體管理器
4.8.7 靜態分析
4.8.8 運行時分析工具
4.9 值得注意的漏洞
4.9.1 CVS緩衝區溢出漏洞
4.9.2 Microsoft數據訪問組件
4.9.3 CVS伺服器雙重釋放漏洞
4.9.4 MIT Kerberos 5中的漏洞
4.10 小結
第5章 整數安全
5.1 整數安全導論
5.2 整數數據類型
5.2.1 無符號整數類型
5.2.2 迴繞
5.2.3 有符號整數類型
5.2.4 有符號整數的取值範圍
5.2.5 整數溢出
5.2.6 字元類型
5.2.7 數據模型
5.2.8 其他整數類型
5.3 整數轉換
5.3.1 轉換整數
5.3.2 整數轉換級別
5.3.3 整數類型提升
5.3.4 普通算術轉換
5.3.5 由無符號整數類型轉換
5.3.6 由有符號整數類型轉換
5.3.7 轉換的影響
5.4 整數操作
5.4.1 賦值
5.4.2 加法
5.4.3 減法
5.4.4 乘法
5.4.5 除法和求余
5.4.6 移位
5.5 整數漏洞
5.5.1 漏洞
5.5.2 迴繞
5.5.3 轉換和截斷錯誤
5.5.4 非異常的整數邏輯錯誤
5.6 緩解策略
5.6.1 整數類型的選擇
5.6.2 抽象數據類型
5.6.3 任意精度算術
5.6.4 範圍檢查
5.6.5 前提條件和後驗條件測試
5.6.6 安全整數庫
5.6.7 溢出檢測
5.6.8 編譯器生成的運行時檢查
5.6.9 可驗證範圍操作
5.6.10 仿佛無限範圍整數模型
5.6.11 測試與分析
5.7 小結
第6章 格式化輸出
6.1 變參函式
6.2 格式化輸出函式
6.2.1 格式字元串
6.2.2 GCC
6.2.3 Visual C++
6.3 對格式化輸出函式的漏洞利用
6.3.1 緩衝區溢出
6.3.2 輸出流
6.3.3 使程式崩潰
6.3.4 查看棧內容
6.3.5 查看記憶體內容
6.3.6 覆寫記憶體
6.3.7 國際化
6.3.8 寬字元格式字元串漏洞
6.4 棧隨機化
6.4.1 阻礙棧隨機化
6.4.2 以雙字的格式寫地址
6.4.3 直接參數訪問
6.5 緩解策略
6.5.1 排除用戶輸入的格式字元串
6.5.2 靜態內容的動態使用
6.5.3 限制位元組寫入
6.5.4 C11附錄K邊界檢查接口
6.5.5 iostream與stdio
6.5.6 測試
6.5.7 編譯器檢查
6.5.8 靜態污點分析
6.5.9 調整變參函式的實現
6.5.10 Exec Shield
6.5.11 FormatGuard
6.5.12 靜態二進制分析
6.6 著名的漏洞
6.6.1 華盛頓大學FTP Daemon
6.6.2 CDE ToolTalk
6.6.3 Ettercap NG—0.7.2版
6.7 小結
6.8 閱讀材料
……
第7章 並發
第8章 檔案I/O
第9章 推薦的實踐
參考文獻
縮略語
作者簡介
作者:(美國)塞克德(Robert C.Seacord) 譯者:盧濤