威胁建模之绘制数据流图

news2024/11/13 16:20:08

0x00 前言

1、什么是威胁建模:
以结构化的方式思考、记录并讨论系统存在的安全威胁,并针对这些威胁制定相应的消减措施。

2、为什么要威胁建模:
(1)在设计阶段开展威胁建模,一方面可以更全面的发现系统存在的威胁,根据发现的威胁提出相应的安全需求,来最大限度保证系统的安全;另一方面也可以降低安全设计缺陷导致的修复成本。
(2)通过威胁建模生成的记录文档,为后期开展的代码审计、渗透测试等安全活动提供支持,可极大提升漏洞挖掘的效率。

3、如何实施威胁建模:
(1)绘制数据流图(基于业务现有文档中的系统架构图等,来绘制数据流图)
(2)发现威胁(通过结合STRIDE、攻击树、攻击库等方法来分析发现威胁)
(3)处理和管理威胁(可使用风险管理的经典策略:解决、缓解、转移、接受)
(4)验证威胁是否解决。

4、数据流模型是威胁建模最理想的模型,因为安全问题经常出现在数据流中,而不是在控制流中。 数据流图的应用非常广泛,有时会被称为“ 威胁建模图” 。1967 年由Larry Const ant ine 设计,数据流图(DFD)包括数据存储和处理过程2个关键要素,通过数据流连接起来,并与外部实体相互作用。没有完全准确的数据流图,我们只是要让他尽量有用而已。本篇文章我将重点分享一下如何绘制一个对我们有用的数据流图。如果大家有更好的意见,希望不吝赐教。

0x01 数据流图5个元素

元素图形表示含义
外部实体矩形驱动系统业务,但不受系统控制的人和物。如用户、第三方系统等
处理进程圆形或圆角矩形表示一个任务、一个执行过程。如微服务、可执行文件、Web Server 、ftp server等
数据存储两条平行线存储数据的内部实体。如对象存储、数据库、消息队列、文件、注册表等
数据流带箭头的直/曲线数据在系统中的流动方向。如http请求、gRPC请求、服务调用、网络通信等。
信任边界虚线可信元素和不可信元素之前的边界

在这里插入图片描述

0x02 常见架构图设计模型

一般我们实施威胁建模时,是在应用系统的设计阶段,这个时候安全工程师已经有了系统的设计文档作为参考,但是由于一般情况下,公司不会对架构师绘制系统架构图的模型进行统一要求,因此我们拿到的设计文档中会出现各式各样的图形,为了能够读懂这些图,我们就需要掌握一些常见的架构图设计的模型,掌握这些模型以后,我们就可以游刃有余的应对大部分的架构设计图了。所以本节介绍2种常见的架构图设计模型,分别是软件架构4+1视图和C4模型。

注:本节出现的所有图形都是从网络上粘贴过来的,主要是方便大家理解。

2.1 软件架构4+1视图

使用5种架构视图,从不同角度表示一个软件系统的不同特征,组合到一起作为架构蓝图描述系统架构。
1、逻辑视图(也叫结构视图、功能视图):从结构化视角,描述系统提供的功能服务是如何构建的,明确每个模块的功能是什么。所以在逻辑视图中,系统会被分解成一系列的功能抽象。
springcloud微服务的逻辑视图
2、运行视图(也叫处理视图、进程视图),用于描述系统软件组件之间的通信时序,数据的输入输出。在UML中通常由时序图和流程图表示。
微服务架构安全认证处理视图
3、开发视图(也叫实现视图):描述实现系统功能的各个组件和模块是如何实现的。
设备调试系统架构的开发视图
4、物理视图(也叫部署视图):描述系统可以部署在那些物理环境上(服务器、PC端、移动端等)和软件环境(虚拟机、容器、进程等),在UML中通常由部署图表示。
在这里插入图片描述
5、用例视图(也叫场景视图),即4+1中的1。从前面的图可以看到,4+1中的4个视图都是围绕着场景视图为核心的。它用于描述系统的参与者与功能用例间的关系,反映系统的最终需求和交互设计。在UML中通常由用例图表示:
在这里插入图片描述

2.2 C4模型

通过四个模型,从不同的层次(抽象到具体),来描述系统的架构设计。
四个模型分别是COTEXT、CONTAINER、COMPONENT、CODE,因此叫C4模型。
1、COTEXT上下文:高度抽象的系统层面,所表达的是系统和用户以及它所依赖的其他系统之间的关系。
在这里插入图片描述
2、CONTAINER:系统是由容器组成的,这个容器是一个抽象的概念,代指有自己独立进程空间,可独立部署的一种存在。
在这里插入图片描述
3、COMPONENT: 容器是由组件组成的,组件在这里把接口和它的实现类打包成一个概念,组件是映射到代码库中的真实抽象
在这里插入图片描述
4、CODE: 代码层面的设计,也就是类图等UML制图。一般是不画的,都是代码生成出来。

2.3 总结

上面简单介绍了2种架构图设计模型,如果大家感兴趣可以再去深入研究,这里就不多说了。可以看到上面2个模型都有一个共同点,都是分别从不同的视角或者细粒度来绘制系统架构图,那么我们在绘制数据流图时,需要使用哪个视角呢?需要细化到什么粒度呢?理想情况下当然是系统描述的越具体越好,粒度越细越好,这样有助于我们发现更多的威胁,但实际情况是,如果我们一直纠结于系统的运行细节,我们将会耗费大量时间在绘制数据流图上,且对于初学者而言,容易局限在绘制数据流图的步骤,这个显然得不偿失。

因此从初学者角度看,选择合适的抽象层级来绘制数据流图还是挺重要的,从笔者目前总结的经验来看,当使用4+1视图绘制数据流图时,选择逻辑视图,当使用C4模型时,选择CONTAINER层级,也就是具体到进程级别,这样绘制出的数据流图会相对合理些,当遇到一些重要或者复杂的进程时,只需要单独再放大一下该进程就可以了。

0x03 工具调研

3.1 Microsoft Threat Modeling Tool

微软的威胁建模工具:https://learn.microsoft.com/en-us/azure/security/develop/threat-modeling-tool
1、优点:
(1)画图体验很好,毕竟是微软的产品
(2)可根据已有的威胁模型模版和绘制的数据流图,自动生成威胁列表
在这里插入图片描述
2、缺点:
(1)默认只有2个威胁模型模版,需要我们自己制作适合自己应用场景的威胁模型模版。
https://github.com/microsoft/threat-modeling-templates
(2)只能在win系统使用,很难在mac系统使用。

3.2 OWASP Threat Dragon

OWASP提供的威胁建模工具:https://github.com/OWASP/threat-dragon/releases
1、优点:
(1)支持win、mac、linux等操作系统
在这里插入图片描述
2、缺点:
(1)相较Microsoft Threat Modeling Tool,画图体验较差
(2)只能导出pdf版的威胁建模结果
(3)威胁描述和消减措施每次都需要手动编写
在这里插入图片描述

3.3 drawio

这就是一个类似visio的开源的画图工具,支持win、mac、linux等操作系统,没有记录威胁的能力。
https://github.com/jgraph/drawio-desktop
我们可以使用drawio或者visio等画图工具绘制数据流图,然后在表格中记录威胁。

3.4 总结

经过前面的描述,可以看到每个工具都有自己的不足,我们在实施时可以选择如下2个方案:
1、自动化程度更高的方案:
(1)使用Microsoft Threat Modeling Tool工具,前期需要花费时间制作威胁模型模版。
(2)根据实际情况,人工核验自动生成的威胁列表,并对其进行增删改操作。
2、全部手动操作的方案:
(1)使用drawio、visio等画图软件来绘制数据流图,然后基于数据流图在表格中记录威胁。

0x04 案例分析

本节我找了一些安全团队开源出来的威胁建模的模型,来帮助初学者更好的理解如何绘制数据流图。

4.1 k8s威胁建模

CNCF对k8s的威胁建模:
https://github.com/cncf/financial-user-group/tree/main/projects/k8s-threat-model
1、k8s架构图
首先我们看下k8s官网给出的k8s的架构图:
在这里插入图片描述
从C4模型来看,该架构图具体到了CONTAINER层级,但是对于k8s集群的核心服务api server,其进行了放大,体现出了服务内的部分关键组件。
2、下面我们看下CNCF绘制的k8s集群的数据流图:
在这里插入图片描述
可以看到,该图同样是具体到了CONTAINER层级。本篇文章主要讲的是如何绘制数据流图,如果对k8s威胁建模的分析结果感兴趣的同学,可以自行去github上查看。

0x05 总结

1、从个人角度而言,绘制数据流图的前提条件是要熟悉各种架构设计模型,在此基础上,通过不断练习,不断熟悉,从而逐渐提升个人画图的效率。
2、从威胁建模的小组而言,理想情况下,数据流图需要安全人员和产线人员共同来绘制,如果受限于环境无法共同绘制时,一定要保证最终的数据流图得到双方一致认可,双方需要对整个系统的运行情况的认知达成一致,在此基础上,才能开展后续的识别威胁的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构--静态链表

数据结构–静态链表 单链表 VS 静态链表 单链表:各个结点在内存中星罗棋布、散落天涯。 静态链表:分配一整片连续的内存空间,各个结点集中安置。 代码定义 代码一: #define MaxSize 10 //静态链表的最大长度 typedef struct //静态链表结构类型的定…

无限容量分布式文件存储解决方案

常见分布式文件系统 常见分布式文件系统比较 常见的分布式文件系统有GFS、HDFS 、Ceph 、GridFS 、TFS、FastDFS等。各自适用于不同的领域。 类 Google FS 都支持文件冗余备份,例如 Google FS、TFS 的备份数是 3。一个文件存储到哪几个存储结点,通常采…

《计算机系统与网络安全》第一章 计算机系统与网络安全概述

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

java的注解方式和xml方式这两种方式对数据库进行操作详解

首先需要引入mybatisplus包 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.1</version> </dependency>第一种注解方式&#xff1a;参数是通过#{}来接收的 p…

腾讯云服务-云点播:删除腾讯云点播录制的视频文件(保存在腾讯云是需要收费的)

文档地址&#xff1a;登录 - 腾讯云https://console.cloud.tencent.com/api/explorer?Productvod&Version2018-07-17&ActionDeleteMedia 使用python后端删除&#xff1a; import json from tencentcloud.common import credential from tencentcloud.common.profile…

kafka入门,数据有序、数据乱序(十)

数据有序 数据乱序 max.in.flight.requests.per.connection指定了生产者在接收到服务器相应之前可以发送多个消息。 kafka在1.x版本之前保证单分区有序&#xff0c;条件如下 max.in.flight.requests.per.connection1 2) kafka在1.x及以后版本保证数据单区间分区有序&#xff0…

vue 函数式(编程式) render (functional:true)

文章目录 一、文档二、区别三、使用h函数的参数解释&#xff1a;参数一&#xff1a;使用导入的组件名 参数二&#xff1a;绑定css绑定事件往组件里面传递参数动态绑定值props动态绑定值datafunctional:true到底是做什么的&#xff1f;动态绑定props 非functional:true版本 参数…

JSONUtil.toJsonStr 时间变成了时间戳

问题描述 我的接口是以Date来接收日期的&#xff0c;然后我在拿到这个对象参数后&#xff0c;通过hutool当中的JSONUtil.toJsonStr将其序列化成json字符串&#xff0c;然后存储到数据库。然后存储到数据库当中发现这个字段是时间戳。 DateTimeFormat和JsonFormat 前者是控制 请…

动态规划详解Python

动态规划 动态规划&#xff08;Dynamic Programming&#xff09;是一种用于解决复杂问题的算法设计方法。它通常用于优化问题&#xff0c;其中问题可以被分解成一系列重叠子问题&#xff0c;通过存储并重复使用已经解决过的子问题的解&#xff0c;可以避免重复计算&#xff0c…

区块链的简单认识

比特币作为区块链的应用&#xff0c;让区块链广为人知&#xff0c;如果比特币作为第一代区块链&#xff0c;则以太坊则称为第二代区块链。我们知道&#xff0c;区块链的最主要目的就是去中心化&#xff0c;比特币则成为了decentralized currency&#xff0c;去中心化在技术上依…

跨注册中心服务同步实践

博主介绍&#xff1a;✌全网粉丝4W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面…

助你丝滑过度到 Vue3 创建工程 ②③

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; VUE3~TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f449;…

同城跑腿独立版小程序 码科跑腿小程序 支持用户端 骑手端

是独立版哦&#xff0c;不是微擎的 搭建有点复杂&#xff0c;只要一步错就会导致骑手端来单没有声音提示. 多的也不介绍了&#xff0c;不知道的朋友可以百度一下码科跑腿就知道了&#xff01;

机器学习李宏毅学习笔记33

文章目录 前言一、神经网络压缩二、Network pruning----一种network compression技术1.移除不同单位的区别2.大乐透假说 总结 前言 神经网络压缩&#xff08;一&#xff09; 类神经网络剪枝&#xff08;pruning&#xff09; 一、神经网络压缩 简化模型&#xff0c;用比较少的…

netty_客户端和服务端,定长数据输出案例

步骤1&#xff1a;创建server import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channe…

美团小游戏守卫羊村玩法介绍和游戏漏洞

序言 这款游戏是一个解压小游戏&#xff0c;是我在闲暇时发现的&#xff0c;然后就使用它来度过无聊的碎片化时间。这是一款传统的塔防类游戏&#xff0c;建议大家可以试试&#xff0c;玩法有很多种&#xff0c;当然它的游戏优化还是不太行&#xff0c;建议多优化优化。 玩法…

十二、Jenkins构建完成发送飞书消息通知

十二、Jenkins构建完成发送飞书消息通知 1. 创建一个飞书webhook 群机器人 得到一个飞书webhook地址&#xff1a; https://open.feishu.cn/open-apis/bot/v2/hook/2d0b6357-333a-4077-9fcd-61e361a3e51e 2. send_notice.py上传到jenkins服务器目录 send_notice.py最后面 代码…

移动硬盘中安装Ubuntu 20.04系统——立省99%的问题

目录 关于我为什么要在移动硬盘中装系统 准备工作 开始安装 磁盘分区 创建虚拟机 关于我为什么要在移动硬盘中装系统 (6条消息) 笔记本安装双系统ubuntu时踩的坑——戴尔_放风筝的猪的博客-CSDN博客 准备工作 1.移动硬盘 2.Ubuntu镜像 3.VMware虚拟机 Ubuntu镜像可以从…

Linux查看版本号,lsb_releasa过时了,得用uname -a

突然想查看Linux版本号了 然后终端输入lsb_release,结果给我报错No LSB modules are available. 然后网上一查发现Linux 版本是 Ubuntu 11.1.0 或更高版本,则 lsb_release 命令可能已经被弃用。 这是由于 lsb-release 命令已经不再维护,并且由于安全问题而被移除。 因此,对于…

基于matlab使用迭代最近点算法组合多个点云以重建三维场景(附源码)

一、前言 此示例演示如何使用迭代最近点 &#xff08;ICP&#xff09; 算法组合多个点云以重建三维场景。 此示例将使用 Kinect 捕获的点云集合拼接在一起&#xff0c;以构建场景的更大三维视图。该示例将 ICP 应用于两个连续的点云。这种类型的重建可用于开发对象的 3D 模型…