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)之下,管理对某些硬件的访问并为之模拟硬件。理想情况下,这个客户操作系统与直接在真实硬件上运行没有区别,使其无法感知自身的虚拟化状态。由于这种特权位置和固有的检测难度,虚拟机监控程序提供了一个构建恶意服务的有趣平台。

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):

这并不是最好的大纲,但它能把要点传达清楚(我希望如此),并且是作为开发指南制作的。
## 参考资料:
- 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, 云资产清单, 内核模块, 内核虚拟化, 动态加载, 安全渗透, 安全资源, 客户端加密, 恶意软件, 暴力破解, 硬件虚拟化, 红队技术, 自动回退, 虚拟化, 虚拟机监控程序, 逆向工程