面向开发人员的威胁建模指南

安全的软件设计,很少而且经常bet188足球

本文提供了明确而简单的步骤来帮助希望采用威胁建模的团队。威胁建模是一种基于风险的安全系统设计方法。它的基础是识别威胁,以便制定缓解措施。随着网络安全风险的增加和企业对自身责任意识的增强,软件开发团队需要有效的方法将安全性构建到软件中。不幸的是,他们常常难以采用威胁模型。许多方法需要bet188足球复杂、详尽的前期分析,这与现代软件团队的工作方式不匹配。因此,与其停止一切来创建完美的威胁模型,我鼓励团队从简单开始并从中成长。

2020年5月28日



如何简化复杂问题

什么是你正在建设的软件的安全要求?找到一个好的答案非常复杂。要防止在系统的寿命网络损失。但什么是它所提供的结果,具体的故事,验收标准和技术范围?这是拼图本指南中解决。

有些没用的是,网络专家经常会问:“你叫什么威胁模型?这个答案是非常不具体和不确定的,很像转身说'这取决于'。更糟糕的是,“威胁模型”对大多数人来说是晦涩难懂的技术术语,增加了不必要的神秘感。如果你研究威胁建模的主题,信息可能是压倒性的,很难采取行动。对于“威胁模型”之类的东西,没有一个公认的标准。

那么什么是威胁模型,什么是威胁模型?这个概念的核心很简单。是关于理解原因与网络安全损失有关。是利用这种理解来保护你的系统以基于风险的方式。这意味着从你的特定案例中的潜在威胁开始,而不是仅仅遵循一个清单。

来了解您的系统的威胁模型并不简单。还有,你能想象到的任何系统的威胁数量不受限制,并且他们当中不少人是可能的。威胁的现实是,许多原因结合在一起。网络威胁以意想不到、不可预测甚至混乱的方式连锁反应。因素做文化,流程和技术都有助于。这种复杂性和不确定性是在网络安全问题的根源。这就是为什么安全性的要求是那么辛苦为软件开发团队在达成一致。

真实的入侵事件背后的故事表明,威胁和因果关系可能是多么复杂——细节往往令人震惊。的诺佩蒂亚故事是一个很好的例子。国家恶意软件被一个叫做“影子经纪人”的组织交易,然后被武器化。最终的影响是几乎随机地给组织带来重大损失。航运公司米尔斯克不得不停止航运的进展。糖果商吉百利不得不停止生产巧克力。他们各自的威胁模式是什么?什么样的开发团队能想象出如此复杂的因果关系和锁骨损伤链?你的团队需要多长时间来建立这个模型,以及所有其他危险的可能性?

威胁建模是否过于复杂而没有价值?开发人员是否应该遵循一个清单,“交叉手指”并希望他们走运?怀疑是健康的,但我相信学习威胁建模是开发人员的一项关键技能。我们需要的是正确的方法和工具来控制复杂性。本指南正是本着这种精神编写的,它以三个理念开始,这三个理念使识别良好的、基于风险的安全需求变得更加简单。

从技术入手

第一个建议是主要关注技术威胁而非广泛威胁,至少一开始是这样。

  • 广泛的威胁和威胁来源包括黑客组织、不良行为者、幻灭的员工、人为错误或新蠕虫类恶意软件的流行。这类原因普遍存在于世界范围内,且极为多样、不确定、不可预测。它们与系统的数据和服务对组织和其他人的价值有关。这些是很容易与非技术人员讨论的戏剧性风险。
  • 技术威胁和脆弱性是更细化,如在软件或特定的弱点缺少的安全控件,如加密和授权。这些种类的威胁从结构出现,并在你的团队正在建设的系统数据流所固有的。通常一堆技术威胁的结合在一起,允许广泛的威胁影响您的系统。

遵循本指南,您将主要关注发现技术威胁。这有助于简化精化过程,因为系统的结构和数据流是可以确定的。但这也意味着你可以从你作为一个软件开发人员的现有优势开始,理解技术方面的东西。这是一个比对威胁源进行高级别风险分析更有力的起点,对此你可能知之甚少。

不过,不要完全忘记大局。对可能存在的广泛威胁的务实和基于风险的理解有助于将一种技术威胁优先于另一种技术威胁。例如,简单的人为错误通常比国家攻击更容易发生(见侧栏)。这种想法可以用于选择首先开始检查的安全范围。当您首先关注识别技术威胁时,就更容易将它们与更广泛的威胁联系起来,从而证明修复和附加控制是正确的。

采取协作的方法

第二个建议是采用协作的、基于团队的方法. 确定安全需求并不容易,视角的多样性将导致更好的决策。总会有另一个弱点或技术威胁要发现,因此,在练习中引入各种各样的观点,可以使头脑风暴更加有力。它还增加了识别最重要威胁的可能性。团队中的威胁建模有助于全面解决风险,并帮助整个团队学习如何有效地思考和谈论安全问题。

从风险管理的角度来看,让产品所有者参与进来是一个巨大的机遇。产品所有者对用户行为和业务环境有深刻的见解,而软件开发人员根本不具备这些洞察力。他们应该了解特定服务对业务的价值,以及数据暴露或丢失时的影响。当网络安全损失发生时,它们就是商业损失。如果最坏的情况真的发生了,那么原因很可能是你的组织和你正在使用的技术所特有的。网络安全问题不仅仅是技术问题,而是为了保护企业做出正确的投资决策。

威胁建模“很少而且经常”

第三个建议是开始威胁建模“少量多次”. 与团队的每一次威胁建模会议都应该很短,并且集中足够的精力,以便快速消化为可以交付的内容。从分析系统中最薄的部分开始;就是你现在正在做的事情。与其试图预先分析整个系统,不如一次建立一点威胁模型来建立团队的肌肉记忆。

需要完全指定的软件设计的实践与敏捷团队的工作方式不匹配。没有理由需要对威胁建模进行详尽的前期分析。团队经常被全面bet188足球和高度结构化的威胁建模方法所淹没[1]。我见过一些团队尝试这样的方法,在发现任何真正的威胁之前就已经没有时间和耐心了——更不用说已经交付的修复了!

而不是创建和维护一个详尽的“威胁模型”的文件,做威胁建模“少量多次”。当你以这种方式工作的每个威胁建模会议是微小的,有没有什么影响。然而,做他们的累积效应有着巨大的影响。当你知道你会做这再次每次迭代,有较少的动机,试图在一次和更多的激励,现在优先考虑的最重要的工作做的一切。

准备开始

指南的这一部分开始使事情更加详细和具体,以便您可以计划开始与您的团队进行威胁建模。

三个关键问题

了解威胁建模会话的简单结构,并进行一点规划,对于获得良好的结果有很大的帮助。

首先要介绍的是一个简单灵活的威胁建模结构[二]。这基于三个关键问题。它有助于把这个结构记住。当您需要评估威胁时,您可以使用三个问题结构作为指导。就像骑自行车一样,一旦你掌握了这些基本技能,你就能够应用和发展这些技能。

活动 问题 结果
解释和探索 你在建造什么? 技术图表
头脑风暴威胁 什么会出错? 技术威胁清单
优先重视并修复 你打算做什么? 添加到backlog的优先修复

本指南遵循三个问题的结构。在每个威胁建模会话中,您应该花大约三分之一的时间回答每个问题。然后你会得到一个有用的结果。本指南的其余部分将把这个基本结构分解为更详细的步骤、指针和解释,以帮助您运行成功的威胁建模会话。

实际考虑

在运行威胁建模会话之前,有一些事情需要弄清楚。下面的指针应该可以帮助您计划。

谁应该参与?

试着让整个交付团队都参与到每个会议中,也就是说,包括技术和非技术角色。这将带来更多的观点和想法,但也建立了共享的理解。排除产品负责人、业务分析师和交付经理可能意味着修复安全缺陷的工作没有完成,因为其价值不会被广泛理解。

你绝对不需要一个安全专家开始威胁建模和发现有价值的安全范围。然而,造型会话的威胁与专家,安全架构师或您的风险管理团队协作的绝佳机会。这都将取决于什么角色和专业知识就像在您的组织。

尸体和持续时间

首先,我建议会话长度为90分钟。您需要给团队时间和空间来学习所涉及的结构和安全概念。不过,一旦你开始行动,事情会变得更快。我参加过的最具影响力的威胁建模会议只用了不到15分钟。一旦团队中的每个人都在练习中建立了“肌肉记忆”,短时间、快速的训练是可能的。

我经常被问到威胁建模会议应该有多频繁。我不认为有任何正确的答案,这取决于你的团队。我认为威胁建模就像其他团队设计会议一样。bet188足球我不会那么严格地说必须每星期都做。然而,我曾与许多团队合作,他们都有一个风险概要,可以证明每个sprint的威胁建模是合理的。在另一个极端,如果已经有几个没有任何威胁模型的冲刺,这种练习显然不够持续,不能被认为是成熟的。

运行的会话面对面面对面与远程运行

A面到面威胁建模会议可能发生在一间会议室,或者如果你有更多的空间在非正式团队的正常工作面积 - 。最典型的训练包括绘制图表来解释和探索范围,头脑风暴的威胁,则优先为积压修复。然而,A面到面的会话是不可能的。

当你远程运行一个会话时,你只需要做一点不同的计划,这样每个人都可以参与。你需要视频会议和协作工具。提前同意并设置这些工具。ThoughtWorks的团队已经成功地使用了各种工具,包括Mural、Miro、Google Jamboard和Google Docs。

提前获得会话的习惯你的工具,让参与者以测试他们的访问。无论你选择的工具,确保您从您的组织的安全批准使用的工具。威胁建模输出代表有许多原因敏感信息,必须受到保护。

这里有一些更记三分球远程工作时承受:

  • 它有助于在练习之前异步创建图表。这是因为在虚拟板上绘制图表会耗费大量时间。
  • 更要注意对你用来说明系统的概念和符号建立一个共同的理解。说明图表符号,数据流箭头和数字胶粘的颜色。
  • 要更有意识地确保每个人都参与到这项活动中来。或许可以用一些与安全相关的脑筋急转弯来打破僵局。请参阅更广泛的远程便利指南。
  • 如果您有一个大的团队,那么创建较小的团队然后合并输出可能是有意义的。几个小会议比一个大会议更好更持久。
  • 在面对面的谈话中,你需要更多的休息时间。远程工作很累。

无论你的会议是远程的还是面对面的,你都应该争取按时完成。并取得了一些具体的成果!这需要纪律——促进时间安排可以由交付经理或有经验的人员担任,以确保研讨会成功。

来自德国ThoughtWorks的Mona Fenzl和Sarah Schmid使用一种名为“壁画”的合作工具取得了一些成功。他们使用它来创建一个威胁建模模板,以帮助其他团队开始使用该工具。

作用域会话

为会话确定正确的焦点和详细级别称为“确定作用域”。在让大家聚在一起执行活动之前,一定要先确定这一点。以现在最有价值的东西为指导。也许这只是你在这个迭代中工作的用户故事?

不要试图一下子咬掉了太多的范围!如果你试图威胁会立即把整个系统的建模,要么你会做的时候没有发现可用的,否则将大大超限,并会出现没有食欲或预算做一遍。这是好多了时间盒威胁建模成可管理的块,执行活动“少量多次”。

以下是一些工作良好的作用域示例:

  • 范围,当前迭代。
  • 即将推出的安全敏感功能,如新用户注册流。
  • 连续交付管道和交付基础设施。
  • 特定的微服务及其协作服务
  • 一个系统的高层次概述,以确定安全技术债务。

无论您的团队选择什么范围,确保它不会太大,您无法在可用的时间内覆盖。

一个成功的例子:范围界定

指南的其余部分使用一个真实的特性来展示威胁建模所涉及的具体步骤。一家零售机构的一个开发团队正在构建一个销售杂货送货上门的平台。下面是他们在即将到来的sprint中的史诗:

作为客户,我需要一个网页,我可以看到我的客户的详细资料,所以,我可以确认是否正确

如果您曾经使用过在线商店,您将能够想象一个页面,用于更新地址详细信息,也许可以查看忠诚卡余额。

根据经验,这种规模的特征是威胁建模会话的一个相当合理的范围。

解释和探索

不要试图从Wiki中删除过时的图像。通过讨论当前或即将出现的系统状况,建立共同的理解。

“你在建什么?”

图表是解释和探索软件是如何构造和设计来进行通信的完美工具。这一部分的指南提供了详细的指针在图表上,将作为您的威胁建模会话的基础。bet188足球

绘制“低保真”技术图

画图可以让每个人都站在同一立场上。在开始考虑威胁、风险和缓解措施之前,您需要对所处理的软件或基础设施有一个共同的技术理解。

一。显示相关组件。

幸运的是,开发人员将习惯于绘制图表来探索软件设计。bet188足球通过在白板或白板上画一个简单的技术图来利用这些已建立的技能。

不需要复杂或完美——只需要为主要组件画出框并标记它们。

二。在图表上显示用户。

最终,系统被设计成允许人们做事。用户很重要,因为bet188足球他们是系统中授权的人。在图表上表示并标记它们。

  • 有些用户比其他人更值得信任。例如,终端用户在系统中执行操作的自由度通常小于管理员。如果多个用户组与会话范围相关,则表示并标记每个组。
  • 并非所有系统都面向用户。如果您的系统是后端系统(可能是只接受来自其他系统的请求的下游微服务),则表示授权与系统交互的协作系统。

信任本质上是关于谁或什么应该有做某件事的自由。一定要说明这些“演员”,因为他们对安全很重要。

一个例子:低保真图

回到前面介绍的真正功能,让我们看看团队是如何选择演示新的“客户详细信息页”功能的。他们画了下图。

它说明的理解是,该系统:

  • 基于微服务体系结构
  • 已经有允许客户进行身份验证的身份提供者。
  • 有客户详细信息的后端服务(这是用Java编写的)
  • 有一个前端(BFF)服务的后端和前端UI(用Javascript编写并做出反应)
  • 有客户的用户,并且希望编辑他们的配置文件

遵循本指南不需要了解这些技术的详细信息,但是这些事实说明了在绘制图表时应该讨论的详细程度。

显示数据是如何流动

添加细节,以显示数据如何在系统周围流动是很重要的。

3绘制箭头以显示数据流

攻击者通常使用与合法用户相同的路径来绕过系统。不同的是,他们滥用或使用他们的方式,没有人想到检查。因此,重要的是显示系统周围的可信路径,以帮助查看真正的威胁可能发生的位置。

从用户和协作系统开始,用箭头显示数据流。现在,大多数数据流都是请求响应的,因此是双向的。但我建议您从请求的来源绘制方向箭头。从经验来看,这使得以后集思广益地讨论威胁变得更加容易。

IV。标签的网络和节目的边界。

更可能的威胁来自某些网络。网络被配置为限制从一个地方到另一个地方的流量自由。这种限制性(或开放性)将有助于确定哪些威胁是可能的或可能的。开放的互联网比保护良好的后端网络更危险(即使后端网络是由云提供商托管的专有网络)。

用另一种颜色画虚线来表示系统中不同网络之间的边界。这些通常被称为“授权边界”。有时值得举例说明网关设备,如负载平衡器或防火墙。其他时候,这些设备对于您的会话范围不是很重要,这也是可以的。如果您不确定,那么邀请具有DevOps或基础设施知识的人参加下一次会话可能是有意义的。

一个工作示例:显示数据流

从谁愿意看到自己的细节,在UI,然后到BFF服务,到客户的详细信息资源服务器,以获取或更新数据的客户在我们的案例箭头添加说明的数据流。还有一个数据流的身份服务器,问题的令牌授权会话。

还有一个授权边界,因为UI在Internet上,而其他组件在组织的云托管中。

展示你的资产。

在图表上快速指出具有业务价值的数据或服务所处的位置是有帮助的。例如,这可能是您存储个人数据的地方。如果你的系统处理支付,也许是服务做的。系统中的资产是需要保密或完整的信息,也是需要保持可用的服务。

不要在这一步花费太长时间。这样做的目的只是为了提供一些背景,帮助进行头脑风暴和确定优先级。如果你在这上面花了超过5分钟,那么它可能太长了。

一个成功的例子:展示你的资产

团队将客户服务和身份提供程序中的凭证存储区存储的个人可识别信息(PII)确定为具有最大业务价值的资产。

头脑风暴威胁

“什么会出错?”

在课程的第二部分,简单地集思广益,讨论你所绘制的系统面临的威胁。本节提供了详细的步骤和指针,帮助您提出一系列相关的安全威胁。

使用STRIDE以帮助

如果你的团队是从威胁建模开始的,那么STRIDE是完美的。STRIDE是一个非常轻量级的框架,可以让您在头脑风暴安全威胁方面领先一步。它是一种助记符,每个字母都指一个安全概念。关键不在于对你发现的东西进行分类,而是帮助你有效地进行头脑风暴。

在开始之前,花点时间了解并与团队讨论六个安全概念中的每一个。为了帮助学习,ThoughtWorks制作了一组跨步提示卡。这六张卡片在下面直接相连。它们还包括反面的示例列表。

在网上,没人知道你是条狗

数据会溢出而变成指令吗?

如果没有证据,就很容易否认它的发生

还有谁可以看?

可以在服务被拆除?

规避保护有多容易?

邪恶的头脑风暴

想出攻击、破坏或挫败某个特定软件的方法,本质上就是威胁建模。它也可以很有趣!

一。头脑风暴威胁!

小组中的每个人都加入了提出威胁的行列。找到最广泛多样的威胁是件好事,我们关心的是可能性,而不是“幸福之路”。一些不切实际的想法也有帮助。鼓励这种多样性,确保每个人都参与其中,不允许任何一个声音占据主导地位。确保每个人都能接触到笔和胶粘物,并至少提出一个潜在的威胁,无论背景或经验如何。

运用创造性、发散性思维,利用团队中的经验和各种观点。稍后,您将优先考虑那些风险最大或最重要的威胁,因此没有太多潜在威胁的危险。

二。遵循数据流程!

如果需要灵感,请逐一遵循图表上的数据流线。如何将一个STRIDE概念应用于该数据流?这是否意味着某种特定的威胁需要被解决?这种工作方式有助于识别攻击者可能使用的技术机制和数据流。

任何网络攻击都有一个数据流,就像你画的可信数据流一样。攻击者使用相同的路径来围绕为受信任用户设置的系统进行攻击。网络安全损失发生在技术层面没有足够的约束来防止不良事件发生的情况下。

3在粘贴纸上捕捉威胁

对于每一个威胁,花点时间捕捉它来自Internet的SQL注入、“数据库缺少加密”、“没有多因素身份验证”就是很好的例子。问题也很好,比如“我们需要存储这些数据吗?”“是否可以绕过授权?”“谁会撤销离职者的账户?”

你会发现这是很自然的,然后将这些胶粘在图上的特定地点,旁边一个特定的用户,组件或数据流。所以你知道什么粘的手段,并移动到头脑风暴的下一个威胁,只包括足够的细节。

一个样例:确定威胁

使用以前创建的图表,球队围绕系统中的每个数据流头脑风暴,使用STRIDE的帮助。

当我们发现在软件的机制的潜在威胁,写他们的胶粘物和注释低保图。

在会议的集思广益部分结束时,他们提出了以下建议:

数据流
威胁
客户→身份服务
  • 身份验证是基于密码的,没有双重身份验证
客户→用户界面
  • 基于DOM的跨站点脚本(XSS)攻击
UI→Bff
  • 身份令牌验证的缺失/弱点
  • 注入攻击(如SQL注入)存储XSS
  • 缺少呼叫者身份的记录
  • 配置错误的TLS传输加密
  • 在生产中启用配置错误的graphQL内省
  • 僵尸网络的网络层流量泛滥
  • 未能防止身份验证的用户访问别人的细节
  • 缺少定期修补可能导致远程代码执行
Bff→客户服务
  • 不存在或弱点“服务器到服务器”认证
  • 缺少呼叫者身份的记录
  • 过分宽松的安全组允许从Internet访问客户服务
  • 未能防止身份验证的用户访问别人的细节

注意,许多威胁发生在数据流越过授权边界从互联网进入系统的地方。但是,在基于浏览器的用户界面和后端网络中也发现了威胁。

优先重视并修复

现在,您将在团队已经创建的、标注了威胁的图表上进行构建。

“你打算怎么办呢?”

软件团队被激励去交付,并且很少有无限的带宽去消除和解决每一个确定的威胁。一些威胁可能会带来微不足道的风险。你需要过滤掉一些最重要的行动,并将其优先排序,这样你才能有效地执行这些行动。

按风险划分威胁的优先级

一。分享有助于确定优先顺序的知识

这有助于我们共同了解我们对系统风险状况的了解。花不超过5分钟。大致上,有两种类型的知识有助于确定威胁的优先级。产品所有者或安全团队通常有极好的见解可供分享。

  • 商业价值-什么样的损失把组织的目标变成了杰波迪?客户数据库被盗了吗?因失去业务而影响声誉?
  • 更广泛的威胁-对于这个组织来说,网络安全问题可能造成损失的根本原因是什么?我们担心欺诈吗?恶意内鬼?特别能干的黑客?

如果团队中没有人对更广泛的风险有任何洞察力,那也没关系。获取这些知识并不是先决条件。您可以仅根据技术风险来确定优先级,并且仍然可以从威胁建模中获得很大的好处。

二。每个人都投票给最危险的威胁!

这应该是熟悉的人谁做“点投票”在之前的回顾性或车间。每个人都有一些选票,投下他们最危险的威胁。也许每三票对您的第一次会议开始。但它依赖于有多少人是该组中,你发现了多少威胁。我们的目标是削减到最有价值的威胁开始。请记住,风险不只是威胁如何可能的是,同时也潜在损失的规模。

每个人都根据自己对风险的看法,用点来投票。

每个人都需要通过标记的即时贴点投了票。每个人都有票的固定数量。这是细到在同一个威胁表决不止一次,如果你认为这是正确的。

以这种方式投票将为低投资带来良好的风险决策,反映出集团的不同观点。人们有一种直觉上的风险感,能够在最少的提示下投票。

3找出最危险的威胁

你将需要计算每个威胁的票数,并以某种方式标记那些最高的投票。也许用笔圈出最危险的威胁。

经常有人问我,在一次会议中我们应该识别多少种威胁。第一次,3是个不错的数字。这为投入的时间量提供了一个很好的平衡。但是运用你的判断和实验。这里可能有一个非常危险的项目——现在解决这个问题是有意义的。同样,在一次会议中可能会出现4到5个威胁。

IV。为带注释的图表拍照,并记录威胁

在此阶段,使用手机摄像头拍摄一张照片,以捕捉头脑风暴和优先顺序的输出。如果您使用的是远程工具,您可以截图或导出。将图像上传到Wiki或将其存储在某个存储库中是很有意义的。

将修复程序添加到待办事项中

团队在后续工作上的时间投入是非常重要的。软件团队已经有了一种强大的方式来表示和排序交付软件的活动:积压. 现在是时候找出你真正需要的方法来降低风险了。使用团队现有的流程和工作方式来支持这一点(参见侧栏)。

在backlog中捕获安全修复

对于每个优先威胁,定义具体的下一步。在安全语言中,您可以调用这些“控制”、“缓解”、“保护”或只是安全修复。这些修复可能有多种形式。将这些修复具体化,以便在修复“完成”时可以清楚地看到,从而降低了风险。

  • 验收标准是威胁模型中最常见的安全修复类型。这些将被添加以反映现有故事的额外范围。例如,可能有一个故事来执行一个操作,额外的验收标准可能是授权检查。验收标准应是可测试的。
  • 故事可能突然出现,以实现特定的控制,或得到拆分现有的故事,如果它是有道理的业务分析师和团队。例如,集成单页的应用程序与身份系统可能会形成一个“验证用户”的故事。
  • 计时钉如果我们不确定自己是否真的易受攻击,或者后台调用被自动清除,那么这真的很有用吗?-或者如果我们不确定这个问题的最佳解决方案,并且值得花一些开发人员的时间来找出答案。
  • 做过定义是团队必须满足的一组条件和验收标准,以便考虑完成的功能。如果您确定所有API调用都需要经过身份验证、授权和记录,那么您应该在done的定义中反映这一点。这样,您就可以在注销故事之前对其进行一致的测试。
  • 史诗是被确定为威胁建模的部分安全架构的显著位。例子可能被引入身份提供商,安全事件系统,或以特定方式配置网络。期待威胁建模在项目的初期就上产生史诗。

六。结束会议

如果你在会议中把修正写在卡片或纸上,确保有人负责将它们添加到你的项目跟踪工具或敏捷板中。理想情况下,产品所有者将参加威胁建模会议。如果没有,那么就采取行动,与那些优先处理威胁的人交谈,这样你就可以适当地优先处理。

确保威胁建模产生影响的最佳方法是交付修复程序,然后再次进行威胁建模。

一个成功的例子:backlog中的Scope

当他们投票的时候,团队认为三个威胁是最危险的,而且是值得修复的。

授权旁路直接到API

尽管用户必须登录才能看到页面(经过身份验证),但团队意识到没有什么可以阻止直接指向API的未经身份验证的请求。如果它投入生产,这将是一个相当大的缺陷!小组在会前没有发现它。

他们在故事中添加了以下验收标准,因此可以作为故事签署的一部分对其进行明确的测试。

提供从单页应用程序到API的API请求

当请求中包含的当前用户没有有效的授权令牌时

然后API请求被拒绝,因为未经授权

XSS或通过用户输入注入

用户配置文件功能允许用户输入个人详细信息、地址和发送首选项。这些细节由各种遗留后端系统解释,这些系统可能容易受到SQL和XML注入攻击。

团队知道,在接下来的迭代中,他们将实现许多特性,这些特性接受来自用户的输入并将其存储在后端。他们在团队的done定义中添加了以下内容,而不是将这些类型的检查添加到每个故事中。这意味着可以在故事签准时对其进行一致的检查。

测试所有API更改以清除XSS、SQL和XML注入

Internet拒绝服务

谁出席了网络风险小组会议的安全专家建议收入的损失由于通过网络罪犯服务已经在他们的工作突出了分布式拒绝。

考虑到这一需求涉及将软件与第三方安全服务集成,在本例中是内容交付网络-团队编写了一个特定的故事来捕获所需的工作。安全专家同意与小组合作实施。

作为网络风险专家

我需要所有面向Internet的UI和API请求通过内容传递网络

这样我们就可以减轻收入的损失,由于罪犯拒绝服务

定义了工作并准备添加到backlog中,威胁建模会话就完成了。下次再说!

增长你的练习

“我们做得够好了吗?”

在本指南的开始部分,我介绍了三个问题的结构。但实际上有四个问题,因为我们总是需要得到反馈和改进。

反映,精益求精

反馈和持续改进是风险管理的核心。正如我在本指南一开始强调的那样,我们构建的系统和它们面临的威胁都不简单。而且每个团队都是不同的——有不同的技能、工具、约束和个性。威胁模型没有单一的方法,本指南只是提供一些基本的入门知识。很像测试驱动开发或持续交付,威胁建模奖励投资。

一种改进的方法是在你运行了几个阶段之后,对你的威胁建模工作进行回顾。问问自己什么做得很好,还有什么需要改进。时机合适吗?范围太细了吗?不够细粒度?您使用的位置或远程工具如何?会议结束后出现了什么问题?范围交付需要多长时间?通过问这样的问题,团队将随着时间的推移适应并建立掌握能力,在有效的方面加倍努力,而在没有增加价值的方面放弃努力。

随着时间的推移,你可以培养出最适合你的团队或组织的实践。以下是下一步的一些想法:

  • 用不同类型的图表进行实验。对于像OAUTH2认证流这样的东西,像UML序列图这样的东西可能比简单的组件图更好。
  • 使用特定于域的威胁库。有很多资源可以帮助你头脑风暴威胁。OWASP在Mobile或api方面有一些很好的资源。最近人们对使用ATT&CK框架非常感兴趣。
  • 任何练习都不是银弹。威胁建模不是发现基本编码或依赖性问题的有效方法。在软件交付管道中使用自动化工具补充威胁建模。
  • 就像软件中的其他东西一样,如果它没有经过测试,那么你就不能认为它已经完成了。使用威胁建模来发现要测试的故障条件。
  • 在系统的风险简介上运行会话。这种分析通常集中在您正在处理的数据类型和您的服务对他人的价值上—用安全术语来说,就是深入了解您的“资产”的业务价值。
  • 运行对系统的更广泛威胁的会话。根据最可靠的信息分析潜在攻击者的能力和动机是很常见的,例如威胁情报、真实的攻击技术文档和来自类似系统的真实事件。
  • 加入威胁建模社区,如OWASP Slack上的威胁建模频道,或遵循威胁建模子版块。跟随其他人在Twitter上做威胁建模。

总结

许多安全方面的“解决方案”似乎都是为了让开发人员不去管安全。这并不会bet188足球使它们成为糟糕的解决方案。管道中的自动检查可以有效地发现漏洞-您应该使用它们。渗透测试可以发现你自己不会发现的问题。具有安全默认值的平台可以消除许多常见威胁。然而,每一个“解决方案”只解决了有限的一类威胁。虽然网络风险不是一件简单的事情,但它是多方面的,而且是不断变化的。了解这种风险是管理风险的有效方法的核心。

威胁建模的杀手级应用正在促进整个团队对安全的理解。这是让安全由每个人负责的第一步。正如业务成果一样,质量、集成和基础设施安全性可以成为团队如何考虑软件交付的核心。而不是在最后固定的东西。以我的经验,一个对威胁建模有着强烈记忆的团队是一个主动管理网络风险的团队。

我记得我被告知,威胁建模是为大多数开发团队实在太难。我只是不愿意接受是这种情况。我的理解,提高开发人员如何解决安全性的机会。从那时起,我已经帮助球队负荷开始使用威胁建模和他们的旅程正确理解安全。我从来没有碰到过一个团队谁发现威胁建模或安全太硬。特别是当可访问的方式解释。这正是我试图在本指南中的事。

我相信威胁建模对于软件开发团队来说是一种变革性的实践。一种基于合作和风险的实践,可以持续应用。如果您是软件团队的一员,请将本文发送给您的团队,并建议一个威胁建模会话。或者转发给组织中负责软件安全的人。留出一点时间来运行会话,就可以开始了。通过开始了解系统所需的威胁、风险和安全修复,您正在向有效的网络安全迈出一步。

我希望本指南能帮助您的团队开始进行威胁建模。至少一个会话应该立即提供价值——在您的backlog中添加好的安全故事和接受标准。这种方法帮助ThoughtWorks客户的许多开发团队采用了一种全面的网络安全方法。我希望它对你也有用。


致谢

感谢Martin F188bet足球充值owler、Adam Shostack、Charles Weir和Avi Douglan对本文的早期草稿提供了详细、周到的反馈。任何复杂或细微差别都是由于它们。

感谢ThoughtWorks的Nalinikanth Meesala、Mona Fenzl和Sarah Schmid,他们帮助我远程运行威胁建模课程——他们应该为指南的这一部分获得所有荣誉!

感谢英国国家网络安全中心社会技术小组的成员(以及RISC下以开发者为中心的安全研究组合)帮助我认识到威胁建模并非“简单”。

感谢所有参与OWASP威胁建模项目的人的投入和智慧的开放共享。

由于凯蒂拉尔森为她梦幻般的校对,帮助从我的意识流提取可读的句子。

感谢ThoughtWorks营销公司的皮特·斯台普斯和杰妮·奥格力让STRIDE提词卡看起来棒极了。感谢Matt Pettitt在格式化这些网页上提供的帮助。感谢Unsplash.com网站的摄影师,本指南中所有图片的来源。

非常感谢ThoughtWorks的每个人,他们和我一起改进了我们的威胁建模方法和指导。尤其是哈里尼·穆拉利纳、杰迪普·查克拉巴蒂、富尔维奥·梅登、尼鲁·特里帕蒂和罗宾·多尔蒂。

脚注

1:一些结构化方法值得一提:面团八度. 这些办法打算由一名全职安全专家实施。而且它们也适合那些偏爱大设计的环境。虽然有很多方法是有用的,但是敏捷环境中的软件开发人员将很难有意义地采用这些技术。大量投资于生产手工艺品(通常攻击树木!)是遵循这些指南时的常见模式。然后,由于“超出预算”,团队无法完成降低风险的软件更改。bet188足球

2:亚当·肖斯塔克(Adam Shostack)写了大量关于威胁建模的文章,并提供了关于本指南的反馈,他认为这三个问题的结构值得称赞。他还增加了第四个问题“我们做得够好了吗?”我并不反对亚当的观点,即我们需要反思和改进我们的威胁建模结果。然而,我在基本结构中忽略了这个问题,因为我认为它可以在其他地方解决。基于反馈的迭代和改进应该隐含在敏捷软件开发中,特别是当我们“很少而且经常”进行威胁建模时。我在本指南的最后一节中介绍了如何反映、改进和提高团队的威胁建模结果。

重大修订

2020年5 28:发布时间最后分期付款

2020年5月27日:发布优先级和修复

2020年5月26日:发表的头脑风暴威胁

2020年5月20日:发布时间解释和探索

2020年5月19日:发布准备开始

2020年5月18日:出版的第一部分