安全设计 | 安全设计不得马虎!微软STRIDE威胁建模方法让你事半功倍,快速发现应用安全隐患!

news2024/10/5 23:29:44

STRIDE威胁建模方法最早发表于2006年11月的《MSDN杂志》,作者是微软的工程师Shawn Hernan、Scott Lambert 、Tomasz Ostwald 和 Adam Shostack。那我们为什么要进行威胁建模? 如何使用数据流图对系统进行威胁建模?如何减轻威胁?接下来本文展开逐一介绍。

1. 安全设计原则

在介绍STRIDE方法前我们需要先了解下安全设计的原则,设计安全软件的一个问题是,不同的群体对安全性的看法不同:

  • 软件开发人员主要从代码质量方面考虑安全性,而网络管理员则考虑防火墙、事件响应和系统管理;
  • 学术界可能主要根据经典的Saltzer和Schroeder设计原则、安全模型或其他抽象概念来考虑安全性。

当然,以上考虑在构建安全系统时都很重要。常用的安全设计原则如下:

原则解释
开放式设计假设攻击者掌握了来源和规格
默认安全系统或软件应默认配置为安全状态,即默认情况下不开启不必要的服务或功能,减少潜在的攻击面
最小权限系统中的每个组件或用户只应拥有完成其任务所需的最小权限集合。这样可以减少潜在的安全风险,因为即使攻击者获取了某些权限,其影响范围也会受到限制
纵深防御在多个层面上实施安全措施,以确保即使一个安全层被攻破,其他层仍能提供保护。这包括物理安全、网络安全、应用安全等多个层面
透明性和可理解性安全机制应尽可能透明,易于理解和操作,以减少人为错误的可能性
经济性安全机制设计尽可能简单短小,从而在排查缺陷、检测漏洞时代码更容易处理
可审计性记录和审计系统活动,以便在发生安全事件时能够追踪和分析。这包括日志记录、监控和报告机制。

安全意味着系统具有机密性、完整性和可用性的特性(即CIA特性),用户得到了正确的身份验证和授权,并且不可否认的。(PS:CIA加上份验证和授权、不可否认下文简称为CIA变体)下图解释了每个属性:

安全属性

确保应用具有这些安全属性的一种方法就是使用STRIDE进行威胁建模,STRIDE 是六个主要威胁类别的首字母缩写:

  • 欺骗(Spoofing):冒充某人或某物
  • 篡改(Tampering):未经授权更改数据
  • 否认(Repediation):不宣称对执行的操作负责
  • 信息泄露(Information Disclosure):在未获得权限的情况下查看数据
  • 拒绝服务(Denial of Service):使系统过载
  • 权限提升(Elevation of Privilege):拥有本不应拥有的权限

STRIDE代表的六种威胁,每种威胁都违反了 “CIA 变体” 的特定属性,具体如下:

威胁与安全属性的映射

2. 威胁建模

2.1. 什么是威胁建模

威胁建模是一种有助于保护系统、应用程序、网络和服务的有效技术。 威胁建模使用以图形形式演示系统工作方式的数据流关系图。 之后,它应用一个框架来帮助你发现和修复安全问题。它可帮助你在开发生命周期的早期确定潜在的威胁和降低风险策略。

威胁建模方法由微软的安全工程和通信小组开发。与SDLC的其他部分一样,威胁建模也在不断发展,并将应用于新的环境中。当创建自己的安全代码开发流程时,这种方法可能会很好地作为基线,实际上很多公司都参照了微软的威胁建模方法制定了自己的基线。

2.2. 为什么要进行威胁建模?

无论你是在构建一个新系统还是更新现有系统,你都需要考虑入侵者如何攻击它,然后在系统的设计和实施阶段建立适当的防御。

微软内部通过一种名为威胁建模的技术来设计安全系统,即对系统设计或体系结构进行系统审查,以发现和纠正设计级别的安全问题。威胁建模是安全开发生命周期中不可或缺的一部分。

3. 威胁建模和STRIDE

威胁建模是Microsoft安全开发生命周期(SDL)的核心元素。这是一种工程技术,可以用来帮助您识别可能影响应用程序的威胁、攻击、漏洞和对策。我们可以使用威胁建模来塑造应用程序的设计,满足公司的安全目标,并降低风险。STRIDE方法是执行威胁建模的理论依据。

为了遵循STRIDE,我们要将系统分解为相关组件,分析每个组件对威胁的易感性,并减轻威胁。然后重复这个过程,直到我们对任何剩余的威胁都感到满意。这时我们才可以认为系统是安全的。

我们无法证明当组件组成一个系统时,对欺骗威胁单独免疫的组件之间的相互作用不易受到欺骗威胁的影响。事实上,只有当系统被连接起来以创建更大的系统时,威胁才会经常出现。

STRIDE威胁建模的流程如下:

  1. 定义安全需求
  2. 绘制数据流图
  3. 识别潜在威胁
  4. 制定缓解措施
  5. 进行安全验证

在这里插入图片描述

3.1. 定义安全需求

需求定义阶段是一个关键步骤,它定义你的应用程序是什么,以及它发布后可用来做什
么。 在需求阶段,就要考虑在你的应用程序中构建的安全控制措施,以确保发布并部署安全的应用程序。

此阶段是考虑基础的安全和隐私问题的最佳时间。 在项目开始时定义可接受的安全和隐
私级别有助于团队:

  • 了解与安全问题相关的风险。
  • 在开发过程中确定和修复安全 bug。
  • 在整个项目中应用确定的安全和隐私级别。

在编写对应用程序的要求时,请确保考虑有助于保护应用程序和数据安全的安全控制措
施。

3.2. 绘制数据流图(DFD)

数据流图(DFD)通常用于以图形方式表示系统,将系统分解为多个部分,并显示每个部分不易受到相关威胁的影响。

DFD 使用由四个元素组成的标准符号集:

  • 数据流
  • 数据存储
  • 过程
  • 交互程序

对于威胁建模,我们还添加了扩展元素:信任边界。下图则显示了这些符号。

在这里插入图片描述

注:

  1. 交互程序是系统的终点:人员、Web服务和服务器。一般来说,它们是系统范围之外的数据提供者和消费者,但显然与系统相关。
  2. 信任边界可能是最主观的:它们代表了可信和不可信元素之间的边界。信任是复杂的,你的牙医会给你牙齿,你的父母会给你零花钱,但你可能不相信你的牙医能给你零花钱。

正确绘制及使用DFD是正确使用威胁模型的关键。

3.3. 识别潜在威胁

需使用数据流图查找针对系统的潜在威胁,STRIDE威胁清单如下:

威胁定义问题威胁示例
欺骗攻击者冒充某人或某物通信的双方是否都通过了身份验证?通过看似合法的帐户向用户发送一封带有恶意链接和附件的电子邮件,以捕获用户的凭据、数据和设备访问权限
篡改攻击者在未经授权的情况下更改数据如何得知某人无法更改传输中的数据、正在使用的数据或静态数据?通过弱 API 调用处理修改内存,导致崩溃和泄漏敏感错误消息
否认攻击者声称尚未执行任何操作每个操作是否可以绑定到标识?声称没有删除数据库记录
信息泄露攻击者看到了不应看到的数据如何得知某人无法看到传输中的数据、正在使用的数据或静态数据?访问安全控制较弱的未授权文档和文件夹
拒绝服务攻击者使你的系统崩溃系统中是否存在资源受限的区域?向网络发送大量请求
权限提升攻击者未经授权而可访问数据如何得知某人可以执行此操作?利用输入处理逻辑或内存中的弱点来提取数据

数据流图中的每个元素(处理过程、数据存储、数据流和外部交互)都有一组易受威胁的因素,如下表所示:

元素仿冒篡改否认信息泄露拒绝服务权限提升
数据流XXX
数据存储XXX
处理过程XXXXXX
外部交互XX

3.4. 制定缓解措施

在此阶段,需要决定如何处理所有威胁。 每个 STRIDE 威胁都对应到一项或多项安全控制,这些控制措施提供不同的功能和操作类型。

威胁安全控制安全控制示例
欺骗身份验证发送和接收使用数字签名进行签名的消息,以验证来源并确保消息完整性
篡改完整性验证输入以防止处理恶意有效负载和错误处理意外行为
否认不可否认性创建和保护包含用户操作和时间戳的安全日志
信息泄露机密性应用访问控制列表,以确保合适的用户可以访问适当的数据
拒绝服务可用性使用弹性资源管理不断增加或减少的使用量
权限提升授权使用最少的访问量运行服务

可能有可以立即减少或完全消除多个威胁的安全控制。 例如,使用 SSL/TLS 创建安全传输通道,以帮助防止恶意数据修改或泄露。

在上一阶段(识别潜在威胁)中发现的问题,可以使用以下其中一个解决方案。 它们在不同组织之间存在略微差异:

解决方案描述
减轻通过使用 bug 修复或重新设计来减轻或消除威胁影响和严重性。
转移将问题分配给另一个系统或团队。
消除去除系统中包含问题的部分。
接受在没有解决方法的情况下接受风险。 此解决方案需要授权风险决策者的批准。 此决定可能基于威胁严重性。 严重威胁可能需要高级领导的批准,而深层防御风险可能需要高级工程师批准。 与你的团队交流以获得战略指导。

3.5. 进行安全验证

验证阶段是威胁建模过程的最后一步,通常发生在部署系统之前。 它涉及到确保满足要求、验证假设以及准备好安全控制。

3.5.1. 验证要求和设置默认值

首先,验证是否满足第一阶段创建的所有要求。

示例:

  • 网络安全计划
  • 机密管理解决方案实施
  • 日志记录和监视系统
  • 标识和访问控制

然后,确保更改云提供商、操作系统和组件的默认配置设置,以满足所有安全要求。

3.5.2. 执行验证

执行验证会涉及运行手动和自动验证。 在微软内部,系统在部署前要执行一个验证流程。 该流程可能包括自动扫描程序、代码评审和渗透测试。 可以在每次部署之前或隔一定的时间(如每 6 - 12 个月)强制执行该过程。

4. 结论

设计安全的软件可能很困难,但与任何挑战一样,一个好的策略是将问题分解为更容易解决的较小部分。对于高风险活动,将STRIDE模型与威胁建模结合使用就是这样一种方法。微软内部的许多团队中已经使用了这个模型。

在开发安全软件时,建议将威胁建模作为流程的关键部分,特别是本文中介绍的STRIDE模型。但关键是要找到一种适合你的方法,在设计的早期应用它,记住任何组件都可能失败,并进行必要的研究,以确保你已经考虑到已知的攻击模式。

最后,设计只是构建安全软件的一部分。执行支持、实施、测试、构建和交付以及服务和维护都在系统的最终安全性方面发挥着至关重要的作用。

若大家对微软的SDL安全开发生命周期感兴趣,可以深入学习如下两篇文档:

  • 微软SDL安全开发生命周期总体介绍.pptx(共26页,访问密码:6277)
  • 微软安全开发生命周期详细指导文档.pdf (共285页,访问密码: 6277)

5. 参考链接

  • uncover-security-design-flaws-using-the-stride-approach
  • https://www.microsoft.com/en-us/securityengineering/sdl/threatmodeling
  • https://learn.microsoft.com/zh-cn/training/modules/tm-introduction-to-threat-modeling/4-step-3-fix-phase

推荐阅读:

  • 安全设计 | 68家国内外科技巨头和安全巨头参与了CISA发起的安全设计承诺,包含MFA、默认密码、CVE、VDP等七大承诺目标
  • 安全设计 | Microsoft 威胁建模工具Threat Modeling Tool安装、使用及威胁生成原理详解(文末附样例)

在这里插入图片描述

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

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

相关文章

STM32F1之OV7725摄像头

目录 1. 摄像头简介 2. OV7725 摄像头简介 3. OV7725 引脚 4. OV7725 功能框架图 5. SCCB时序 5.1 SCCB 的起始、停止信号及数据有效性 5.2 SCCB 数据读写过程 1. 摄像头简介 在各类信息中,图像含有最丰富的信息,作为机…

从0开始学统计-蒙彼利埃尔悖论与条件概率

1.什么叫均衡可比? "均衡可比"指的是在进行比较时,确保所比较的对象或情况具有相似的特征和条件,以保持比较的公正性和准确性。这个概念通常应用于研究设计和数据分析中,以确保比较结果的可信度和有效性。 在研究中&a…

HTML静态网页成品作业(HTML+CSS)——企业酒店官网网页(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…

SpringCloud系列(26)--OpenFeign超时控制

前言:在上一章节中我们简单的介绍了如何使用OprnFeign去调用微服务,因为消费侧和服务侧是两个不同的微服务,这样可能会出现超时的现象,例如服务侧需要3秒处理任何才能返回结果,但消费侧可能2秒就断开连接了&#xff0c…

C++代码错误解决1(函数模板)

1、代码如下 //示例函数模板的使用 #include <iostream> #include <string> using namespace std; template <typename T>//函数模板 T max(T a,T b) {return a>b?a:b; } int main() {int a,b;cout<<"input two integers to a&b:"…

文章解读与仿真程序复现思路——电力系统保护与控制EI\CSCD\北大核心《计及温控厌氧发酵和阶梯碳交易的农村综合能源低碳经济调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

如何处理时间序列的缺失数据

您是否应该删除、插入或估算&#xff1f; 世界上没有完美的数据集。每个数据科学家在数据探索过程中都会有这样的感觉&#xff1a; df.info()看到类似这样的内容&#xff1a; 大多数 ML 模型无法处理 NaN 或空值&#xff0c;因此如果您的特征或目标包含这些值&#xff0c;则在…

自己手写一个单向链表【C风格】

//单链表 #include <iostream> #define MAX_SIZE 20 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0typedef int ElemType;//元素的类型 typedef int Status;//返回状态typedef struct Node {ElemType data;//链表中保存的数据struct Node* next;//指向下…

【字典树(前缀树) 异或 离线查询】1707. 与数组中元素的最大异或值

本文涉及知识点 字典树&#xff08;前缀树&#xff09; 位运算 异或 离线查询 LeetCode1707. 与数组中元素的最大异或值 给你一个由非负整数组成的数组 nums 。另有一个查询数组 queries &#xff0c;其中 queries[i] [xi, mi] 。 第 i 个查询的答案是 xi 和任何 nums 数组…

自定义一个复杂的React Table表格组件-06

前面基本了解了组件的基本用法&#xff0c;在本节会实现一个更高级的例子。另外需要注意本节代码是采用V15版本的createClass()、React.DOM和JSX实现的&#xff0c;有时间的同学可以改成类实现的方式。 html的世界中最复杂的UI控制就是表格了&#xff0c;原因是table它依赖本地…

Vitis HLS 学习笔记--控制驱动TLP-处理deadlock

目录 1. 简介 2. 代码解析 2.1 HLS kernel代码 2.2 查看接口报告 2.3 TestBench 2.4 Dataflow 报告 3. Takeaways 4. 总结 1. 简介 本文是对《Hardware Acceleration Tutorials: FIFO Sizing for Performance and Avoiding Deadlocks》实验内容的详细解释。 首先需要…

AI视频教程下载:用提示工程在GPT商店构建10个GPTs

你将学到什么&#xff1f; 深入了解ChatGPT平台和GPT商店的生态系统。 开发为多样化应用定制GPT模型的专业知识。 掌握高效内容生成的AI自动化技术。 学习高级提示工程以优化ChatGPT输出。 获取构建AI驱动的数字营销和广告解决方案的技能。 了解如何为SEO写作和优化创建专…

从0开始学统计-多个婴儿连续夭折是谋杀吗?

1.什么是小概率事件&#xff1f; 小概率事件是指在一次随机试验中发生概率非常低的事件。一般来说&#xff0c;小概率事件的发生概率远低于一定的阈值&#xff0c;通常取0.05或0.01。在统计学中&#xff0c;这些阈值被称为显著性水平&#xff08;significance level&#xff0…

CIC滤波器

CIC滤波器结构简单&#xff0c;没有乘法器&#xff0c;只有加法器、积分器和寄存器&#xff0c;适合工作在高抽样率条件下&#xff0c;而且CIC滤波器是一种基于零点相消的FIR滤波器。 CIC滤波器分为单级和多级滤波器。 1.在单极滤波器中&#xff1a; 当CIC滤波器的长度M远大于…

【css3】04-css3转换

目录 1 2D转换 2 3D转换 3 案例&#xff1a;旋转的魔方 1 2D转换 ## 2D转换 ☞ 位移 transform: translate(100px,100px); 备注&#xff1a; 位移是相对元素自身的位置发生位置改变 ☞ 旋转 transform: rotate(60deg); 备注&am…

LabVIEW虚拟测试实验室开发

LabVIEW虚拟测试实验室开发 在当代的科技和工业进步中&#xff0c;测试与测量扮演着至关重要的角色。随着技术的发展&#xff0c;测试系统也变得日益复杂和成本昂贵&#xff0c;同时对测试结果的准确性和测试过程的效率要求越来越高。开发了一种基于LabVIEW的虚拟测试实验室的…

新能源汽车的电驱热管理

前言 新能源汽车的电驱热管理是指维持电动汽车电池、电机和电控系统在适宜的工作温度范围内&#xff0c;保障车辆高效、安全、稳定运行的技术方案。随着新能源汽车的快速发展和普及&#xff0c;电驱热管理技术也日益成为关注焦点。本文将从电池、电机和电控系统三个方面介绍新…

k8s集群的声明式管理资源

一 声明式管理方法 1 适合于对资源的修改操作&#xff08;陈述式方式修改资源非常不方便&#xff09; 2 声明式资源管理方法依赖于yaml资源配置清单文件对资源进行管理 资源配置清单文件有两种格式&#xff1a;yaml&#xff08;人性化&#xff0c;易读&#xff09;&#xff…

中国科学院植物研究所宋献军课题组揭示不同的翻译后修饰协作调控水稻种子大小的新机制

公众号&#xff1a;生信漫谈&#xff0c;获取最新科研信息&#xff01; 中国科学院植物研究所宋献军课题组揭示不同的翻译后修饰协作调控水稻种子大小的新机制https://mp.weixin.qq.com/s/ycNgYzACwkYZbo6k0Zqtcw 未来20年&#xff0c;我国将决战全面建成社会主义现代化国家&…

杰理-耳机进入关机关闭内内置触摸-节省功耗

杰理-耳机进入关机关闭内内置触摸-节省功耗 if (__this->init 0) {return LP_TOUCH_SOFTOFF_MODE_LEGACY; }if ((__this -> softoff_mode LP_TOUCH_SOFTOFF_MODE_ADVANCE) && (__this->softoff_keep 0)) {lp_touch_key_disable(); } __this->softoff_k…