背景
很多人对威胁建模这项活动抱有陌生感,什么是威胁?什么是建模?和安全威胁情报是不是有关?和架构安全分析(Architecture Risk Analysis)什么关系? 能否用Kill Chain替代?
威胁建模是一种基本的安全实践。定义是通过识别系统和潜在威胁来优化提升安全性,设置对策防止和减轻系统威胁的影响。软件的开发过程:面临的内外部场景不断在变化,应用程序被修改、升级、用户需求也在变化,需要为每个应用程序识别潜在威胁、对应的优先级、记录风险并采取措施。
有必要为读者梳理一次“架构设计安全分析办法”更容易从顶层设计理解这一步所做的工作。架构安全分析重点关注三个阶段:安全控制、系统设计、软件开发过程,威胁建模是第二阶段其中一部分工作。我们实施安全防御利用信息不对称的其中一个门槛就是安全控制,包括身份认证、授权、加密原等则,这也是在渗透测试和安全审计重点关注的点;在系统设计分析时,先规划掌握架构图、DFD数据图(可以从GDPR借用)
,细化组件、中间件、逻辑。然后执行三个小阶段:1、已知攻击分析。微软的STRIDE(STRIDE是欺骗,篡改,否认,信息泄露,拒绝服务和特权提升的首字母缩写)方法论是其中一个有用的工具。设计层面根据这个STRIDE原则、了解曾经面临过哪些威胁(我强烈建议培训阶段应业务解释公司曾经面临过哪些攻击然后描述抽取出风险来总结威胁)。制定适合自己的威胁列表,然后计算并考虑如何评估(DREAD)修复和设计来降低、转移、接受风险。2、识别特定攻击,上一步偏通用原则,每个存在的系统各自不同。3、对软件底层依赖、供应层面进行分析。发现软件威胁的最好阶段是上述三个阶段,实施以上的工作,投入的安全修复成本将降低数倍。
威胁模型可以通过任何方式展示、文档、列表、图表,但是至少需要包括软件组件、信任边界、安全控制措施、数据的描述以及对应风险的优先级;未发生的威胁的可能性排序;对存在的风险、可能的攻击的策略措施的回顾;减少威胁的补救措施。
我们必须意识到SDLC并不是银弹,根本没有什么是最佳实践。威胁建模这件事难以推行是有客观困难的。软件开发从瀑布流模式到公司推广开展的敏捷实践中,需要作出以下改变:从关注各阶段文档到快速关注缺陷和沟通反应;从建模阶段作为总系统的重点投入方向到把安全特性尽量纳入小的迭代周期,接纳威胁驱动设计;从一些重型的工具(STRIDE)到支持定期处理迭代产生的威胁;从依赖有条不紊的测试计划发布到实现极致的工具自动化;从基于经验归档威胁库到支持机器学习、物联网、云时代的新威胁。
工具
这项安全能力学习的梯度陡增,从业者需要具备专业安全、开发、系统知识而且辅助的自动化程序很少。而系统创建完整的安全威胁模型需要深入了解。准确的模型也需要依靠清楚业务过去面临的攻击案例和攻击模式(MITRE ATT&CK)。
开源、商业工具可以辅助我们快速、美观、系统地构建威胁模型、输出威胁文档。我们总不能在白板上“开局一张图,其他全靠说”。《威胁建模:设计和交付更安全的软件》书里提到的工具大都已经过时,但是从侧面可以让我们了解到不要言威胁建模就必称STRIDE,要作为专家借着深厚的安全领域功底,运用威胁建模思想作为工具进行实践。“盲人摸象不如走马观花,走马看花不如驻马看花,驻马看花不如下马看花”,下一番苦功夫深入一线、贴近业务、丰富经验、充实积累,创建有价值的建模知识。本系列将以一些案例和工具说明,通过大量文章带领大家共同探讨这种由经验丰富的专家驱动的分析技术能否应用于工具自动化?
-
trike
octotrike是一种不同STRIDE的方法论, http://www.octotrike.org/tools.shtml 是单独的excel文件,可以辅助提高威胁建模的效率和有效性。trike是一个统一的安全审计概念框架,从风险管理和资产为中心的角度用工具将威胁模型以相对可靠,可重复的方式实现,可以描述系统从其高级架构到其实现细节的安全特性。包含了一定的自动化攻击推导功能。不推荐使用。
-
seasponge是mozilla出品,https://github.com/mozilla/seasponge,使用nodejs编写,可以拖拽,支持项目文件管理,缺点是没有实现威胁列表的自动生成,虽近年来无人维护,使用起来还是比较推荐的。
seamonster https://sourceforge.net/projects/seamonster/一款基于攻击树和滥用案例(abuse-cases,用户滥用或利用软件功能中的弱点来攻击应用程序)模型的攻击,用来补充思考勉强可用,思路有些落后。
-
owasp-threat-dragon http://docs.threatdragon.org/ 是个新工具,用Electron实现了客户端,作为owasp孵化项目雄心勃勃。强烈推荐。
-
pta工具 http://www.ptatechnologies.com/ 是由adam shostack参与咨询的一个商业工具,对于各个细节、条目做得很完善。推荐。
-
微软的官方威胁建模工具。https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool ,可以访问https://github.com/AzureArchitecture/threat-model-templates下载最新的包含IOT信息的模板,该工具可以自动生成识别威胁报告,具备威胁库模板,强烈推荐使用。
https://github.com/izar/pytm 一个python库,可以用编程当时实现构建数据流图、输出威胁列表。
https://github.com/stevespringett/threatmodel-sdk 一个javasdk,作用同上。
下一系列,本文将以TMT等工具为例,分别介绍基于攻击树和STRIDE的方法实施以攻击者和资产为中心的针对应用程序的建模活动。大概分为六步:组织推广、识别资产、概述有价值资产的体系结构、分析应用程序内的流程、子流程,创建数据流图、以列表的方式描述识别威胁以进一步处理、对威胁进行分类,复用该方法、评估威胁的严重性并采取措施。
有朋友反馈说涉及安全系列的内容每次单词都看得懂,但是组合在一起的概念看不明白。考虑到我们写文章是为了全面提升组织能力,巩固心得,接下来我将尽力写得通俗易懂些。