应用安全与微软SDL-IT流程

      在过去的十几年里,随着信息技术的高速发展和企业信息化步伐的深入,企业在利用信息技术实现其商业目标的同时也变得越来越依赖于信息技术。以银行业为例,为了降低运营成本,提高用户满意度,今天的银行普遍利用信息技术支持的电话银行、ATM及网络银行系统为客户提供个性化、差异化的服务。另外,银行也在不断利用信息技术收集和分析大量的与客户有关的数据和信息,为新产品开发提供决策支持,从而达到提高盈利水平的目标。在今天的企业信息环境里,如何保证信息系统以及信息本身的安全性已然变得至关重要了。事实上,在今天具有一定规模的企业的IT环境里往往存在着少则几百个多则上千个大大小小的业务应用(Line of Business Applications),小到支持几个人的小规模团队的协同应用,大到贯穿于一个企业生产、经营、管理全过程的企业级应用。如何降低信息技术给企业带来的各种安全风险呢?无疑已成为当今所有企业面临的新挑战。

      企业信息安全的涵盖面非常广,涉及到人员、流程和技术等诸多方面的因素。正因为如此,一方面信息安全越来越受到广泛的关注,并且企业在信息安全方面的投入不断增加,而另一方面各种给企业造成负面影响的安全事件却层出不穷。单纯的技术手段往往无法帮助企业彻底消除存在的诸多安全问题,只有建立起一整套安全策略和流程,通过合理地资源配置并且充分利用各种技术和非技术手段,企业才有可能更加有效地管理各类安全风险。

      信息安全包括安全体系的构建和管理、物理和环境安全、数据中心和网络安全、系统开发和维护安全等多方面内容。今天我们在这里讨论的话题将主要围绕安全系统开发,即企业在业务应用的开发过程中应该如何应对各种可能对应用造成影响的安全性问题。微软看来,保证和提高应用安全性的最佳时机是在应用的开发阶段。微软信息安全部门的ACE团队通过多年来在应用安全领域的实践经验,创建了一整套安全开发流程,即信息技术安全开发生命周期流程(Secure Development Lifecycle for Information Technology,缩写为SDL-IT)。该流程包含有一系列的最佳实践和工具,多年以来不仅被用于微软内部业务应用的开发过程中,而且也被成功地应用在许多微软客户的开发项目中。

      SDL-IT流程涵盖了软件开发生命周期的整个过程(如下图所示)。目的是通过在软件开发生命周期的每个阶段执行必要的安全控制或任务,保证应用安全最佳实践得以很好地应用。SDL-IT强调在业务应用的开发和部署过程中对应用安全给予充分的关注,通过预防、检测和监控措施相结合的方式,从而降低应用安全开发和维护的总成本。

      SDL-IT流程的第一步首先是对所要开发的应用进行安全风险评估。根据应用的风险和影响程度确定在整个软件开发生命周期过程中需要采取的安全控制。在对应用进行安全风险评估时需要考虑的因素包括应用本身,应用存储和处理的数据类型(比如是否涉及高业务影响数据或个人身份信息等)以及应用的部署环境(比如Internet、Intranet或Extranet应用)等。评估通常是以问卷形式开展的,根据开发团队调查问卷的结果计算加权得分,确定应用的安全风险等级。微软的安全策略明确规定了不同安全风险等级的应用所需采取的安全控制(如下图所示)。

      接下来SDL-IT流程要求为应用建立安全威胁模型。安全威胁建模的目的是帮助应用开发团队在应用的设计阶段充分了解应用中存在的各种安全威胁并指导应用开发团队选择适当的应对措施。应对措施的建议可能涉及技术层面,比如如何改进应用的设计或者如何在代码编写过程中避免某些代码安全漏洞的出现等,也可能涉及流程和人员培训等方面。安全威胁建模的目的是对应用可能带来的风险进行管理。因此,在确定处理安全威胁的优先级和选择适当的应对措施时既要考虑安全威胁可能造成影响的大小,同时也要考虑安全威胁发生的可能性(如下图所示)。

      这里将大致介绍一下微软安全威胁建模的流程。首先是定义应用的安全目标和需要保护的信息资产。微软看来,一个安全威胁如果不能够被证明会对企业的信息资产造成损害,它就不构成一个真正的安全威胁。接下来需要了解应用的体系架构,包括子系统、信任边界和数据流,并且通过对应用体系架构的进一步细化,定义应用的角色、模块、数据和使用案例。在对应用的安全目标、体系架构、实现细节和技术应用有了清楚的了解以后,安全人员就可以帮助开发团队找出应用中可能存在的安全风险和漏洞,并且提出应对措施建议。同时,安全团队还会对所有的安全风险按照保密性、完整性和可用性(Confidentiality、Integrity﹠Availability,缩写为CIA)进行归类,以便更好地帮助开发团队了解安全漏洞可能造成的影响。最后,针对各种安全风险,开发团队综合考虑各方面因素确定是否接受、避免、降低或转移安全风险。

      如果使用微软安全威胁建模工具(Threat Analysis & Modeling Tool),开发团队可以利用工具本身提供的报表功能生成面向应用开发以及测试人员的报告。开发团队可以利用报告中的有针对性的安全编程最佳实践和安全检查清单辅助进行安全开发和测试。从而实现从安全人员到应用开发人员的应用安全推动。此外,在应用的开发过程中,微软要求开发团队内部成员间应该进行代码安全审核。

      在应用投产前,微软要求由独立的安全团队对应用的安全性进行综合评估。主要内容包括对应用进行代码安全审核(即白盒安全测试)以及对应用的部署及环境进行安全审核。投产前安全审核的主要目的是检验在前面阶段定义的安全措施是否在应用的开发过程中被正确实施。安全人员会利用代码分析工具(Code Analysis Tool)结合对关键应用模块的源代码进行人工逐行扫描的方式,找出应用中存在的安全漏洞并提出应对措施建议。开发团队根据严重性级别对安全漏洞进行修复。应用部署及环境审核的目的则是降低应用的受攻击面,确保不会因为部署环境特别是服务器的安全性而影响到整个应用的安全性。

      在应用投产后对应用及其运行环境进行实时监控也是保障应用安全的必要措施。一方面应用本身及其部署环境可能会发生改变,使得以前的某些安全性方面的假设不再有效。另一方面,新的黑客攻击手段和方法也会不断地出现,也可能给应用带来新的安全威胁。此外,某些行业的企业可能还会有合规性管理(比如ISO、PCI、SOX等)方面的需要,要求企业对其IT环境的技术标准遵从状况进行监控和管理。

      以上关于SDL-IT流程的描述主要是针对正在或将要开发的应用。那么如何利用SDL-IT,特别是在有限的资源和预算条件下,提高企业IT环境中已投产应用的安全性呢?微软建议企业应遵循SEE(Secure、Enhance﹠Empower)框架:

  • Secure:对关键应用进行安全设计审核和代码安全审核
  • Enhance:对全部应用进行风险分析和威胁建模
  • Empower:帮助所有开发人员了解最常见安全漏洞的成因和修复方法

      在企业越来越注重投资回报的今天,SDL-IT的成本是企业最关注的问题。另外,如何处理好应用安全性和易用性的矛盾并实现两者之间的平衡也是企业需要面对的实际问题。SDL-IT会在一定程度和一定阶段增加应用开发的成本,但是却可以有效地帮助企业提高开发、部署和投产的应用的安全性和质量。通过对SDLC前期的必要投入(比如安全威胁建模和设计审核等),SDL-IT可以有效地帮助企业降低在应用投产后发现和修复安全漏洞的成本以及可能带来的其它损失,比如生产力损失或者对企业声誉、法规遵从造成影响等。关于应用安全方面投资回报的讨论是一个复杂的话题,在这里就不做更深入地讨论了。需要强调的是:应用的安全性和其它需求一样,是应用的一部分。从前"寻找安全漏洞"的做法并不能真正保证应用的安全性。企业有必要改进软件开发流程,做到在应用开发的整个过程中自始至终地关注应用安全。最后借用Bill Malick的一句话"Security is like the brakes on your car. Their function is to slow you down. But their purpose is to allow you to go fast. "

 

      如果您想了解关于微软SDL-IT流程的更多信息及相关服务,请发送电子邮件到acesvc@microsoft.com或者与您的微软客户代表、服务代表、方案业务经理或技术客户经理联系。