⽂章⽬录
⼀、什么是威胁建模
威胁建模是⼀个⾮常有⽤的⼯具,它的核⼼是「像攻击者⼀样思考」。威胁建模可以在产品设计阶段、架构评审阶段或者产品运⾏时开展,强迫我们站在攻击者的⾓度去评估产品的安全性,分析产品中每个组件是否可能被篡改、仿冒,是否可能会造成信息泄露、拒绝攻击。威胁建模的作⽤更偏向于确保产品架构、功能设计的安全,⽆法保证编码的安全,但是输出的威胁建模报告中包含了全⾯的安全需求,这些安全需求不仅包括⼤的⽅案设计,如要认证、鉴权、审计,也可以包括安全细节的实现,⽐如具体的认证⽅式、密码使⽤哪种安全算法存储,使⽤什么⽅法⽣成安全随机数等。所以,威胁建模虽不能保证编码的安全,但可以指导研发⼈员编写出安全的代码,同时也可以辅助渗透测试⼈员开展安全测试。
简单的来说,威胁建模就是通过结构化的⽅法,系统的识别、评估产品的安全风险和威胁,并针对这些风险、威胁制定消减措施的⼀个过程。 赤龙剑心
⼆、STRIDE威胁建模介绍
STRIDE威胁建模是由微软提出的⼀种威胁建模⽅法,该⽅法将威胁类型分为Spoofing(仿冒)、Tamp
ering(篡改)、
悟本堂Repudiation(抵赖)、Information Disclosure(信息泄漏)、Denial of Service(拒绝服务)和 Elevation of Privilege(权限提升)。这六种威胁的⾸字母缩写即是STRIDE,STRIDE威胁模型⼏乎可以涵盖⽬前绝⼤部分安全问题。此外,STRIDE威胁建模⽅法有着详细的流程和⽅法。
2.1、STRIDE的六类威胁
1、 Spooling(仿冒)
2、Tampering(篡改)
3、Repudiation(抵赖)
4、InformationDisclosure(信息泄露)
5、Dos(拒绝服务)
6、Elevation of privilege (权限提升)
三、威胁建模流程
STRIDE威胁建模的⼀般流程如下:
中小企业管理与科技
2、识别威胁
4、安全验证
STRIDE威胁建模流程:
3.1、数据流图
数据流图是由以下4个元素组成:
①外部实体:
系统控制范围之外的⽤户、软件系统或者设备。作为⼀个系统或产品的输⼊或输出。在数据流图中⽤矩形表⽰外部实体。静电喷雾器
②处理过程
不会变的是作文表⽰⼀个任务、⼀个执⾏过程,⼀定有数据流⼊和流出。在数据流图中⽤圆形表⽰。
③数据存储
存储数据的内部实体,如数据库、消息队列、⽂件等。⽤中间带标签的两条平⾏线表⽰。
④数据流
外部实体与进程、进程与进程或者进程与数据存储之间的交互,表⽰数据的流转。在数据流图中⽤箭头表⽰。
数据流图及元素类型:
3.2、识别威胁
STRIDE威胁建模⽅法已经明确了每个数据流图元素具有不同的威胁,其中外部实体只有仿冒(S)、抵赖(R)威胁,数据流只有篡改(T)、信息泄露(I)、拒绝服务(D)威胁,处理过程有所有六种(STRIDE)威胁,存储过程有篡改(T)、信息泄露(I)、拒绝服务(D)威胁,但如果是⽇志类型存储则还有抵赖(R)威胁。具体可以对照如下表格进⾏威胁识别。
数据流图元素对应的不同威胁:
元素S T R I D E
外部实体√√
处理过程√√√√√√
数据存储√?√√
数据流√√√
3.3、提出缓解措施
根据不同的数据流图元素及威胁,相应的缓解措施也不相同。如本⽂⽰例数据流图中外部实体⽤户的
仿冒威胁,其缓解措施简单来说就是对⽤户⾝份进⾏认证。对于⼀个Web应⽤来说,缓解仿冒威胁不仅需要较强的认证机制,还需要防⽌恶意攻击者⽤暴⼒破解、⼝令猜测等⽅法绕过认证从⽽造成仿冒⽤户的威胁。如果笔者来提出该⽤户仿冒威胁的缓解措施的话。
详细措施如下:
对⽤户访问进⾏帐号密码、证书等⾝份认证;
⽤户帐号密码认证过程中,如果出现三次密码错误,则增加验证码机制。输⼊验证码且正确再进⾏⾝份认证;
当⽤户认证5次后仍然验证失败,则在30分钟内禁⽌该帐号登录;
⽤户密码必须包含数字、字母及特殊字符,且长度在8位以上,如果业务安全需要则增加密码过期机制,每隔6个⽉提醒⽤户修改密码;
在提出缓解措施时,有的时候不仅要考虑安全问题,同时也要考虑软件的易⽤性,所以不同的威胁,不同的应⽤场景。其缓解措施也要随之⽽改变以提⾼应⽤安全的同时也能给⽤户带来较好的交互体验。
微软对于常⽤的威胁给出了其常⽤的标准缓解措施,并在具体实施时已将常⽤的缓解⽅案及措施集成为独⽴的解决⽅案或者代码模块。可以⽅便同类应⽤直接使⽤。
数据管理技术威胁类型缓解措施技术⽅案
仿冒(S)认证Kerberos认证、PKI系统如SSL / TLS证书、数字签名
篡改(T)完整性保护访问控制、完整性校验
抵赖(R)⽇志审计强认证、安全⽇志、审计
信息泄露(I)保密性加密、访问控制列表
拒绝服务(D)可⽤性访问控制列表、过滤、热备份
权限提升(E)授权认证输⼊校验、⽤户组管理、访问控制列表
3.4、安全验证
在威胁建模完成后,需要对整个过程进⾏回顾,不仅要确认缓解措施是否能够真正缓解潜在威胁,同时验证数据流图是否符合设计,代码实现是否符合预期设计,所有的威胁是否都有相应的缓解措施。
最后将威胁建模报告留存档案,作为后续迭代开发、增量开发时威胁建模的参考依据。