对于零信任,谷歌是最早进行实践的公司。2010年前后,谷歌内部开始了代号为BeyondCorp的安全项目。目前,谷歌有超过10万名员工通过BeyondCorp进行日常办公。
谷歌在实施BeyondCorp项目的同时,将建设理念、实施情况及经验教训总结成了6篇开创性的论文,陆续在2011年至2017年之间发表,并被业界广泛认可并学习。BeyondCorp架构成为经典的零信任实践案例。
谷歌表示,BeyondCorp 是一种“无特权”的企业网络的新模式。BeyondCorp 用对设备的信任取代了对网络的固有信任。不管用户的网络位置如何,对企业资源的访问授权都完全取决于用户和设备是否通过了身份验证和授权。
谷歌在2009年曾经遭受过一次严重的网络攻击事件:一名谷歌员工点击了即时通信消息中的一条恶意链接,从而引发了一系列渗透攻击,且网络被渗透数月之久,多个系统的敏感数据被窃取,造成了严重损失。
事后,谷歌对安全事故进行了全面调查。几乎所有调查报告都指出,黑客在窃取数据之前,曾长期潜伏在企业内网中,利用内部系统漏洞和管理缺陷逐步获得高级权限,最终窃取数据。
通过对事件的分析调查,谷歌安全团队发现自身存在一个严重的问题——对来自内网的攻击防护太薄弱。在开发 BeyondCorp 之前,谷歌与大多数企业一样,以防火墙为基础划分出企业内网和公众网络的边界,并基于此构建安全体系。企业内网被认为是可信的,为了便于开展日常工作,通常不会对员工在内网中访问资源的行为设置严格限制。如果员工出差或在家办公,则需要先使用VPN接入企业内网。如果员工使用手机等移动设备办公,那么也需要先配置VPN才能使用内网的办公资源。
图1-4
这次事件证明,当时的模式存在严重的安全隐患。一旦边界被突破,攻击者就可以畅通无阻地访问企业的内部网络,而企业内网无法对其进行有效的限制和监控。
谷歌的安全团队认为,这样的攻击不是个例,以后这类攻击事件会成为大概率事件,内部威胁会成为最严重的威胁。随着APT攻击的泛滥,以后的边界防护会变得越来越难。针对这种情况,谷歌安全团队的计划是——开发BeyondCorp,将访问权限控制措施从“网络边界”转移到具体的用户、设备和应用,及时发现和阻断来自内部的风险。
在 BeyondCorp 架构中,无论用户在内网、家中还是咖啡馆,都要经过用户设备认证才能访问企业资源。安全人员会对员工进行最细粒度的访问控制。员工可以更安全地在任何地点工作,而不用配置VPN。
图1-4是BeyondCorp的架构图(为了与前后文对应,笔者对BeyondCorp组件的位置做了调整,与原图稍有差异)。
BeyondCorp包括如下9个模块。
(1)单点登录:用户在单点登录的统一门户上进行身份认证,认证成功之后,获取身份令牌。后续所有的访问都需要令牌,以证明用户的身份。
(2)用户身份库:用户身份库存储用户和组织结构的信息,与谷歌的HR流程紧密结合,当员工入职、调岗、离职时,身份库会自动更新。在单点登录过程中需要使用用户身份库进行身份校验。
(3)设备清单库:谷歌会随时监控公司设备的安全状态,并将这些受控设备的信息存储在设备清单库中,用于校验设备。
(4)证书管理:BeyondCorp会给合法的设备下发证书。证书存储在用户设备上,在设备认证过程中会校验证书的有效性。
(5)信任评估:对设备和用户的信任水平进行分析,例如,未安装最新补丁的设备,可能存在漏洞,因此信任等级会被降低。如果存在恶意软件,则表明设备可能已经被入侵,信任等级会被大幅降低。
(6)分析管道:汇聚身份、设备、证书、信任等级等各类信息,推送给访问控制引擎,用于访问策略的决策。
(7)访问控制引擎:对访问代理上的每个访问请求进行校验,校验身份是否合法、设备是否合法、用户是否具有访问某某资源的权限、信任等级是否符合要求、时间位置是否符合要求等信息。例如,限制只有财务部的员工可以在上班时间通过受控设备访问财务系统。
(8)访问代理:谷歌的所有业务系统都是通过访问代理向互联网开放的。用户要访问业务系统,必须通过访问代理的校验。只有校验成功后,请求才会被转发到业务系统。访问代理与客户端和业务系统之间的通信是加密的。要支持大规模用户访问,访问代理还应该具备负载均衡能力。
(9)Radius认证:BeyondCorp使用802.1x协议来做网络准入的认证。谷歌内部划分了几个VLAN,最开始零信任网络只是其中之一。参与试点的人会在网络认证之后,被划分到零信任的VLAN中体验BeyondCorp。随着BeyondCorp逐渐成熟,其他人才逐渐加入,最终取代之前的网络。
介绍完BeyondCorp的架构,再来介绍员工在BeyondCorp中的实际体验。
员工进行802.1x认证之后才能连上内网。认证成功的用户会被分到零信任网络中。认证失败的用户会被分到一个单独网络中。在那里,员工只能访问自助服务以便进行补救。
无论用户身在谷歌大厦还是咖啡馆,在访问业务系统之前,都会跳转到单点登录页面进行多因子认证。员工需要插入U盾或通过指纹识别进行身份验证,没有通过身份验证的用户只能看到访问代理,看不到后面的业务系统。
谷歌会向员工的设备后台推送一个设备检测插件。在单点登录和后续的访问过程中,客户端插件会不断检测设备状态。如果员工乱装软件,那么将无法进行单点登录,或者已建立的连接将自动中断。如果设备中了病毒,或者没有更新安全补丁和病毒库,那么系统会提示先修复设备才能继续登录或访问。
员工只能访问得到授权的业务系统,如果某人的岗位是开发工程师,那么他是无法访问财务系统的。当然,某些系统开放了申请通道。例如,开发工程师在访问有Bug的系统时,如果没有权限,那么系统会在相应页面提示用户申请权限。
BeyondCorp中有一个信任等级的概念。如果员工从一个新的位置登录,那么虽然这个行为有些风险,会降低一些信任分数,但是员工仍然可以正常登录,系统会给员工发送一个风险通知。
如果员工连续做了多个可疑操作,那么当信任分数降低到不满足当前级别的要求时,员工的权限会发生变化。当员工的信任等级为中等级时,可以访问一些低敏的业务系统,使用自助服务恢复自身的等级。如果员工的信任等级为极低等级,那么员工会被彻底隔离,无法接入网络。
图1-5
BeyondCorp主要负责用户到服务器的访问控制。对于服务器与服务器之间的访问控制,谷歌也有一个大杀器——BeyondProd架构。其中,Corp代表企业网络(Corporate Network),Prod代表生产网络(Production Network)。
作为互联网的巨头,谷歌对系统的扩展性和可用性要求极高,所以很早就实现了业务平台的微服务化、容器化。容器的宿主机可能频繁变化,因此传统的防火墙访问控制规则不再适用。就像用户访问场景一样,服务访问场景的授权也需要基于服务的身份,而不是IP地址或者主机名。
BeyondProd就是要实现微服务级别的隔离,服务之间不存在隐含的信任,一切访问都需要进行身份和权限的校验。即使一个服务被入侵了,威胁也不会扩散到同宿主机的其他服务上。图1-5是BeyondProd的架构图(为了前后文一致,与BeyondProd原图的组件名称稍有不同)。
BeyondProd的几个特性如下。
谷歌前端保护服务负责过滤网络攻击并进行负载均衡。由此可见,边界防护的理念并不是被完全抛弃了,而是变成了BeyondProd的一部分。
谷歌的每个服务正常启动后,系统都会下发一个独立的加密证书。证书代表了微服务的身份,用于该服务与其他服务的双向加密通信。谷歌网络内的通信使用的是谷歌自己优化过的协议,没有证书就无法建立通信连接。所以,网络传输这一层也实现了对身份的校验。
BeyondProd架构适用于业务系统前后端分离的场景。前端处理用户请求,然后向后端调取数据服务。后端也可以调用服务,在调用过程中实现服务器和服务器之间的访问控制。
BeyondProd的访问策略引擎会对每个请求者的身份和权限进行校验。如果通过了校验,则允许业务后端服务返回数据。如果不合法,则由服务上的隔离程序拦截。
BeyondProd要校验调用服务的请求最初是否来自合法的用户。当业务前端调用后端服务时,不仅要验证前端的身份,还要验证终端用户的身份。
例如,某人想打开Gmail查询日历信息。那么Gmail的前端服务必须先获取某人的合法身份凭证,再向后调取日历信息。后端在接收到请求后,到“访问策略引擎”校验用户行为是否得到授权。只有在用户和前端服务的身份都合法的情况下,才可以从后端获取数据。这样可以避免攻击者以业务前端为跳板,窃取数据。
在开发人员上传代码后,系统会校验代码是否符合内部安全要求,例如,有没有进行过代码审查(Code Review)、有没有扫描出恶意代码等。
访问策略引擎在授权之前,要检查前端服务的代码是否达到了可信要求,只有符合要求的才能得到授权。这样可以降低攻击者上传未知代码、控制前端服务,从而窃取数据的风险。
授权之前要校验前端服务宿主机的BIOS、BMC、Bootloader和操作系统内核的数字签名等信息,以保障前端服务宿主机的完整性。这样也可以避免攻击者通过篡改硬件和系统,控制前端服务,从而窃取数据。