计算虚拟化 原生安全性

vSphere 6.5 新功能 — 安全启动

什么是安全启动?

安全启动是 UEFI (Unified Extensible Firmware Interface) 中定义的功能,它定义了如何进行固件验证以及固件与操作系统之间的接口(协议),从而保证整个系统启动过程的安全性。现在的服务器主板上都有一块 TPM (Trusted Platform Module) 安全芯片,安全启动基于公钥基础设施(PKI Public Key Infrastructure)来验证固件代码,利用 TPM 来实现固件代码的数字签名,通过数字签名来保证所执行的固件代码都是可信的。

服务器开机时将执行 UEFI 启动代码,配置处理器、内存、和硬件外围设备,以便为执行操作系统做好准备。在切换到操作系统加载程序之前,UEFI 将检查硬件外围设备(如网卡、存储控制器)中固件代码的数字签名,如果该签名与UEFI 中的签名数据库匹配,则允许执行该模块。UEFI 签名数据库中包含“允许”和“禁止”列表,用于确定哪些设备可以执行启动过程。这可以防止设备固件被注入恶意代码,任何被篡改的代码因为跟允许的数字签名不相符,都会被拒绝执行。

在网卡或 Raid 控制器固件中注入恶意代码,有人会质疑这可能吗?安全的基本指导原则就是要堵上任何可能造成安全隐患的漏洞。尽管我们还没有看到过相关案例,但是还是要确保所有的安全漏洞都被堵上了。那 UEFI 代码自己的安全性如何来保证呢?UEFI 代码也有数字签名,是在刷固件代码的时候检查的。

UEFI 也定义了跟操作系统之间的接口,在运行操作系统加载代码之前,也需要检查加载代码数字签名,只有认证的加载代码才能被执行,保证启动的是一个可信的 OS。而上一代的系统固件 BIOS 则没有这一套安全机制,它允许执行任何加载代码,这当然是一个潜在的安全隐患。

当年微软推出 Windows 8(首个支持安全启动的 Windows 操作系统),曾经要求各 PC 厂商在 UEFI 中仅放置微软的数字签名,从而只允许 PC 启动 Windows 操作系统,从而引起 Linux 厂商和用户的一致抗议。所以现在的 UEFI 中多了一个 Secure Boot 的选项,如果 UEFI 中没有相关的数字签名,用户可以选择关闭安全启动,从而可以继续安装和使用一个未经认证的操作系统。还有另一种选项,有的服务器提供工具让用户自己向 UEFI 中写入缺少的操作系统厂商数字签名。

 

vSphere 安全启动

当执行权被交给 vSphere 之后,vSphere 也会进行一系列的安全检查,保证 vSphere 系统中没有被注入恶意代码。vSphere 在加载每一个驱动程序之前,会检查该驱动的 VIB,如果发现某个 VIB 的数字签名没有通过安全检查,就会进入到 vSphere 的紫屏错误 PSOD (Purple Screen Of Death) 状态。

小知识:VIB (vSphere Installation Bundle)
VIB 是 vSphere 中的一种文件包,常用的软件更新、设备驱动程序等都采用 VIB 格式来封装。vSphere 专门提供了一组 PowerCLI cmdlets 命令 vSphere ESXi Image Builder 来制作和修改 VIB 文件。

 

虚拟机安全启动

同样的道理,虚拟机也可以支持安全启动。只要把虚拟机的固件配置成为 EFI 的话,就可以选择 Secure Boot 选项,以配合 Windows 和 Linux 等操作系统的安全启动功能。

 

vSphere 6.5 对于安全启动的支持进一步完善了 vSphere 的安全措施,让很多客户能够进一步满足安全循规方面要求,从而提升整个数据中心的安全等级。