导语:Google 是如何保护其云平台机器的启动过程安全呢?
虽然一直以来都说计算机安全方面没有绝对的安全,但我们仍然希望我们所设计、构建和运营的Google Cloud Platform(GCP),能够去更好的保护客户的代码和数据。 事实上,我们分多层次的去强化了我们的架构,其中包括Google设计的硬件、Google控制的固件堆栈、Google策划的操作系统映像、Google加固的虚拟机管理程序以及数据中心的物理安全和服务等。
在这篇文章中,我们将主要展示我们是如何使用我们的定制芯片Titan来建立一个值得信任的硬件root机制的。
Titan是一款安全,低功耗的微控制器,它最开始是在在Google Cloud Next '17上推出的,并且具有Google硬件安全要求和场景设计。 让我们来看看Titan是如何工作,以确保机器使用可验证的代码来从已知的良好状态启动,并为数据中心中的加密操作确定值得信任的硬件root。
机器的boot基础
与大多数现代计算机一样,Google数据中心中的机器具有多个组件,包括一个或多个CPU、RAM、基板管理控制器(BMC)、NIC、引导固件、引导固件闪存和持久存储。我们来看看这些组件如何交互以boot机器的:
1、当BMC配置机器硬件使CPU退出复位时,机器的boot过程开始。
2、然后,CPU将从引导固件闪存中加载基本固件(Boot或UEFI),从而执行进一步的硬件/软件配置。
3、一旦机器配置充分,boot固件访问机器的持久存储器上的“boot扇区”,并将一个称为“boot加载程序”的特殊程序加载到系统内存中。
4、boot固件随后将执行控制传递给boot加载程序,boot加载程序将初始OS映像从存储器加载到系统存储器中,并将执行控制传递到操作系统。
在我们的数据中心,我们通过安全启动来保护boot过程。我们的机器启动一个已知的固件/软件堆栈,加密地验证此堆栈,然后根据该验证的状态获取(或未能获得)访问我们网络上的资源。Titan集成了这个过程,并提供了额外的保护层。
随着特权软件攻击的增加,Rootkit上的研究越来越多,我们致力于为基于我们的基础架构的机器提供基于安全boot和基于硬件的信任根源,并托管我们的Google Cloud工作负载。
使用Titan安全boot
通常,安全启动依赖于已验证的boot固件和boot加载程序的组合以及数字签名的boot文件,从而能够提供一定的安全保证。另外,事实上在安全方面还可以提供私钥存储和管理。而Titan不仅满足了这些期望,而且还超越了以上,提供了两个重要的附加安全属性:修复并且有第一指令完整性。如果发现Titan固件中的错误并修复了补丁,则可以通过修复重新建立信任,第一条指令完整性可以让我们识别每台机器启动周期上运行的最早的代码。
为了实现这些安全特性,Titan还包含了几个组件:安全应用处理器,加密协处理器,硬件随机数发生器,复杂密钥层次,嵌入式静态RAM(SRAM),嵌入式闪存和只读存储器块。 Titan通过串行外设接口(SPI)与主CPU进行通信,并插入第一个特权组件的boot固件闪存,例如BMC或平台控制器中枢(PCH),允许Titan观察每个字节的boot固件。
Titan的应用处理器在其主机通电后就会立即从其嵌入式只读存储器上执行代码。在整个过程中会放下那些不可变的代码,这一过程被称为 boot ROM,在每个芯片复位时都会被隐含地验证进行一次验证。每当芯片启动时,Titan都会运行内存自检,以确保所有内存(包括ROM)未被篡改。下一步是加载Titan的固件。即使该固件嵌入在片上闪存中,Titan 的boot ROM也不会盲目信任。相反,boot ROM使用公共密钥加密来验证Titan的固件,并将该验证代码的身份混合到Titan的密钥层次结构中。然后,boot ROM才会加载已验证的固件。
一旦Titan以安全的方式boot 了自己的固件,它会将注意力转移到主机的boot 固件闪存上,并使用公钥加密来验证其内容。 Titan可以将PCH / BMC门禁到启动固件闪存,直到它已经验证了闪存内容,此时它表示准备释放机器的其余部分重置。保持机器复位,而Titan加密验证boot 固件为我们提供了第一条指令完整性属性:我们知道从第一条指令boot 我们的机器上的启动固件和操作系统。事实上,我们甚至知道在boot 固件的第一条指令之前可能会获取哪些微代码补丁。最后,Google验证的boot 固件配置机器并加载引导加载程序,后者将验证并加载操作系统。
使用Titan加密身份
除了启用安全boot之外,我们还开发了一种基于Titan的端到端加密身份系统,可以作为数据中心不同加密操作的信任root。 Titan芯片制造过程为每个芯片生成唯一的键控材料,并将此材料与来源信息一起安全存储到注册表数据库中。该数据库的内容使用基于脱机Quorum的Titan认证中心(CA)中维护的密钥加密保护。个人Titan芯片可以生成针对Titan CA的证书签名请求(CSR),在Titan身份管理员的法定人数的指导下,可以在签发身份证书之前使用注册表数据库中的信息来验证CSR的真实性。
基于Titan的身份系统不仅验证了创建CSR的芯片的来源,而且还验证了芯片上运行的固件,因为固件的代码标识被嵌入到片上密钥层次结构中。该属性可以进行修复,并允许我们修复Titan固件中的错误,并颁发只能由修补的Titan芯片来执行的证书。基于Titan的身份系统使后端系统能够为独立的Titan boot的机器或在这些机器上运行的作业提供秘密和密钥的安全的存储。Titan还能够链接和签署关键的审核日志,使这些日志的篡改痕迹变得十分明显。为了提供防篡改的记录功能,Titan通过加密的方式将日志消息与Titan维护的安全单调计数器的连续值相关联,并使用其私钥对这些关联进行签名。日志消息与安全单调计数器值的绑定确保了审计日志无法被更改或删除,即使内部人员可以访问相关的机器,也完全不需要担心。
结论
我们的目标是通过使用一个设计成以预期方式行事的专用实体来保护boot过程。 而Titan通过boot对系统固件和软件组件的验证,提供了这种信任root,并建立了强大的,基于硬件的系统身份。 Google在内部设计了Titan的硬件逻辑,以减少硬件存在后门的机会。 Titan的生态系统确保生产基础设施使用授权和可验证的代码安全地启动。
简而言之,Titan提供了基于硬件的可信任的root,建立了机器的强大身份,我们可以做出重要的安全决策,并验证系统的“健康”与否。Titan还提供了固件和软件组件的完整性验证,该系统的强大身份确保我们对系统进行的任何更改都将具有不可否认的审核跟踪。防篡改的记录功能有助于识别内部人员使用root访问执行的操作。
最后,有关如何加强环境的更多信息,可以访问Google Cloud Platform Security了解。