推荐序

你即将开始阅读的这本书在很多方面都是独一无二的。它篇幅不大,是一本精心编写的、代码很少却很专业的技术读物。这本安全技术图书并非为安全技术专家编写。正如本书的作者Loren所说,本书融汇个人针对技术的深入观点,是由包装过大型商业产品、发明过重要安全技术,并且在产品安全方面有丰富工作经验的专业人士撰写的。

2006年,我加盟了微软,负责对所有产品和服务进行威胁建模。我们采取的主要做法就是借助本书作者提出的STRIDE(STRIDE是一系列单词的首字母缩写)模型来思考欺骗(Spoofing)、篡改(Tampering)、抵赖(Repudiation)、信息泄露(Information disclosure)、拒绝服务(Denial of service)和权限提升(Elevation of privilege)所带来的威胁。STRIDE已经成为我工作中的一项重要组成部分(它的作用如此之大,我甚至经常需要澄清STRIDE并不是我的原创)。事实上,在我阅读本书之时,我惊喜地发现作者在提到我的“4个问题”框架时,与我提到STRIDE时的评价相差无几。这个框架通过对4个问题进行自问自答来接近问题的核心:我们的工作是什么?哪里有可能出错?我们打算怎么办?我们干得怎么样?本书的大部分内容证明,虽然我和作者从来没有真正在一起工作过,但我们俩是真正的“合作无间”。

如今,世界正在不断发生变化,安全缺陷已经登上了各大媒体的头版。我们的客户对安全性的期待之高前所未有,他们会通过采用自己的评估标准、起草合同条款、给销售和执行人员施加压力、催促兑现新的策略,来推动我们满足他们的需求。现在就是我们把更好的安全设计方案(从概念到代码)集成到软件当中的绝佳时机。本书围绕一个非常困难的主题展开,那就是如何设计出安全的软件。

这个主题之所以困难是因为存在两大挑战。第一大挑战在于,安全和信任既自然又微妙。这部分内容包含在本书的第1章,所以这里不再赘述。第二大挑战在于,软件专业人员往往希望软件不需要进行设计。与其他工程领域的产品不同,软件的可塑性几乎是无穷的。在其他工程领域中,人们只有先制作好模型,才能弯曲钢材、浇筑混凝土或者对硅实施光刻操作。对于软件而言,我们则会创建代码、对代码进行细化,再把代码发布出来,而不会采纳弗雷德·布鲁克斯(Fred Brooks)的著名建议:你搭建的第一个系统很快就会被你丢掉,所以你最好把它当成原型(prototype)。我们所介绍的、关于软件进化的故事很少停留在那些徒劳无功的经历上。我们不会探讨失败的经历,只会探讨提出合理设计方案的过程。即便如此,我也知道读者或许会觉得我(甚至觉得本书的作者)是在宣传自己的设计方案。我也得承认这个主题包含另一项挑战,这项挑战也是本书一直在着力解决的——提供软件设计方面的实用建议。

本书主要写给刚刚投身到安全领域的技术从业者,欢迎你们成为这个领域的一员。你们在阅读本书的过程中会发现,你们针对系统的决策会对系统的安全性构成影响。但是,并非顶尖的技术专家才能做出更好的决策。本书会带你走得足够远。如果你们中有一部分人还希望走得更远,业内也有大量材料可以供你们参考,其他人则只需要把从本书中学到的知识应用到位就可以了。

Adam Shostack
Shostack+ Associates总裁
《威胁建模:设计和交付更安全的软件》的作者
华盛顿大学保罗·艾伦计算机科学与工程学院副教授