威胁建模易犯的7个错误
2018-03-30JaikumarVijayan杨勇
Jaikumar Vijayan 杨勇
对于希望通过借鉴实践案例来加强其网络和服务安全的企业而言,相对不太成熟的威胁建模可能会带来很大问题。
开放Web应用程序安全项目(OWASP,Open Web Application Security Project)把威胁建模描述为一种结构化的方法,用于识别、量化和处理与应用程序相关的安全风险。这实际上涉及在构建或者部署系统时应从战略角度考虑威胁问题,这样,在应用程序生命周期的早期阶段就实施适当的防御和减轻威胁的控制措施。
威胁建模当然不是什么新概念,但很少有企业能够以有意义的方式来实现它。ThreatModeler软件公司的创始人兼首席执行官Archie Agarwal评论说,威胁模型的最佳实践仍处于初始阶段。他说:“最大的问题是缺乏对威胁建模究竟是什么的理解。”进行威胁建模有多种方法,而企业常常遇到的问题是怎样从过程的角度来弄清楚它,以及怎样进行扩展。“所有一切仍然都不清晰。”
据Agarwal和一些其他人的说法,在进行威胁建模时可能会犯下7个错误:
1.过于以应用程序为中心
Agarwal指出,企业构建威胁模型时最常犯的错误之一就是只关注应用程序本身。他说,对于威胁建模,应该试着从整体上去理解,而不仅仅是一个个孤立的应用程序。
应考虑基础设施、数据库、共享组件、第三方交互和部署环境。威胁会因为不同的场景而有所不同,例如,应用程序是在现场还是在云中运行,还是可以通过移动设备和其他计算端点进行访问,等等。
如果你要迁移到云中,则需要云的威胁模型。你的应用程序和数据会在专用基础设施或者共享服务器和数据库上运行吗?Agarwal指出,关键要记住的是,在威胁建模时,不仅要关注应用程序,还需要关注涉及到它的所有一切。开发人员在开发应用程序时应考虑一些修补程序,部署应用程序时则要考虑应处理哪些操作。
2.重视漏洞而忽略了威胁
IDC分析师Pete Lindstrom指出,企业可能犯的一个错误就是过于关注漏洞,而忽视了威胁。查看数据流和控制流并知道应用程序中可能存在哪些漏洞,这当然非常重要。然而,更需要明确有哪些威胁,并确定识别可能存在风险的输入和输出。应该考虑攻击者对企业的控制进行攻击的所有可能,这会影响数据的机密性、完整性、可用性、工作效率和私有性。
Lindstrom说:“现在我们正在谈论Meltdown和Spectre漏洞攻击导致的机密泄露。但是完整性和可用性呢?攻击者有办法操纵这些内存表或者插入数据吗?”如果你仅仅控制了某个特定的漏洞,并不意味着攻击者找不到利用漏洞的新方法。
3.过分关注于当天的威胁
SANS研究所新兴安全趋势总监John Pescatore认为,在建立威胁模型时,不要急于应对最新的威胁,或者过于关注某一威胁攻击者和攻击者的类型。勒索软件和加密挖矿软件可能会对企业的安全造成当前最大的威胁。但是没必要专门针对这些威胁建模,而应把重点放在控制上,以缓解对系统的机密性、完整性和可用性的任何威胁。
Pescatore说,同样,如果针对企业的威胁是来自俄罗斯或者塞尔维亚的攻击者,这真的并不重要。与其把重点放在查找黑客和犯罪团伙在哪里,是否是由国家支持的,不如知道怎样防范他们所造成的威胁。“即使被告知是俄罗斯攻击者在攻击你,也不如知道该怎么办更重要。”
重点应该是构建可重复的过程,这样,每次出现变化时,企业都做好了准备。关键是要有一个标准的过程或者方法,不管威胁有多新,每次都以同样的方式进行处理。Pescatore說,企业应该知道想要保护什么,并从那里开始。
4.将威胁映射误认为威胁建模
Agarwal指出,如果建立威胁模型的想法是处理一系列威胁,看看自己的应用程序是否有这些威胁,那么你所做的就只是威胁映射。Agarwal说,“假如你有一个网上银行应用程序,你会问一系列的问题,比如‘你使用Flash吗?,或者‘你使用java?,‘你进行身份验证吗?”。在这里,你所做的不是威胁建模,因为你没有去真正了解威胁的环境。你不知道怎样使用Flash,不知道在哪里使用它。
同样,仅仅因为有数据库并不等于就可以不用担心SQL注入会成为攻击途径。只有在Web应用程序接受来自外部源的输入时,SQL注入才成为潜在的问题。Agarwal说,当采用检查表的方法来评估威胁时,会很容易忽略这种细微的差别。
构建适当的威胁模型,关键在于体系结构图。它能显示数据库、Web服务器、操作系统层,以及将运行应用程序的基础设施,通过这些基础设施来访问应用程序。它应该显示所有数据的位置和通信流,入口点在哪里,以及这些入口点有什么类型的输入。Agarwal说,体系结构图为可显示出全局和边缘的情形。
5.没有把用户引入到威胁模型中
实际情况是,过于专注于对手怎样攻击代码,而不太关注他们获取应用程序和数据所采取的其他方法。Pescatore说:“建立犯罪分子怎样攻击代码这样的威胁模型是个不错的主意。但对网络钓鱼攻击的防范是无法构建到应用程序中的。”
Pescatore指出,应该把用户引入到威胁模型中,并考虑用户行为可能影响安全性的不同方式。你需要查看权限管理和基于角色的访问等内容。当用户访问云中的应用程序,或者通过作为更大的电子商务解决方案组成部分的移动设备访问应用程序时,还需要考虑潜在的威胁。
6.采取一次性的方法进行威胁建模
威胁模型不可能是静态的。Agarwal提醒说,对于一个关键的应用,不可能一次性地为其做一个威胁模型,然后想当然地认为一切就都做好了。如果你的企业和大多数企业一样,一般都会进行持续的研发活动。那么当应用程序发生变化时,其威胁情形也会发生变化。这意味着当前的威胁模型一般只能适用三个月。Agarwal说:“威胁模型应该是一个实时的文档。你不能只是建立一个威胁模型,然后就把它忘了。要记住,企业的应用程序一直在工作。”
7.没有考虑系统对他人的影响
在构建威胁模型时,最好考虑一下数字可信度。一旦你了解了所面临的所有威胁,弄清楚了控制或者缓解的方法,应该看看你的系统会怎样影响与其接触的其他人。
IDC的Lindstrom说,应该注意到企业的输出可能会影响他人的安全态势。“例如,你可能会在一个黑市网站上驻留,有人就可能会非法占用你的域,或者让你的物联网系统发出DDoS数据包。”你可能不接受广告拦截器,但是如果你的网站上的恶意广告影响到客户系统,那该怎么办?当你把东西放在网上时,你的责任是保持它们干净,这样下游用户使用你的系统时才不会受到影响。Lindstrom说,无论从数字诚信还是责任的角度来看,你在威胁建模时都应该努力去这样做。
作为威胁建模练习的一部分,应确保自己熟悉并了解与开源软件和第三方组件相关的风险,不仅对你的部门,而且对你服务的下游用户也是如此。例如,如果你要提供插件,就应该考虑你的数据或者服务可能会影响其他人的输出。Lindstrom指出:“如果其他人依赖于你提供的GPS数据,那么就需要考虑这些数据的完整性和可靠性。”