原标题:国际视野 | 全解Google基础设施架构安全设计
谷歌的技术基础设施共同构建了搜索、邮件(Gmail)、照片等普通用户系统和G Suite 、谷歌云存储平台等企业系统,是谷歌数据中心的关键,是整个谷歌网络服务赖以存在的安全基础。FreeBuf在原文基础上,针对谷歌技术基础设施的安全设计作了简要分析与介绍,这些技术基础设施为谷歌全球信息系统提供了一系列安全防护,它们包括运行安全服务、终端用户数据安全存储、服务安全通信、用户安全通信和运维安全管理等。在介绍中,我们将围绕谷歌数据中心的物理安全、整体软硬件基础安全、技术限制和操作的运维安全进行逐层描述。
底层基础设施安全设计
物理基础架构安全
谷歌数据中心包括了生物识别、金属感应探测、监控、通行障碍和激光入侵感应系统等多层物理安全保护,并做了严格的限制访问。因为谷歌的某些服务托管在第三方数据中心,为了确保绝对的安全控制,必须部署此类高度安全措施。
硬件设计部署
谷歌数据中心网络由数千台服务器组成,这些服务器的主板和网络设备都由谷歌自行定制设计,相关设备组件和供应商都必须经过严格的安全检测和背景审查。同时谷歌也自己设计了安全芯片,这些芯片被广泛应用于服务器和相关外设环境,为硬件级别的安全识别和认证提供了有效的安全手段。
安全引导和服务器识别机制
为了确保正确的服务启动,谷歌服务器使用了一系列的启动引导技术,包括在BIOS、bootloader、kernel和系统镜像等底层组件中使用加密签名,这些签名在每次启动和更新时都能进行安全验证。整个过程中涉及的组件都由谷歌构建、控制和加固。随着硬件的更新换代,谷歌也在不断努力进行安全改进,比如自行设计了可锁固件芯片、安全微控制器和安全芯片,并按照不同服务器的设计版本,在各类芯片中内置了可信的安全启动机制。在软件引导和硬件启动过程中,数据中心的每台服务器都有自己独特的标识身份,这些标识也被用于机器底层管理的API调用验证。另外,谷歌也开发了自动更新检测系统,以保证各类软硬件的及时更新、识别和诊断,必要时可以自动隔离那些出现故障的服务器。
安全服务部署此节中,将对一些基本的软硬件服务安全进行介绍,数千台服务器将对这些服务应用请求进行伺服和备份,这些服务包括Gmail的SMTP服务、分布式数据存储服务、YouTube视频转码服务、客户端APP沙箱运行服务等常规用户请求。所有运行于基础设施架构的服务请求都由一个叫Borg的集群业务管理服务进行控制。
服务标识、完整性与隔离
在内部服务的应用层通信之间,谷歌使用了加密认证授权方式,为管理和服务提供了高强度的访问控制。虽然谷歌不完全依赖内部网络划分和防火墙作为主要安全机制,但为了防止IP欺骗等进一步攻击,谷歌在网络入口和出口的各种不同点位使用了过滤策略,这种方法也最大化地提高了网络性能和可用性。
每一个运行服务都有自身相关的服务账户标识,当创建服务或接收RPC请求时,就能提供相应的加密验证凭据。这些标识同样被用于服务间通信,以及对特定客户端的数据和方法访问限制。
谷歌的源代码被存储在一个中心库内,在这里可以针对当前和以往的代码进行审计。谷歌基础设施可以针对特定服务配置相应的安全审核、验证和源代码检测程序。在代码审查方面,需要除编写者之外的至少一名工程师进行审查和批准,另外,在审查出现问题之后,需要经系统管理员批准才能更改和执行代码。这些强制要求限制了内部人员或攻击者对源代码作出恶意更改,同时也为服务代码提供了可追溯的取证流程。
除此之外,为了保护同一台服务器上运行的其它服务,谷歌还设置了一系列的沙箱和隔离技术。这些技术包括通用的用户隔离、基于语言和内核的沙箱以及硬件虚拟化等。总体来说,为了应对存在风险的请求服务,如用户请求的复杂文件格式转换,或APP端及谷歌运算引擎这类产品面临的用户执行代码等,谷歌使用了多层隔离技术。另外,为了保证网络边界的安全可按,谷歌还使用了一些特殊敏感的服务,如集群业务服务和关键管理服务等,这些服务都运行在专门的服务器之上。
服务间访问管理
所有运行服务可以使用谷歌基础设施提供的访问管理功能来指定哪些服务可以与其进行通信,例如,某个服务可以设置只提供一些特定白名单服务的API请求调用,该服务可以被配置为仅允许白名单帐户身份,之后,这种访问限制机制将会被谷歌基础设施自动执行。
就像谷歌工程师对服务的访问同样需要身份标识验证一样,这些服务可以设置为允许或拒绝访问。所有标识类型信息(机器、服务或员工)都存储于谷歌基础设施的全局域中。
在内部身份标识认证中,谷歌提供了多样的标识管理系统,包括审批流程、记录和通知等。例如,这些标识可以通过某个系统指派给访问控制组,以方便不同工程师进行服务的更改和批准。标识管理系统可以对成千上万的运行服务进行安全访问管理。除了自动的API级别访问控制机制外,谷歌还设置了访问控制列表(ACLs)和数据库的读取服务,以方便执行必要时自定义和细粒度的访问控制操作。
服务间通信加密设计
除了前述的PRC认证授权功能之外,谷歌还提供了网络内PRC数据的加密保密性和完整性功能,为了对HTTP等其它应用层协议进行安全保护,这些加密功能被谷歌封装在了内部的PRC机制中。本质上来说,这提供了应用层隔离,同时消除了任何网络路径的安全依赖因素。即使网络被窃听或设备被入侵,加密的服务通信也能保证信息安全可靠。
可以针对每一种PRC调用,为服务设置不同的加密保护级别,例如,对于数据中心内部的低价值数据交换只设置完整性保护级别;而针对复杂的网络攻击和内部网络窃听行为,将会自动开启所有RPC流量加密功能,无需额外的操作配置。同时,谷歌配置部署了硬件加密加速器,可以为数据中心内部所有PRC流量进行加密。
终端用户数据访问管理
典型的谷歌服务为终端用户带来了很多便利,例如Gmail,在用户使用类似程序的过程中,将会和谷歌基础设施进行交互,如Gmail服务中调用通讯录服务API访问终端用户地址薄。
结合前述章节,通讯录服务可以设置成Gmail服务中只允许特定RPC的请求。然而,这仍然是一个非常广泛的权限控制集。但在权限许可范围内,Gmail服务将对任何时间的任何用户作出请求回应。由于Gmail服务将会代表终端用户执行对通讯录的RPC请求,而此时,作为RPC请求的一部分,谷歌基础设施将会为Gmail服务提供一个“终端用户许可凭据”,该凭据是特定终端用户的身份证明,这也为特定终端用户通讯录服务的数据回应实现了安全保障。
为了向终端用户发布“权限许可凭据”,谷歌运行有一个中央用户身份服务系统。终端用户登录后,将会通过该身份服务进行多种方式验证,如用户密码、cookie信息、OAuth令牌等,之后,任何从客户端发起到谷歌内部的后续请求也将需要身份信息验证。
当服务接收到终端用户密码信息后,将把其传递到中央身份服务系统进行验证,如果验证正确,身份服务系统将返回一个短期有效的“权限许可凭据”,用于用户的RPC相关请求。结合前面的例子,Gmail服务如果获得了“权限许可凭据”后,将把该凭据将传递给通讯录服务进行验证。之后,作为RPC调用的一部分,该凭据将适用于任何客户端请求。
安全数据存储
静态加密
谷歌基础设施中运行有很多存储服务,如分布式数据库(BigTable)、Spanner以及集中密钥管理系统。大多数应用程序都将通过这些存储服务对物理存储设备进行直接访问。存储数据在写入物理存储设备之前,可以配置使用集中密钥管理系统分发的密钥进行加密。而集中密钥管理系统支持自动密钥轮换,并提供了全面的日志审计、特定用户身份完整性校验等功能。
Spanner是谷歌公司研发的、可扩展的、多版本、全球分布式、同步复制数据库。它是第一个把数据分布在全球范围内的系统,并且支持外部一致性的分布式事务。
在应用层执行加密允许基础设施隔离掉一些如恶意磁盘固件的底层存储潜在威胁,这也是另一种加密保护层的额外实现。谷歌的每一块机械硬盘和固态硬盘都支持硬件加密和状态跟踪。如果某个加密存储设备被更换或废弃,必须经过多步骤的磁盘清理和两次独立验证,不经过此清除过程的设备也将被执行物理破坏。
数据删除
谷歌的数据删除不是执行完全数据清除,而是针对某些特定数据的“计划性删除”,这样做的好处是,可以恢复那些客户端或运维操作无意删除的数据。如果数据被标记为“计划性删除”后,将按照特定服务策略删除。当某个终端用户执行了账户删除之后,谷歌的基础设施将通知相关数据清除服务对被删账户的数据进行清除。删除了谷歌账号和谷歌邮箱之后,谷歌系统将删除掉该账户相关的所有数据,不能再继续以该账户使用谷歌提供的各项服务。
网络通信的安全性设计
此节中,将描述谷歌安全通信和相关服务设计。如前所述,谷歌基础设施由大量物理设备组成,这些设备共同构成了不同的LAN和WAN。为了防止诸如DoS之类的攻击,谷歌基础设施使用了一段私有IP空间。
谷歌前端服务
谷歌基础设施内部的服务需要通过谷歌前端服务(GFE)注册之后,才能运行于外部互联网上。GFE确保所有TLS连接必须使用正确的证书和安全策略,同时还能起到防御DoS攻击的作用。GFE对请求的转发使用了前述的RPC安全协议。实际上,任何通过GFE注册运行于互联网的内部服务都是敏捷的反向前端代理服务,该前端不仅能提供服务的DNS公共IP,还能起到DoS防御和TLS保护作用。GFE像其它运行于谷歌基础设施的服务一样,可以应对大量的发起请求。
DoS攻击防御
从规模体量上来说,谷歌基础设施可以化解或承受大量DoS攻击,谷歌具备多层级联的DoS防护手段,以阻止和缓解任何对GFE注册服务的DoS攻击。外部骨干网向谷歌数据中心发起的连接请求,将通过多层软硬件的负载平衡传导。这些负载平衡传导器将实时向谷歌基础设施内部的中央DoS监测系统反馈传入流量的状态信息,当DoS监测系统探测到DoS攻击之后,将会第一时间让负载平衡传导器丢弃或节流可疑攻击流量。
在更下一层,GFE实例还会实时向谷歌中央DoS监测系统反馈所接收到的请求信息,这些信息包括了网络层负载平衡传导器不具备的应用层信息。如果监测到疑似攻击,中央DoS监测系统同样会让GFE实例丢弃或节流可疑攻击流量。
用户认证
在DoS防御之后,接下来就是谷歌的中央身份服务系统,该服务从终端用户的登录页面开始,除了要求所需的用户名密码之外,系统内部还会对最近登录地点和登录设备进行智能校验。在认证步骤完成之后,身份服务系统将会向用户分发一个如cookie或OAuth令牌的凭据,以进行后续请求调用。
当然,在登录时,用户还可以采用如OTP动态口令、防钓鱼安全密钥等双因素认证措施。另外,谷歌还与安全密码联盟(FIDO)共同协定了U2F用户双因素认证标准,制作了YubiKey外连密钥登录USB适配器,用户可以通过购买该适配器实现更安全的登录。
运维安全
安全软件开发
除了前述的安全控制系统之外,谷歌还提供了防止开发人员引入某些安全缺陷的开发库。例如,在Web APP方面,谷歌设置有排除XSS漏洞的开发库和框架。另外,谷歌还配置有大量自动化安全缺陷检测工具,如Fuzzer、静态代码分析工具、网页安全扫描器等。最后,谷歌还会从快速简单的缺陷识别到深度的风险发现,对开发代码进行全方位的手工安全审查。这些手工审查由包括Web安全、加密和操作系统安全等各方面专家组成的团队实施。
除此之外,谷歌还通过实施的漏洞奖励计划,来发现应用程序和基础设施存在的漏洞,到目前为止,谷歌已经为此计划支付了数百万美元的漏洞赏金。另外,谷歌还投入了大量智力和精力,致力于寻找其基础设施中在用和上游产品的0-day漏洞。例如,由谷歌工程师发现的心脏出血漏洞就是最好的典型,而且谷歌安全团队一直是CVE漏洞库的最多提交者,并且是Linux KVM hypervisor虚拟化技术漏洞的发现和修复者。
员工设备和凭据安全保护
为了保护员工设备和凭据免受入侵、窃取和其它非法内部活动,谷歌在这方面投入了大量资金和代价,这也是谷歌确保自身基础设施安全运行的关键组成部分。一直以来,针对谷歌员工的高端复杂钓鱼攻击总是持续不断,为了防止这种攻击,我们强制员工把存在钓鱼风险的OTP口令认证方式更换成了 U2F的USB适配器安全密钥。
另外,谷歌投入了大量资金开发了员工客户端安全操作监控系统,同时,还配置了针对员工客户端的安装程序、下载程序、浏览器扩展和访问内容的安全扫描系统。
进入公司内部局域网,并不意味着可以获取到谷歌的访问控制权限。谷歌使用了应用级别的访问控制管理,只允许那些来自特定管理设备、网络或地埋位置的限定用户才能访问内部控制程序。(详细参见BeyondCorp内容)
内部风险消控
谷歌严格限制具备管理权限的员工数量,并对其网络行为进行了积极监管。另外,对于一些特殊任务,尽量不需要权限许可,而使用自动化的安全可控方式完成,以消除权限许可需求的泛滥。这就要求某些活动需行为双方批准,同时将引入限制性API以排除信息泄露风险。谷歌员工对终端用户信息的获取,会被底层架构信息钩子(hook)记录,谷歌安全团队会对所有访问类型进行实时监控,并对其中的异常可疑事件开展调查。
入侵检测
谷歌拥有成熟的数据处理管道,可以很好地集成基于主机、基于网络和基于服务的入侵检测信号。内置在这些管道内的安全规则和探测机制会及时向运维安全人员发出事件警告,谷歌的事件响应团队也实行全天候待命。同时,谷歌内部运维团队也定期实施红方练习,以不断衡量和提高检测响应机制的有效性。
谷歌云存储平台(GCP)安全设计在此,我们将以谷歌运算引擎 (GCE)服务为例,简单描述谷歌云存储平台(GCP)的安全设计和改进。
Google Compute Engine,GCE是谷歌旗下的IaaS(基础设施即服务)的一个基础架构服务产品,可以让你用Google的服务器来运行Linux的虚拟机,得到更强大的数据运算能力。谷歌在I/O大会上表示,Compute Engine服务比对手的产品更具性价比,每一美元所购买的计算能力要高出对手50%。谷歌Compute Engine服务的背后是由大量的Linux虚拟机组成,此外用于该服务的处理器共计771886核。
GCE服务可以使客户在谷歌基础设施上运行谷歌Linux虚拟机,来得到强大的数据运算能力。GCE服务的实现由多个逻辑部件组成,尤其是管理控制面板和虚拟机本身。其中,管理控制面板负责与外部API的连接,同时对虚拟机创建迁移等进行任务编排,由于涉及运行多种服务,管理控制面板内置了安全启动机制。
由于GCE控制平面通过GFE显示出API接口,所以它具有和GFE实例一样的DoS防护和SSL/TLS连接保护功能,与此同时,客户在运行虚拟机时,可以选择使用内置于GFE中的谷歌云服务负载平衡器,它能缓解多种类型的DoS攻击。用户认证的GCE控制面板API通过谷歌集中身份认证服务提供安全保护,如劫持检测。授权则使用中央云IAM服务完成。
身份及访问管理(IAM):IAM允许用户按照已定的IAM角色分类规则对Google云资源的权限进行分配,让其他用户能够按权限,以所有者/编辑者/查看者的身份,访问一个项目中的所有资源。
控制面板之间的网络流量,以及从GFE到其它服务之间的流量都经过自动认证和加密,可以安全地从一个数据中心到达另一个数据中心。每个虚拟机(VM)与相关的虚拟机管理器(VMM)服务实例同时运行。谷歌基础设施为虚拟机提供了两个认证身份,一个用于VMM服务实例自身调用,另一个用于VMM对客户VM身份的代表,这也增加了来自VMM的调用信任。
GCE的永久磁盘采用静态数据加密,使用谷歌中央密钥管理系统分发的密钥进行安全保护,并允许密钥自动轮换和系统审计。另外,虚拟机隔离技术是基于硬件虚拟化的开源KVM堆栈,为了最大化的安全防护,谷歌还对KVM的核心代码进行了如Fuzzing、静态分析、手工核查等一系列安全测试,所以,如前所述,谷歌最近提交和披露了多个KVM漏洞。
最后,谷歌的运维安全控制也是确保数据访问遵循安全策略的关键部分。作为谷歌云平台的一部分,GCE客户的数据使用行为同样遵循GCP的使用策略,谷歌不会访问或使用客户数据,但必要的为客户提供服务的情况除外。