即使是最好的软件也有漏洞,但通过在开发周期早期阶段的关键控制,企业可以像进行功能测试和质量保证一样检查安全漏洞。现在很多企业安全人员没有时间顾及应用安全性,而健康保险公司Aetna首席信息安全官James Routh已经在引领开发第五个软件安全程序。
根据Routh表示,构建软件安全程序可以提高软件灵活性和开发者生产效率。Routh本月与Marcus Ranum分享了他学习到的从上到下部署省钱的软件安全程序的经验。他还分析了软件安全的未来:移动应用和开源组件的持续扩张会给很多企业带来更大挑战。
James,感谢你抽时间来谈谈软件安全程序。我认为这是非常重要的话题,而这个话题仍然没有得到行业足够的重视。长期以来,你一直在推动软件安全程序的建设。你是如何做到的?是什么让你意识到部署软件安全程序的重要性?
James Routh:十年前,我在信息安全行业的第一个职位是美国运通公司(American Express)的首席信息安全官。我有幸曾与Michael Barrett(PayPal前任CISO)和Mark Merkow(Charles Schwab经纪服务软件安全负责人)共事,他们告诉我软件安全程序应该引起更多关注,因为当时它是基于生命周期最后的简单审查过程,然而这个过程并没有让软件开发人员知道如何调整其做法来减少漏洞。
当时,大多数新开发都是Web应用。我意识到攻击面越来越大,而我想要避免安全事故(当时避免事故似乎还是可能的事情),所以我开始教育应用开发人员加强编码做法的安全性。
我觉得我比他们学到了更多东西。开发人员及其项目领导将安全控制视为开发过程中的障碍,阻止他们完成真正的工作,并且,他们没有预算来应付发现安全漏洞后的修复工作。我的部署做法让我非常受益,但并没有让他们同样受益。
在我离开后,Mark后来想到了如何给开发人员提供应有的培训。而我随后去了美国存管信托和结算公司(Depository Trust & Clearing Corporation,DTCC),在DTCC,我意识到提高软件灵活性的重要性,这样做可以避免业务中断和数据泄漏事故,要知道这些事故可能影响全球对金融市场的信心。在那里,我调整了我的方法,并得到CEO和CIO的支持,我部署了全面的安全软件程序,我的程序是基于尽可能简单的前提,即“较少漏洞的软件需要更低的支持费用,以及在生命周期的较早期发现漏洞需要更少的时间来修复”。我还比较了通过《在成熟模型中构建安全》(BSIMM)知识体系部署的做法。这让我可以对比其他8家投资于软件安全程序的公司(例如微软)所部署控制的成熟度。
这种经验帮助我了解到如何基于经济利益为程序获得高管的支持,同时让他们投资于开发者培训。我能够测量漏洞密度方面的减少,而开发人员可以在开发过程使用静态分析工具,以及学会如何避免漏洞。我学习到的是,开发过程中发现的安全漏洞必须优先处理和修复,同时,整合安全漏洞与功能缺陷以及发现高风险漏洞可以让开发团队更容易地分配修复漏洞的责任。
现在我仍然在使用经济利益来说服企业部署成熟软件安全程序,并且我发现,应用开发人员已经意识到尽早发现漏洞以及提高软件灵活性的重要性。在摩根大通,我向全球17000位开发人员教授软件安全控制,而他们非常乐于学习更有效的方法用以开发系统。我建立了一个模型,向选定的开发人员提供软件安全方面的全面培训,同时,他们会帮助其他开发人员部署技术来减少漏洞。在Aetna,我们称他们为安全专家,通常由他们来执行关键控制。
你能告诉我们你在Aetna是如何进行软件开发的吗?
James Routh:目前软件开发已经发展到这样的情况:大多数定制应用开发会从使用开源资源开始,所以,我添加了一个控制来强制使用选定的开源框架,这些开源框架的选择是基于对库的安全风险的扫描结果的;我还有一些很酷的针对移动应用的新功能,用以应对移动应用分发系统中的特有的安全风险。
总是有些人反对软件安全程序。我肯定你也听到过他们的反对意见,他们常说:我们不能慢下来,我们不能受到限制。你如何应对这些反对意见?
James Routh:人们真的很难会反对省钱、提高质量和降低风险的程序。我摆出了简单的事实,说明每个属性和承诺,这件事情我常常做,所以比较容易。现在开发人员并没有异议,但项目经理仍然怨声载道,他们还没有明白这样做的好处。我现在使用的很多移动应用工具并不知名,所以我通常是从不熟悉它们的移动开发人员那里获得反馈。在这些情况下,我只是使用行业可用的数据来说明攻击者可以非常容易地感染移动应用,以及通过二级渠道传播它。现在发现的大多数漏洞都是移动软件分发过程受到攻击的结果。
底线是,当你使用经济利益作为推动因素时,推动软件安全程序会变成简单的工作。成功部署程序更多是关于改变行为,而不是部署技术,因此,我们将安全作为软件质量的属性重新明确了开发领导者的角色(掌握过程和结果),而安全部门则负责设计控制和衡量有效性,这主要也是为了有助于开发领导者的工作。
让我惊讶的事情是你在使用数据指标,而不只是口头上说,“这是我们应该做的事情”,你可以解释它如何能节省资金来避免损失和周期外维护。你能否告诉我你的数据指标有哪些?
James Routh:当安全控制部署到开发过程时,主要有两个提高生产效率的基本驱动力:首先,企业安全API(Enterprise Security API)等框架和开源组件选择及静态分析工具,可以防止漏洞进入应用构建过程,这消除了修复漏洞和缺陷的成本。其次,与在生产过程中发现漏洞相比,在质量保证中检测到漏洞,然后修复高优先级的缺陷,在时间方面更节省时,且成本更低。
我计算了修复生产后期漏洞所需时间(高度复杂漏洞修复=8小时;中等复杂程度=4小时;简单修复=2小时),并比较开发过程中修复漏洞所需时间,然后乘以高风险漏洞的数量。我使用每小时标准恢复量作为成本,例如125美元,这是FTE开发人员(供应商和第三方顾问公司进行开发)的行业平均每小时成本。其结果是,除了将漏洞修复从生产后期转移到质量保证或生产前期节省的成本外,这样做还可以“提高生产效率”。而通过消除或减少修复漏洞的工作所节省的开发时间还可以重新投资于在更少时间内提供更多功能。
我不明白的是,为什么很少高管像你这样“懂”。你认为我们可以怎样做来提高对这个话题的理解?在过去15年,我们看到很多“渗透和修复”,以及各大软件供应商不断推出修复补丁,如果这不是危险的信号,那是什么?我们可以做些什么?
James Routh:70多家公司现在使用BSIMM数据衡量其软件安全程序的成熟度,软件安全的知识体系已经明显改善。你问我为什么领导们很少明白这一点,这是很合理的问题,我的观点是,很多人明白软件安全的经济推动因素,并且跨行业部署了更有效的控制。我们比十年前更懂得软件安全做法,我在这里与你分享的信息其实已经公开化。
在推出补丁修复的很多软件厂商中,他们也有成熟的软件安全程序,包括微软、Adobe Systems和EMC等。现实情况是,完美和软件并没有关系,我们总是会有机会来发现和提高软件漏洞。
我们正在尝试新的东西,我们将所有控制部署到web应用,并且基本上众包了应用的渗透测试来查看应用的情况。这意味着软件研究人员将会执行渗透测试,并与我们分享其结果。
我非常希望在这个过程中发现新的漏洞,尽管在此之前对相同软件版本已经执行了几十次测试。这也有可能帮助我了解我们开发过程中部署的很多控制正在如何执行以及哪里有改进的机会。随着时间的推移,我们还会追踪漏洞密度,这些数据清楚地显示了开发人员的显著改进,因为他们使用了更好的工具来发现开发中的漏洞。
只要我们构建软件,在这个过程中就会发现漏洞以及提高其质量的机会。显然,投资于质量改进可以获得更好的经济性,但软件的完善将仍然还有很长的一段路要走。