当然,技术是任何SDL实现中的关键组成部分。它能够自动化一些较为单调乏味的组件(例如源代码评审),提高SDL过程的效率。SDL也应该在整个开发过程中规定一致的技术标准,例如编译时参数(例如,Microsoft的/GS标志),标准输入校验例程的加入,以及不安全或者引起麻烦的功能的禁止。下面是与这些主题相关的主要关注点。
自动化代码评审技术
随着安全性持续地获得商业上的重视,市场将会持续地出现安全代码评审和测试技术。我们已经看到本章前面的表10-1中的一些例子。确保你的SDL工具集最新,这样你的应用面对的尖端零日攻击的风险就会较少。
托管执行环境
我们强烈建议将你的Web应用移植到托管开发平台如Sun Java(http://www.oracle.com/technetwork/java/index.html)或者Microsoft.NET框架(http://www.microsoft.com/net/)中(如果你还没有这么做的话)。使用这种环境开发的代码利用强大的内存管理技术,在受到保护的安全沙箱中运行,大大地降低了安全漏洞的可能性。
输入校验/输出编码程序库
几乎所有软件破解都依赖输入以未预期的方式处理这一假设。因此,软件安全所追求的是严密的输入校验(还有输出编码)。大部分软件开发机构使用正则表达式匹配(http://www.regexlib.com/有很好的提示)草率地制作自己的输入校验例程。对于输出编码,Microsoft也发布了一个防XSS程序库,可以集成到.NET应用中。如果可能,我们建议使用这些输入校验程序库,将尽可能多有害的输入驱离你的应用。
如果你选择实现自己的输入校验例程,记住下面的输入校验基本原则:
·将预期的用户输入数量限制为最低,特别是自由形式的输入。
·在整个应用中,假设所有输入都是恶意的并且照此进行处理。
·任何时候都不要自动地信任客户输入。
·在进行任何检查或者校验之前规范化所有输入。
·限制你的应用接受的可能输入(例如,邮政编码域只接受5位数字)。
·拒绝所有不满足这些约束的输入。
·净化余下的所有输入(例如,删除&'><等可能被转换为可执行内容的元字符)。
·对输出进行编码,这样即使有潜入的内容,也会无害地交付给用户。
提示 更多输入校验攻击和对策参见第6章。
平台改进
关注新技术的发展,例如Microsoft的数据执行保护(DEP)功能。Microsoft已经实现了DEP来提供对内存崩溃攻击如缓冲区溢出的广泛保护(细节参见http://support.microsoft.com/kb/875352/)。DEP同时具有硬件和软件组件。在兼容的硬件上运行时,DEP自动启动,将内存的特定部分标记为不可执行的,除非这些部分明确地包含可执行代码。表面上,这能预防大部分基于栈的缓冲区溢出攻击。除了硬件实施的DEP之外,Windows XP SP2及更新版本还实现了软件实施的DEP,试图阻止对Windows的异常处理机制的漏洞利用攻击。
其他防御机制如地址空间布局随机化(ASLR)和结构化异常处理覆盖保护(Structured Exception Handling Overwrite Protection,SEHOP)对于特定的攻击类型是有效的防御。更多关于这些防御的信息以及在应用中确定它们是否有意义的方法,请参见本章结尾处的“参考与延伸阅读”小节。Web应用开发人员应该知道这些改进正在出现在64位平台中,并且开始计划尽快进行移植。
自动化Web应用安全扫描程序
如果你是一位IT管理员,任务是管理有许多Web应用的大中型企业的安全,我们就没有必要向你宣扬自动化的巨大好处。多年以来,我们已经评估了几十个Web应用安全扫描工具并且常常被问及“哪个最好?”,进行一次竞赛选出我们最喜欢的工具是有诱惑力的(在本书第2版中我们曾经这么做过),我们已经意识到,这种技术的市场发展比我们的发行周期快,不可避免地使得我们所选择的产品在读者看到时已经陈旧。而且,典型企业的独特需求使这种比较难以在常规的竞赛中进行。最后,常规的竞赛在互联网上经常进行,为读者提供更新的信息(我们在本章结尾处的“参考与延伸阅读”小节中引用了一些最近的研究)。基于这些因素和我们长期的经验,本章将提供关于Web应用扫描领域中领先产品的简短看法,意在为读者指出一条途径,对许多这种工具进行评估,选择最适合他们需求的产品。
注意 这里未介绍的非商业化Web评估工具参见第1章和附录B。
我们最常遇见的Web应用安全扫描程序(不管是在外部咨询还是公司内部安全部门中使用的),按照见到的频率大小排列,包括HP WebInspect、IBM AppScan、Cenzic Hailstorm和NTObjectives NTOSpider。最近,开始出现了进行Web应用安全扫描并提供结果的托管服务。这些服务机构的例子有WhiteHat Security和HP SaaS Application Security Center。我们根据这个简短的列表来评估大企业所用的这类技术。
基础架构安全扫描市场上的一些重要角色已经开始关注Web应用。主要的提供者包括Qualys的Web Module,nCircle的WebApp360,McAfee的Vulnerability Manager和Tenable的Nessus Web服务器插件。尽管这些工具在不断改进,但是它们目前提供的Web功能远远少于前面提到的专用Web应用扫描工具。但是,继续考虑这些产品是明智的,因为它们背后的公司有丰富的资源,而且明显对改进Web应用层的功能有兴趣。
技术评估和采购
初期的应用安全计划面对的问题之一是“构建还是购买?”总体上,我们的建议是“购买”,根据我们的一般经验,长远来看,开发自用的安全应用所花费的精力和金钱是不值得的(甚至在我们曾经工作过的一些大型、成熟的软件开发公司中,这种说法也没有错)。这意味着你必须设计出持续评估新技术的一个过程,确保你的Web安全计划保持正常。
提示 附录B列出多种现成的Web示例应用,可以用于测试安全技术。
我们建议你明确地为这一工作提供人员,定义简明的目标,不要让这个工作成为漫无边际的或者不可靠的项目,确保分配了合适的预算来使用团队所选择的技术。