搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
C和C++安全编码
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787111261483
  • 作      者:
    (美)Robert C. Seacord著
  • 出 版 社 :
    机械工业出版社
  • 出版日期:
    2010
收藏
作者简介
  Robert C.Seacord,宾夕法尼亚州匹兹堡市SEI(SoftwareEngineering Institute,软件工程研究院)的CERT/CC(CERT/Coordination Center,CERT协调中心)高级漏洞分析师。CERT/CC定期对软件漏洞报告进行分析,并且评估互联网及其他关键的基础设施可能遭受的风险,此外还从事其他一些与安全有关的研究活动。作为一名涉猎广泛的技术专家,Robert还是《Building Sy stems from Commercial Components》(Addison—Wesley,2002)和《Modernizing Legacy Systems》(Addison—Wesley,2003)的合著者,并发表T40多篇论文,领域涉及软件安全、基于组件的软件工程、基于Web的系统设计、遗留系统的现代化改造、组件仓库与搜索引擎以及用户界面设计与开发等。Robert于1982年起在IBM开始职业编程生涯,从事通信和操作系统软件研发、处理器开发以及软件工程。Robert还为x协会(X Consortium)工作,为CDE(Common DesktopEnvironment,公共桌面环境)和x Window系统开发和维护代码。他还积极参与JTCl/SC22/WGl4的C语言国际标准化工作组工作。
  译者简介:
  荣耀,南京师范大学副教授,主研方向为企业级应用架构与软件工程,已出版著译作品包括《ASP.NET 2.0实战起步》、《.NET大局观》、《C++Templates全览》、《Imperfect C++中文版》、《C++必知必会》、《C++编程你也行》以及《Windows Forms程序设计》等,并在各类期刊发表技术文章约30篇,他的个人网站是www.royaloo.tom。
  罗翼,现供职于某搜索互联网企业工程技术部门。从事系统程序(以及各种古怪脚本)的开发、调试、优化等Linux/UNIX平台上C/C++程序员的工作。业余时间主要贡献给了Slackware系统的各个犄角旮旯以及各种新奇、古怪、败家的消费电子硬件。他曾与人合著过《加密与解密》等计算机科学科普读物。你可以通过luoyi.1y@gmail.com与他联系。
展开
内容介绍
  《C和C++安全编码》是关于C和C++安全编码的著作。《C和C++安全编码》介绍了C和C++程序中已经导致危险的、破坏性的基本编程错误,包括在字符串、指针、动态内存管理、整数、格式化输出、文件I/O等中的漏洞或缺陷。《C和C++安全编码》还提供了对这些编程错误的深入剖析,并给出缓解策略,以减少或消除恶意利用漏洞的风险。
  《C和C++安全编码》适合C/C++程序员、软件安全工程师参考。
  洞悉软件漏洞的成因,熟知规避之道
  通常而言,可利用的软件漏洞都由本可避免的软件缺陷所导致。在分析了过去10年中近18000份漏洞报告后,CERT/CC发现少量的根本原因导致了这些漏洞的产生。《C和C++安全编码》识别并解释了这些原因,而且展示了预防利用漏洞的步骤。此外,《C和C++安全编码》还鼓励程序员采用最佳安全实践,并培养安全的开发理念,这不但有助于保护软件免遭当前的攻击,更可使它们免遭将来可能发生的攻击。
  基于CERT/CC的报告和总结,Robert Seacord系统地揭示了最可能导致安全缺陷的编程错误,展示了这些缺陷的利用方式,介绍了可能导致的后果,并提供了安全的替代做法。
  《C和C++安全编码》特别讨论了如下技术细节:
  改善任何C/C++应用程序的整体安全性。
  抵御利用不安全的字符串操作逻辑的缓冲区溢出和栈粉碎攻击。
  避免因对动态内存管理函数的不当使用而导致的漏洞和安全缺陷。
  消除与整数相关的问题,包括整数溢出、符号错误以及截断错误等。
  正确地使用格式化输出函数,避免引入格式字符串漏洞。
  避免I/O漏洞,包括竞争条件等。
  《C和C++安全编码》提供了许多针对Windows和Linux的安全代码、不安全代码以及利用程序的例子。如果你负责创建安全的C或C++软件,或者需要保持这类软件的安全性,《C和C++安全编码》为你提供了详尽的专家级协助。在这方面,其他任何书籍都望尘莫及。
展开
精彩书评
  “信息系统的安全性并未随受攻击的数目和程度的增长同步得到改善。为了改变这一现状,必须改进用于创建系统的策略和技术。具体来说,必须从一开始就将安全性构建于系统之内而不是将其作为补救措施附加进来,这正是本书的要旨。这本书向软件开发者详尽展示了如何构建高质量的系统,它们具有更少的漏洞,不易遭受代价高昂或后果严重的攻击。任何开发者在进行重大的项目开发之前都应该阅读本书。”
  ——Frank Abagnale,作家、讲师、欺诈预防和安全文献领域资深顾问
展开
精彩书摘
  2.3.2缓冲区溢出
  当向为某特定数据结构分配的内存空间边界之外写入数据时,即会发生缓冲区溢出。c和c++都容易发生缓冲区溢出问题,因为这两种语言具有以下共同之处:a)将字符串定义为以空字符结尾的字符数组;b)未进行隐式的边界检查;c)提供了未强制性边界检查的标准字符串函数调用。
  取决于内存的位置以及溢出的规模,缓冲区溢出可能不会被侦测到,但可能会破坏数据,导致程序出现奇怪的行为甚至非正常中止。
  缓冲区溢出是一个令人头痛的问题,因为在软件的开发和测试阶段并非总能发现该问题。c和C++编译器在编译过程中并非总能识别可能引发缓冲区溢出的安全缺陷,在运行时也不会报告越界写问题。不过一旦测试数据可以引发一个可侦测的溢出,我们就可以使用动态分析工具来发现缓冲区溢出问题。
  并非所有的缓冲区溢出都会造成软件漏洞。然而,如果攻击者能够操纵用户控制的输入来利用安全缺陷,那么缓冲区溢出就会导致漏洞了。例如,有一些广为人知的技术可以用于覆写栈帧以执行任意的代码。缓冲区溢出也可以在堆或静态内存区域被利用,做法是通过覆写邻接内存的数据结构。
  在我们深入了解这些利用行为之前,理解进程内存是如何组织和管理的是非常必要的。如果你对进程内存组织、执行栈以及堆管理等主题已经非常熟悉,可以直接跳到第2.5节。
展开
目录
译者序
序言
前言
作译者简介
第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.2 常见的字符串操作错误
2.2.1 无界字符串复制
2.2.2 差一错误
2.2.3 空结尾错误
2.2.4 字符串截断
2.2.5 与函数无关的字符串错误
2.3 字符串漏洞
2.3.1 安全缺陷
2.3.2 缓冲区溢出
2.4 进程内存组织
2.5 栈粉碎
2.6 代码注入
2.7 弧注入
2.8 缓解策略
2.8.1 预防
2.8.2 字符串流
2.8.3 检测和恢复
2.9 著名的漏洞
2.9.1 远程登录
2.9.2 Kerberos
2.9.3 Metamail
2.10 本章小结
2.11 阅读材料

第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 W^X
3.11.2 Canaries
3.12 本章小结
3.13 阅读材料

第4章 动态内存管理
4.1 动态内存管理
4.2 常见的动态内存管理错误
4.2.1 初始化
4.2.2 检查返回值失败
4.2.3 引用已释放的内存
4.2.4 多次释放内存
4.2.5 不匹配的内存管理函数
4.2.6 未正确区分标量和数组
4.2.7 对分配函数的不当使用
4.3 DougLea的内存分配器
4.3.1 内存管理
4.3.2 缓冲区溢出
4.3.3 双重释放漏洞
4.3.4 写入已释放的内存
4.4 RtlHeap
4.4.1 Win32中的内存管理
4.4.2 RtlHeap的数据结构
4.4.3 缓冲区溢出
4.4.4 缓冲区溢出(再回顾)
4.4.5 写入已释放内存
4.4.6 双重释放
4.4.7 look-aside表
4.5 缓解策略
4.5.1 空指针
4.5.2 一致的内存管理约定
4.5.3 堆完整性检测
4.5.4 phkmalloc
4.5.5 随机化
4.5.6 哨位页
4.5.7 OpenBSD
4.5.8 运行时分析工具
4.5.9 WindowsXPSP
4.6 著名的漏洞
4.6.1 CVS缓冲区溢出漏洞
4.6.2 微软数据访问组件(MDAC)
4.6.3 CVS服务器双重释放漏洞
4.6.4 MITKerberos5中的漏洞
4.7 本章小结
4.8 阅读材料

第5章 整数安全
5.1 整数
5.1.1 整数表示法
5.1.2 整数类型
5.1.3 整数取值范围
5.2 整型转换
5.2.1 整型提升
5.2.2 整数转换级别
5.2.3 从无符号整型转换
5.2.4 从带符号整型转换
5.2.5 带符号或无符号字符
5.2.6 普通算术转换
5.3 整数错误情形
5.3.1 整数溢出
5.3.2 符号错误
5.3.3 截断错误
5.4 整数操作
5.4.1 加法
5.4.2 减法
5.4.3 乘法
5.4.4 除法
5.5 漏洞
5.5.1 整数溢出
5.5.2 符号错误
5.5.3 截断错误..
5.6 非异常的整数逻辑错误
5.7 缓解策略
5.7.1 范围检查
5.7.2 强类型
5.7.3 编译器运行时检查
5.7.4 安全的整数操作
5.7.5 任意精度的算术
5.7.6 测试
5.7.7 源代码审查
5.8 著名的漏洞
5.8.1 XDR库
5.8.2 WindowsDirectXMIDI库
5.8.3 bash
5.9 本章小结
5.10 阅读材料

第6章 格式化输出
6.1 变参函数
6.1.1 ANSIC标准参数
6.1.2 UnixSystemVVarargs
6.2 格式化输出函数
6.2.1 格式字符串
6.2.2 GCC
6.2.3 VisualC++.NET
6.3 对格式化输出函数的漏洞利用
6.3.1 缓冲区溢出
6.3.2 输出流
6.3.3 使程序崩溃
6.3.4 查看栈内容
6.3.5 查看内存内容
6.3.6 覆写内存
6.3.7 国际化
6.4 栈随机化
6.4.1 阻碍栈随机化
6.4.2 以双字的格式写地址
6.4.3 直接参数存取
6.5 缓解策略
6.5.1 静态内容的动态使用
6.5.2 限制字节写入
6.5.3 ISO/IECTR2473
6.5.4 iostream与stdio
6.5.5 测试
6.5.6 编译器检查
6.5.7 词法分析
6.5.8 静态污点分析
6.5.9 调整变参函数的实现
6.5.10 ExecShield
6.5.11 FormatGuard
6.5.12 Libsafe
6.5.13 静态二进制分析
6.6 著名的漏洞
6.6.1 华盛顿大学FTPDaemon
6.6.2 CDEToolTalk
6.7 本章小结
6.8 阅读材料

第7章 文件I/O
7.1 并发
7.1.1 竞争条件
7.1.2 互斥和死锁
7.2 检查时间和使用时间
7.3 作为锁的文件和文件锁定
7.4 文件系统利用
7.4.1 符号链接利用
7.4.2 临时文件打开利用
7.4.3 unlink()竞争利用
7.4.4 受信文件名
7.4.5 非唯一的临时文件名
7.5 缓解策略
7.5.1 关闭竞争窗口
7.5.2 消除竞争对象
7.5.3 控制对竞争对象的访问
7.5.4 竞争侦测工具
7.6 本章小结

第8章 推荐的实践
8.1 安全的软件开发原则
8.1.1 机制经济性原则
8.1.2 失败-保险默认原则
8.1.3 完全仲裁原则
8.1.4 开放式设计原则
8.1.5 特权分离原则
8.1.6 最小特权原则
8.1.7 最少公共机制原则
8.1.8 心理可接受性原则
8.2 系统质量需求工程
8.3 威胁建模
8.4 使用/误用案例
8.5 架构与设计
8.6 现成软件
8.6.1 现有代码中的漏洞
8.6.2 安全的包装器
8.7 编译器检查
8.8 输入验证
8.9 数据净化
8.9.1 黑名单
8.9.2 白名单
8.9.3 测试
8.10 静态分析
8.10.1 Fortify
8.10.2 Prexis
8.10.3 Prevent
8.10.4 PREfix和PREfast
8.11 质量保证
8.11.1 渗透测试
8.11.2 模糊测试
8.11.3 代码审计
8.11.4 开发人员准则与检查清单
8.11.5 独立安全审查
8.12 内存权限
8.12.1 W^X
8.12.2 PaX
8.12.3 数据执行防护
8.13 深层防御
8.14 TSP-Secure
8.14.1 计划和跟踪
8.14.2 质量管理
8.15 本章小结
8.16 阅读材料
参考文献
缩略语
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证