序
在过去的15年中,当我与工程师讨论开发生命周期中的安全性时,他们一次又一次地问了一个问题:“在安全专家规定的所有事情中,我们应该做的最关键的活动是什么?”这个问题让我感到好笑、沮丧和厌烦,因为坦率地说,没有任何一项关键活动可以保证开发生命周期的安全性。这是一个过程,而且即使在过程的每个部分都得到遵循的情况下,应用程序仍然可能会受到攻击并在生产中被利用。就像没有无错误的完美软件一样,没有灵丹妙药可以解决安全问题。
但有一项活动——威胁建模如果做得好,就会持续创造巨大的价值。威胁建模当然不能替代所有其他安全活动,它也有“正确做事”的含义。它以繁重、永无止境且依赖进行此工作的个人或团队的安全专业知识而著称。但是,这是每个开发团队都应该参与的高价值活动。
当我在EMC负责安全事务时,从实施安全软件开发计划中获得了数年的数据,我们决定深入研究外部研究人员向产品安全响应中心(PSRC)报告的漏洞。目的很简单:了解威胁模型可以识别出多少个已报告的漏洞。数据压倒性地告诉我们,绝大多数问题(占80%以上)是可以利用威胁模型来发现的设计级问题。
然后,我们对渗透测试结果进行了类似的工作,以比较威胁模型是否可以识别外部测试供应商在其报告中所识别出的内容,结果相似。采用数据驱动的方法使我们专注于更积极地开发和执行内部威胁建模实践。
这是我在Autodesk担任现职时所推动的事。我发现威胁建模不仅比在应用程序上运行源代码分析工具更为有效,而且噪声也小得多。这并不是对这些工具的安全漏洞查找能力的判断,但是,根据我的经验,更少的噪声等效于使工程师更加满意,并且对将安全实践纳入开发生命周期的怀疑程度也随之降低。
开发者很忙。他们拥有完整的工作平台,因此要么不想改变工作方式,要么不想放慢脚步以融入安全团队。Izar和Matthew与开发者有多年的合作经验,总结了许多实用技巧,以使所有开发者都可以使用威胁建模,并将威胁建模的结果应用于有效的风险管理。作者在本书中提出的建议使我们进一步发现了生命周期中最严重的安全漏洞,以便开发团队可以在软件投入生产之前有时间遵循风险管理实践。
在云环境中,采用持续集成和持续部署的技术至关重要,威胁建模似乎显得格格不入。本书向你展示了持续建模的“外观”,因此你无须花很多时间进行白板讨论就可以识别设计风险。在这方面还需要做更多的工作,我一直在要求Matthew和Izar提出新的技术,以结合持续建模和开发有关自动化技术。在Autodesk,我们遵循一个简单的原则:将一切都自动化。几年前,自动化威胁建模似乎还是白日做梦。今天,有了本书中列出的一些概念,似乎我们离这个梦想越来越近了。
现在,如果有人问我:“在安全专家规定的所有事情中,我们应该做的最关键的活动是什么?”我会回答:“从威胁建模开始,然后我会告诉你更多信息。”本书向你展示如何正确地执行操作,以及如何将其无缝集成到产品开发生命周期中。
——Reeny Sondhi
Autodesk副总裁兼首席安全官