2012 年 8 月
中文版 Version 1.0 4
软件安全与风险原则概览
开发安全的软件需要对安全原则有基本的了解。虽然对于安全原则的全面评估超出了本指南的范
围,但是我们还是提供了一个快速的概览。
软件安全的目标是要维护信息资源的
保密性
,
完整性
,和
可用性
,以确保业务的成功运作。该目标
通过实施
安全控制
来实现。本指南重点介绍具体的技术控制,以
缓解
常见软件
漏洞
的发生。虽然主
要的关注点是 Web 应用程序及其配套的基础设施,但是本指南的大部分内容可应用于任意软件部署
平台。
为了保护业务免受来自与软件相关的不能接受的风险,了解风险的意义是很有帮助的。风险是一组
威胁业务成功因素的集合。它可以被定义为:一个
威胁代理
与一个可能含有
漏洞
的
系统
交互,该漏
洞可被
利用
并造成
影响
。虽然这可能看起来象是一个抽象的概念,但可以这样想象它:一个汽车盗
窃犯(威胁代理)来到一个停车场(系统)寻找没有锁车门(漏洞)的车,当找到一个时,他们打
开门(利用)并拿走里面任何的东西(影响)。所有这些因素在安全软件开发时都扮演了一个角
色。
开发团队采用的方法和攻击者攻击应用程序所采用的方法之间有一个根本区别。开发团队通常采用
的方法是基于应用程序的目的行为。换句话说,开发团队根据功能需求文档和用例设计一个应用程
序以执行特定的任务。而另一方面,攻击者,基于“没有具体说明应拒绝的行为,则被认为是可行
的”原则,对于应用程序可以做什么更感兴趣。为了解决这个问题,一些额外的元素需要被集成到软
件生命周期的早期阶段。这些新元素是
安全需求
和
滥用实例
。本指南旨在帮助明确高等级的安全需
求,并解决许多常见的滥用情况。
Web 开发团队应当明白,基于客户端的输入验证、隐藏字段和界面控件(例如,下拉键和单选按
钮)的客户端控制,所带来的安全性收益是有限的,这一点非常重要。攻击者可以使用工具,比
如:客户端的 Web 代理(例如,OWASP WebScarab,Burp)或网络数据包捕获工具(例如,
Wireshark),进行应用程序流量分析,提交定制的请求,并绕过所有的接口。另外,Flash,Java
Applet 和其它客户端对象可以被反编译并进行漏洞分析。
软件的安全漏洞可以在软件开发生命周期的任何阶段被引入,包括:
最初没有明确的安全需求;
创建有逻辑错误的概念设计;
使用糟糕的编码规范,从而带来了技术漏洞;
软件部署不当;
在维护或者更新过程中引入缺陷。
此外,还有重要的一点需要明白,软件漏洞可以超出软件本身的范围。根据不同的软件、漏洞和配
套基础设施的性质,一次成功的攻击会影响下面任何或者所有的方面:
软件和其相关的信息;
相关服务器的操作系统;
后端数据库;
在共享环境中的其它应用程序;
用户的系统;
与用户交互的其它软件。