C和C++安全编码
基本信息
内容简介回到顶部↑
书籍
计算机书籍
本书是关于c和c++安全编码的著作。本书介绍了c和c++程序中已经导致危险的、破坏性的基本编程错误,包括在字符串、指针、动态内存管理、整数、格式化输出、文件i/o等中的漏洞或缺陷。本书还提供了对这些编程错误的深入剖析,并给出缓解策略,以减少或消除恶意利用漏洞的风险。.
本书适合c/c++程序员、软件安全工程师参考。
洞悉软件漏洞的成因,熟知规避之道..
通常而言,可利用的软件漏洞都由本可避免的软件缺陷所导致。在分析了过去10年中近18000份漏洞报告后,cert/cc发现少量的根本原因导致了这些漏洞的产生。本书识别并解释了这些原因,而且展示了预防利用漏洞的步骤。此外,本书还鼓励程序员采用最佳安全实践,并培养安全的开发理念,这不但有助于保护软件免遭当前的攻击,更可使它们免遭将来可能发生的攻击。
基于cert/cc的报告和总结,robert seacord系统地揭示了最可能导致安全缺陷的编程错误,展示了这些缺陷的利用方式,介绍了可能导致的后果,并提供了安全的替代做法。
本书特别讨论了如下技术细节:
■ 改善任何c/c++应用程序的整体安全性。
■ 抵御利用不安全的字符串操作逻辑的缓冲区溢出和栈粉碎攻击。
■ 避免因对动态内存管理函数的不当使用而导致的漏洞和安全缺陷。
■ 消除与整数相关的问题,包括整数溢出、符号错误以及截断错误等。
■ 正确地使用格式化输出函数,避免引入格式字符串漏洞。
■ 避免i/o漏洞,包括竞争条件等。
本书提供了许多针对windows和linux的安全代码、不安全代码以及利用程序的例子。如果你负责创建安全的c或c++软件,或者需要保持这类软件的安全性,本书为你提供了详尽的专家级协助。在这方面,其他任何书籍都望尘莫及。...
计算机书籍
本书是关于c和c++安全编码的著作。本书介绍了c和c++程序中已经导致危险的、破坏性的基本编程错误,包括在字符串、指针、动态内存管理、整数、格式化输出、文件i/o等中的漏洞或缺陷。本书还提供了对这些编程错误的深入剖析,并给出缓解策略,以减少或消除恶意利用漏洞的风险。.
本书适合c/c++程序员、软件安全工程师参考。
洞悉软件漏洞的成因,熟知规避之道..
通常而言,可利用的软件漏洞都由本可避免的软件缺陷所导致。在分析了过去10年中近18000份漏洞报告后,cert/cc发现少量的根本原因导致了这些漏洞的产生。本书识别并解释了这些原因,而且展示了预防利用漏洞的步骤。此外,本书还鼓励程序员采用最佳安全实践,并培养安全的开发理念,这不但有助于保护软件免遭当前的攻击,更可使它们免遭将来可能发生的攻击。
基于cert/cc的报告和总结,robert seacord系统地揭示了最可能导致安全缺陷的编程错误,展示了这些缺陷的利用方式,介绍了可能导致的后果,并提供了安全的替代做法。
本书特别讨论了如下技术细节:
■ 改善任何c/c++应用程序的整体安全性。
■ 抵御利用不安全的字符串操作逻辑的缓冲区溢出和栈粉碎攻击。
■ 避免因对动态内存管理函数的不当使用而导致的漏洞和安全缺陷。
■ 消除与整数相关的问题,包括整数溢出、符号错误以及截断错误等。
■ 正确地使用格式化输出函数,避免引入格式字符串漏洞。
■ 避免i/o漏洞,包括竞争条件等。
本书提供了许多针对windows和linux的安全代码、不安全代码以及利用程序的例子。如果你负责创建安全的c或c++软件,或者需要保持这类软件的安全性,本书为你提供了详尽的专家级协助。在这方面,其他任何书籍都望尘莫及。...
作译者回到顶部↑
目录回到顶部↑
译者序.
序言
前言
作译者简介
第1章 夹缝求生 1
1.1 衡量危险 3
1.1.1 损失的现状 4
1.1.2 威胁的来源 5
1.1.3 软件安全 6
1.2 安全概念 7
1.2.1 安全策略 8
1.2.2 安全缺陷 8
1.2.3 漏洞 9
1.2.4 利用 10
1.2.5 缓解措施 10
1.3 c和c++ 11
1.3.1 c和c++简史 11
1.3.2 c存在的问题 12
1.3.3 遗留代码 13
1.3.4 其他语言 13
序言
前言
作译者简介
第1章 夹缝求生 1
1.1 衡量危险 3
1.1.1 损失的现状 4
1.1.2 威胁的来源 5
1.1.3 软件安全 6
1.2 安全概念 7
1.2.1 安全策略 8
1.2.2 安全缺陷 8
1.2.3 漏洞 9
1.2.4 利用 10
1.2.5 缓解措施 10
1.3 c和c++ 11
1.3.1 c和c++简史 11
1.3.2 c存在的问题 12
1.3.3 遗留代码 13
1.3.4 其他语言 13
译者序回到顶部↑
现代社会离不开计算机软件系统的顺畅运行。然而总有一些黑客或骇客为了政治、经济或纯粹的个人满足目的攻击软件系统,其中大部分得逞的攻击是因为软件系统自身存在漏洞。尽管事后的补救措施可以在一定程度上减少损失,然而如果在软件创建之初就避免引入漏洞,攻击者就无法轻易获得下手的机会。避免软件引入漏洞首先是程序员的责任。C和C++语言的天性导致程序员必须小心谨慎才能编写出没有漏洞的程序。.
Robert Seacord是SEI CERT/CC资深漏洞分析师,具有二十多年的编程经验,洞悉C和C++在软件项目中的应用状况,这本书可以说专门为C和C++程序员而写(尽管其他语言的开发人员或技术管理者也可以从阅读本书中深深受益),并不要求读者事先掌握多少计算机安全背景知识。作者显然善于讲解复杂的技术,深入浅出地阐述了软件中的各种安全漏洞及成因,给出了很多著名的安全漏洞例子,并揭示黑客如何利用程序中的漏洞侵入并破坏系统。
保障软件系统的安全主要有两种方式:配置安全和编程安全,前者面向系统管理员和系统用户,后者则要求程序员掌握安全的编程技术。也许完全消除漏洞是难以达到的目标(世界上根本不存在没有bug的软件),但程序员可以组合使用多种方式尽可能消除软件缺陷。作者展示了许多不安全的编程习惯和相应的改进措施,推荐了有效的软件工具和经过验证的方法,有助于我们编写出更健壮、更不容易遭受攻击的软件系统。..
每一位开发商业和项目软件系统的C或C++程序员都应该阅读本书,尤其是那些编写会被很多用户通过互联网下载安装的软件的程序员,那些编写控制电力、电信、金融、军事、航空航天等关键设施的软件系统的程序员,以及其他所有认为自己编写的软件对他人很重要的程序员。对于有漏洞的软件系统,即使没有遭受黑客的恶意攻击,出乎意料的输入或操作也可能会导致灾难性的后果。由于每一个安全漏洞也可能是导致程序崩溃或产生错误输出的缺陷,因此,即便没有黑客或骇客盯上我们的软件,程序员也有责任保证软件系统没有漏洞。
使用Java或C#之类的语言编写软件无疑可以少引入安全漏洞,然而C和C++语言的地位无法取代。为何使用C和C++语言编程?因为对效率和灵活控制底层的苛求。如果你是一名C或C++程序员,希望本书在带给你宝贵的技术和良好阅读体验的同时,也能为你带来危机感—现在就复审以前的代码是否存在安全漏洞,并避免在未来的代码中引入安全漏洞。毕竟编写无漏洞的软件需要的不单是技术,更有高度的责任感。
感谢读者朋友给予的一贯支持,你们的批评和赞扬对我来说同样重要。感谢初译者罗翼先生作出的贡献。感谢机械工业出版社华章公司的陈冀康先生、周茂辉编辑以及所有其他为本书的出版作出贡献的不知名的人们。感谢导师王建东老师的理解与支持。感谢朱艳和荣,你们是我生活的全部。
祝各位阅读快乐!...
荣耀
2009年5月
南京师范大学中北学院
www.royaloo.com
Robert Seacord是SEI CERT/CC资深漏洞分析师,具有二十多年的编程经验,洞悉C和C++在软件项目中的应用状况,这本书可以说专门为C和C++程序员而写(尽管其他语言的开发人员或技术管理者也可以从阅读本书中深深受益),并不要求读者事先掌握多少计算机安全背景知识。作者显然善于讲解复杂的技术,深入浅出地阐述了软件中的各种安全漏洞及成因,给出了很多著名的安全漏洞例子,并揭示黑客如何利用程序中的漏洞侵入并破坏系统。
保障软件系统的安全主要有两种方式:配置安全和编程安全,前者面向系统管理员和系统用户,后者则要求程序员掌握安全的编程技术。也许完全消除漏洞是难以达到的目标(世界上根本不存在没有bug的软件),但程序员可以组合使用多种方式尽可能消除软件缺陷。作者展示了许多不安全的编程习惯和相应的改进措施,推荐了有效的软件工具和经过验证的方法,有助于我们编写出更健壮、更不容易遭受攻击的软件系统。..
每一位开发商业和项目软件系统的C或C++程序员都应该阅读本书,尤其是那些编写会被很多用户通过互联网下载安装的软件的程序员,那些编写控制电力、电信、金融、军事、航空航天等关键设施的软件系统的程序员,以及其他所有认为自己编写的软件对他人很重要的程序员。对于有漏洞的软件系统,即使没有遭受黑客的恶意攻击,出乎意料的输入或操作也可能会导致灾难性的后果。由于每一个安全漏洞也可能是导致程序崩溃或产生错误输出的缺陷,因此,即便没有黑客或骇客盯上我们的软件,程序员也有责任保证软件系统没有漏洞。
使用Java或C#之类的语言编写软件无疑可以少引入安全漏洞,然而C和C++语言的地位无法取代。为何使用C和C++语言编程?因为对效率和灵活控制底层的苛求。如果你是一名C或C++程序员,希望本书在带给你宝贵的技术和良好阅读体验的同时,也能为你带来危机感—现在就复审以前的代码是否存在安全漏洞,并避免在未来的代码中引入安全漏洞。毕竟编写无漏洞的软件需要的不单是技术,更有高度的责任感。
感谢读者朋友给予的一贯支持,你们的批评和赞扬对我来说同样重要。感谢初译者罗翼先生作出的贡献。感谢机械工业出版社华章公司的陈冀康先生、周茂辉编辑以及所有其他为本书的出版作出贡献的不知名的人们。感谢导师王建东老师的理解与支持。感谢朱艳和荣,你们是我生活的全部。
祝各位阅读快乐!...
荣耀
2009年5月
南京师范大学中北学院
www.royaloo.com
前言回到顶部↑
1988年11月爆发的Morris蠕虫事件造成当时全球十分之一的互联网系统陷入瘫痪,作为对该事件的响应,当月美国国防部高级研究计划局(Defense Advanced Research Projects Agency,DARPA)成立了CERT协调中心(CERT Coordination Center,CERT/CC)。CERT/CC位于宾夕法尼亚州匹兹堡市的软件工程研究院(Software Engineering Institute,SEI)内,这是一个由美国国防部发起的研发中心,受联邦政府资助。.
CERT/CC最初的工作重点是对各种网络事件作出快速响应和分析。这里所说的事件既包括得逞的攻击(如系统受损与拒绝服务等),也包括未得逞的攻击企图、探测和扫描。自1988年以来,CERT/CC共已接到逾22 665个报告计算机安全事件或咨询有关信息的热线电话,已处理总共逾319 992起计算机安全事件,而且每年报告的事件数目呈持续增长的态势。
虽然对事件作出及时响应必不可少,然而这还不足以保护互联网和互联的信息系统的安全。分析表明,大部分计算机安全事件是由于特洛伊木马、社会工程学(social engineering)以及软件漏洞利用(exploitation)所造成的,包括软件缺陷、设计决策、配置决策以及非预期的系统间交互等。CERT/CC监控漏洞信息的公共来源并经常性地接到漏洞报告。自1995年以来,CERT已经收到超过16 726份漏洞报告。每当收到一份报告,CERT/CC就会分析报告所述的可能的漏洞,并与软件制造者协作,通知其产品中存在安全缺陷,促进并追踪其对问题的响应。
和事件报告相似,漏洞报告也以惊人的速度持续增长。虽然对漏洞的管理抑制了这一进程的发展,然而对于解决互联网和信息系统的安全问题来说,这同样远远不够。为了解决日益增加的漏洞和事件问题,必须采取相应的措施:在源头予以有效地控制它们,即必须在软件的开发阶段和随后的维护工作中就避免引入软件漏洞。对现有漏洞的分析表明,大部分漏洞都是由少数根本原因所导致。本书的目标就在于告诉开发者有关这些根本原因的知识,并介绍避免引入漏洞的措施。
读者
对任何采用C和C++开发或维护软件的人来说,本书都是非常有价值的。
·对C/C++程序员而言,本书将教你如何识别会导致软件漏洞的常见编程错误,理解这些错误是如何被利用的,并以安全的方式实现解决方案。
·对软件项目管理者而言,本书将教你识别软件漏洞的风险及导致的后果,对进行安全的软件开发给出指导。
·对计算机专业学生而言,本书将教你有用的编程实践,帮助你避免不良的开发习惯,使你能够在职业生涯中开发出安全的程序。
·对安全分析师而言,本书对常见的漏洞提供了细致的描述,并提供了检测漏洞的方法和实用的规避措施。
本书组织和内容
本书提供了C和C++编程中关于安全实践方面的实用指导。安全的程序需要安全的设计,然而,如果开发者不了解C和C++编程中许多固有的安全陷阱,那么即便是最佳设计也可能最终导致不安全的程序。本书对C和C++中常见的编程错误提供了详细的解释,并描述了这些错误是如何导致有漏洞的代码的。本书专注于讨论C和C++编程语言以及相关库固有的安全问题,而不强调和外部系统(如数据库服务器和Web服务器等)的交互中牵涉的安全问题。这些方面话题丰富,应单独讨论。本书的用意在于,对于涉及开发安全的C和C++程序的任何人都有所裨益,而不管具体开发何种应用。
本书围绕着软件工程师经常实现的、可能会导致安全问题的功能(例如格式化输出和算术运算等)组织内容。每一章都描述了一些会导致漏洞的不安全编程实践和常见的错误,这些编程缺陷又会被如何利用,这种恶意利用所导致的后果,以及替代的安全做法等。对于软件漏洞的根源问题,例如缓冲区溢出、整型范围错误和无效的格式字符串等,都有详细的解释。每一章都包含检测既有代码中漏洞的技术,以及如何安全地实现所需功能的措施。
本书包含以下各章:
·第1章:概述问题,介绍安全术语和概念,并对为何C和C++程序中存在如此多的漏洞发表看法。
·第2章:描述C和C++中的字符串操作、常见的安全缺陷以及由此导致的漏洞(包括缓冲区溢出攻击和栈粉碎攻击),还介绍了代码注入(code injection)和弧注入(arc injection)两种漏洞利用方式。..
·第3章:介绍了任意内存写(arbitrary memory write)漏洞利用方式,它允许攻击者对内存中任意位置的一个地址进行写操作。本章描述了这些漏洞利用方式如何用于在受害机器上执行任意的代码。由“任意内存写”导致的漏洞在稍后的章节中讨论。
·第4章:描述动态内存管理,讨论了动态分配的缓冲区溢出、写入已释放内存,以及重复释放(double-free)漏洞。
·第5章:讨论整数安全问题(即与整数操作相关的安全议题),包括整数溢出、符号错误以及截断错误等。
·第6章:描述格式化输出函数的正确和错误的用法。因对这些函数的错误使用所导致的格式字符串和缓冲区溢出漏洞都有讨论。
CERT/CC最初的工作重点是对各种网络事件作出快速响应和分析。这里所说的事件既包括得逞的攻击(如系统受损与拒绝服务等),也包括未得逞的攻击企图、探测和扫描。自1988年以来,CERT/CC共已接到逾22 665个报告计算机安全事件或咨询有关信息的热线电话,已处理总共逾319 992起计算机安全事件,而且每年报告的事件数目呈持续增长的态势。
虽然对事件作出及时响应必不可少,然而这还不足以保护互联网和互联的信息系统的安全。分析表明,大部分计算机安全事件是由于特洛伊木马、社会工程学(social engineering)以及软件漏洞利用(exploitation)所造成的,包括软件缺陷、设计决策、配置决策以及非预期的系统间交互等。CERT/CC监控漏洞信息的公共来源并经常性地接到漏洞报告。自1995年以来,CERT已经收到超过16 726份漏洞报告。每当收到一份报告,CERT/CC就会分析报告所述的可能的漏洞,并与软件制造者协作,通知其产品中存在安全缺陷,促进并追踪其对问题的响应。
和事件报告相似,漏洞报告也以惊人的速度持续增长。虽然对漏洞的管理抑制了这一进程的发展,然而对于解决互联网和信息系统的安全问题来说,这同样远远不够。为了解决日益增加的漏洞和事件问题,必须采取相应的措施:在源头予以有效地控制它们,即必须在软件的开发阶段和随后的维护工作中就避免引入软件漏洞。对现有漏洞的分析表明,大部分漏洞都是由少数根本原因所导致。本书的目标就在于告诉开发者有关这些根本原因的知识,并介绍避免引入漏洞的措施。
读者
对任何采用C和C++开发或维护软件的人来说,本书都是非常有价值的。
·对C/C++程序员而言,本书将教你如何识别会导致软件漏洞的常见编程错误,理解这些错误是如何被利用的,并以安全的方式实现解决方案。
·对软件项目管理者而言,本书将教你识别软件漏洞的风险及导致的后果,对进行安全的软件开发给出指导。
·对计算机专业学生而言,本书将教你有用的编程实践,帮助你避免不良的开发习惯,使你能够在职业生涯中开发出安全的程序。
·对安全分析师而言,本书对常见的漏洞提供了细致的描述,并提供了检测漏洞的方法和实用的规避措施。
本书组织和内容
本书提供了C和C++编程中关于安全实践方面的实用指导。安全的程序需要安全的设计,然而,如果开发者不了解C和C++编程中许多固有的安全陷阱,那么即便是最佳设计也可能最终导致不安全的程序。本书对C和C++中常见的编程错误提供了详细的解释,并描述了这些错误是如何导致有漏洞的代码的。本书专注于讨论C和C++编程语言以及相关库固有的安全问题,而不强调和外部系统(如数据库服务器和Web服务器等)的交互中牵涉的安全问题。这些方面话题丰富,应单独讨论。本书的用意在于,对于涉及开发安全的C和C++程序的任何人都有所裨益,而不管具体开发何种应用。
本书围绕着软件工程师经常实现的、可能会导致安全问题的功能(例如格式化输出和算术运算等)组织内容。每一章都描述了一些会导致漏洞的不安全编程实践和常见的错误,这些编程缺陷又会被如何利用,这种恶意利用所导致的后果,以及替代的安全做法等。对于软件漏洞的根源问题,例如缓冲区溢出、整型范围错误和无效的格式字符串等,都有详细的解释。每一章都包含检测既有代码中漏洞的技术,以及如何安全地实现所需功能的措施。
本书包含以下各章:
·第1章:概述问题,介绍安全术语和概念,并对为何C和C++程序中存在如此多的漏洞发表看法。
·第2章:描述C和C++中的字符串操作、常见的安全缺陷以及由此导致的漏洞(包括缓冲区溢出攻击和栈粉碎攻击),还介绍了代码注入(code injection)和弧注入(arc injection)两种漏洞利用方式。..
·第3章:介绍了任意内存写(arbitrary memory write)漏洞利用方式,它允许攻击者对内存中任意位置的一个地址进行写操作。本章描述了这些漏洞利用方式如何用于在受害机器上执行任意的代码。由“任意内存写”导致的漏洞在稍后的章节中讨论。
·第4章:描述动态内存管理,讨论了动态分配的缓冲区溢出、写入已释放内存,以及重复释放(double-free)漏洞。
·第5章:讨论整数安全问题(即与整数操作相关的安全议题),包括整数溢出、符号错误以及截断错误等。
·第6章:描述格式化输出函数的正确和错误的用法。因对这些函数的错误使用所导致的格式字符串和缓冲区溢出漏洞都有讨论。
序言回到顶部↑
现代社会对网络化软件系统的依赖与日俱增,以这些系统为目标的攻击数量亦与日俱增。形形色色的针对政府、公司、教育机构以及个人系统的攻击,已经导致诸多严重的后果:敏感数据丢失或被破坏,系统受损,生产效率降低,以及财务损失,等等。 .
尽管今天互联网上的攻击行为大多不过是恶作剧,然而越来越多的证据表明,罪犯、恐怖分子以及其他心怀叵测的人已将软件系统中的漏洞视作达成其不可告人目的的手段。近年来,每年发现的软件漏洞逾4000个。这些漏洞的成因包括:在设计和实现方面对如何保护系统考虑不周;在开发实践方面对消除会导致安全缺陷的实现瑕疵关注不够。
伴随着软件漏洞日益增加,攻击手法也与时俱进,变得越发老练、有效。入侵者在发现软件产品中的漏洞后,可以迅速开发出利用漏洞的脚本,继而使用这些脚本威胁计算机的安全。更糟糕的是,还将这些脚本与其他攻击者共享。这些脚本与一些“自动扫描网络以窥探脆弱系统”的程序联合起来,攻击那些脆弱系统,危害其安全,甚至利用它们进一步传播攻击。
由于每年都会发现大量的漏洞,系统管理员为了给既有系统打补丁日益疲于奔命。打补丁有时并非易事,并可能会导致意想不到的副作用。在厂商发布一个安全补丁后,可能需耗时数月乃至数年的时间,才能有90%~95%的受影响计算机完成修补工作。
互联网用户已经严重依赖于这样一种解决方式:互联网社群作为一个整体,对发生的安全攻击快速作出反应,以确保将损害降至最低,并将攻击迅速击溃。然而,显而易见,如今的“反应式解决方案”已经达到其效力的极限。虽然个体响应组织均为将漏洞处理过程精简化和自动化而努力工作,然而今天商业软件产品中的漏洞数目,已经多至只有财力雄厚的组织才能应对漏洞修复工作,其他组织实质上已心有余而力不足。 ..
没有任何证据表明大多数产品中的安全问题得到了改善,很多软件开发者尚未很好地理解从各种漏洞成因中获得的教训,或者尚未运用能够起作用的缓解策略,CERT/CC不断在同一软件产品的更新版中发现早期版本即已存在的同类漏洞就是明证。
这些因素交织在一起,预示着我们完全可以相信,很多攻击甚至会在我们所实际希望的最短响应时间内造成巨大的经济损失和服务崩溃。
虽然积极且协调的反应仍然不可或缺,但我们还必须构建出不易被破坏的更安全的系统。
关于本书
本书致力于解决C和C++中已经导致危险的、破坏性的常见软件漏洞的基本编程错误。这些漏洞自CERT 1988年创立以来就记录在案。针对导致这些漏洞的编程错误,本书出色地给出了深度工程分析和缓解策略,可以富有成效地减少或消除漏洞被恶意利用的风险。
自Robert于1987年4月加入SEI以来,我就一直与他共事。Robert是一位知识渊博、技术熟练的软件工程师,在软件漏洞细节分析和表达洞察成果方面卓尔不凡。作为研究结果,本书细致而精确地分析了软件开发者面临的常见问题,并提供了实用的解决方案。Robert在软件开发方面具备的宽广背景,也使得他擅长在性能、易用性以及其他在开发安全代码过程中必须考虑的质量特性之间作出权衡。除了Robert外,本书还凝聚了CERT积累和提炼的知识,以及CERT/CC漏洞分析小组、CERT操作人员、SEI编辑和后勤人员的杰出工作。...
Richard D.Pethia
CERT主管
尽管今天互联网上的攻击行为大多不过是恶作剧,然而越来越多的证据表明,罪犯、恐怖分子以及其他心怀叵测的人已将软件系统中的漏洞视作达成其不可告人目的的手段。近年来,每年发现的软件漏洞逾4000个。这些漏洞的成因包括:在设计和实现方面对如何保护系统考虑不周;在开发实践方面对消除会导致安全缺陷的实现瑕疵关注不够。
伴随着软件漏洞日益增加,攻击手法也与时俱进,变得越发老练、有效。入侵者在发现软件产品中的漏洞后,可以迅速开发出利用漏洞的脚本,继而使用这些脚本威胁计算机的安全。更糟糕的是,还将这些脚本与其他攻击者共享。这些脚本与一些“自动扫描网络以窥探脆弱系统”的程序联合起来,攻击那些脆弱系统,危害其安全,甚至利用它们进一步传播攻击。
由于每年都会发现大量的漏洞,系统管理员为了给既有系统打补丁日益疲于奔命。打补丁有时并非易事,并可能会导致意想不到的副作用。在厂商发布一个安全补丁后,可能需耗时数月乃至数年的时间,才能有90%~95%的受影响计算机完成修补工作。
互联网用户已经严重依赖于这样一种解决方式:互联网社群作为一个整体,对发生的安全攻击快速作出反应,以确保将损害降至最低,并将攻击迅速击溃。然而,显而易见,如今的“反应式解决方案”已经达到其效力的极限。虽然个体响应组织均为将漏洞处理过程精简化和自动化而努力工作,然而今天商业软件产品中的漏洞数目,已经多至只有财力雄厚的组织才能应对漏洞修复工作,其他组织实质上已心有余而力不足。 ..
没有任何证据表明大多数产品中的安全问题得到了改善,很多软件开发者尚未很好地理解从各种漏洞成因中获得的教训,或者尚未运用能够起作用的缓解策略,CERT/CC不断在同一软件产品的更新版中发现早期版本即已存在的同类漏洞就是明证。
这些因素交织在一起,预示着我们完全可以相信,很多攻击甚至会在我们所实际希望的最短响应时间内造成巨大的经济损失和服务崩溃。
虽然积极且协调的反应仍然不可或缺,但我们还必须构建出不易被破坏的更安全的系统。
关于本书
本书致力于解决C和C++中已经导致危险的、破坏性的常见软件漏洞的基本编程错误。这些漏洞自CERT 1988年创立以来就记录在案。针对导致这些漏洞的编程错误,本书出色地给出了深度工程分析和缓解策略,可以富有成效地减少或消除漏洞被恶意利用的风险。
自Robert于1987年4月加入SEI以来,我就一直与他共事。Robert是一位知识渊博、技术熟练的软件工程师,在软件漏洞细节分析和表达洞察成果方面卓尔不凡。作为研究结果,本书细致而精确地分析了软件开发者面临的常见问题,并提供了实用的解决方案。Robert在软件开发方面具备的宽广背景,也使得他擅长在性能、易用性以及其他在开发安全代码过程中必须考虑的质量特性之间作出权衡。除了Robert外,本书还凝聚了CERT积累和提炼的知识,以及CERT/CC漏洞分析小组、CERT操作人员、SEI编辑和后勤人员的杰出工作。...
Richard D.Pethia
CERT主管
媒体评论回到顶部↑
“信息系统的安全性并未随受攻击的数目和程度的增长同步得到改善。为了改变这一现状,必须改进用于创建系统的策略和技术。具体来说,必须从一开始就将安全性构建于系统之内而不是将其作为补救措施附加进来,这正是本书的要旨。这本书向软件开发者详尽展示了如何构建高质量的系统,它们具有更少的漏洞,不易遭受代价高昂或后果严重的攻击。任何开发者在进行重大的项目开发之前都应该阅读本书。”.
——Frank Abagnale,作家、讲师、欺诈预防和安全文献领域资深顾问...
——Frank Abagnale,作家、讲师、欺诈预防和安全文献领域资深顾问...








点击看大图






加载中...

