其中包含:
exploit/ 是一个“漏洞利用程序”(它只会让 QEMU 崩溃)。mock/ 包含一个精简版的 QEMU,仅保留漏洞本身。patch/ 包含一个用于对正在运行的 QEMU 实例进行修补的程序。其主要目的是无需调试符号,也无需磁盘上的原始可执行文件。因此,需要为此程序提供一些信息才能使其按预期工作。所有热补丁的核心思路是修改 command_to_handler 数组,使每个命令都指向“未实现”函数。当进程被 ptrace 部分暂停(仅主线程)时,这似乎是一种修复漏洞的安全方式(只要你不关心软盘控制器不再工作)。
这种补丁方式之所以有效,是因为 command_to_handler 是一个静态未初始化的变量,因此最终会位于可写的 BSS 段中。此外,除 PIE 外,该段在内存中的位置在编译时是已知的。不幸的是,QEMU 通常以 PIE 方式编译,因此情况并非如此。
当然,风险自负:修改正在运行的进程可能会对世界造成严重破坏!
更详细的信息请参见:http://vincent.bernat.im/en/blog/2015-hotfix-qemu-venom.html
为了更好地理解热补丁,这里有一些链接: