信任管理是零信任网络的一个重要功能。人们对信任这个概念并不陌生,比如,你会信任自己的家人,但不会信任大街上的陌生人,当然更不可能信任面露凶相的陌生人。为什么会这样?信任是如何产生的?
首先,你确实了解自己的家人。你知道他们长什么样子,住在哪里,你并不会怀疑他们的身份,在重要的事情上你会更加相信自己的家人而不是陌生人。
反之,陌生人对你来说则是完全未知的。你也许见过他们的长相,知道他们的一些基本信息,但却不知道他们住在哪里,也不了解他们的过往。有的陌生人或许看上去很不错,但你也肯定不会在重要的事情上相信他们。比如说,你也许会在去洗手间的时候请陌生人帮你照看物品,但是肯定不会请陌生人帮你在ATM上取钱。
最终,你只是简单地把所有能够辨识的环境、与陌生人相关的所有信息等,都纳入考虑的范围,然后判断他们的可信度有多高。ATM取钱这样的任务需要非常高的信任等级,而帮助你看管物品所需要的信任等级则低得多,当然也不会低到信任等级为零。
在某些情况下,人们甚至可能连自己都无法完全信任,但是至少可以确信所采取的行动的确是自己所为。因此,零信任网络中的信任往往源自系统管理员。“零信任网络中的信任”这句话听上去似乎有些自相矛盾,但是理解这一点却非常重要:如果不存在与生俱来的信任,那么就必须从某个地方产生信任并小心地管理它。
这里还有一个小问题:系统管理员并不是总能有机会进行授权和授予信任!另外,当用户数量急剧增多时,信任管理的工作量会非常大,而系统管理员的数量却不可能无限制地随之增加。这个问题有成熟的解决方案,那就是信任委托,如图2-1所示。
图2-1 管理员信任某个特定的系统,这个系统又可以信任另一个系统,从而形成信任链
信任委托非常重要。借助信任委托,人们可以构建自动化系统,在无须人为干预的情况下,以安全可信的方式管理大规模增长的零信任网络。首先,系统管理员是可信的,然后他必须为系统赋予一定程度的信任,使该系统能够以管理员的身份执行后续动作。为了更好地理解信任委托这个概念,我们以服务的自动伸缩(Auto-Scaling)功能为例进行简要描述。假设你希望自己的服务能够按需自动开通,那么这里就会存在问题:如何确定一个新生成的服务是自己的而不是其他人的?为了达到这个目的,管理员就必须将责任委托给供应系统(Provisioning System),授予它创建新主机和为新主机授予信任的能力。通过这种方式,我们就可以相信新创建的服务确实是自己的,因为供应系统已经确认过该服务是由它创建的,并且供应系统还可以证明系统管理员已经把这样的权力授予了它。能够返回给系统管理员的这一串信任通常被称为信任链(Trust Chain),而系统管理员被称为信任锚(Trust Anchor)。
2.1 威胁模型
定义威胁模型是设计安全架构的第一步。威胁模型用来描述潜在的攻击者及其能力、资源以及意图攻击的目标。威胁模型通常会明确攻击者的范围,并按照攻击者的能力高低进行排序,以便于人们按照从易到难的顺序,合理部署相应的攻击缓解措施。
定义明确的威胁模型是非常好的工具,它能够帮助我们聚焦于攻击者,思考并部署相应的安全缓解措施。在安全系统的建设过程中,经常出现与其他工程实践类似的倾向:人们往往倾向于在那些令人浮想联翩的工程问题上投入很大的精力,却忽视那些枯燥无味但仍然很重要的工作。在安全系统的建设过程中,这种倾向更加令人担忧,因为系统中薄弱的环节恰恰是攻击者关注的地方。因此,威胁模型作为一种机制,可以帮助我们聚焦于某个具体的威胁,并仔细思考缓解该威胁的具体措施。
在对安全建设工作的优先级进行排序时,威胁模型同样可以起到指导作用。设想一下,如果一个系统的安全措施连用户弱口令暴力破解这类简单的攻击都不能防范,那么奢谈如何防范国家级别的攻击者就变得毫无意义。因此,我们在构建威胁模型时也要从初级的攻击者开始考虑,这一点非常重要。
2.1.1 常用的威胁模型
网络安全领域有多种威胁建模方法,以下这几种都是流行的建模工具。
- STRIDE。
- DREAD。
- PASTA。
- Trike。
- VAST。
虽然不同的建模工具所使用的威胁描述框架并不相同,但是它们的目标是一致的,都需要尽可能地枚举针对系统的威胁,然后进一步枚举能够缓解这些威胁的系统和流程。
不同的威胁模型处理问题的视角也不尽相同。有的建模工具聚焦于被攻击者视为目标的资产;有的则独立地审视每一个软件组件,枚举针对每个组件的所有可能的攻击;还有的则使用与攻击者相同的视角,把系统看作一个整体,分析攻击者使用何种手段渗透进这个系统。这些建模工具各有其优缺点,在实践过程中混合使用这3类建模工具是比较理想的做法,有助于构建多样化的威胁缓解措施。
如果使用基于攻击者视角的威胁建模工具,则可以把攻击者按照能力(造成的损害)从低到高排列,具体如下。
(1)碰运气攻击者
这类攻击者又被称为“脚本小子”。他们没有什么高明的攻击战术,也没有明确的攻击目标,往往利用那些众所周知的漏洞和工具发起攻击,广撒网,碰运气。
(2)定向的攻击者
此类攻击者针对特定的目标发起针对性的攻击。他们经常通过鱼叉邮件、社交工程等手段发起攻击。
(3)内部人员
拥有合法凭据的系统用户。外包人员、非特权的企业员工等,都属于这一类。
(4)可信内部人员
可信度很高的系统管理员。
按照以上方式把威胁进行分级,就能够聚焦于每一个级别的威胁,分析和探讨缓解该威胁的方法。2.1.2节将讨论零信任模型的目标是缓解哪些级别的威胁。
2.1.2 零信任的威胁模型
RFC 3552描述了互联网的威胁模型。一般情况下,零信任网络遵循互联网威胁模型来描述安全态势,规划缓解威胁的措施。为了更好地理解这一威胁模型,建议完整阅读RFC 3552,本节摘录了其中相关的内容。
互联网环境下的威胁模型相当容易理解。通常情况下,假设参与协议交互的端点系统自身并没有被攻陷。如果其中一个端点系统被攻陷,那么阻止攻击就变得非常困难了。在这种情况下,通过仔细设计安全协议,还是有可能缩小损害的范围,降低损害的程度。
与之相反,假设攻击者几乎能够完全控制端点系统用以通信的信道。这意味着攻击者可以读取网络上的任何PDU(Protocol Data Unit,协议数据单元),并且不被察觉地删除和篡改数据包,或者将伪造的数据包注入到通信线路中。攻击者能够生成看似源自可信主机的数据包。因此,即使与之通信的端点系统本身是安全的,互联网环境的特点也使得我们无法确认通信数据包真的源自该端点系统。
因为零信任网络需要控制网络中的端点设备,所以它对互联网威胁模型进行了扩展,充分考虑了端点设备被攻陷的情形。面对端点设备可能遭受的攻击,通常的应对方式是首先对端点操作系统进行安全加固,然后采用端点系统安全扫描、系统活动行为分析等方式来进行攻击检测。此外,定期升级端点设备中的软件,定期更换端点设备的登录凭证,甚至定期更换端点设备本身等,也能够缓解针对端点设备的攻击。
拥有无限资源的攻击者本质上是无法防御的,零信任网络充分考虑了这一因素。因此,零信任网络的防御目标是那些常见类型(不是所有类型)的攻击者。
从前面对攻击者能力的描述来看,零信任网络能够防御的攻击者包括从低级别的“碰运气攻击者”到高级别的“可信内部人员”。大多数组织能够遇到的攻击类型基本上就是以上这些,很难遇到复杂程度更高的攻击。因此,针对这些类型的攻击者制定缓解措施具有更广泛的适用性,能够抵御组织面临的绝大多数攻击,显著提升组织的安全态势。
我们还会遇到一些很难防御的、相对小众的威胁,如利用虚拟机管理程序的漏洞复制虚拟机内存等。防御这类威胁需要付出相当大的代价,可能需要专用的物理硬件,因此大多数零信任网络的威胁模型排除了这类攻击。我们应该明白,在网络安全方面虽然有许多最佳实践,但是零信任模型仅需要保证用于认证和授权操作的信息的机密性,如存储在磁盘上的凭据的机密性。至于对端点系统安全性的进一步要求,如全盘加密等,是其他安全策略需要考虑的问题。
2.2 强认证
如果没有办法把物理世界中的人与其数字世界中的身份联系起来,那么无论采用什么方法都无法真正建立对一个人身份的信任。人类可以使用多种感官系统的组合来判断面前的这个人是否就是他们所认为的那个人,事实证明,人类多种感官的组合很难被欺骗。
然而,计算机系统就没那么幸运了。计算机场景下的身份认证更像是通过电话与某人交谈。你可以听到他的声音,可以看到他的来电号码,可以问他问题……但是,却看不到他本身。这就是很大的挑战:应该用什么办法来判断电话线路另一端的人(或系统)的确就是他所声称的那个人(或系统)?
通常情况下,管理员采用检查远程系统的IP地址,并要求对方输入口令的方式来完成身份认证。但是在零信任网络中,仅仅采用这些方法进行身份认证是远远不够的。因为零信任网络中的攻击者能够使用任意IP地址进行通信,还能够将自己置于两台远程通信的计算机之间发起中间人攻击。因此,零信任网络中的每个访问请求都需要经过强身份认证。
目前,应用较广泛的身份认证机制是安全工程师们都非常熟悉的X.509标准。该标准定义了数字证书的标准格式,并能够通过信任链认证身份。X.509证书是TLS协议(以前是SSL协议)用来验证连接的主要机制。
SSL是匿名的
大多数TLS应用实例仅配置了单向身份认证,即只是由客户端验证所访问的资源是否可信,但是被访问的资源没有验证客户端是否可信,这种配置在零信任网络场景下来说存在明显的问题。
TLS协议本身支持双向身份认证,即被访问的资源也同样可以验证客户端的身份。这一步骤对私有资源的保护来说非常重要。关于零信任网络TLS配置的更多信息可以参考8.5.2节。
X.509证书使用两个密钥:公钥和私钥。公钥需要被公布出去,私钥则被严格保密。使用公钥加密的数据,可以用私钥解密,反之亦然,如图2-2所示。通过正确解密由众所周知(且可验证)的公钥加密的数据片段,人们可以证明其拥有正确的私钥,就能够在不暴露秘密的情况下验证身份。
图2-2 Bob使用Alice的公钥加密消息,只有Alice能够解密
基于证书的身份认证机制可以让通信双方确信对方拥有正确的私钥,并且可以确信攻击者通过搭线窃听的方法无法窃取并重用密钥。但该机制仍然依赖于一个秘密,而这个秘密可能会被窃取。通过网络搭线窃听这种方式虽然行不通了,但是攻击者仍然可以使用恶意软件感染或物理接触的方式窃取这个秘密。
也就是说,虽然身份凭据的合法性可以得到验证,但是其机密性无法得到保证。因此,实践中最好使用存储在不同位置的多个秘密,根据这些秘密的组合授予访问权限。在这种情形下,攻击者必须窃取多个秘密才能完成攻击,这增加了攻击的难度。
虽然组合使用多个秘密的方式有助于防止未授权的访问,但是仍然存在所有秘密都被窃取的风险。因此,所有身份认证凭据都应当有时间限制。为身份认证凭据设定有效期限,不仅能够最大限度地缩减凭据泄露或密钥被盗的影响范围,还可以给管理员更新密钥和重建信任创造更多的机会,争取更多的时间。管理员更改或更新密钥/口令的行为被称为凭据轮换(Credential Rotation)。
凭据轮换机制能够有效防止秘密失窃,并在发生秘密失窃事件时及时将其注销,避免更大的损失。人们应当尽可能避免使用难以轮换或者轮换成本很高的身份认证凭据,如硬件令牌/口令等,特别是新建的系统,应当在系统设计早期就考虑到这个因素。身份认证凭据的轮换频率通常与轮换所需的成本成反比。
轮换代价高昂的凭据示例
需要外部机构签发的数字证书。
人工配置的服务账户。
需要系统重启才能重置的数据库口令。
一旦更改就会导致所有已保存的散列值失效的密钥种子。
本文截选自
- 国内首部介绍零信任网络的专业技术图书。
- 内容全面丰富,是学习零信任网络不可或缺的参考资料。
- 全面解析零信任网络技术,系统介绍构建零信任网络的方方面面。
《零信任网络:在不可信网络中构建安全系统》分为10章,从介绍零信任的基本概念开始,描述了管理信任,网络代理,建立设备信任、用户信任、应用信任以及流量信任,零信任网络的实现和攻击者视图等内容。《零信任网络:在不可信网络中构建安全系统》主要展示了零信任如何让读者专注于构建强大的身份认证和加密,同时提供分区访问和更好的操作敏捷性。通过阅读《零信任网络:在不可信网络中构建安全系统》,读者将了解零信任网络的架构,包括如何使用当前可用的技术构建一个架构。
《零信任网络:在不可信网络中构建安全系统》适合网络工程师、安全工程师、CTO以及对零信任技术感兴趣的读者阅读。