如何避免踩中威胁建模最常见的7个坑
时间:2018-02-28
开放Web应用程序安全项目(OWASP)将威胁建模描述为一种结构化的方法,用于识别、量化和处理与应用程序相关的安全风险。它本质上涉及在构建或部署一个系统时战略性地考虑威胁,因此在应用程序生命周期的早期就可以实现对预防或减轻威胁的适当控制。
威胁建模不是一个新的概念,但是很少有组织以一种有意义的方式实现它。威胁模型的最佳实践仍在涌现,威胁建模软件的创始人兼首席执行官Archie Agarwal说:“最大的问题是缺乏对威胁建模的理解。”
有多种方法可以进行威胁建模,而公司在构建的过程中常常会遇到麻烦。应该弄清楚威胁建模的整体过程构建,以及如何进行扩展,目前大部分人在这方面仍然不够明确。
根据Archie Agarwal和其他人的说法,在进行威胁建模时,你可能会犯以下7个错误:
1、专注于以应用程序为中心
Agarwal说,组织构建威胁模型时最常犯的错误之一就是只关注应用程序本身。对于威胁建模,你应该试着理解整个场景,而不仅仅是孤立的应用程序,。
考虑基础设施、数据库、共享组件、第三方交互和部署环境。威胁可以根据应用程序是on-premises还是在云中运行,或者可以通过移动设备和其他计算端点访问。
如果要移动到云,你需要一个云的威胁模型。应用程序和数据会在专用的基础设施或共享服务器和数据库上运行吗?Agarwal说,关键是要记住:当威胁建模时,不仅需要查看应用程序,还需要查看涉及到它的所有内容。开发人员在构建应用程序和部署应用程序时需要处理的操作时,需要考虑到一些修复时会遇到的问题。
2、关注其脆弱的地方而不是威胁
国际数据公司(IDC)的分析师Pete Lindstrom表示,一个错误的组织可能会把过多的注意力放在漏洞上,而忽视了威胁。查看数据流和控制流,了解应用程序中可能存在哪些漏洞,这一点非常重要。此外,您需要更明确地查看威胁,并识别可能存在风险的输入和输出。您需要考虑攻击者阻止您的控件影响机密性、完整性、可用性、生产力和数据的专有属性的所有机会。
Pete Lindstrom说:“现在我们谈论的是熔毁和幽灵对机密的攻击。但是可用性呢?是否有办法让攻击者操纵这些内存表或插入数据?仅仅因为对某个特定的漏洞进行了控制,并不意味着攻击者就不会找到利用漏洞的新方法。”
3、过于关注特定的威胁
SANS Institute的新兴安全趋势主管John Pescatore认为,在建立威胁模型时不要急于应对最新的威胁或过于关注特定的威胁行为者或行为类型。Ransomware和cryptomining软件可能会对你的安全造成当前最大的威胁。不要专门针对这些威胁进行建模,而是集中于控制,以减轻对系统的机密性、完整性和可用性的任何威胁。
Pescatore说,同样地,如果你的威胁来自中国、俄罗斯或塞尔维亚的演员,那也无关紧要。对归因和国家资助的黑客和犯罪团伙的关注不那么重要,因为他们知道如何防范他们所代表的威胁。
重点应该是建立可重复的过程,以便每次发生变化时都有充足的准备。关键是要有一个标准的流程或方法,不管威胁的新程度如何,每次都以同样的方式进行。你需要知道你想要保护的是什么、从哪里开始。
4、对威胁建模的威胁映射
如果你建立一个威胁模型的想法是,列出所有威胁并查看你的应用是否有具备威胁,你所做的就是威胁地图。“假设你有一个网上银行应用程序,你会问一组问题,比如‘你用的是Flash吗?’”或者“你在用Java吗?”或者“你在做认证吗?”,你在这里所做的不是威胁建模,因为威胁周围的环境没有联系,你不知道如何使用Flash或你正在使用它。
类似地,仅仅因为有一个数据库并不意味着必须担心SQL注入作为攻击向量。只有当一个从外部源接收输入的web应用程序时,SQL注入才成为潜在的关注点。当采用检查清单的方法来评估威胁时,这种细微的差别很容易被忽略。
为了构建一个适当的威胁模型,架构图是至关重要的。它应该向用户显示数据库、web服务器、操作系统层和应用程序正在运行的基础设施,并通过这些基础设施访问它。它应该显示所有数据和通信流的位置,入口点在哪里,以及从这些入口点输入什么类型的输入,架构图显示了全局和边缘情况。
5、不让用户进入威胁模型
有这样一种东西,它太过于关注对手如何攻击你的代码,而在其他方面却没有足够的能力来处理你的应用程序和数据。Pescatore说:“威胁模型如何攻击代码是一个好主意。但对钓鱼攻击的保护并不是你可以在应用程序中构建的。”
需要将用户引入威胁模型,并考虑用户操作可能影响安全性的不同方式;需要查看特权管理和基于角色的访问。Pescatore说,当用户通过云或移动应用程序访问应用程序时,你需要考虑潜在的威胁,这可能是更重要的电子商务计划的一部分。
6、采取一次完成的方法进行威胁建模
威胁模型不能是静态的。不能够在一个关键的应用程序上面做一个威胁模型,然后假设你已经完成了。大多数组织进行持续的开发活动,随着应用程序的改变,它的威胁配置也会改变。这意味着你当前的威胁模型将在三个月内被淘汰。你的威胁模型应该是一个活生生的文件,阿加瓦尔说:“不能只是建立一个威胁模型,然后忘记它,应用程序还活着。”
7、不考虑你的系统如何影响他人
当构建一个威胁模型时,最好考虑一下数字可信度。一旦你了解了你所面临的所有威胁,并找出控制或减轻它们的方法,看看你的组织的系统如何可能会影响到与他们接触的其他人。
你需要注意你的输出可能会影响他人的安全态势,例如,你可以在一个黑市网站上,或者有人劫持域名,或将DDoS数据包从IoT系统中弹出;你可能不接受广告拦截器,但是如果站点上的恶意广告感染了客户系统会发生什么?当你把内容放到网上时,你的责任是保持它们干净,使游使用不会受到使用你系统的影响。这种努力需要成为威胁建模的一部分,无论是从数字可信度还是责任角度来看。
作为威胁建模练习的一部分,确保您了解与开源软件和第三方组件相关的风险,不仅仅是针对你的组织,也包括服务的下游用户。例如,如果提供mashup,需要考虑数据或服务如何影响其他的输出。如果其他人依赖于你的GPS数据,你需要考虑这些数据的完整性和可靠性。