Nadharm/CoVirt

GitHub: Nadharm/CoVirt

一个基于 AMD-V 虚拟化的 Linux 内核级虚拟机 rootkit,用于演示与教学研究。

Stars: 36 | Forks: 10

# CoVirt(一个基于虚拟机的 rootkit) ## 一个用于 Linux Kernel v5.13.0 的基于虚拟机的 rootkit,使用 AMD-V(SVM) ## 目录 1. [介绍](#introduction) 2. [恶意服务演示](#malicious-service-demos) 3. [如何运行/测试](#test-it-out) 4. [总体设计图(这个非常棒,去看看)](#general-design) 5. [参考资料](#references) ## 介绍 虚拟机监控程序(虚拟机器监视器/VMM)在逻辑上位于客户操作系统(虚拟机/VM)之下,管理对某些硬件的访问并为之模拟硬件。理想情况下,这个客户操作系统与直接在真实硬件上运行没有区别,使其无法感知自身的虚拟化状态。由于这种特权位置和固有的检测难度,虚拟机监控程序提供了一个构建恶意服务的有趣平台。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e407b6f2fb113732.png) CoVirt(我们的基于虚拟机的 rootkit)可以简单地被理解为“将其余的内核提升起来”并“滑到其之下”来动态虚拟化它。它基本上会将自己断言为运行操作系统的虚拟机监控程序,并强制其余的内核在其之上运行。目前,一旦它建立自己为虚拟机监控程序,CoVirt 就能够执行一些“恶意”服务(只是基本的概念验证)。 ## “恶意”服务演示 **恶意实现的服务运行在虚拟机监控程序级别(NOT 内核级别)。** * 键盘记录器(仅设置为输出 100 字节的缓冲区,但通过网络进行数据外传是完全可能的) https://user-images.githubusercontent.com/52044930/173870279-a584f691-bc97-42dc-b649-1dd83c478b8a.mp4 * CPUID 指令拦截(仅针对功能号 0x0 进行了实现) https://user-images.githubusercontent.com/52044930/173870229-c773d6e6-6d13-47c7-bc31-063a0e91abd9.mp4 ## 测试方法 我们的测试环境只是一个 QEMU/KVM + BusyBox 的盒子。 警告:这将构建一个 5.13.0 Linux 内核。如果你只想使用当前的 Linux 内核而不是构建一个新的,你需要将 KERNEL_ROOT 变量设置为指向你的内核源码树的根。我可能会添加支持来简化这个过程,因为这很快就能完成,但我很懒,而且没人会看这个。 你需要安装 QEMU。 1. 构建 Linux 内核,并使用 BusyBox 设置 initrd 我编写了一个脚本来自动化大部分过程。它基本上会为你编译 BusyBox 和一个 5.13 内核。确保你的目录结构与我的相同,因为“test.sh”脚本依赖于这一点(如果你想以此方式运行)。 ``` ./setup_playground.sh ``` 重要配置: BusyBox: * “Build static binary” 设置为 [Y] Linux 内核(仅在调试/开发时需要,尽管 BusyBox 使用的 init 二进制文件可能依赖这些……我懒得去检查): * DYNAMIC_DEBUG 设置为 [Y]es * DYNAMIC_DEBUG_CORE 设置为 [Y]es * GDB_SCRIPTS 设置为 [Y]es 2. 现在,测试“covirt_module.ko”: ``` cd covirt sudo ./test.sh // sudo required for KVM (I believe... I promise it's nothing malicious, but check it out yourself if you really care.) ``` 这将启动 QEMU/KVM 系统 3. 运行模块: ``` insmod ./covirt_module.ko ``` 4. 修改 covirt/ 目录下的 Makefile 以更改你感兴趣的选项/恶意服务。 ``` ... DEBUG_ENABLED = 1 KEYLOGGER = 0 FAKE_CPUID = 1 ... ``` 注意:修改 QEMU 启动脚本可能会破坏某些功能 ## 总体设计 我们基于 SVM 的虚拟机监控程序/VMM 实现的基本大纲(使用 https://app.diagrams.net 制作 :D): ![Alt text](./CoVirt%20Setup%20Diagram.png?raw=true "CoVirt Setup Diagram") 这并不是最好的大纲,但它能把要点传达清楚(我希望如此),并且是作为开发指南制作的。 ## 参考资料: - https://www.amd.com/system/files/TechDocs/24593.pdf - https://www.amd.com/system/files/TechDocs/24594.pdf - https://github.com/PeterDinda/palacios - https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/subvirt.pdf - “Blue Pill” by Joanna Rutkowska - https://nixhacker.com/developing-hypervisior-from-scratch-part-1/
标签:AMD-V, CoVirt, CPUID拦截, hypervisor, keylogger, Linux内核, PoC, rootkit, SIP, SVM, 云资产清单, 内核模块, 内核虚拟化, 动态加载, 安全渗透, 安全资源, 客户端加密, 恶意软件, 暴力破解, 硬件虚拟化, 红队技术, 自动回退, 虚拟化, 虚拟机监控程序, 逆向工程