GhostWrite
的核心在于利用C910
处理器上单个行为不当的存储指令,该指令非法使用物理地址而不是虚拟地址作为目标。此概念验证(PoC
)使用 vse128.v
指令,但其他编码也可以使用。由于编译器尚不支持该指令,因此该指令以汇编形式嵌入到代码中。在易受攻击的指令之前,需要设置矢量扩展并正确配置寄存器。
PoC
的工作原理是通过解析虚拟地址的物理地址,然后写入该物理地址来测试 GhostWrite
是否在机器上工作。之后,需要刷新缓存,以便新值在虚拟内存中可见。
准备环境:
在机器本身上运行以下命令:
gcc \-march\="rv64gvzve64x" ghostwrite.c \-o ghostwrite
Makefile
配置:
配置 Makefile
以生成静态链接的二进制文件(使用交叉编译器)。只需执行 make
即可:
make
以 root
权限运行 PoC
:
使用 root
权限运行 PoC
,以便它可以设置到物理内存的映射,以观察使用 GhostWrite
进行的写入:
sudo ./ghostwrite
预期输出:运行后,预期输出如下:
Virtual address: 3fbd3e8000
Physical address: 89f46000
Value before: caaa
Value after: cafe
输出应包含有效的虚拟地址和物理地址。此外,以物理地址为目标执行 GhostWrite
后的值应发生变化。如果值保持不变(即您看到两次“caaa
”),或者应用程序崩溃,则 CPU
不会受到影响。
我们进一步提供了基于 Nix flakes
的构建环境。请在您的系统上安装 Nix
并启用 flakes
。然后只需获取开发 shell
并构建PoC
:
进入开发 shell
:
nix develop
构建 PoC
:
make
GhostWrite
利用的是处理器在特定情况下错误使用物理地址而不是虚拟地址的漏洞。通过上述步骤,可以验证您的 CPU
是否易受该漏洞影响。确保在测试和使用过程中注意安全,并及时应用相关补丁以防止潜在的安全威胁。
后台回复:0030 获得工具地址和相关论文