什么是威胁建模?
威胁建模是识别软件应用中的威胁和漏洞,并定义对策以减轻这些威胁和漏洞的系统化过程,从而更好地保护业务流程、网络、系统和数据。
软件开发中的威胁建模
在软件安全方面,威胁建模是软件设计和开发中最重要的部分。事实上,它已成为现代软件开发生命周期(SDLC)中不可分割的方面。如果不评估和减轻威胁,几乎不可能构建符合企业安全策略、隐私和法规要求的应用和系统。在应用开发过程中理解威胁建模至关重要。
通过采用结构化的威胁建模方法,软件团队可以在SDLC早期识别潜在的安全风险。通过将威胁建模纳入DevOps流程,开发人员可以在开发和维护阶段将安全性构建到项目中——这种以安全为导向的方法称为左移测试。这种方法帮助开发人员避免常见错误,如未能验证输入、弱身份验证、不足的错误处理以及未能加密数据。
威胁建模还使开发团队能够确定需要采取哪些行动来减轻这些错误的风险。威胁模型对于创建所需安全改进的优先级列表非常有用,有助于确保最终软件产品在部署和交付给最终用户之前尽可能安全。当然,威胁建模是一个迭代过程,团队应在整个SDLC中牢记。
为什么威胁建模很重要?
威胁建模是一种主动发现威胁并建立安全要求的方法,以确保应用或系统能够抵御网络攻击。它是一个系统化和结构化的过程,旨在识别潜在威胁和漏洞,以降低IT资源风险。
在SDLC早期采用威胁建模使项目团队更好地理解威胁的影响,量化其严重性,确定需要哪些安全控制来保护应用免受潜在威胁,以及如何解决问题。如果系统(或流程)是业务关键或任务关键,或者流程敏感或涉及有价值数据,则早期识别其安全要求尤为重要。除了产生更安全的应用程序外,通过创建威胁模型来预测并优先处理威胁,还确保测试和开发资源得到更有效的利用,以创建更高质量的应用程序。
威胁建模的5个步骤
几乎所有威胁建模工作都遵循标准的五步流程:
- 确定工作范围:在识别或减轻潜在威胁之前,开发团队首先理解威胁建模过程的范围非常重要。为此,他们应创建数据流图(DFD)来表示应用中的数据流,并突出显示特权或信任边界,识别可能受威胁影响的资产(创建资产清单),并识别可能允许威胁行为者与应用程序交互并可能破坏应用程序的潜在入口点。在这个初始步骤中,团队还可以创建滥用故事或误用案例,以进一步澄清威胁建模工作的范围。
- 收集威胁情报:在此步骤中,识别可能损害业务应用的威胁。通过从恶意行为者(如网络罪犯或黑客)的角度查看应用及其威胁,询问“可能出什么问题”并预测可能发生的损害程度。这种假设练习帮助团队构建广泛、技术性甚至意外的威胁场景和攻击树,这有助于识别可能导致妥协或失败的潜在漏洞。威胁建模工具可以帮助自动化和简化此步骤。此外,在收集威胁情报时,团队通常使用标准或知名的威胁分类方法,如STRIDE、PASTA或TRIKE。
- 执行威胁映射:一旦识别出潜在威胁,将其映射到组织的实际上下文中非常重要。这涉及评估每个威胁可能通过组织系统的潜在路径。威胁映射帮助团队理解攻击者的视角,并利用这种理解来确定和实施更强的防御措施。
- 为识别出的威胁确定对策:在此步骤中,团队考虑并实施对策和控制措施,以降低每个识别出的威胁的风险。为了支持这项工作,他们可以使用映射列表,考虑攻击可能性和损害潜力等因素,并通过考虑资产的关键性、修复成本以及措施是否是减轻风险的最有效方式来优先处理措施。他们确定每个威胁构成的风险水平,并通过将威胁的损害潜力乘以其发生可能性来对它们进行排名,以优先处理风险缓解。还可能考虑不同的风险缓解措施,如避免风险、消除风险、接受风险、减轻风险或转移风险。
- 实施后验证措施:此时,团队评估他们是否已执行前几个步骤。他们还检查是否存在记录,如DFD和威胁列表。透明和诚实的自我评估对于实施更好的防御和对策至关重要,而这反过来又对加强组织的安全态势至关重要。
攻击树显示了特定类型安全漏洞的可能结果。
除了这五个步骤外,威胁建模过程还可能包括其他步骤,例如:
- 组建团队:团队可能包括利益相关者,如业务所有者、开发人员、网络架构师、安全专家和C级高管。多元化的团队有助于生成更全面的威胁模型,可能更适用于特定组织。
- 记录结果:记录所有发现和行动,以便快速评估应用、威胁态势和操作环境的未来变化,并更新威胁模型。
威胁建模最佳实践
有几个步骤可以确保有效的威胁建模方法:
- 尽早开始:威胁建模可以在项目期间的任何时间进行,但在SDLC早期更好,因为发现可以帮助确保设计从一开始就是安全的。此外,早期识别威胁使保护应用更快、更便宜,因为安全控制可以在构建过程早期添加,以防止SDLC后期的错误。
- 从多个利益相关者获取输入:征求各种利益相关者的输入有助于识别最广泛的潜在对手、动机和威胁,以及最脆弱组件所在的位置。此活动然后指导识别和实施适当对策的过程。
- 使用威胁建模工具:许多可用的工具简化了威胁建模。使用这些工具使团队能够发现威胁和潜在的攻击途径,包括较少见或新颖的途径。这些工具还有助于优先处理威胁并确定最佳响应方式。
- 创建文档:详细文档对于确保威胁建模过程按预期进行至关重要,并为过程带来急需的透明度和问责制。数据流图、所有主要系统组件的图表、资产清单、威胁树、可追溯性矩阵等,都是支持和增强威胁建模的有用文档。
- 理解风险容忍度:业务所有者必须理解并向开发和安全团队传达组织的风险容忍水平。这样做确保选择正确的威胁缓解方法来减轻风险并满足业务目标。
- 提供安全培训:培训参与威胁建模不同方面的每个人,以便他们的输入可以最大化,威胁建模工作得到优化。
通常,有六个不同的步骤来完成全面的威胁建模方法。
威胁建模方法和框架
早期的威胁建模方法主要依赖数据流图来可视化数据如何通过应用或系统移动,并突出其特权边界。然而,由于DFD缺乏控制流(由于没有循环和决策规则),它们对于现代应用通常过于有限。这是因为应用通常部署在高度互联的环境中,有多个用户和设备连接到它们。此外,如果有太多流程或系统,DFD可能变得非常复杂,难以创建和维护。此外,它们可能仍无法提供表示系统、应用或流程以及识别、映射或减轻影响它的威胁所需的细节。
流程流图现在常用。PFD显示应用或系统不同组件之间的关系和交互。它还从用户交互的角度显示应用或系统,以及潜在攻击者可能如何尝试通过它以破坏它。创建PFD使在潜在威胁对组织的应用或系统造成任何损害之前更容易发现、优先处理和解决它们。
攻击树也用于可视化对系统的潜在攻击。在攻击树中,根代表攻击的目标,叶代表攻击可能实现该目标的各种方式。攻击树可以为应用的单个组件构建,或用于评估特定类型的攻击。
威胁建模方法是将复杂过程分解为较小任务的方式,使其易于发现弱点。近年来,开发了许多方法和框架。这些框架可能是以攻击为中心或以资产为中心。以攻击为中心的方法关注可能的攻击类型,而以资产为中心的框架关注需要保护免受攻击的资产。
今天使用的最流行的威胁建模框架包括以下内容:
- DREAD(损害、可再现性、可利用性、受影响用户、可发现性):DREAD是一种定量风险分析方法,用于评级、比较和优先处理网络威胁的严重性。首字母缩略词的每个字母代表一个类别。此外,该方法使用缩放评级系统,为每个类别的威胁发出0到10的评级。这些类别评级的平均值表示威胁的整体严重性。
- NIST以数据为中心的系统威胁建模指南:这本来自NIST的书解释了以数据为中心的系统威胁建模,使组织能够创建专注于保护系统内特定数据类型的威胁模型。它为选定数据建模攻击和防御的方面。最好将指南作为现有风险管理过程的一部分(或补充)使用,而不是完全替换它们。
- OCTAVE(操作关键威胁、资产和漏洞评估):OCTAVE提供基于资产和风险的战略评估,可针对特定安全目标和风险管理进行定制。任何组织都可以使用OCTAVE来识别任务关键资产,并理解这些资产中的哪些信息处于风险中。
- PASTA(攻击模拟和威胁分析过程):PASTA是一个七步以攻击为中心的框架,旨在将技术要求与业务目标相关联,考虑业务影响分析和合规要求。与许多其他框架不同,PASTA是一个战略框架,因为它考虑所有利益相关者的输入,包括业务用户和管理人员,而不仅仅是安全、开发或IT团队。基于评分的风险和影响分析是PASTA的重要元素。
- STRIDE(欺骗、篡改、否认、信息泄露、拒绝服务、权限提升):STRIDE由微软开发,是微软安全开发生命周期的一部分。它识别系统实体、事件和边界,然后应用一组已知威胁。安全团队可以使用这个免费工具来识别和分析潜在威胁。
- TRIKE:TRIKE(也拼写为Trike)是一个开源、以风险为中心的框架,确保每个资产的指定风险水平对所有相关方都可以接受。它包括一个需求模型和一个实现模型。需求模型是威胁建模的概念框架,使安全团队能够描述系统的安全特性和可接受的风险水平,并创建一个参与者-资产-行动矩阵,定义哪些参与者可以执行(对系统的)哪些行动。TRIKE中的实现模型允许团队创建DFD,发现潜在威胁,并评估每个威胁的风险水平。
- VAST(可视化、敏捷和简单威胁):VAST基于ThreatModeler,一个自动化的威胁建模工具,设计用于集成到敏捷软件开发环境中,并为开发人员和安全团队提供可操作的输出。建模工作的结果可用于在整个组织中比较和测量风险。
威胁建模工具
工具降低了威胁建模过程的复杂性,使其结构化和可重复,并有助于减少创建和维护威胁模型所需的资源数量。最好的威胁建模工具让用户可视化、预测和计划所有类型的潜在威胁,并包括这些关键特性:
- 易于输入系统信息和安全规则。
- 威胁情报馈送,确保考虑最新识别的威胁。
- 带有建议缓解策略的威胁仪表板。
- 与问题跟踪器(如Jira)集成的缓解仪表板。
- 为合规性和利益相关者提供的报告。
现在有许多威胁建模工具可用;这些是最流行的之一:
- CAIRIS:一个开源平台,使用关于潜在威胁的情报来测量攻击面并验证已知安全问题和潜在合规问题的设计。CAIRIS使开发团队能够将安全性和可用性构建到他们的应用中。他们可以通过从多个角度(人员、风险、要求等)可视化应用设计,自动生成威胁模型,在SDLC早期发现风险,并测量应用的攻击面来实现这一点。
- IriusRisk:IriusRisk提供AI生成和自动化的威胁建模,因此开发团队可以成功地将安全左移并开发更安全的应用程序。用户可以通过使用他们的用户故事、文档和代码生成威胁模型图。该工具还提供安全控制(对策)以加速威胁建模、编码和部署。
- Microsoft Threat Modeling Tool:这个来自微软的免费资源提供了一个标准符号,用于可视化系统组件、数据流和安全边界,从而简化威胁建模,即使对于不是安全专家的开发人员也是如此。它还提供关于创建和分析威胁模型的指导。
- OWASP Threat Dragon:这个开源威胁建模工具作为Web或桌面应用程序运行。它记录可能的威胁,显示威胁模型组件和威胁面,并使用户能够确定缓解方法。
- SD Elements:SD Elements是一个商业工具,根据漏洞收集和分类系统信息,提供审计就绪的报告。它还通过扫描团队的GitHub或GitLab存储库,或通过导入或构建图来生成安全和合规要求。团队还可以根据其特定需求自定义内置库中的安全和合规要求。
- Threagile:这个开源工具包将威胁建模纳入应用代码库。团队可以使用它以敏捷声明方式将架构建模为YAML文件,直接在IDE或任何YAML编辑器中。该工具对架构执行安全检查,然后生成一个报告,列出潜在风险和缓解建议。
- ThreatModeler:ThreatModeler平台自动化威胁建模,并使DevOps团队能够可视化他们的攻击面并减轻SDLC中的安全缺陷。该平台在云、移动和IoT环境中工作。它还包括内置的法规合规框架以简化合规性,并支持基础设施即代码(IaC)以提供对设计缺陷的持续可见性。
威胁建模的历史
基于IT的威胁建模在1990年代随着威胁和攻击者配置文件的发展而获得关注。微软在1999年引入了其STRIDE威胁建模方法。多年来,许多其他威胁建模方法已经演变。它们都涉及解构应用或系统的元素,以识别要保护的资产和要减轻的可能威胁。
最近,在2020年,一组威胁建模从业者和研究人员发布了《威胁建模宣言》,以帮助用户开发或改进现有方法,以最好地满足他们的独特需求。宣言包含五个价值和四个原则,共同提供一种简化威胁建模同时加强系统安全性的方式。
威胁建模是必要的努力
无论使用哪种工具,每当应用、IT基础设施或威胁环境发生变化时,都应重复威胁建模过程。随着新威胁的出现,保持威胁模型的最新状态非常重要。
分析威胁涉及时间和精力。这不是一个清单练习,但最好在黑客发现漏洞之前找到并修复它,而威胁建模方法是实现这一目标的最佳方式。
在我们的完整事件响应指南中学习您可以使用的事件响应策略。