前言
在前面的【我所理解的研发安全】提到了在需求和设计阶段需要对业务功能场景进行威胁建模从而输出安全需求和安全设计内容。
那么什么叫威胁建模,威胁建模会帮助业务项目如何在需求和设计阶段就能发现更多的安全风险,提前解决掉呢?
什么是威胁建模
简单的来说,威胁建模就是通过结构化的方法,系统的识别、评估产品的安全风险和威胁,并针对这些风险、威胁制定消减措施的一个过程。
威胁建模是一个非常有用的工具,它的核心是“像攻击者一样思考”。
威胁建模可以在产品设计阶段、架构评审阶段或者产品运行时开展,强迫我们站在攻击者的角度去评估产品的安全性,分析产品中每个组件是否可能被篡改、仿冒,是否可能会造成信息泄露、拒绝攻击。
威胁建模的作用更偏向于确保产品架构、功能设计的安全,无法保证编码的安全,但是输出的威胁建模报告中包含了全面的安全需求,这些安全需求不仅包括大的方案设计,如要认证、鉴权、审计,也可以包括安全细节的实现,比如具体的认证方式、密码使用哪种安全算法存储,使用什么方法生成安全随机数等。
威胁建模虽不能保证编码的安全,但可以指导研发人员编写出安全的代码,同时也可以辅助渗透测试人员开展安全测试。
为什么要做威胁建模
1、站在攻击者的角度通过识别威胁,尽可能多的发现产品架构和功能设计中的安全风险
2、提前制定措施消减威胁,规避风险,确保产品的安全性
威胁分析方法
对于常见的威胁分析方法:场景式威胁分析和威胁建模分析,先说下这两中分析方法:
场景式威胁分析
该方法面向的是项目功能场景,采用以攻击者的角度来看项目功能场景,是否存在被攻击的可能性、可能遭受攻击的类型等等,例如下表展示:
功能场景 | 场景分析 | 可能遭受的攻击 |
---|---|---|
查询功能 | 查询会将用户输入的信息传递到后端进行数据库查询,并且可能使用别人身份完成数据插叙 | SQL注入攻击、越权攻击 |
富文本输入功能 | 用户的输入会进入到后端服务逻辑中,可能存储到数据中 | 存储xss、注入类攻击 |
用户注册功能 | 用户注册可能会用其他身份信息注册完成 | 任意用户注册 |
用户登入 | 用户可能爆破其他用户的登入信息 | 任意用户登入、暴力破解 |
上述只是列举的一部分场景,这种方式偏头脑风暴,分析起来比较简单,但是很大程度上依赖分析人员的经验,若是经验不足,分析出的攻击场景就可能存在缺失的情况,为了解决这个问题,很多厂商开发出了场景化的威胁建模工具,只要项目组输入自己的项目功能场景,根据类似于上表的威胁知识库即可输出相应的威胁分析结果。
STRIDE威胁建模分析
1、什么是STRIDE
STRIDE是一个安全威胁建模框架,用于分析和评估软件系统中的潜在安全威胁。它是由微软提出的,用于帮助开发人员识别和解决软件系统中的安全问题。
2、STRIDE的六类威胁
STRIDE是从攻击者的角度,把威胁划分成6个类别,分别是Spooling(仿冒)、Tampering(篡改)、Repudiation(抵赖)、InformationDisclosure(信息泄露)、Dos(拒绝服务)和Elevation of privilege (权限提升)。
Spoofing(冒充):攻击者冒充合法用户或实体来获取未授权的访问权限。 Tampering(篡改):攻击者修改或篡改数据、配置或代码,破坏系统的完整性。 Repudiation(抵赖):攻击者否认其进行的某些操作,或者破坏系统的审计和日志功能,使其无法追踪攻击行为。 Information Disclosure(信息泄露):攻击者未经授权地获取系统中的敏感信息,如用户凭证、个人身份信息等。 Denial of Service(拒绝服务):攻击者通过发送大量请求或破坏系统资源,使系统无法正常提供服务。 Elevation of Privilege(提权):攻击者通过利用漏洞或弱点提升其权限级别,获取比其应该拥有的更多权限。
下列表格简单说明了威胁建模六类威胁与信息安全三要素(保密性、完整性、可用性)以及信息安全三属性(认证、鉴权、审计)之间的关系
威胁 | 安全属性 | 定义 | 举例 |
---|---|---|---|
仿冒(S) | 认证 | 冒充人或物 | 冒充其他用户账号 |
篡改(T) | 完整性 | 修改数据或代码 | 修改订单信息 |
抵赖(R) | 审计 | 不承认做过某行为 | 不承认修改行为 |
信息泄露(I) | 保密性 | 信息被泄露或窃取 | 用户信息被泄露 |
拒绝服务(D) | 可用性 | 消耗资源、服务可不用 | DDOS导致网站不可用 |
权限提升(E) | 授权 | 未经授权获取、提升权限 | 普通用户提升到管理员 |
3、STRIDE威胁建模流程
STRIDE威胁建模分析实例
STRIDE威胁建模主要是通过构建数据流图来对其进行分析,数据流图主要通过元素和数据流转来展示出信任边界、数据流转等信息。
1、四类元素
-
外部实体(External Entity):系统控制范围之外的用户、软件系统或者设备,作为一个系统或产品的输入或输出,在数据流图中用矩形表示外部实体 -
处理过程(Process):表示一个任务、一个执行过程,一定有数据流入和流出。在数据流图中用圆形表示 -
数据存储(Data Store):存储数据的内部实体,如数据库、消息队列、文件等。用中间带标签的两条平行线表示 -
数据流(Data Flow):外部实体与进程、进程与进程或者进程与数据存储之间的交互,表示数据的流转。在数据流图中用箭头表示
2、绘制数据流图
我们利用最普遍的用户端、服务端、数据库架构来说明下数据流图的画法,先展示出数据流图如下:
3、分析评估风险
对上述数据流图进行分析建模:用户端是外部实体,面临的威胁类型有:仿冒(S)、抵赖(R);请求和响应为数据流,面临的威胁类型有:篡改(T)、信息泄露(I)、拒绝服务(D)威胁;处理过程有所有六种(STRIDE)威胁;存储过程有篡改(T)、信息泄露(I)、拒绝服务(D)威胁等
用如下表格来展示
元素 | S | T | R | I | D | E |
---|---|---|---|---|---|---|
外部实体 | ✓ | ✓ | ||||
数据流 | ✓ | ✓ | ✓ | |||
处理过程 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
存储过程 | ✓ | ✓ | ✓ | ✓ |
4、提出缓解措施
对于外部实体用户的仿冒威胁,其缓解措施,也就是安全需求简单来说就是对用户身份进行认证,对一个Web应用来说缓解仿冒威胁不仅需要较强的认证机制,还需要防止恶意攻击者用暴力破解、口令猜测等方法绕过认证从而造成仿冒用户的威胁。
那么针对用户身份认证详细的安全设计内容可以如下:
-
通过双因素对用户身份进行认证,可采用用户名+密码+短信验证码等方式 -
增加图形验证码防止对用户信息的爆破攻击 -
在后台增加对用户的锁定机制,密码连续错误五次对用户进行锁定 -
增加短信验证码下发频率控制,每次验证码间隔1分钟,每天下发验证码20次 -
用户密码增加强度校验,必须包括大小写字母、数字、特殊字符中的至少三种,位数在8位以上
一些常见的安全缓解措施参考如下:
威胁类型 | 安全需求 | 安全设计 |
---|---|---|
仿冒 | 认证 | 登入认证、SSO |
抵赖 | 日志审计 | 安全日志、审计 |
篡改 | 完整性保护 | 签名保护 |
信息泄露 | 保密性 | 加密技术 |
拒绝服务 | 可用性 | 热备、过滤 |
权限提升 | 授权认证 | ACL、用户管理、权限控制 |
5、实施改进
在威胁建模完成后需要对整个过程进行回顾,不仅要确认缓解措施是否能够真正缓解潜在威胁,同时验证数据流图是否符合设计,代码实现是否符合预期设计,所有的威胁是否都有相应的缓解措施,最后将威胁建模报告留存档案,作为后续迭代开发、增量开发时威胁建模的参考依据
原文始发于微信公众号(YY的黑板报):威胁建模从零到一
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论