什么是SGX?
SGX (Software Guard Extensions) 是 Intel 推出的一种基于 CPU 硬件的安全保障机制,能够不依赖于固件和系统软件的安全状态,提供用户空间的可信执行环境,通过一组新的指令集扩展与访问控制机制,实现不同程序间的隔离运行,保障用户关键代码和数据的机密性与完整性不受黑客的攻击和恶意软件的破坏。
SGX 的工作原理是在内存中划出一块 Enclave (飞地),这是一块受保护的区域,只能被应用本身所访问,不能被其他的任何软件 (包括操作系统、Hypervisor、UEFI/BIOS 代码) 访问。使用这种新的应用层可信执行环境,开发者能够利用这块区域来保存身份证书、记录隐私数据、实现数字版权管理 (DRM – Digital Rights Management) 等,任何需要安全存储机密数据的高保障安全应用场景都可以用到 SGX。
在 Intel 推出 SGX 之前,另一种广为使用的硬件安全技术就是可信平台模块 TPM (Trusted Platform Module),它是一块存在于服务器主板上的芯片,由它来提供可信计算的数据安全存储工作,典型的应用场景包括安全存储数据加密密钥、生物特征数据 (指纹) 等。现在 Intel 通过 SGX 技术把这部分功能集成到 CPU,通过 CPU 来实现 TPM 类似的可信计算功能,来保护选定的代码和数据不被篡改和泄露。
公有云是 SGX 技术的一个典型应用场景,用户在公有云上很有可能跟其他用户共享一台服务器,对于一些安全要求比较高的应用就可以利用 SGX 技术来保护敏感数据和代码。SGX 是保护运行中的虚机,加密是保护虚机数据,再加上加密的 vMotion,就可以为虚机在生命周期的各个阶段提供全面安全保护。
要使用 SGX 必需对应用进行改造,Intel 提供了SDK 开发包来支持针对 SGX 的应用开发。应用软件使用 SGX 的流程是这样的:
- 应用在构建的时候明确指定受信部分(使用 Enclave) 和不受信部分的代码和数据;
- 应用启动后调用SGX API 在内存中创建一块 Enclave 安全区域;
- 调用受信代码 Trusted(),CPU 指令流跳转到 Enclave 安全区域;
- 受信代码可以访问 Enclave 区域中的所有代码和数据,但是SGX会阻止任何其他软件对于安全区域的访问;
- 受信代码执行结束,数据继续保留在 Enclave 安全区域中;
- 应用恢复非普通代码的运行。
SGX 技术具有以下特点:
- 机密性和完整性:即使在OS、BIOS、VMM (Virtual Machine Manager) 或者SMM (System Management Module) 层存在特权恶意软件的情况下也能保证安全。
- 低学习曲线:和宿主应用程序类似的OS编程模型,并且在主CPU上执行。
- 远程认证和提供:远程部分能够认证一个应用程序的Enclave,并且安全地将密钥、凭据和敏感数据提供给它。
- 大大减少可能的攻击面:CPU边界成为攻击面,所有的数据、内存、外围之外的I/O都是加密的。
vSphere 7 支持虚拟 vSGX
vSphere 7 也增加了对于 SGX 技术的支持,把这项功能传递给虚机,让虚拟机也能够利用到 SGX 技术来保存敏感数据和受信代码。而且从实现机制上也保证了无论是 ESXi hypervisor 还是虚机中的 Guest OS 都无法访问受保护的 Enclave 区域,只有应用本身的受信代码才能够访问这一区域。要使用 vSGX 这一功能的话,必须把虚机的硬件版本设置为最新的版本17,在创建虚机的时候就会看到 SGX 的设置选项 (如下图所示),你可以选择是否激活 SGX 功能并设置 Enclave 内存区域的大小。
SGX 技术可以帮助用户实现硬件辅助的可信计算,但是有得就有失,因为这项技术也限制了 hypervisor 来访问虚机中受保护的 Enclave 区域,所以像 vMotion、Fault Tolerance、虚机快像 (Snapshot) 等这些功能就不能使用了,因为 vSphere 没有办法来访问虚机的所有数据来完成这些操作。这对习惯了虚拟化便利性的用户来说会有一些不便,比如没有办法通过 DRS 来把一台服务器上的可信计算虚机迁走,然后对服务器进行维护操作。用户必须在安全和便利性之间做出一个选择。
VMware 不断在系统安全性领域进行努力,利用最新的软硬件技术来提高系统原生安全性。