一个好的安全体系的前提是为合法主体建立信任关系,通过信任在保证业务的前提下降低安全成本,在运行时及时检测并消除非法主体的恶意行为,所以信任是网络安全的前提要求。
维基百科上对信任(Trust)的定义为:
一方(信任方)在未来依赖另一方(被信任方)行动的意愿。
假设给定三方A、B、C,三者之间都有交互,如下图所示。
那么信任是指主体A对主体B未来发生行为action(B)的依赖意愿,这里有两层含义:
那么,主体A对B的信任度Trust(B,A)可形式化表述为:
Trust(B,A)=t({action (B)},Reputation(B,C)),其中t为信任评估函数
可见,主体A对B的action(B)行为的信任是结合了
事实上,信任度的度量会更复杂一些,需要考虑到观察行为(即证据)的可靠度,以及信任度随着时间推移衰减等因素。
而信任机制在应用时,根据不同的场景和需求会有多种形态,如IAM(Identity and AccessManagement)、访问控制、边界控制等,具体产品就更是五花八门。但核心上看,信任管理有四个要素(如上图所示):
行业内主流的信任管理机制都是采用了确定性的信任评估方式,设置后长期不变、控制面和数据面混合在一起,虽然简化了策略制定、系统运行时机制,但没有考虑到上下文变化,这是造成现在网络安全事件频发的根本原因之一。
所以,一个好的信任管理机制,在控制平面需要保证主体、资源属性与安全策略在运行过程中保持一致;在数据平面,操作控制点能时刻在主体和资源的访问路径上;同时还要注意控制面和数据面要保持合理的独立隔离。
目前为止我们分析了信任管理,那么“零信任”又是什么呢?我们不禁要问,世界上到底有没有零信任?
答案是:“没有”,也“有”。
从上面的分析可见,“零信任”从字面上看是有误导性的,世界上不存在完全不信任任何主体的业务,所谓“零信任”安全,更准确的说法应该是“默认不信任,时时处处验证”安全。
从技术上看,要做到信任管理,或在身份上下功夫,或在控制上下功夫。现有业界的零信任方案必定落到某个具体的技术领域内,如
需要注意的是,以上技术路线之间只是一种概念和侧重点上的划分,在实际的技术方案和产品中,往往是融合多种不同的技术路线。
身份和权限管理(IAM、IDaaS和PAM)作为信任的第一个环节,也很自然地得到了业界重视,如Cisco收购的Duo Security,就是IAM起家,并融入到Cisco的零信任方案中。此外,如Centrify于2018年年底将IDaaS业务拆分为独立的公司Idaptive,在其方案中使用了零信任的概念,还有国内的九州云腾也有相似的方案。
在主体执行动作时,对主体权限和行为进行判断,最常见的是网络访问控制,这类零信任方案统称为零信任网络访问(Zero Trust Network Access,ZTNA),细分的流派有CSA SDP和BeyondCorps两类。不过Gartner在最新的报告中将这两类又统称为软件定义边界(SDP),所以文中将前者称为CSA SDP,表示它是最早由CSA提出的狭义SDP流派。
CSA SDP见下图,认证请求是由客户端Initiating SDP Host(IH)发起的,控制器经过访问控制策略判断下发指令,最终由Accepting SDP Host(AH)根据指令放行或阻断。
CSA SDP模型
BeyondCorps的路线最早见Google BeyondCorps项目,其流程见下图,认证请求是由用户访问的服务发起的,控制点也在服务侧,所以该服务的角色就是代理。
基于代理的ZTNA路线
从效果看,这两种技术路线都是隐藏后面的应用,除非用户提供了自己的身份和访问资源,否则用户是无法访问应用的。从部署上看,CSA SDP需要客户端安装Agent,所以环境要求较高,目前主要是应用于替代VPN的场景中,这类公司较多,如Cyxtera、Meta Network、Verizon等。
从结果看,“零信任”与隔离有很大的相关度。一些云厂商借助微隔离技术,可天然按照不同粒度隔离业务,例如VMware在NSX产品中提出用微隔离减少攻击面。
在SaaS场景中,随着敏捷开发、高效运营的驱动,用户越来越多地使用云原生的架构来开发应用。在云原生场景中,应用的颗粒度会被切得非常细,一个容器通常只运行一个或少数若干进程,故服务称为微服务。所以,通常实现一个业务需要多个微服务的交互,在云原生场景中,服务之间的访问关系非常复杂,不能依靠固化的访问控制逻辑,而是应该按照业务的逻辑确定微服务间的安全策略,划分微服务的边界进行持续有效的隔离,以及在微服务之间应用一致的访问权限控制,就变得非常重要。为了解决这个问题,云原生的系统通常都会有数据和管理平面的鉴权机制。
而在服务网格场景下,零信任还应覆盖微服务间的交互,这部分需要使用面向云原生的服务零信任机制。比较典型的方案是Google的Istio。从功能上看,Istio可为微服务无缝加入认证授权和加密通信的功能。其思想是通过策略控制器,使用Kubernetes的RBAC授权机制,对资源粒度细化到单个服务的访问控制,从而所有的服务交互都是可信的。
从效果看,如果攻击者没有合法身份,是无法在数据平面横向移动的。因为在网络层设置了网络策略白名单后,网络层的非法访问就被禁止了;而在服务层,微服务Pod的开放服务较少,且都引入了认证和业务层访问控制,攻击者也很难发起非授权的连接。
从数据平面分析,Istio和SDP都需要对网络做比较大的修改。如SDP需要添加IH和AH,客户端需要添加组件,服务端也需要部署代理,而Istio的Sidecar容器也需要部署在所有业务容器旁,且截获流量,通过重写IPTABLES的NAT表的方式将处理完的流量送回业务容器。
从结果观察,因为上述原因,SDP在传统企业网络中部署遇到了非常大的挑战,但可预计Sidecar的部署模式会在服务网格环境中成为主流的安全防护技术。原因是Sidecar虽然是一种侵入性部署模式,但全程自动化、用户友好:Istio主动监听k8s-api服务获得新服务部署事件,通过仓库自动部署Sidecar容器,通过Init容器劫持流量,最后Sidecar使用Citadel和RBAC策略进行认证授权。一方面,业务方对安全机制毫无感知,所有开发、测试和运维均保持不变;另一方面,应用间能实现完备的认证和授权,最终达到内生安全。
本质上来说,云计算安全是催生零信任的最早行业推动力。
云计算系统的最大特点是所有资源虚拟化和软件化、平台集中化。其中,如认证和访问控制机制是云计算系统原生提供的,如
所以这些云平台的控制平面和数据平面都是原生支持零信任的。
云计算系统数据平面的访问会涉及计算资源的隔离和访问控制,资源隔离毫无疑问是虚拟化天然的特性,至于访问控制,则分为服务暴露和内部网络访问两部分。
所以云计算资源暴露面默认是没有的,从而避免了绝大多数来自互联网上的威胁。
至于当OpenStack为虚拟机分配了浮动IP、Kubernetes为Pod分配了Ingress或NodePort服务后,这些云资源对外提供服务,用户可在外访问,就出现了暴露的风险。所以在这种场景下,BeyondCorps的SDP模式就能帮助企业隐藏敏感服务,提供细粒度的访问控制。虽说这不是云平台原生提供的安全能力,但SDP借助云平台的开放接口,可以容易地对接到各大公有云。相比而言,如果在传统企业内网部署类似的SDP服务,则需要对传统网络结构、服务器应用进行大力度改造,这几乎是不可能实施的(所以现在传统企业采用SDP主要是代替传统VPN,实现细粒度的访问控制)。
而在内部网络中,同样也可以通过零信任的访问控制机制防止攻击者横向移动。
可见,云计算系统数据平面的可编程和软件化能力确实能够提供零信任的认证授权、资源隔离、访问控制的机制。
从实践来看,云原生安全和零信任安全是有一定相关性的。
基于以上,我们可以得出一个推论:云原生的(零)信任机制必然会扩展、连接到更多环境,如企业内网、移动网络,甚至物联网、工业互联网等,就如现在公有云开始连接企业内网、工业互联网连接生产环境和云平台的趋势一样。
那么,云原生的零信任机制就需要借助其先进的软件能力和先进架构,开始适配云原生以外的更多应用场景,最终实现面向融合环境的零信任机制。
另外,零信任虽然给我们一种全新的信任管理理念,但不代表实现了“零信任”机制就是万无一失、无懈可击的。在最极端的场景下,如果访问主体本身怀有恶意的意图,虽然身份和权限是正常的,但其行为本身是异常的,所以“零信任是银弹吗?”的答案显然是否定的。
零信任的最大价值在于减少暴露面和攻击面,所以应该处于Gartner的自适应安全体系的防御(Prevention)阶段,应该假定存在攻击者侵入的可能性。正如NIST的零信任模型中包含了持续诊断和缓解系统,以进行实时监测和及时响应。
所以,如何将零信任作为指导思想,融入到整个安全体系中,就需要我们设计一种零信任原生的形式化模型和安全架构。
综上,“零信任原生安全”从设计上就体现了零信任理念,融合了多种安全能力;在实现上可适配各类应用场景的安全体系。它脱胎于零信任的理念,融合自适应安全的安全体系,有机形成预防、检测和响应的能力,利用云原生安全的架构和能力,通过软件定义的架构,可适配多种应用场景。