互联网上的计算机每天都可能会受到攻击和伤害。毫无疑问,攻击者正逐渐深入软件堆栈,攻击计算机上安装的软件。不过,这种情形正在慢慢变少,因为随着要求安全的呼声日益高涨,软件厂商在操作系统的防护方面投入了更多的人力物力。在Windows XP发布的2001年到Windows Vista发布的2006年期间,安全技术的发展可谓是日新月异,但反观另一方面,令人厌烦的低级攻击行为也在日益增多。我们经常听到有人抱怨Windows是最容易受到攻击的平台。的确如此,因此,下面的陈述可能会使他们更担心:我们(也就是本书的作者)对媒体上报道的攻击事件并不是特别在意,因为在我们看来攻击永远都会发生。其实,人们应该担心的是其产生的危害,正是因为这个原因,微软人从长计议,竭尽全力想把Windows Vista打造成更安全的产品。.
Windows Vista是微软公司发布的有史以来最安全的操作系统。我们向里面添加了很多防御性的设计(defensive engineering),也采用了很多防护措施。但令人遗憾的是,即使我们如此努力,但攻击仍将继续(我们可以尽量把自己的工作做得更好,但没有权利指定别人可以做什么,不可以做什么)。我们不是说Windows Vista没有安全bug,它肯定会有,但我们为它增加了许多防护措施,尽量减小它被成功攻击的可能性,减少漏洞被利用的机会。我们加入这些防护措施的目的是尽量避免危害发生。
针对日益增长的潜在攻击威胁,你打算如何保护你的应用程序?记住,攻击迟早都会发生!仅仅因为应用程序的标题中没有“Microsoft”并不意味着不会被攻击,也并不意味着它永远不会被攻击!使安全成为一个令人着魔的主题的不是这样一些因素,比方说,计算机的性能和可靠性。性能与可靠性指的是人与计算机之间的问题,而安全却是人与人之间的较量。安全问题没有终结,因为这个世界上总有一些怀有恶意的人。
除了整理已有的代码、修正设计问题外,微软还为Windows Vista新增了许多功能,利用这些功能可以使应用程序更安全。不同于我们以前那些以介绍基础知识为主的书,本书主要介绍运行在Windows Vista上的应用程序怎样利用系统提供的防护措施来保护用户。除了基本的防护策略外,本书还介绍了一些新的安全功能,你可以在应用程序中使用它们,以增加程序的防护措施,从而帮助你或你的客户达到商业目标。
Windows Vista的安全之路走了5年,在这5年多的时间里,微软向Windows Vista中增加了许多防护措施和新的安全功能。你可以在应用程序中充分利用它们,从而减少被攻击的机会。你可以选用下面介绍的三种方法:
·减少用户——如果没有人用你的应用程序,你就不值得攻击。
·减少攻击面——组件的入口越少(特别是默认情况下),被攻击的可能性也就越小。
·加固攻击面——使攻击者知难而退。
我们不建议大家使用第一个方法,但如果你不重视安全,而且固执己见,基本上可以肯定会出现这种情形。我们希望后两个方法对你有所帮助,使你能利用操作系统提供的防护措施和功能保护用户,这也正是本书的目标——阐述如何在程序中使用Windows Vista提供的这些功能。
目标读者
这本书的目标读者主要是那些为Windows Vista编写软件的开发者。当然,这本书还包括一些软件设计上的内容,因此,软件设计师和系统架构师也会从中获益。不过要注意的是,书中包含了大量的代码。
我们将假设读者已经掌握Windows认证与授权等方面的基础知识。虽然书中提供了一些背景信息,但我们仍将假设你知道怎样在Windows里保护对象。如果你不知道,建议你先找一些像“Windows Internals Fourth Edition”(Mark Russinovich,David Solomon,Microsoft Press 2005)之类的书来读。
本书与“Writing Secure Code”(《编写安全的代码》)一书的关系
“Writing Secure Code”(微软出版社)第一版和第二版的内容主要是介绍关键的安全编码的原则,除此之外,书中还简单介绍了在设计和测试软件时应该遵循的原则。而本书的主要内容是介绍怎么利用Windows Vista内部的防护措施和功能,编写出安全的代码。如果你已经有了“编写安全的代码”一书,本书也不会显得多余,因为本书的内容主要是面向Windows Vista的设计和编码的最佳实践,而“编写安全的代码”的内容是宽泛的、基础性的。因此,这本书不是“编写安全的代码”的超集,而是它的有益补充。
如何阅读本书
这本书很薄,如果你打算或正在Windows Vista下编写软件,那么,这本书就是为你准备的——因为你可以从中了解到微软在Windows Vista里新增或改进的防护措施和技术。
本书每一章的内容都相对独立,除了前三章——所有在Windows Vista下编写软件的开发者都应该阅读,其他章节可以有选择地阅读。
第1章,“代码质量”描述了我们为剔除潜在的安全bug,在Windows Vista的代码层所做的改进。软件行业可以从微软为Windows Vista增加安全性所采取的措施中学到很多东西。..
第2章“用户账号控制、令牌和完整性级别”和第3章“缓冲区溢出防护”是一定要读的,因为这两章介绍的技术影响着Windows Vista里所有其他的功能。
现在是网络时代,即使不是所有的开发者,至少大部分的开发者将会编写基于网络的应用程序,因此,应该熟读第4章“网络防护措施”,并学以致用。
.编写服务程序的开发者应该仔细阅读第5章“创建安全而且能复原的服务”,因为我们提供的指导可以使得服务在面对攻击时更有弹性,并使创建以尽可能低的特权运行的服务变得更容易。
如果你为IE编写代码,比如说BHO(browser helper objects)、工具条或ActiveX控件,那么你应该阅读第6章“利用IE的防护措施”。Windows Vista的IE 7在架构上做了很多改进,并新增了许多防护措施,这些将影响代码的运行方式。
如果你的软件中使用了加密函数,那么你应该阅读第7章“加密方面的增强”,因为第7章除了介绍名为Cryptography API:Next Generation(CNG)的新加密结构体系外,还增加了更新的算法及证书的撤销与检验等内容。
开发企业级软件的程序员将从第8章“认证与授权”中找到需要的内容,本章简单地介绍了Windows Vista里的认证及ACL等概念。
最后一章“其他的防护措施和安全技术”介绍的是一些Windows Vista中新加的,但又不适合放在其他章节中的防护措施。你应该花一些时间阅读本章,从而确定在你的软件中是否采用这些功能和防护措施。
如何使用书中的代码
本书中的代码大部分是用C/C++写的,只有很少一部分是用C#写的,使用的开发环境是Microsoft Visual Studio 2005 Team Suite Service Pack 1和Windows Software Development Kit(SDK)。对C/C++开发来说,首先要安装Visual Studio,接着安装Windows SDK。除此之外,还要向Visual Studio中添加相关的Windows SDK头文件和库文件,从而使Visual Studio首先从更新后的目录读取。你可以按下面的步骤操作:
步骤1 打开Visual Studio;
步骤2 选择工具