史蒂夫·利普纳去找 Windows 团队的经理,提了一个主意。他说自己去的时候「有一半心理准备会被轰出办公室」。这个主意是:让 Windows 停下来。
不是放慢,是停。所有新开发暂停,每个开发者先上安全培训,再回到现有代码里挨个找漏洞。微软的 .NET 团队这么干过,可那边只有几百个开发者。当时负责软件安全的格伦·皮塔韦回忆:「Windows 是一艘九千人的超级油轮。」
压力从 2001 年 7 月就开始攒了,那个月微软接到了「红色代码」蠕虫的警报。2002 年 1 月 15 日,比尔·盖茨给微软每一位全职员工发了一封备忘录:「可信计算是我们所有工作的最高优先级。」他还写:「今后,当我们要在增加功能和解决安全问题之间做选择时,我们必须选安全。」
利普纳没被轰出去。经理让他回去把方案做细再来;下一次,听汇报的多了一位副总裁;再下一次,又多了高级副总裁;最后汇报到整个业务集团的负责人吉姆·奥尔钦那里。利普纳说:「到某个时候我意识到,没有人说『不』,这事真要成了。」
那间大厅
据微软自己的记述,2002 年 2 月,整个 Windows 部门停下开发,转去做安全。
利普纳说,难的是后勤:要让「全部 8500 名一线开发者」在安全上跟上来。内容是保密的,没法租个体育馆。公司能用的最大房间是微软简报中心,能坐 950 人。一天两场,连开五天,场场坐满。「没什么魔法,」利普纳说,「这个培训我们办了十次。」
后来利普纳在一篇文章里讲了课的内容:团队把要讲的东西「压缩」成一门四小时的课,由三个人分头讲。迈克尔·霍华德讲给开发人员,杰森·加姆斯讲给项目经理,克里斯·沃克讲给测试人员。
上完课,开发者回到座位上开始审代码。业务负责人起初只肯停两天,利普纳的团队要一个月。最后,这场安全攻坚持续了两个月。
后来
培训没有让漏洞绝迹。2003 年 7 月 16 日,微软发布安全公告,修补 Windows 处理远程过程调用的组件里的一个漏洞,并把它评为「严重」,受影响的版本里就有 Windows Server 2003,正是那次攻坚审过代码的系统。
可那门课活得比攻坚长。团队造了工具,成立了内部的安全审计小组,到 2003 年底,后来叫作「安全开发生命周期」(SDL)的流程有了雏形。2004 年,高层批准它成为强制流程,凡是面临实质风险的产品和在线服务都要走。
利普纳说:「所有东西都要过 SDL。」