应用程序并不是一成不变的,它们可能一开始只是一组功能,然后添加上元素并与其他应用程序合并变成其他复杂的应用程序。随着应用程序的越来越复杂,漏洞越来越多,特别是托管在Web上的应用程序以及迁移到云端的应用程序都会出现很多安全问题。
“Web应用程序是头等攻击目标,因为它们很难被保护。今天,云部署完全由web驱动,这意味着云和web应用程序漏洞将直接碰撞。”OWASP志愿者连接委员会主席兼White Hat安全架构的副主席Jim Manico说。
OWASP主席兼Mozilla安全保障总监Michael Coates认为,为这些技术开发一个“通过设计保障安全”的架构已经是一个挑战。一旦发展中的企业将新应用纳入受信任架构之下,下一个障碍就是在这些应用随时间改变以及迁移到云中保持一种安全态势。
据2011年Ponemon Institute和加密供应商对Vormetric对安全与服从性进行的调查发现,大多数安全和服从性方面的专家相信当前部署到云的趋势到来了更多漏洞。在此项调查里,不到40%的受访者信任自己的技术有能力保护其云中的敏感数据——不到三分之一的受访者对其云中的敏感数据进行了加密。
专家称,加密是一个基础设计点,所以应在含有敏感数据的应用中充分考虑到,然而这也是云中最难实现的进程。
在一个安全的设计方案中还需要些什么要素?人们会根据自己所在的行业,所设计的云或Web服务类型来给出答案。不过,有一些常见的设计领域可同时应用于Web和云应用。这包括收集商业请求,开发和测试;访问,验证和数据保护;配置和分区;可视性;维护和持续性。
开发
专家称,应用程序是由程序员在不同的时间编写并进行升级,且通常也没有总体规划,程序中包含了一堆有着已知漏洞的代码,对象和平台。
赛门铁克高级技术总监Gary Phillips
赛门铁克高级技术总监、SAFECode董事会成员Gary Phillips称,随着应用程序将更多的部署到虚拟化环境、云计算环境甚至是移动平台中,一个安全的程序设计要在开发完成前和开发期间都对应用程序进行测试。
据Phillips透露,安全的代码开发实例正在商务供应商之间兴起。最新的IBMX-Force2011年中趋势与威胁报告中提到的Web应用程序漏洞在减少也证明了这一点。报告中提到这是六年来Web应用程序漏洞第一次出现减少,从去年的49%降到了37%(占2011上半年所报告漏洞总和的比例)。
IBM高级安全总监Jack Danahy
另一方面,IBM高级安全总监Jack Danahy称,漏洞的数量翻了三番,而写这份报告的人预计移动漏洞的数量在2012年会翻两倍。SQL注入,XSS,输入验证和大量传统攻击方法都盛行于Web应用程序当中,这些则不应该带到云中去。
为了在应用完成开发前确认哪些漏洞可能被攻击者利用,必须从整体的角度看应用。应用开发顾问公司Denim集团CTO Dan Cornell称这就是通常所说的攻击面。
OWASP,SAFECode,云安全联盟提供的工具,库和API等可以帮助程序员模拟应用威胁,发现应用程序中可能出现故障的代码,调用,互动和功能。
Cornell称,从确定数据价值开始,应用程序会包含或访问。例如,如果涉及个人可识别信息(PII),医疗保健或金融信息,应用就会成为目标。然后,通过查看应用的单独组件模拟威胁。
Cornell建议企业设计安全的工作区,如连接器,API,增强系统。可能的话,使用新的应用设计作为升级旧的不安全系统的契机。#p#
配置
Verizon公司Terremark安全方案总监Omar Khawaja
Verizon云服务子公司Terremark安全方案总监Omar Khawaja举例称,假设一个客户面对的是处理金融交易的Web应用程序。在设计期间,必须在Web和交易服务器之间创建信任边界来保护数据。这看似明显的设计点,但是在虚拟环境和云环境中,这些信任区域常被忽视了。
赛门铁克Phillips称,当设计商务云服务供应商时,安全的区域也包括云中的客户是如何彼此分隔的。
身份与访问管理供应商Symplified公司CEO Eric Olden称,身份联盟,验证和访问标准——如OAUTH,XACML,SCIM和SAML——现正处于设计种,目的就是满足访问需求。
业内专家认为敏感数据加密还应该与验证联系起来。不过,据云安全联盟去年十一月发布的一项调查结果显示,云加密产品并不是非常有效。该份由TrendMicro赞助的报告推荐给传输,存储中的数据设置多层加密,并进行密钥管理。
▲Voltage安全产品管理副总裁Mark Bower
Voltage安全产品管理副总裁MarkBower透露,验证应该与数据加密联系起来以减少实时数据的暴露——特别是新技术,如隔世保存加密。他说,“加密还应该用于保护授权用户的实时数据,例如,为了验证一个交易或是将用户与其账号匹配,运营商或许只要查看社保卡号码码的最后四位数字或者只查看信用卡号码的最后一节。”
目前,大多数企业应该可以用数据集中方式加密自己的敏感数据,这意味着存储中,传输中和使用中的敏感信息都处于加密状态。如果企业过渡到IaaS,他们就要为自己的应用负责,或许他们可以通过基于标准的API在云中复制相同技术。
如果购买SaaS,企业应该了解供应商如何帮助自己加密数据,特别是如何进行云中的密钥管理。例如,Voltage为Voltage云服务文件和邮件加密客户管理云中密钥。企业或许也想用on-premise密钥服务器控制自己的密钥。
OWASPManico称,当思考云中的应用程序部署时,托管环境的特殊类型决定了安全功能(如加密和监控)会怎样获得支持。
例如,在IaaS模式中,要求这项服务的企业要对自己的应用程序负责。而如果是SaaS,供应商则会为企业管理应用。SaaS服务供应商还能管理云中的安全应用,并为客户提供新的安全服务。
可视性和维护
在研发的关键阶段和应用程序投入生产后,静态分析和功能性测试也同样重要。所以必须在设计,开发和后期生产期间测试应用程序以维护应用程序的安全态势。
赛门铁克Phillips称,这意味着设计必须包括基本的监控支持,如产生有用的日志,数据和访问注册的更改。
有大量工具与服务可用来测试Web应用程序看是否存在SQL注入,XSS和其他源于代码的功能型漏洞。不过,专家认为在公共云应用的可视性方面,企业必须依靠其云服务供应商提供的监控工具来监视自己的数据。对供应商网络的监视主要依靠合同和年度审核。
安全的设计需要在业务,开发和安全部门之间共同计划和协调。做起来虽难但并非不可能。#p#
程序安全设计的资源
为程序员寻找指导方针比为设计师和规划者寻找指导方针要容易。下面就是例子:
云安全联盟有很多用于开发和部署云的指导方针,包括:
云计算重点领域安全指南——描述了云类型和组成要素以及映射出架构,管理和运营中关键区域威胁的方法。
一个CloudControlsMatrix样式表为云服务运营商和客户列出了控件区域,规格和架构组件。
访问公共云,私有云和混合云环境的工具集
OWASP有一个常用的代码审查指南,它将安全,设计和业务环境联系起来。其他流行的资源包括:
给程序员的安全小抄;
威胁建模指导;
安全编码与测试指引。
SAFECode最近发布了安全软件开发基础实例的第二版,其他资源包括:
供应链应用的软件保障;
软件完整性控制的概述;
软件安全工程师培训。
程序安全设计要点
不论应用程序被部署在何处,基础设计架构都适用。在赛门铁克案例中,开发团队都遵循这些基本设计原则:
1、在信任边界数据重复验证与保护
在信任边界进行的数据传输必须受到保护,如在跨优先级别的处理或是两个独立电脑之间进行处理。数据的类型,数值范围,客户端和服务器端的语义都必须进行验证。数据保护可通过数据签名这类机制来部署。
2、服务器和用户代理的共同验证
由于许多不受信任的实体都涉及用户代理和服务之间的互动,所以用户代理和服务必须创建共同验证,而最好是通过PKI和多要素验证实现共同验证。
3、防止偷听——强加密
敏感数据和关键数据可能暴露在用户代理和服务器之间不受信任的实体面前。FIPS140-2服从加密法则必须用于传输中的数据。即便是闲置的敏感数据也必须加密。要使用加强型密码增加解密的难度。
4、会话超时和一次性密码
长时会话可能导致攻击重现和会话劫持。特别是在云应用中,一次性密码和短时会话可以显著降低这类漏洞的威胁。
5、最小特权
由多个要素组成的应用程序只能授予最低许可和最小权限,以减少攻击者提高优先权带来的风险。
6、分区
隔开开规定的权限和资源,从而减少资源消耗和ddos漏洞。