读零信任网络:在不可信网络中构建安全系统03威胁模型
1. 信任管理
1.1. 信任源自于人,并通过计算机可以执行的信任机制流入其他系统
1.1.1. 只有使用系统的人确信它确实按照其意愿忠实地运行,该系统才能被认为是可信的
1.2. 信任管理是零信任网络的一个重要功能
1.3. 信任是如何产生的?
1.3.1. 你确实了解自己的家人
1.3.1.1. 你确实了解自己的家人
1.3.2. 你只是简单地把所有能够辨识的环境、与陌生人相关的所有信息等,都纳入考虑的范围,然后判断他们的可信度有多高
1.3.3. 在某些情况下,人们甚至可能连自己都无法完全信任,但是至少可以确信所采取的行动的确是自己所为
1.4. 零信任网络中的信任往往源自系统管理员
1.4.1. 如果不存在与生俱来的信任,那么就必须从某个地方产生信任并小心地管理它
1.4.2. 系统管理员并不是总能有机会进行授权和授予信任
1.4.3. 当用户数量急剧增多时,信任管理的工作量会非常大,而系统管理员的数量却不可能无限制地随之增加
1.5. 信任委托
1.5.1. 借助信任委托,人们可以构建自动化系统,在无须人为干预的情况下,以安全可信的方式管理大规模增长的零信任网络
1.5.2. 系统管理员是可信的
1.5.3. 管理员就必须将责任委托给供应系统(Provisioning System),授予它创建新主机和为新主机授予信任的能力
1.5.4. 能够返回给系统管理员的这一串信任通常被称为信任链(Trust Chain),而系统管理员被称为信任锚(Trust Anchor)
2. 威胁模型
2.1. 定义威胁模型是设计安全架构的第一步
2.2. 描述潜在的攻击者及其能力、资源以及意图攻击的目标
2.3. 明确攻击者的范围
2.3.1. 按照攻击者的能力高低进行排序,以便于人们按照从易到难的顺序,合理部署相应的攻击缓解措施
2.4. 薄弱的环节恰恰是攻击者关注的地方
2.4.1. 聚焦于某个具体的威胁,并仔细思考缓解该威胁的具体措施
2.5. 流行的建模工具
2.5.1. STRIDE
2.5.2. DREAD
2.5.3. PASTA
2.5.4. Trike
2.5.5. VAST
2.5.6. 目标是一致的,都需要尽可能地枚举针对系统的威胁,然后进一步枚举能够缓解这些威胁的系统和流程
2.6. 不同的威胁模型处理问题的视角也不尽相同
2.6.1. 聚焦于被攻击者视为目标的资产
2.6.2. 独立地审视每一个软件组件,枚举针对每个组件的所有可能的攻击
2.6.3. 使用与攻击者相同的视角,把系统看作一个整体,分析攻击者使用何种手段渗透进这个系统
2.7. 把攻击者按照能力(造成的损害)从低到高排列
2.7.1. 碰运气攻击者
2.7.1.1. 脚本小子
2.7.1.2. 利用那些众所周知的漏洞和工具发起攻击,广撒网,碰运气
2.7.2. 定向的攻击者
2.7.2.1. 对特定的目标发起针对性的攻击
2.7.2.2. 通过鱼叉邮件、社交工程等手段发起攻击
2.7.3. 内部人员
2.7.3.1. 拥有合法凭据的系统用户
2.7.3.2. 外包人员、非特权的企业员工
2.7.4. 可信内部人员
2.7.4.1. 可信度很高的系统管理员
3. 零信任的威胁模型
3.1. RFC 3552描述了互联网的威胁模型
3.2. 零信任网络遵循互联网威胁模型来描述安全态势,规划缓解威胁的措施
3.3. 假设参与协议交互的端点系统自身并没有被攻陷
3.3.1. 如果其中一个端点系统被攻陷,那么阻止攻击就变得非常困难了
3.3.2. 通过仔细设计安全协议,还是有可能缩小损害的范围,降低损害的程度
3.4. Protocol Data Unit,协议数据单元
3.5. 即使与之通信的端点系统本身是安全的,互联网环境的特点也使得我们无法确认通信数据包真的源自该端点系统
3.5.1. 零信任网络需要控制网络中的端点设备,所以它对互联网威胁模型进行了扩展,充分考虑了端点设备被攻陷的情形
3.5.2. 面对端点设备可能遭受的攻击,通常的应对方式是首先对端点操作系统进行安全加固,然后采用端点系统安全扫描、系统活动行为分析等方式来进行攻击检测
3.5.3. 定期升级端点设备中的软件,定期更换端点设备的登录凭证,甚至定期更换端点设备本身等,也能够缓解针对端点设备的攻击
3.6. 拥有无限资源的攻击者本质上是无法防御的,零信任网络充分考虑了这一因素
3.6.1. 零信任网络的防御目标是那些常见类型(不是所有类型)的攻击者
3.7. 零信任网络能够防御的攻击者包括从低级别的“碰运气攻击者”到高级别的“可信内部人员”
3.7.1. 制定缓解措施具有更广泛的适用性,能够抵御组织面临的绝大多数攻击,显著提升组织的安全态势
3.8. 零信任模型仅需要保证用于认证和授权操作的信息的机密性,如存储在磁盘上的凭据的机密性
3.8.1. 对端点系统安全性的进一步要求,如全盘加密等,是其他安全策略需要考虑的问题
3.9. 很难防御的、相对小众的威胁
3.9.1. 利用虚拟机管理程序的漏洞复制虚拟机内存等
3.9.2. 防御这类威胁需要付出相当大的代价,可能需要专用的物理硬件
3.9.3. 多数零信任网络的威胁模型排除了这类攻击
4. 强认证
4.1. 如果没有办法把物理世界中的人与其数字世界中的身份联系起来,那么无论采用什么方法都无法真正建立对一个人身份的信任
4.2. 人类多种感官的组合很难被欺骗
4.3. 计算机场景下的身份认证更像是通过电话与某人交谈
4.3.1. 管理员采用检查远程系统的IP地址,并要求对方输入口令的方式来完成身份认证
4.3.2. 仅仅采用这些方法进行身份认证是远远不够的
4.3.2.1. 攻击者能够使用任意IP地址进行通信,还能够将自己置于两台远程通信的计算机之间发起中间人攻击
4.3.3. 零信任网络中的每个访问请求都需要经过强身份认证
5. X.509标准
5.1. 该标准定义了数字证书的标准格式,并能够通过信任链认证身份
5.2. X.509证书是TLS协议(以前是SSL协议)用来验证连接的主要机制
5.3. 大多数TLS应用实例仅配置了单向身份认证,即只是由客户端验证所访问的资源是否可信,但是被访问的资源没有验证客户端是否可信,这种配置在零信任网络场景下来说存在明显的问题
5.4. TLS协议本身支持双向身份认证,即被访问的资源也同样可以验证客户端的身份
5.4.1. 这一步骤对私有资源的保护来说非常重要
5.5. X.509证书使用两个密钥:公钥和私钥
5.5.1. 公钥需要被公布出去,私钥则被严格保密
5.5.2. 使用公钥加密的数据,可以用私钥解密,反之亦然
5.5.3. 人们可以证明其拥有正确的私钥,就能够在不暴露秘密的情况下验证身份
5.6. 基于证书的身份认证机制可以让通信双方确信对方拥有正确的私钥,并且可以确信攻击者通过搭线窃听的方法无法窃取并重用密钥
5.6.1. 该机制仍然依赖于一个秘密,而这个秘密可能会被窃取
5.7. 虽然身份凭据的合法性可以得到验证,但是其机密性无法得到保证
5.7.1. 最好使用存储在不同位置的多个秘密,根据这些秘密的组合授予访问权限
5.7.2. 攻击者必须窃取多个秘密才能完成攻击,这增加了攻击的难度
5.8. 组合使用多个秘密的方式有助于防止未授权的访问,但是仍然存在所有秘密都被窃取的风险
5.8.1. 所有身份认证凭据都应当有时间限制
5.9. 为身份认证凭据设定有效期限,不仅能够最大限度地缩减凭据泄露或密钥被盗的影响范围,还可以给管理员更新密钥和重建信任创造更多的机会,争取更多的时间
6. 凭据轮换
6.1. Credential Rotation
6.2. 管理员更改或更新密钥/口令的行为被称为凭据轮换
6.3. 凭据轮换机制能够有效防止秘密失窃,并在发生秘密失窃事件时及时将其注销,避免更大的损失
6.4. 人们应当尽可能避免使用难以轮换或者轮换成本很高的身份认证凭据,如硬件令牌/口令等
6.5. 身份认证凭据的轮换频率通常与轮换所需的成本成反比
6.6. 轮换代价高昂的凭据示例
6.6.1. 需要外部机构签发的数字证书
6.6.2. 人工配置的服务账户
6.6.3. 需要系统重启才能重置的数据库口令
6.6.4. 一旦更改就会导致所有已保存的散列值失效的密钥种子