文/冀托

你可能听过大名鼎鼎的BeyondCorp,但你可能还不知道BeyondProd。BeyondCorp和BeyondProd都是谷歌公司的零信任架构,从两者名字中可以看出两者的不同——Corp是办公网(Corporate Network)的零信任架构,而Prod是生产网(Production Network)的零信任架构。

一、BeyondProd:生产网的零信任架构

BeyondProd与BeyondCorp的理念类似,但保护对象不同。BeyondCorp保护的是员工和办公系统之间的访问。BeyondProd保护的是谷歌服务器之间的调用。

在办公网,谷歌员工通过BeyondCorp的客户端和代理网关访问办公系统(如下图)。BeyondCorp按照零信任原则,评估用户和设备的可信等级,并进行访问控制。

在生产网,用户访问前端应用,前端应用调用后端服务的场景中(如下图),BeyondProd会对涉及到的所有实体进行可信评估,包括终端用户、前端应用、服务器的硬件、运行的代码等等,最终根据综合评估结果进行访问控制。

二、BeyondProd的特性

BeyondProd给我印象最深的一点是其访问控制的严格程度。

在常见的安全模型中,服务器在被访问时,会校验前端服务器的身份和权限,只允许合法服务器的访问,拦截未知服务器的攻击。

这种方式存在一个问题,如果黑客已经攻陷了一个合法服务器的话,黑客就可以以此为跳板,披着“合法”的身份,随意访问其他服务器了。

BeyondProd架构的访问控制更加严格。服务器在被访问时,不仅要校验前端服务器的权限,还要全程联动,追溯终端用户是否合法,检查调用行为是否“正当”,它要检查调用行为是由用户触发的,还是仅仅是前端服务器的自作主张。

1、BeyondProd会检查行为的正当性

举个例子,某用户打开Gmail的时候,点了查看联系人信息。Gmail应用服务器本身没有存储联系人数据,需要从后端的“通讯录”服务调取数据。

前端应用向后调取数据时,除了检查前端应用的身份和权限之外,后端服务还要检查请求中有没有携带合法的终端用户身份凭证(如下图所示,前端应用要先获取用户身份凭证,然后在向后调用服务时携带凭证)。

这样做的目的是,确保用户有权通过前端应用访问后端的数据,调用行为不是前端应用的自作主张,而是由合法的用户操作所驱动的。

这些“检查”动作由后端服务上运行的“安全微服务”执行。所有检查都通过之后,后端服务才会返回数据。

这种程度的访问控制可以说是非常严格了。可以想象,即便黑客控制了Gmail前端服务器(如下图所示),由于没有合法的用户身份凭证,数据调用行为没有正当性,所以黑客就没法随意调取后端服务的数据。

如果后端服务还要再向后调取数据,那么二次调用请求也要带上用户身份凭证。不论向后多少次,BeyondProd每次都要进行身份、权限和行为正当性的检查。

2、BeyondProd会检查代码的合法性

再说一个BeyondProd让我感到震撼的细节——BeyondProd会校验程序是否源于合法的代码。未知来源的代码没法在谷歌网络中运行。

谷歌的程序员提交代码后,谷歌的中央代码库就会开始执行代码审核流程。一份合法的代码意味着代码至少要经历过:

(1)两人以上的code review;

(2)自动代码安全扫描;

(3)必要的产品测试流程。

审核流程完成后,谷歌的中央构建系统会生产一份带有签名的软件包。在部署时,BeyondProd会进行签名校验,从而验证这份代码是否进行过审核。

回到上一节的例子中,当前端应用调用后端服务时,除了上节讲的校验之外,后端服务还会检查前端应用是否做过“部署时的签名校验”,看看前端应用的代码是否来自中央代码库,是否进行过一系列的合法性检测。

有了代码安全检查机制,不安全的代码根本没法在生产网部署和运行。可以想象,即便有黑客入侵了服务器,并上传了恶意程序,那么这个恶意程序也跑不起来,也没法进行任何访问。因为它并不是由合法代码构建的,在代码来源合法性检测那一关就被发现了。

3、安全策略基于身份而非IP

谷歌为了满足系统的扩展性和可用性,实现了业务平台的微服务化和容器化。这种架构的变化对安全模型提出了新的要求。

传统架构中,应用都是部署到特定的服务器上,其IP很少变化。因此可以用防火墙基于IP配置访问规则。

但是在微服务化、容器化的架构中,应用可以跨服务器部署,容器可以不同服务器上调度,微服务会在不同的服务器上移动,宿主机频繁变化。某个IP不一定对应一个特定的服务,因此基于固定IP的访问规则不再适用了。

谷歌BeyondProd的安全策略都是基于微服务的身份而制定的。

4、BeyondProd会检查主机的完整性

BeyondProd的可信身份是从硬件开始的。为了避免有人在硬件中植入安全威胁,谷歌的服务器都是自己设计的,而且加了专门的芯片。这些芯片实现了硬件级别的设备识别和身份验证。

为了保证服务器的启动过程的安全性,BeyondProd会对谷歌加固过的BIOS、BMC、Bootloader、OS kernel的签名进行验证,以便验证其是否已被篡改。

硬件层的加密通信证书会在通过“启动安全验证”后激活。微服务会利用硬件层证书建立的通道,获取微服务层的加密证书。

微服务之间建立通信时,双方要互相验证对方的加密证书,以便确认对方的身份。

也就是说,只有通过了主机完整性检测的设备上的微服务,才能获得合法的证书,才能在谷歌网络上进行通信。被篡改的设备没法启动,设备上的微服务也没法与其他服务通信。

5、通信需要双向认证

上节已经提到了一部分加密通信的东西,下面再专门总结一下:

(1)身份证书:微服务正常启动后,系统会下发一个独立的加密证书,后续自动轮换和撤销。证书代表了微服务的身份,用于该服务与其他服务的双向加密通信。

(2)通信协议:谷歌网络内的通信使用的是谷歌自己优化过的协议,没有证书就无法建立通信连接,在网络传输这一层实现了对身份的校验。

(3)透明应用:加密通信能力对于应用来说是透明的,集成到了底层库中。开发者不需要关心通信连接如何建立,如何保证双方身份可信。

(4)适用范围:谷歌生产网内所有跨机房的网络通信都采用双向加密连接,以防止中间人攻击。但同一机房内的通信可以选择降低加密级别,以便加快通信速度。当然,速度问题可以通过硬件加速解决,一旦所有设备都部署了硬件加速,那么双向加密将成为默认选项。

6、安全服务是共享的

在传统的安全性模型中,每个应用都要自己搞定自己的安全。而在BeyondProd架构中,安全是通过架构底层统一提供的。

在谷歌的生产网络中,微服务部署在容器中,BeyondProd的安全能力由容器中的安全微服务提供(类似Service Mesh的概念)。安全微服务支持容器化的自动扩展,新创建的应用微服务默认就能享受安全服务。

这些安全微服务中,有的用于校验访问权限,有的用于建立加密连接。应用之间的安全访问由底层的微服务来保障,应用不用自己实现这些安全能力。

安全微服务由管控层的系统进行统一管控,实现统一的流量控制、策略下发、日志监控和异常发现。

BeyondProd将安全能力植入架构底层带来了明显的好处——既提升了整体的安全性,又没有给顶层的开发者带来负担。

安全微服务与应用微服务是并行的,两者可以分开管理。安全服务可以统一升级,以保证整体安全性。同时,常规业务的开发者可以按自己的节奏进行开发部署,完全不用担心底层的安全微服务带来的影响。

6、对容器做了隔离

常见的网络攻击方式中,黑客通过漏洞进入服务器后,必然要获取操作系统权限,以便进行下一步的攻击行动。

为了减少这类攻击风险,谷歌在linux系统和容器之间做了一层隔离(下图中的gVisor)。gVisor是一个容器运行的虚拟沙箱。它负责拦截和处理应用的系统调用。通过对应用的限制,减少系统的暴露面。

即使黑客通过应用的漏洞攻陷了某个容器,也没法突破沙箱的隔离,攻击操作系统以及系统上的其他容器。

8、在边界上进行防护

BeyondProd架构没有放弃边界的防护。零信任强调综合评估信任等级,不单纯依赖边界的防护,但边界防护仍然存在。

谷歌的应用通过“谷歌前端服务”(简称GFE)对外发布。用户访问应用时,GFE负责将流量路由转发到应用微服务上。用户到GFE使用HTTPS协议,从GFE到应用之间使用谷歌自定义的双向加密通信协议。

GFE可以提供全球负载、加密连接、抗DDoS等能力。GFE之后还有安全防火墙负责检测常见网络攻击并进行防护。

三、总结

总结一下上面的几个特性,BeyondProd架构下完整的用户访问流程图如下:

很多人认为零信任就是一个增强版的VPN,这是不对的。零信任架构的应用场景远不止远程访问而已。看看BeyondProd吧,看看彻底贯彻了零信任理念的安全架构有多么可怕:

(1)不单纯依赖边界安全,访问过程中的每一步都要校验,服务之间做了隔离,即使黑客侥幸攻陷一点,也没法横向扩散!

(2)授权条件综合考虑了多种因素,只有“硬件可信、代码可信、身份可信、权限可信、行为正当”的调用者才能获得授权,这些条件综合起来,网络的渗透难度呈指数级上升!

(3)安全集成到共享的服务栈中,安全服务可以自动化、标准化的更改发布,应用可以享受到一致的标准的安全服务!

什么叫零信任,这才叫零信任啊!

声明:本文来自白话零信任,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。