大约1997年8月的某天,我和Hobbit(我的一位朋友,是一位非凡的黑客(注4))与Microsoft的一位执行官和一位资深工程师(注5)共进晚餐。他们想知道我们为什么能够这么轻而易举地在Microsoft的产品中找到这么多的缺陷。虽然有些细节记得不是特别清楚了,但我相信当时我们是非常诚恳地进行了回答,表示我们的方法是向系统输入一些随机的垃圾。这是一种简明的缺陷和安全测试技巧,有时称为“模糊(fuzzing)”,现在主要的计算机科学出版物都记录了这种方法。但是,当时“黑客”社区还没有普遍采用模糊方法。 我们告诉这位工程师,我们对于Windows在面临垃圾输入时如此频繁地遭到失败而颇为吃惊。接着,我们又问他们执行了哪些类型的健壮性测试,因为适当的QA(质量保证)应该包含坏输入测试,这种测试应该能够发现我们所找到的许多令系统和应用程序崩溃的情况。 这位工程师的回答是他们在所有的产品执行了充分的可用性测试,但是并没有执行试图使产品崩溃的测试。这个答案揭示了问题的原因。Microsoft在努力保证良好的用户体验的同时并没有考虑不良的用户或环境。 例如,开发Microsoft Word的队伍将根据各种可接受的输入格式(Word、Word Perfect、 RTF、普通文本等)对文件解析器进行测试。他们并不会对那些可以通过手工创建的但绝不会由可兼容的字处理程序产生的各种预期格式的变型进行测试。但是,恶意攻击者可以用预期格式的不良版本以及随机的垃圾对这些系统进行测试。 当我们在晚餐上询问那些资深的Microsoft代表为什么不发送恶意数据或提供不良文件作为输入对他们的产品进行测试时,他们的答案是:“用户为什么要这样做呢?”当他们看到任何人可以按照有意让软件失败的方法与软件的一部分进行交互时,显得非常的震惊和沮丧。 他们从来没有考虑过他们的应用程序可能被部署在恶意环境中。这种善良的观点来自于另一个可能被恶意攻击者所利用的心理特征:确认陷阱。