C和C++安全编码(原书第2版)
上QQ阅读APP看书,第一时间看更新

现代社会对网络化软件系统的依赖日益加深,以这些系统为目标的攻击数量亦与日俱增。形形色色的针对政府、公司、教育机构以及个人系统的攻击,已经导致诸多严重的后果:敏感数据丢失或损坏、系统受损、生产效率降低,以及经济损失等。

尽管今天互联网上的攻击行为大多不过是恶作剧,但是越来越多的证据表明,罪犯、恐怖分子以及其他心怀叵测的人已将软件系统中的漏洞视作达成其不可告人目的的手段。近年来,每年发现的软件漏洞已逾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 主管