SAGE: Software-based Attestation for GPU Execution
Ivanov A, Rothenberger B, Dethise A, et al. {SAGE}: Software-based attestation for {GPU} execution[C]//2023 USENIX Annual Technical Conference (USENIX ATC 23). 2023: 485-499.
Abstarct
作者聚焦于 purely software-based
的 GPU TEE
工作,纯软件的 TEE 有三大好处:
- 作为硬件 TEE 的补充,弥补其漏洞
- 不需要对 GPU 进行硬件上的修改
- 不需要额外在 GPU 上嵌入硬件密钥
作者提出了 SAGE
的设计,a software-based attestation mechanism for GPU execution
。保证在 A100 上安全执行代码,在 CPU 和 GPU 上可能存在恶意代码的前提下,保障 code integrity and secrecy
, computation integrity
, data integrity and secrecy
。
Introduction
公有云场景
下,越来越多的机密任务需要卸载到 GPU 上执行,亟需实现 GPU TEE
机制,但是 硬件 GPU TEE
存在问题,硬件修改使得技术部署到广泛利用存在 lag time,且不利于各大厂商适配更优秀的后继产品。
解决这个问题的一大途径就是 software-based GPU TEE
,作者通过调研发现,software-based CPU TEE
部分通过 verification function & checksum
机制实现。认证方发送 VF
给 untrusted platform
,要求 a correct checksum value that is returned before a threshold point in time
。
作者发现,还没有研究在 GPU 上实现 VF
机制,可能是因为会面临额外的挑战:
- 实现
VF
的原则:
- code secrecy and integrity
- data secrecy and integrity
- in the presence of a malicious OS
- malicious code on GPU
- a malicious CPU-GPU interconnect
- 实现
VF
的挑战:
- GPU 没有
RNG Generator
- GPU 开发文档的匮乏
- 没有相关工具链支持编写
native GPU microcode
- 很难对 GPU 执行进行优化
作者在本文中实现了 SAGE 系统,支持在 A100 上建立 TEE。使用主机侧运行的 Intel SGX enclave
作为验证方,启动软件原语建立 dynamic RoT
,并设立共享密钥用于建立安全会话通道。SAGE 的成功启动可以保证:用户内核未经修改地在 GPU 上执行,在执行过程中没有受到恶意地攻击。此外,作者还在 GPU 上实现了 TRNG
。
Problem Definition
Design Goals And Assumptions
设计目标:
Verifiable code execution on the GPU
: 建立无害的代码执行环境,保证代码执行的完整性和机密性Data integrity and confidentiality
: 数据的完整性和机密性Dynamic root of trust without hardware support
: 动态的在 GPU 上建立 TCB
场景假设:
- 被验证的 GPU 和验证方在一台机器上
- 验证方了解 GPU 的硬件配置
Threat Model
- TCB
- CPU, GPU 固件
- Intel SGX TCB
- Attacker’s Capabilities
- remote adversary
- has full control over the software of the untrusted host system
- Out Of Scope
- SGX 的攻击面
- system availability attacks
- 未公开的攻击面
SAGE Overview
如上图,SAGE 包含两个主要部分:Verifier
和 VF
。远程用户可以验证 Verifier
,Verifier
向 GPU 发送 VF
。
如上图,Verifier
首先发送 VF
给 GPU,验证返回结果和计算时间。验证通过会设立共享安全密钥,之后只有密钥加密的指令才能在 GPU 上执行。
Verification Function (VF)
VF
的核心设计原则是,任何意料之外的干扰,都会导致可分辨的执行时间的延长和校验和的错误。
if an attacker alters the verification function but wants to forge a correct checksum value, needs to do “more work”, causing a time overhead
VF
需要满足的特性:
Time-optimal implementation
: 时间上最优,不存在相同的实现,能在更短的时间完成相同的功能。Maximize resource usage during checksum computation
:如果存在其他恶意内核在 GPU 上执行,其占用 SM 资源会导致VF
的 SM 寄存器数据被迫转到内存中,导致校验和错误。Predictable execution time
: 执行时间可预测并且稳定,方便设置时间阈值。Challenge-dependent checksums
: 支持挑战-响应协议,防止重放攻击。
Self-Verifying Checksum Function
VF code
可以被划分为三个部分:VF Init & VF Checksum Function & Checksum epilogue
:
VF Init
:
- 根据外来
Challenge
,给每个 thread 分配初始随机数 - 在每个 thread 上启动
VF Checksum Function
VF Checksum Function (per thread)
:
- 伪随机访问
VF code
- 根据上条结果,更新
Checksum
- 根据上条结果,动态更新
VF code
- 循环
Checksum epilogue
thread => warp => block => grip => checksum responce
checksum
可以作为整个 VF code
的指纹,而 VF Checksum Function
也是 VF code
的一部分,故称为 Self-Verifying Checksum Function
。
checksum
数值的验证:主机侧同步模拟。
checksum
时间的验证:在时间阈值内,时间阈值的确定方式如下图:
Untampered Execution Environment
Security Analysis
Pre-computation
- 攻击方式:攻击者提前计算
checksum
中间值,节省计算时间 - 防御:
checksum
的值依赖于随机的挑战
Computation optimizations
- 攻击方式:攻击者自行设计效率更高的
VF'
,节省计算时间 - 防御:SAGE 保证
VF
的效率是最高的
Attacks on the host system
- 攻击方式:攻击者在线提取若干挑战值对应的
checksum
,发起重放攻击 - 防御:SAGE 的挑战空间很大,不可能发生碰撞
Attacks on the device / Resource takeover
- 攻击方式:提前占据 GPU,干扰
VF code
的执行 - 防御:SAGE 占据所有的 GPU 资源,一旦有其他内核占用资源,会导致验证失败。同时将指令设置为强有序模式,只有在特定的指令顺序、特定的初始参数、特定的指令操作下才能得到正确的结果。
Memory copy attacks
- 攻击方式:
Proxy attacks
- 攻击方式:攻击者窃听主机侧发送的挑战,使用代理 GPU 运算后返回结果
- 防御:对于同一机器的代理 GPU,SAGE 按照性能降序建立 RoT;对于网络上的代理 GPU,调整循环次数等参数确保网络延迟超出时间阈值
Time-of-check to time-of-use attacks / Execution environment takeover
- 攻击方式:攻击者在启动用户内核前和用户内核结束后,趁机占据 GPU
- 防御:SAGE 保证
VF
验证结束后立马启动用户内核,且当用户内核结束后,仍需运行内核必须重启整个认证过程
Replay attacks
-