第3章 STRIDE方法
正如你在第1章中学到的,STRIDE是几个单词的首字母缩写:假冒、篡改、否认、信息泄露、拒绝服务、权限提升。此方法是由Loren Kohnfelder和Praerit Garg(Kohnfelder,1999)提出的,STRIDE框架及助记符旨在帮助软件开发人员识别其开发的软件中可能会遭受的各种攻击。
思考威胁的方法有很多不同的标签:寻找威胁、威胁枚举、威胁分析、威胁启发、威胁发现。每一个标签所对应的方法略有不同。如果是问,威胁是存在于软件还是图表中?那么你是在寻找威胁。如果是问,威胁是存在于分析人员头脑中吗?那么你是在分析威胁或启发引出威胁。没有哪种思考威胁的方法最合适或者更好,不过本书笼统地将上述所有这些标签概括为寻找威胁。STRIDE方法更像是启发式方法,希望你或你的团队理解这个框架,并了解如何使用它。如果你还不熟悉STRIDE,本章将会有大量的表格和示例教你如何使用STRIDE方法寻找威胁。
本章将讲述什么是STRIDE,为何这个方法有用,涉及STRIDE的每一部分。本章针对每个类型的威胁都进行了详细分析,并通过翔实的示例图表进行讨论,目的是教会你使用STRIDE寻找威胁。此外,你还能了解到基于STRIDE产生的各种方法:STRIDE-per-element、STRIDE-per-intersaction及DESIST。基于STRIDE的另外一种方法——权限提升游戏,在第1章、第12章及附录C中都会介绍。
3.1 理解STRIDE方法及其为何有用
信息系统的安全属性一般应具有可靠性、完整性、不可否认性、机密性、可用性及授权,而STRIDE威胁种类与上述安全属性恰恰相反。表3-1描述了STRIDE威胁及其破坏的对应的安全属性、定义、典型受害者和示例。
如表3-1所示,“典型受害者”是指最可能受到损害的对象。例如,你可以通过在磁盘上放置或者开启一个同名的程序来假冒另一个程序。也可以在同一台机器上通过非法占用或者拼接来假冒一个端点。也可以通过假冒网站截获用户身份信息进而假冒用户,但前提是用户会再次在网站上使用认证信息,强制登录(他们上线或者下线)或者在他们的机器上提升特权。你也可以篡改验证身份的数据库,然后以伪造的身份信息进行假冒。
在用STRIDE寻找威胁时,你可以简单地列举所有可能出错的地方。如果想了解是什么原因导致了错误,将在以后学习。(实际上,这可以很容易,也可以很有挑战。在适当的位置可能会有防御措施,例如,你会说“有人可以修改管理表”,有人可能说“不,他们不能是因为……”)记录这些可能发生的攻击事件是很有用的,因为,即使有减缓攻击的方法,也需要进一步测试,你需要有测试案例。
有时你会听到STRIDE被称为“STRIDE类别”或者“STRIDE分类法”。这并没什么帮助,因为STRIDE方法的初衷不是用于对威胁进行分类,我们很容易找到一些使用STRIDE并不能分类的威胁。例如,前面我们提到篡改验证数据库然后假冒,你是将它分为篡改威胁还是假冒威胁呢?答案很简单:这根本不重要。如果你已遭受到这种攻击,为何还费力去给它分类呢?STRIDE的目的是帮你寻找威胁。对威胁进行合理分类对找到正确的防御方法有所帮助,但有时是浪费精力。试图用STRIDE方法进行威胁分类会得不偿失,因为分类工作会让人忽略STRIDE方法本身的作用,这就像是倒洗澡水时把孩子也一起倒掉了。