AIGC在金融场景是如何落地的? 了解详情
写点什么

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

  • 2020-09-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-09-21 14:011895
用户头像
陈思 InfoQ编辑

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

关注

评论

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

JVM总体概述,java高级编程内容

Java 程序员 后端

kafka扫盲——别等面试官一问三不知了,linux操作系统教程

Java 程序员 后端

Java面试题原理和底层,java面试突击第二季

Java 程序员 后端

Java高级特性——注解,kafka消息队列的实现原理

Java 程序员 后端

JDK新特性——Stream代码简洁之道,spring视频教程在线观看

Java 程序员 后端

JVM性能优化(三)G1垃圾收集器,附大厂真题面经

Java 程序员 后端

JVM性能优化(四)提高网站访问性能之Tomcat优化,java程序开发实用教程邱加永答案

Java 程序员 后端

JVM类加载你真的【了解】了吗,java项目面试题

Java 程序员 后端

JWT单点登录,小甲鱼数据结构百度云

Java 程序员 后端

Kafka-探险---生产者源码分析---核心组件,Java数据库题目大全

Java 程序员 后端

Java面试题整理《基础篇》,java面试宝典pdf百度云

Java 程序员 后端

JNI开发之方法签名与Java通信(二),mongodb入门篇

Java 程序员 后端

JVM的YGC,这次被它搞惨了!,rabbitmq实战指南pdf最新版

Java 程序员 后端

JVM性能优化(三)G1垃圾收集器(1),java原理书籍

Java 程序员 后端

Java面试题总结(乱序版,2020-08-20,面试总结+详细解答

Java 程序员 后端

Jib使用小结(Maven插件版),Java程序员面试必备的知识点

Java 程序员 后端

JVM--运行时数据区与内存模型,java开发基础知识点

Java 程序员 后端

jvm运行时内存是怎么分布的?,java多线程编程技术第二版下载

Java 程序员 后端

Jenkins用户权限管理-Role-based Authorization Strategy插件

Java 程序员 后端

Json的FastJson与Jackson,java阻塞队列原理

Java 程序员 后端

JSP、EL表达式、JSTL标签,rabbitmq源码分析持久化

Java 程序员 后端

JPA基本使用,Java虚拟机学习集锦是我攒来的

Java 程序员 后端

JVM类加载你真的【了解】了吗(1),网易的朋友给我这份339页的Java面经

Java 程序员 后端

Kafka的生产者原理及重要参数说明,Java码农是如何进入腾讯的

Java 程序员 后端

JDK的前世今生:细数 Java5 - 15 的那些经典特性,java高级程序员的要求

Java 程序员 后端

JMX客户端及对commons-pool的监控,java工程师面试视频

Java 程序员 后端

JSP 标准标签库(JSTL),javaee教程视频

Java 程序员 后端

Kafka 的 replica 同步机制(ISR与OSR列表数据相互转换)

Java 程序员 后端

Jenkins集群下的pipeline实战,kalilinux使用教程pdf

Java 程序员 后端

JVM 内存模型,百度笔试题百度校招面试经验

Java 程序员 后端

JVM探究:全面解析OOM异常,都在这了,mysql数据库基础与实例教程孔祥盛

Java 程序员 后端

  • 扫码添加小助手
    领取最新资料包
GitHub:我们如何进行威胁建模_安全_Robert Reichel_InfoQ精选文章