威胁建模是一个不断循环的动态模型,随着时间的推移不断更改,以适应发现的新型威胁与攻击。还要能够适应应用程序为适应业务变更而不断完善与更改的自然发展过程。从整个企业安全能力视图来看,威胁建模工作可以在业务系统需求管理和安全设计阶段发挥作用。考虑到方法论本身具有较强的复用性,在别的阶段和领域都会有用武之地。威胁建模的动态性体现在安全需求和安全设计的不断迭代过程中。
一、威胁建模简史
说起威胁建模,可以追溯到本世纪初,2004年微软公司就已经从流程管理、技术措施、人员组织和考量指标四个方面清晰地定义了威胁建模能力。
威胁:
是一种不希望发生的事件。它是潜在事件,通常将它最佳形容为一种可能损坏资产或目标,或者危及其安全的影响力。从本质上看,它可能是恶意的,也可能不是恶意的。From:Microsoft
威胁建模:
是一项工程技术,可以使用它来帮助确定会对您的应用程序造成影响的威胁、攻击、漏洞和对策。您可以使用威胁建模来形成应用程序的设计、实现公司的安全目标以及降低风险。From:GBT20984
威胁建模是一个不断循环的动态模型,随着时间的推移不断更改,以适应发现的新型威胁与攻击。还要能够适应应用程序为适应业务变更而不断完善与更改的自然发展过程。微软针对威胁建模能力提供了1个流程,2个模型,1个支撑工具,多名角色定义及多个评价指标:
安全能力要素 | 描述 |
流程管理 | 第1步:标识资源;第2步:创建总体体系结构;
第3步:分解应用程序;第4步:识别威胁; 第5步:记录威胁;第6步:评价威胁。 |
技术措施 | STRIDE模型:威胁识别模型;
DREAD模型:威胁评价模型; Microsoft Threat Modeling Tool:威胁建模技术工具。 |
人员组织 | 开发人员:威胁建模确认及处置者,利用威胁建模降低风险;
设计人员:威胁建模发起和组织者,利用威胁建模进行技术和功能方面的安全设计并进行选择决策; 测试人员:威胁建模参与者。利用威胁建模编写测试案例 |
考量指标 | 威胁评价公式:危险 = 发生的概率×潜在的损失;
威胁评价表:对威胁进行定性评价,指导威胁处置优先级; 评估报告及处置建议:明确威胁及威胁后续处置建议。 |
威胁建模能力表
2008年11月,微软宣布安全性开发生命周期(SDL)威胁建模工具的通用版本,并提供免费下载。工具的发布是微软威胁建模发展的关键点。将威胁建模能力工具化。通过在软件上绘制流程业务数据流程图(下表中的前三步),工具便会基于STRIDE模型进行威胁识别和威胁评价
序号 | 名称 | 说明 |
第1步 | 标识资源 | 找出系统必须保护的有价值的资源 |
第2步 | 创建总体体系结构 | 利用简单的图表来记录应用程序的体系结构,包括子系统、信任边界和数据流 |
第3步 | 分解应用程序 | 分解应用程序的体系结构,包括基本的网络和主机基础结构的设计,从而为应用程序创建安全配置文件。安全配置文件的目的是发现应用程序的设计、实现或部署配置中的缺陷 |
第4步 | 识别威胁 | 牢记攻击者的目标,利用对应用程序的体系结构和潜在缺陷的了解,找出可能影响应用程序的威胁 |
第5步 | 记录威胁 | 利用通用威胁模板记录每种威胁,该模板定义了一套要捕获的各种威胁的核心属性 |
第6步 | 评价威胁 | 对威胁进行评价以区分优先顺序,并首先处理最重要的威胁。这些威胁带来的危险最大。评价过程要权衡威胁的可能性,以及攻击发生时可能造成的危害。评价的结果可能是:通过对比威胁带来的风险与为使威胁得到减少所花费的成本,对于某些威胁采取的行动是不值得的 |
威胁建模流程表
从2008年至2016年,历经8年的时间,威胁建模的方法论基本没有更新。在2016年,微软公司对威胁建模工具进行了扩展性更新,主要更新了如下三个方面,其中模板编辑是个突破性的变化,使用者可以通过自定义威胁集合,识别出符合企业业务特性的威胁。
1、全新的威胁列表视图,可以基于列进行筛选和归类操作,便于定位和查看关注的威胁信息;
2、模板编辑功能,使用者可自定义威胁,扩展工具预置的威胁集;
3、可以迁移已经存在的数据流图,向下兼容2014版本文件。
二、威胁建模应用场景
从整个企业安全能力视图来看,威胁建模工作可以在业务系统需求管理和安全设计阶段发挥作用。考虑到方法论本身具有较强的复用性,在别的阶段和领域都会有用武之地。威胁建模的动态性体现在安全需求和安全设计的不断迭代过程中。
安全策略 | 企业安全策略构建 | |||||||
企业安全能力 | 规划 | 建设 | 运维 | 合规 | ||||
安全规划能力 | 现状评价能力 | 安全需求管理能力 | 安全需求识别能力 | 事件感知能力 | 威胁情报构建 | 安全标准解读能力 | 安全标准解读 | |
蓝图设计能力 | 安全需求评审能力 | |||||||
项目推导能力 | 威胁建模能力 | 漏洞感知 | 安全标准转化能力 | 等保测评协助 | ||||
项目设计能力 | 安全设计能力 | 安全域设计 | 安全检测/发现能力 | 渗透测试 | ISMS测评协助 | |||
安全基线设计 | 漏洞扫描 | 银联ADSS审计 | ||||||
应用安全设计 | 配置检查 | 电子银行评估 | ||||||
网络架构安全设计 | 业务安全分析 | 信息科技风险合规 | ||||||
安全开发能力 | 安全组件开发 | 网络架构分析 | 安全迎检能力 | 工信部检查 | ||||
安全编码制定 | 事件分析能力 | 安全日志分析 | 新业务评估 | |||||
安全部署能力 | 承载环境部署 | 安全监控 | 银监会检查 | |||||
应用环境部署 | 漏洞深度分析 | 证监会检查 | ||||||
网络环境部署 | 安全响应能力 | 应急处置 | 保监会检查 | |||||
安全发布能力 | 上线前评估 | 攻击溯源 | ||||||
安全加固 | 安全防护能力 | 安全架构 | ||||||
安全验收 | 安全策略优化 | |||||||
应急响应设计能力 | 应急体系设计 | |||||||
保障机制 | 流程管理 | 技术措施 | 人员组织 | 考量指标 | ||||
安全研究能力 | 安全课题研究 | 安全积累能力 | 知识库构建 | 安全人员培训能力 | 培训体系设计 | 安全度量能力 | 安全运营数据分析 | |
安全能力设计 | 工具集构建 | 安全培训 | 安全度量指标设计 | |||||
体系框架设计 | CTF竞赛 | |||||||
攻防演练 | ||||||||
红蓝对抗 | ||||||||
安全组织治理能力 | 安全组织架构设计 |
企业安全能力视图
场景一:安全需求识别
企业安全需求管理能力中关键活动是“安全需求识别“。下图为某企业安全需求识别流程,前期对业务系统进行场景识别,并对场景对应的安全需求进行识别,形成安全需求知识库。遇到未识别场景时,通过威胁建模方式进行威胁识别。进而导出补充安全需求。最后,整合到整体安全需求中。
安全需求识别流程图
此场景下威胁建模最大的问题是业务需求提供的资料不足以进行细粒度的威胁建模。导致安全威胁识别存在较多不适用项,准确度不高。可以通过后期的安全测试进行校验。
场景二:应用安全设计验证
安全设计阶段开展威胁建模最大的优势是具有充分的资料和相关角色辅助完成威胁建模工作。在概要设计或详细设计文档参考下,通过访谈架构师及开发人员可以准确识别资源,了解应用架构,并快速分解应用程序。进而绘制出详尽的数据流程图,识别出存在的安全威胁。设计阶段开展威胁建模工作可以依照威胁建模结果评价现有安全需求是否全面、现有安全设计在细粒度和有效性方面是否与安全目标相符。下面截取部分微软威胁建模工具生成的威胁报告:
部分数据流图
威胁列表:
- Spoofing the Browser External Entity [State: Not Started] [Priority: High]
Category: | Spoofing |
Description: | Browser may be spoofed by an attacker and this may lead to unauthorized access to Web Server. Consider using a standard authentication mechanism to identify the external entity. |
Justification: | <no mitigation provided> |
Short Description: | Spoofing is when a process or entity is something other than its claimed identity. Examples include substituting a process, a file, website or a network address. |
- Cross Site Scripting [State: Not Started] [Priority: High]
Category: | Tampering |
Description: | The web server ‘Web Server’ could be a subject to a cross-site scripting attack because it does not sanitize untrusted input. |
Justification: | <no mitigation provided> |
Short Description: | Tampering is the act of altering the bits. Tampering with a process involves changing bits in the running process. Similarly, Tampering with a data flow involves changing bits on the wire or between two running processes. |
- Elevation Using Impersonation [State: Not Started] [Priority: High]
Category: | Elevation Of Privilege |
Description: | Web Server may be able to impersonate the context of Browser in order to gain additional privilege. |
Justification: | <no mitigation provided> |
Short Description: | A user subject gains increased capability or privilege by taking advantage of an implementation bug. |
三、威胁建模方法分析
1、微软公司威胁建模方法论成熟,具有较强的落地性;
2、2014版以及之前版本威胁建模工具威胁识别结果不具有针对性,例如:web应用威胁方面,建模结果不如研究组织威胁列表具有指导性;
3、2016版本威胁建模工具通过自定义模板可弥补针对性不强缺点。但是,需要将威胁场景化并开发针对性的威胁模板。
四、威胁列表推导法
随着B/S架构应用成为主流,各大安全研究组织都对web应用的威胁进行了归纳总结。只是不同机构描述的视角有所不同。有些机构从“攻击“视角,有些机构从”测试“视角。但是都可以通过描述方式的转变转化为”威胁“视角。即形成威胁列表。威胁列表本身不是一个方法论,而是一些相关工作结果。可以以威胁列表为输入,结合业务场景分析,将业务场景与威胁建立起关联,就是威胁列表推导威胁的过程。
我们先来看看The Web Application Security Consortium (WASC)的威胁列表。
威胁项 | 描述 |
功能滥用 | 一种使用 Web 站点的自身特性和功能来对访问控制机制进行消耗、欺骗或规避的攻击方法。 |
蛮力攻击 | 猜测个人的用户名、密码、信用卡号或密钥所使用的自动化反复试验过程。 |
缓冲区溢出 | 通过覆盖内存中超过所分配缓冲区大小的部分的数据来修改应用程序流的攻击。 |
内容电子欺骗 | 一种用于诱使用户相信 Web 站点上出现的特定内容合法而不是来自外部源的攻击方法。 |
凭证/会话预测 | 一种通过推断或猜测用于识别特定会话或用户的唯一值来盗取或仿冒 Web 站点用户的方法。 |
跨站点脚本编制 | 一种强制 Web 站点回传攻击者提供的可执行代码(装入到用户浏览器中)的攻击方法。 |
跨站点请求伪造 | 一种涉及强制受害者在目标不知情或无意愿的情况下向其发送 HTTP 请求,以便以受害者身份执行操作的攻击。 |
拒绝服务 | 一种旨在阻止 Web 站点为正常用户活动提供服务的攻击方法。 |
指纹 | 攻击者的最常用方法是首先占用目标的 Web 范围,然后枚举尽可能多的信息。通过此信息,攻击者可以制定将有效利用目标主机所使用的软件类型/版本中的漏洞的准确攻击方案。 |
格式字符串 | 通过使用字符串格式化库功能访问其他内存空间来修改应用程序流的攻击。 |
HTTP 响应走私 | 一种通过期望(或允许)来自服务器的单个响应的中间 HTTP 设备将来自该服务器的 2 个 HTTP 响应“走私”到客户机的方法。 |
HTTP 响应分割 | HTTP 响应分割的实质是攻击者能够发送会强制 Web 服务器形成输出流的单个 HTTP 请求,然后该输出流由目标解释为两个而不是一个 HTTP 响应。 |
HTTP 请求走私 | 一种滥用两台 HTTP 设备之间的非 RFC 兼容 HTTP 请求的解析差异来“通过”第一台设备将请求走私到第二台设备的攻击方法。 |
HTTP 请求分割 | HTTP 请求分割是一种实现强制浏览器发送任意 HTTP 请求,从而施加 XSS 和毒害浏览器缓存的攻击。 |
整数溢出 | 当算术运算(如乘法或加法)的结果超过用于存储该运算的整数类型的最大大小时发生的情况。 |
LDAP 注入 | 一种用于对通过用户提供的输入来构建 LDAP 语句的 Web 站点加以利用的攻击方法。 |
邮件命令注入 | 一种用于对通过用户提供的未适当清理的输入来构造 IMAP/SMTP 语句的邮件服务器和 Web 邮件应用程序加以利用的攻击方法。 |
空字节注入 | 一种用于通过将 URL 编码的空字节字符添加到用户提供的数据来绕过 Web 基础结构中的清理检查过滤器的主动攻击方法。 |
操作系统命令 | 一种用于通过操纵应用程序输入来执行操作系统命令,从而对 Web 站点加以利用的攻击方法。 |
路径遍历 | 这是一种强制对可能驻留在 Web 文档根目录外的文件、目录和命令进行访问的方法。 |
可预测的资源位置 (Predictable Resource Location) | 一种用于通过做出有根据的猜测来显露所隐藏 Web 站点内容和功能的攻击方法。 |
远程文件包含 | 一种用于利用 Web 应用程序中的“动态文件包含”机制骗取应用程序包含具有恶意代码的远程文件的攻击方法。 |
路由迂回 | 一种可以注入或“劫持”中介以将敏感信息路由到外部位置的“中间人”攻击。 |
会话定置 | 将用户的会话标识强制变为显式值的一种攻击方法。在用户的会话标识定置后,攻击者会等待其登录。一旦用户进行登录,攻击者就会使用预定义的会话标识值来夺取其在线身份。 |
弱密码恢复验证 | 当 Web 站点允许攻击者非法获取、更改或恢复其他用户的密码时发生。 |
SOAP 数组滥用 | 一种期望数组可以是 XML DoS 攻击目标的 Web Service,方法是强制 SOAP 服务器在机器内存中构建巨大的数组,从而因内存预分配而在机器上施加 DoS 条件。 |
SSI 注入 | 一种服务器端利用技术,攻击者通过它可以将代码发送到 Web 应用程序中,Web 服务器稍后将在本地执行此代码。 |
SQL 注入 | 一种用于对通过用户提供的输入来构建 SQL 语句的 Web 站点加以利用的攻击方法。 |
URL 重定向器滥用 | URL 重定向器表示 Web 站点采用的将入局请求转发到备用资源的常见功能,并且可在钓鱼攻击中使用。 |
XPath 注入 | 一种用于对通过用户提供的输入来构建 XPath 查询的 Web 站点加以利用的攻击方法。 |
XML 属性爆发 | 一种针对 XML 解析器的拒绝服务攻击。 |
XML 外部实体 | 此方法利用 XML 的功能在处理时动态构建文档。XML 消息可以显式或者通过指向数据存在的 URI 来提供数据。在此攻击方法中,外部实体可以将实体值替换为恶意数据或备用引荐,或者可能危害服务器/XML 应用程序有权访问的数据的安全性。 |
XML 实体扩展 | 此方法对 XML DTD 中允许创建可在文档各处使用的定制宏(称为实体)的功能加以利用。通过以递归方式定义文档顶部的定制实体集,攻击者可以淹没尝试强制实体几乎无限迭代这些递归定义来完全解析实体的解析器。 |
XML 注入 | 一种用于操纵或破坏 XML 应用程序或服务的逻辑的攻击方法。将非意图 XML 内容和/或结构注入到 XML 消息中会变更应用程序的意图逻辑。此外,XML 注入还可导致将恶意内容插入到产生的消息/文档中。 |
XQuery 注入 | XQuery 注入是针对 XML XQuery 语言的经典 SQL 注入攻击的变体。XQuery 注入使用传递到 XQuery 命令的未适当验证的数据。 |
再来看看,根据web应用安全测试经验反推出来的威胁列表。
分类 | 威胁项 | |
信息探测 | 错误代码利用 | 错误页面信息利用 |
robots、爬虫攻击 | ||
配置攻击 | FTP匿名访问 | 第三方不可控脚本/URL利用 |
中间件配置攻击 | 过时的、用于备份的以及未被引用的文件利用 | |
默认页面检测 | Flash跨域访问 | |
默认管理后台探测 | SSL/TLS攻击 | |
管理后台默认口令攻击/默认后台弱口令攻击 | 数据库监听攻击 | |
不安全的HTTP方法攻击 | 文件扩展名处理攻击 | |
第三方开源插件探测 | 密码规则检查 | |
认证攻击 | 弱口令攻击 | 密码修改逻辑攻击 |
弱锁定机制恶意利用 | 密码重置逻辑攻击 | |
短信炸弹 | SSO认证攻击 | |
垃圾邮件攻击 | 加密信道证书传输 | |
认证绕过 | 用户枚举攻击 | |
暴力破解 | 用户账户猜测(遍历) | |
竞争条件攻击/竞态条件攻击 | 格式化字符串攻击 | |
图形验证码攻击 | 图灵攻击 | |
短信验证码攻击 | 多因素身份验证攻击 | |
权限攻击 | 目录浏览攻击 | 业务接口恶意调用 |
目录遍历攻击 | 业务逻辑攻击 | |
越权查看 | 后门利用 | |
越权操作 | 权限提升 | |
会话攻击 | Cookie属性利用 | 会话超时缺陷利用 |
Cookie伪造 | 会话及浏览器缓存利用 | |
Cookie敏感信息获取 | 冒用身份登录 | |
会话变量截获 | 跨站请求伪造(CSRF)攻击 | |
会话固定攻击 | ||
数据验证攻击 | HTTP参数污染攻击/不安全的直接对象引用 | SSI注入攻击 |
HTTP响应拆分攻击/缓存污染攻击 | IMAP/SMTP注入攻击 | |
Flash跨站脚本攻击 | 代码注入攻击 | |
反射型XSS攻击 | 命令执行注入 | |
存储型XSS攻击 | 命令执行攻击 | |
DOM型XSS攻击 | 缓冲区溢出(栈溢出、堆溢出) | |
URL跳转攻击(未验证的URL跳转) | 交易数据合法型校验攻击 | |
LDAP注入攻击 | 交易数据篡改攻击 | |
SQL注入攻击 | 交易数据重放攻击 | |
XML实体注入攻击 | 字符串格式溢出攻击 | |
XPATH注入攻击 | 孵育攻击 | |
框架注入攻击 | 文件包含攻击 | |
ORM注入攻击 | 任意文件上传攻击 | |
逻辑攻击 | 本地验证逻辑绕过 | 任意文件下载 |
拒绝服务攻击 | SQL通配符攻击 | thc ssl dos攻击 |
分配用户指定对象攻击 | Apache HTTP Server畸形头字段攻击 | |
释放资源失败攻击 | 存储过多会话数据 | |
NTP服务monlist拒绝服务攻击 | ||
AJAX攻击 | Ajax攻击 | |
服务框架攻击 | WSDL攻击 | XML内容级别攻击 |
XML结构攻击 | HTTP获取参数/REST攻击 |
五、威胁列表推导法分析
1、专项领域威胁识别较为全面,例如:WASC和OWASP对web应用和移动APP应用威胁识别较为全面;
2、缺少业务数据流分析过程,与业务系统功能或场景映射关系不直观。需要根据经验将威胁列表场景化后,在与业务系统场景进行关联;
3、需要自主研发工具进行快速威胁识别和导出。
六、综合威胁分析法
在开始讲述综合威胁分析方法之前先来回顾下威胁建模和威胁列表推导法各自的优劣势。
威胁建模 | 威胁列表推导法 | ||
优势 | 威胁建模方法论成熟,具有较强的落地性; | 优势 | 专项领域威胁识别较为全面 |
劣势 | 2014版以及之前版本威胁建模工具威胁识别结果不具有针对性 | 劣势 | 缺少业务数据流分析过程,与业务系统功能或场景映射关系不直观。 |
2016版本威胁建模工具通过自定义模板可弥补针对性不强缺点。但是,需要将威胁场景化并开发针对性的威胁模板。 | 需要自主研发工具进行快速威胁识别和导出。 |
由于威胁建模与威胁列表推导方式都存在一些劣势,因此,本文建议一种整合的威胁分析方法,即:综合威胁分析法。
综合威胁分析法是基于场景化处理结果,将威胁建模和威胁列表导出的威胁结合,再通过专家或AI判断,最终识别安全威胁的过程。
关键步骤说明:
第一步:主要完成场景化处理,一方面将业务功能进行场景化处理,另一方面将威胁列表按照场景进行分类。
例如:
业务场景包括:用户认证登录场景,账号信息查询场景,跨行转账场景等;
通用场景威胁列表,如下表所示:
用户认证登陆场景_用户枚举 |
用户认证登陆场景_空口令攻击 |
用户认证登陆场景_密码可变暴力猜解 |
用户认证登陆场景_用户名可变暴力猜解 |
用户认证登陆场景_撞库攻击 |
用户认证登陆场景_恶意锁定 |
用户认证登陆场景_Oauth认证缺陷 |
用户认证登陆场景_图形验证码绕过 |
用户认证登陆场景_图形验证码可识别 |
用户认证登陆场景_认证架构绕过 |
用户认证登陆场景_多点认证缺陷 |
用户认证登陆场景_明文密码传输 |
用户认证登陆场景_参数可预测的单点登录 |
用户认证登陆场景_记住密码和密码重置弱点 |
场景化威胁表
第二步:业务流程分析是在应用结构分析和应用分解后,完成业务数据流程图绘制过程,如下图所示:
数据流图(微软威胁建模工具绘制)
第三步:利用威胁建模工具完成威胁建模,导出威胁列表;
第四步:将第一步识别的“业务场景”和“通用场景威胁”以场景名称为关联要素进行匹配。便可获得业务场景对应的威胁列表;
第五步:通过专家分析或引入AI分析,综合威胁建模结果和场景威胁列表结果,最终导出合理的威胁列表。专家分析原则:用威胁建模结果保证威胁覆盖度,以威胁列表结果确保威胁深度。
第六步:优化活动,将威胁建模新识别的威胁进行分析、去重后录入威胁库。
七、总结
考虑到敏捷开发模式逐步成为主流,采用综合的威胁分析方法会在一定程度上会影响开发进度。因此,建议在使用综合威胁分析方法时,以场景化威胁列表方式为主体方法。功能场景化后,快速映射场景威胁列表导出威胁。遇到未识别场景时,再采用威胁建模的方式对未识别场景进行建模分析。并将新威胁分析入库。后续迭代出现类似场景即可快速识别。