GMTC深圳站售票最后一周,点击查看最新日程>> 了解详情
写点什么

GitHub:我们如何进行威胁建模

  • 2020 年 9 月 21 日
  • 本文字数:2345 字

    阅读完需:约 8 分钟

GitHub:我们如何进行威胁建模

在 GitHub,我们花了很多时间思考并构建安全产品,其中一个关键的方面就是威胁建模。在这类实践中,我们让安全团队与工程团队齐聚一堂来讨论系统,最终生成改善系统安全性的执行项目。威胁建模可以促进安全团队与工程团队进行沟通,令安全审查进程更具有主动性,并使得系统的设计更可靠也更安全。


什么是威胁建模?

在进一步讨论威胁建模的方法前,我们先要统一一下理解。定义进程的目标,有助于让大家对结果建立预期。


在 GitHub,威胁建模未必是指某个特定的工具或交付成果,而是一种过程,它会促进安全团队与工程团队就现有系统或新系统进行讨论。威胁建模是一种安全协作实习,协助我们针对新服务或已有服务,进行设计及任务计划的评估与验证。该实习涉及了在思考对服务可能产生负面影响的潜在安全漏洞时,所需要用到的结构化思维。


每个威胁建模的对话都应当至少包含下列目标:


  • 首先,针对提议或已有的架构进行深入研究,确保所有人都理解系统的运作原理(如果没有其他问题,这就行了。请用文档记录下来运作原理);

  • 然后,针对整体全局进行评估,找出最可能的漏洞点。这些就是关键的交付内容;

  • 为每个漏洞点设计可执行的修复方案。由于每个人的资源都不是无限的,很可能要安排优先级。


我们的威胁建模过程是怎么样的?

决定何时进行威胁建模

在 GitHub,我们通常会在任何对架构产生重大改变的新功能发布前,以特定节奏针对各个功能团队进行威胁建模。根据单个功能所需的工程量,你可能需要加快节奏(每隔两个月)或放慢节奏(每年一次)。如果软件审查已经设定了节奏,根据我们的发现,将其与那些已有的进程集成,有助于让大家适应新安全进程的添加。无论时间表如何,请设置指导并在实践中灵活应用。


构建威胁模型

威胁建模通常属于协作实习,因此,产品的工程团队及安全团队会聚在一起,讨论整个架构以及潜在的安全问题。我们的安全团队会预先将有效威胁建模的文档与案例提供给工程团队。我们通常要求各个工程团队提前生成模型,并涵盖系统的重要部分,作为单个的威胁建模对话来审查。提早设立这些预期(并提前预习)有助于确保会议的效果。


不过相较于特定的输出成果,这些进程和讨论更重要。在 GitHub,我们要求工程团队以微软的威胁建模工具,或开放 Web 应用程序安全项目(OWASP)的威胁建模工具 Threat Dragon(两个都是免费的!)输出威胁模型。这些工具让团队能清晰呈现威胁模型的重要信息,如 API、信任边界、依赖关系、数据存储、身份验证机制等。除了协助团队保持一致性之外,需要遵守各种安全性要求时,这些文件也能作为重要的附属内容共享给审计人员。


审查威胁模型

当审查威胁模型时,我们通常会安排一小时的会议,并将其分为两部分。每个会议的前 5-10 分钟,用来帮助工程团队理解要审查的系统的设计。这个时间段,要确保所有人的理解达成一致,将准备好的威胁模型拿出来,澄清所有存在歧义的部分,包括要使用的技术,以及任何设计习惯。在所有人都达成一致后,我们可以跳至安全讨论环节。


在安全讨论环节,我们发现:使用框架来系统处理不同的漏洞类很有效。我们经常使用的方法之一是微软的 STRIDE 模型,即欺骗、篡改、抵赖、信息披露、拒绝服务、特权提升,这是一种包含了可能在应用中发现的常见攻击向量的记忆方法。在查看总体系统时逐个检查这些类,使得安全团队能以整体方式查看正在分析的系统,并确保能涵盖最常见的威胁。谈话深入,用 STRIDE 填满提醒事项会占据大半的会议时间,然后再确认系统的更多部分。


当发现潜在的安全漏洞或设计缺陷时,安全团队会将它们与潜在的修复方案一并记录下来,从而为工程团队生成一张潜在变更的列表,留待会议后完成。我们发现,随着威胁建模成为整个 GitHub 更常见的做法,各个团队都更习惯在开发系统的阶段就让安全团队介入——这样效果更好,有助于在敲键盘前,提前发现潜在的问题,确认大多的架构变更需求。反过来,又有助于让安全团队通过安全设计原则,深入部署更好的防御。


会议结束时,我们重新历数关键的讨论结果,包括团队应当做出的发现及改进,并生成相应的追踪项目。与会者都会收到一份摘要,并随时可以就其提问,来更好地具体化要执行的项目。


我们从威胁建模中学到的东西

正如上文提到的,我们已经发现威胁建模的许多好处,正是这些好处推动了公司的安全意识文化。在我们的案例中,我们看到过三个显著的好处:


系统级的安全改善

坐下讨论系统的简单做法,为所有人讨论底层系统提供了很好的机会。团队间的知识分享帮助所有人在这个环境中提高了对系统的了解。这也有助于为在威胁模型审查期间所发现的问题制定减少漏洞的策略,从而改善了整个公司的安全状况。


主动的设计指导

随着威胁建模成熟起来,我们致力于“变动先行”,或者在开发阶段提早着手,并在产品发行前建立会话机制。安全团队通常需要在问题发现时就做出回应。但随着公司调整进程,提早安排执行威胁建模,安全团队有时可以从系统设计的角度,提供未来可能出现的漏洞,从而协助指导工程团队。


增强安全团队与工程团队间的沟通

对于工程和安全团队来说,这个好处带来的转变令人难以置信。由于会让安全团队与工程团队有规律的会面,威胁建模有助于在这些团队间建立连接,从而使得两个团队的接触更容易——彼此都是。


总结

再次重申,在 GitHub 我们包含了大量有助于提高安全建模的关键条目。下面是我们执行进程的快速总结:


  • 将威胁建模进程合并到现有的开发生命周期进程中,并在可能时令其自动化;

  • 确保所有人做好准备;

  • 使用有定义的机制来系统化地涵盖风险区域,比如 STRIDE;

  • 会议结束时,总结好具体的执行项目;

  • 跟进。


通过跟进这些步骤,我们发现,针对正在开发的系统,我们可以提高其安全性,并主动与工程团队合作(交付前),同时在参与软件开发的团队间建立起联系。


原文链接:


https://github.blog/2020-09-02-how-we-threat-model


2020 年 9 月 21 日 14:011450
用户头像
陈思 InfoQ编辑

发布了 576 篇内容, 共 216.8 次阅读, 收获喜欢 1226 次。

关注

评论

发布
暂无评论
发现更多内容

ETH场外交易系统开发流程丨ETH场外交易开发源码案例

系统开发咨询1357O98O718

ETH场外交易系统开发

vivo 全球商城:从 0 到 1 代销业务的融合之路

vivo互联网技术

架构 分布式 商城项目 商城

LeetCode题解:433. 最小基因变化,BFS,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

架构1期 第十二周作业

haha

「奇淫技巧」如何写最少的代码

Kerwin

Java 代码设计 代码技巧

OKO疯矿链系统开发案例(源码)

系统开发咨询1357O98O718

OKO疯矿链系统开发

第12周作业

饭桶

COMP矿池矿机系统开发案例分析

系统开发咨询1357O98O718

COMP矿池矿机系统开发介绍

第十二周 作业

熊桂平

极客大学架构师训练营

与前端训练营的日子 --Week07

SamGo

学习

年终盘点 | 七年零故障支撑双11的消息中间件 RocketMQ,怎么做到的?

阿里巴巴中间件

消息中间件 双十一

BMEX交易所系统软件开发|BMEX交易所APP开发

系统开发

week8-作业二-根据当周学习情况,完成一篇学习总结

未来已来

Week 12 學習總結

Christy LAW

减肥为什么会失败,有可能是因为你仍然在摄入容易消化的食用糖。

叶小鍵

科普 减肥、廋身 盖里·陶比斯 加工食用糖

使用Angular8和百度地图api开发《旅游清单》

徐小夕

Java angular.js 前端 angular

第12周总结

饭桶

Learun FrameWork,.Net Core3.1工作流引擎平台

力软.net/java开发平台

.net core 工作流引擎

如何降低微服务测试成本?我的经验之谈

阿里巴巴中间件

架构师训练营 12 周笔记

郎哲158

智天下APP系统开发|智天下软件开发

系统开发

三金本体挖矿模式系统开发丨三金本体平台源码设计

系统开发咨询1357O98O718

三金本体挖矿模式源码

5分钟完成业务实时监控系统搭建,是一种什么样的体验?

阿里巴巴中间件

体验 监控

第十二周 学习总结

熊桂平

极客大学架构师训练营

Week 12 作業

Christy LAW

Java并发编程:多线程并发内存模型

码农架构

Java并发

TRONex波场智能合约系统开发详解丨TRONex波场链系统开发(源码)

系统开发咨询1357O98O718

系统开发 TRONex波场智能合约 APP开发

第十二周 架构方法学习总结 —— 数据应用

兵长

架构师训练营 12 周作业

郎哲158

区块链钱包系统开发方案丨多币种钱包系统开发详情

系统开发咨询1357O98O718

区块链钱包开发

Forsage系统开发(模式分析)

系统开发咨询1357O98O718

Forsage系统开发案例介绍

数据cool谈(第2期)寻找下一代企业级数据库

数据cool谈(第2期)寻找下一代企业级数据库

GitHub:我们如何进行威胁建模-InfoQ