如何做威胁建模

1 图表

  • 理解上下文环境
    根据业务需求和开发框架理解业务遭受的威胁环境
  • 设定攻击场景
  • 画流程图
    • 外部实体,外部实体可以浏览器、移动设备、人、进程等实体
    • 数据流,可以是功能调用、网络数据流等
    • 过程,可以是服务、组件
    • 数据库,除了数据库也可以是文件、注册表、共享存储、缓存等
    • 可信边界
      • 添加与数据流相交的信任边界
      • 攻击者可以插入的点/表面
      • 物理边界,特权边界,完整性边界是信任边界的例子
      • 本地进程中的线程通常在信任边界内,因为它们共享相同的权限,权限,标识符和访问权限
      • 通过网络进行通讯的过程总是有一个信任边界
        5个元素的示例见下图:

2 威胁分析

  • STRIDE 介绍

    • 欺骗(Spoofing threats)
      身份欺骗的一个例子是非法访问,如使用其他用户的身份验证信息(用户名和密码)进行认证。
    • 篡改(Tampering threats)
      数据篡改涉及恶意修改数据。示例包括未经授权的对持久性数据(例如数据库中的数据)所做的更改以及在两台计算机之间通过互联网等开放网络进行传输中的数据更改。
    • 否认(Repudiation threats)
      拒绝威胁与拒绝执行操作的用户相关联,并且没有其他方面有任何证明的方式 - 例如,用户在系统中执行非法操作,该系统不能追踪被禁止的操作。不可否认是指系统有抵制否认威胁的能力。例如,用户使用了转账业务,但是随后不承认转账过,系统需要证明用户的行为。
    • 信息泄露(Information disclosure threats)
    • 拒绝服务(Denial of service threats)
      拒绝服务(DoS)攻击会拒绝有效用户的服务,例如,使Web服务器暂时不可用。必须防止某些类型的DoS威胁,以提高系统可用性和可靠性。
    • 提权(Elevation of privilege threats)
      在这种类型的威胁中,非特权用户获得特权访问权限,从而有足够的权限来妥协或破坏整个系统。提升特权威胁包括攻击者已经有效地渗透所有系统防御措施,成为可信系统本身的一部分。
      元素与 STDRE 的关系:
  • 隐私威胁
    除了微软的典型的STRIDE分析方法,现在同样需要考虑隐私威胁,国内可以参考国标GBT 35273-2017《信息安全技术个人信息安全规范》,业务数据如果涉及了个人信息要考虑对隐私数据的威胁和保护。

  • 攻击树
    示例见下图:

    攻击树可以根据组织业务经验进行积累,如组织同类型业务早期的攻击树分析,近期攻击者利用的漏洞、使用的技术等。

3 缓解措施

缓解模式,举些例子:

  • 认证缓解欺骗
    • 认证:
      • 基本&摘要认证
      • LiveID身份验证
      • Cookie认证
      • Windows身份验证(NTLM)
      • Kerberos身份验证
      • PKI系统,如SSL / TLS和证书
    • 安全
      • 数字签名的数据包
      • 验证代码或数据
      • 数字签名
      • 消息认证码
      • 哈希
  • 完整性缓解篡改
    • Windows强制完整性控制
    • 访问控制列表
    • 数字签名
    • 消息认证码
  • 不可否认性缓解否认
    • 强认证
    • 安全的日志记录和审计
    • 数字签名
    • 保护时间戳
    • 值得信赖的第三方
  • 加密缓解信息泄露
    • 加密
    • 访问控制
  • 可用性缓解拒绝服务
    • 访问控制
    • 过滤
    • 配额
    • 授权
    • 高可用性设计
  • 授权缓解提权
    • 访问控制
    • 组或角色成员资格
    • 特权管理
    • 输入验证
  • 缓解隐私威胁
    • 数据清洗
    • 数据脱敏
    • 传输/存储加密
    • 访问控制
    • 授权

4 威胁建模过程

  • 微软提供的方法
    过程如下图:

    1. 预设场景
      • 场景,会哪里使用该产品?
      • 使用案例
      • 为场景/用例增加安全性
      • 结构化的方式来思考“你告诉客户有关产品的安全性?”
    2. 图表化场景/过程
    3. 识别威胁
      • 如果不知道从哪开始,可以从外部实体或驱动动作的事件开始
      • 不要忽略每一个威胁,因为你可能不知道它的利用方法
      • 聚焦易实现的威胁
    4. 提供每个威胁的缓解措施
    5. 验证所有威胁和缓解措施

      • 图表是否匹配最终的代码?
      • 列举的威胁是?
      • 最小化:触及信任边界的每个元素的STRIDE
      • 有测试检查模型?
        • 创建适当的测试计划
        • 测试者的方法经常发现与TM或问题的细节
      • 每个威胁是否得到缓解?
      • 缓解措施是否正确

      另外有套类似风险评估的方法,需要计算每个风险的值,以区分风险级别
      过程见下图:

    6. 识别资产:确定哪些是包含敏感或隐私信息的关键资产/信息/文件/位置
    7. 创建体系结构概述:创建体系结构图以清楚地了解建议的应用程序及其托管环境
    8. 分解应用程序:分解体系结构图以识别各种进入和退出标准
    9. 识别威胁:使用STRIDE(欺骗,篡改,拒绝,信息披露,拒绝服务和特权提升)以及可能发生这些威胁的可能威胁
    10. 记录威胁:识别各种资产,威胁和控制。捕获缺少安全控制的威胁列表,并为每个威胁提供适当的修复建议
    11. 评估威胁:在与相应的客户/客户进行讨论之后,遵循DREAD(潜在损害,可重复性,可利用性,受影响的用户,可发现性)模型来对每个已识别的威胁
      详细可以参考:https://msdn.microsoft.com/en-us/library/ff648644.aspx
  • OWASP 过程

    1. 分解应用程序。威胁建模过程的第一步是关注如何理解应用程序以及如何与外部实体交互。这包括创建用例来了解应用程序的使用方式,确定入口点以查看潜在攻击者可以与应用程序交互的位置,识别资产(即攻击者感兴趣的项目/区域),以及识别代表应用程序将授予外部实体的访问权限。此信息记录在“威胁模型”文档中,也用于为应用程序生成数据流图(DFD)。 DFD 显示通过系统的不同路径,突出特权边界。
    2. 确定并排列威胁。识别威胁的关键在于使用威胁分类方法。可以使用诸如 STRIDE 的威胁分类,或定义诸如审计和日志记录,认证,授权,配置管理,存储和传输中的数据保护,数据验证,例外管理等威胁类别的应用安全框架(ASF)。威胁分类的目标是帮助识别来自攻击者(STRIDE)和防御角度(ASF)的威胁。在步骤1中生成的DFD有助于从攻击者的角度确定潜在的威胁目标,例如数据源,进程,数据流和与用户的交互。这些威胁可以进一步确定为威胁树的根源;每个威胁目标都有一棵树。从防御的角度来看,ASF 分类有助于将威胁识别为这种威胁的安全控制的弱点。常见的威胁列表和例子可以帮助识别这些威胁。使用和滥用案例可以说明现有的保护措施可以被绕过,或者缺乏这种保护措施。可以使用诸如 DREAD 的基于价值的风险模型或基于一般风险因素(例如可能性和影响)的较不主观的定性风险模型来确定每个威胁的安全风险。
    3. 确定对策和缓解措施。缺乏对威胁的保护可能意味着可以通过实施对策来减轻风险。这种对策可以使用威胁对策映射列表来识别。一旦将风险等级分配给威胁,就可以将威胁从最高风险分类到最低风险,并且优先化缓解工作,例如通过应用所识别的对策来对这些威胁进行响应。风险缓解策略可能涉及评估这些威胁所带来的业务影响,并降低风险。其他选择可能包括承担风险,假设业务影响是可接受的,因为补偿性控制,通知用户威胁,完全消除威胁构成的风险,或者是最不可取的选择,即什么都不做。

 

OWASP的方法也是介绍了风险值的计算方法,详细说明见:https://www.owasp.org/index.php/Application_Threat_Modeling

posted @ 2021-12-16 16:32  皓亦寒  阅读(953)  评论(0编辑  收藏  举报