透视Microsoft最终安全性检查

从去年开始,我作为安全检测员,代表ACE组对GFS(Global Foundation Services)的MSN产品作最终安全检查(Final Security Review,简称FSR)。最终安全检查是以安全开发生命周期(Security Development Lifecycle,简称 SDL)为基础,对软件在出厂前作最终的安全检查。

安全开发生命周期有两个目标:一是缩减与安全性有关的设计缺失与程序码缺陷错误,二是降低未完全解决的缺陷错误的严重程度。

最终安全性检查要求每个产品开发组有一位或多位人选负责安全和隐私方面的工作。他们的工作包括管理一切安全和隐私的问题,督促开发组执行并满足公司对安全和隐私方面的要求,在面临棘手的安全和隐私决策时做出理性的决定。

通常产品开发组在设计或 软件完工前的几个月,在内部网上登记他们的产品,并完成一份问卷清单,以帮助安全检测员了解产品。同时根据问卷答案, 决定这软件需要进行哪些安全测试。

最终安全性检查要求至少80%的员工一年有一次学习安全知识的机会, 并予以记录。Microsoft提供很多线上资源或是由讲师指导的课程。

最终安全性检查期间,安全检查员和开发组一起分析产品的威胁分析模型.了解产品究竟要保护哪些资产,认识到产品会引进哪些威胁及漏洞,并知道产品将如何缓和这些威胁。此外,还要考虑到威胁和弱点是来自产品部署的环境内,还是源自于与其他产品或端对端解决方案系统的互动。

常用的威胁分析模型有Threat Modeling Tool v3和TAM(https://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安全团队