透视Microsoft最终安全性检查

从去年开始,我作为安全检测员,代表ACE组对GFS(Global Foundation Services)的MSN产品作最终安全检查(Final Security Review,简称FSR)。最终安全检查是以安全开发生命周期(Security Development Lifecycle,简称 SDL)为基础,对软件在出厂前作最终的安全检查。 安全开发生命周期有两个目标:一是缩减与安全性有关的设计缺失与程序码缺陷错误,二是降低未完全解决的缺陷错误的严重程度。 最终安全性检查要求每个产品开发组有一位或多位人选负责安全和隐私方面的工作。他们的工作包括管理一切安全和隐私的问题,督促开发组执行并满足公司对安全和隐私方面的要求,在面临棘手的安全和隐私决策时做出理性的决定。 通常产品开发组在设计或 软件完工前的几个月,在内部网上登记他们的产品,并完成一份问卷清单,以帮助安全检测员了解产品。同时根据问卷答案, 决定这软件需要进行哪些安全测试。 最终安全性检查要求至少80%的员工一年有一次学习安全知识的机会, 并予以记录。Microsoft提供很多线上资源或是由讲师指导的课程。 最终安全性检查期间,安全检查员和开发组一起分析产品的威胁分析模型.了解产品究竟要保护哪些资产,认识到产品会引进哪些威胁及漏洞,并知道产品将如何缓和这些威胁。此外,还要考虑到威胁和弱点是来自产品部署的环境内,还是源自于与其他产品或端对端解决方案系统的互动。 常用的威胁分析模型有Threat Modeling Tool v3和TAM(http://www.microsoft.com/downloads/details.aspx?familyid=59888078-9DAF-4E96-B7D1-944703479451&displaylang=en) 以下是最终安全性检查常用的(但不是仅有的)安全检测工具: 模糊测试(Fuzz testing)包括File Fuzzing, RPC Fuzzing, ActiveX Fuzzing App Verifier: 是一个 Runtime 工具,它是在执行中的应用程式里进行作业。它能揪出 Run Time 时所发生与内存有关的问题,其中包括堆积式缓冲区溢位。 ComChk:检查COM Control XRAY:用来捕捉机器上的攻击表面,可以发现产品的故意或有意无意的攻击表面。 Binscope;检查binaries代码 CAT.NET:ACE组开发的用来发现网页中的SQL injection, cross-site scripting 和其他的data injection 问题。 通过最终安全性检查,产品设计组可以在安全性开发生命周期的各个阶段自己用安全检测工具对代码或系统进行检测。对于高风险的产品, 在完成最终安全检阅的同时, 我们会建议他们请ACE组或第三方公司再进行代码安全测试,和b1ackbox测试。 最后,安全检查员根据所发现的结果来决定软件是否能发行上市,或是还需要返工。   原霞 微软ACE安全团队

1

应用安全与微软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…

0