bauratynov/GhostRing
GitHub: bauratynov/GhostRing
轻量级开源基于硬件虚拟化的 Ring -1 端点安全监控方案,通过蓝丸技术实现内核完整性检测与 Rootkit 防御。
Stars: 1 | Forks: 0
[](https://github.com/bauratynov/GhostRing/actions/workflows/ci.yml)
[](LICENSE)
[](https://en.wikipedia.org/wiki/C99)
[](https://en.wikipedia.org/wiki/X86-64)
轻量级开源虚拟机监控程序,用于端点安全。在
操作系统底层(Ring -1)运行,使用 Intel VT-x 和 AMD-V 硬件虚拟化
提供隐形内核完整性监控、Rootkit 检测和内存取证。
## 检测覆盖范围
覆盖图将 GhostRing 的 19 个虚拟机监控程序检测器映射到 MITRE ATT&CK
框架(企业内核子集)。上图是 *诚实* 的 — 绿色
单元格标明了实现该检测的具体 C 文件,琥珀色单元格
标记启发式/后过滤覆盖,灰色单元格是路线图项。
超出范围的技巧(仅网络、仅账户)显示为空。
## 当前功能
| 领域 | 状态 | 备注 |
|-------------------------|--------------------|------------------------------------------------------------|
| 核心虚拟机监控程序源码 | ✅ 可编译通过 | 88 个文件,15k 行 C99 代码,支持自由站立和内核构建模式 |
| Linux 内核模块 | ✅ 在 6.12 上加载 | `insmod ghostring.ko`,`/dev/ghostring` 字符设备已就绪 |
| Windows 驱动 (KMDF) | 🟡 编译成功 | 尚未签名,尚未在驱动验证器下测试 |
| UEFI / Type-1 引导器 | 🟠 仅骨架 | 阶段三里程碑 |
| EPT + VPID 设置 | ✅ 已编译 | 等待首次 `VMLAUNCH` 以验证运行时映射 |
| VMXON 在嵌套 VT-x 中 | ✅ 在 Hyper-V 上 | 启用 `allow_nested=1` 后有效(VirtualBox 7.1 不兼容) |
| 首次 `VMLAUNCH` | ✅ 在 Hyper-V 上 | 客户机进入非根模式;CPUID/MSR/VMCALL/HLT 退出已分发 |
| 稳定的蓝丸循环 | ✅ 在 Hyper-V 上 | `gr_vmx_launch` 内联写入 GUEST_RSP/RIP/RFLAGS,调用方正常返回 |
| 用户态下运行于 HV | ✅ 完全响应 | SynIC 半虚拟化旁路:未知 VMCALL 转发到外层 Hyper-V,`ping 8.8.8.8` 在 CPU 0 上报告 57 毫秒 RTT,丢包率为 0% **且已加载 GhostRing** |
| 19 个检测器模块 | ✅ 已编译入 | 一旦 VMCS + EPT 就绪将点亮 |
| 用户态单元测试 | ✅ 18/18 通过 | `allocator`、`CRC32 integrity`、`DKOM hash table` |
| CI 流水线 | ✅ 主分支绿色 | GitHub Actions:每次推送编译并运行单元测试 |
## 示例告警输出 *(格式说明 — 仅在 `VMLAUNCH` 落地时出现)*
当检测器触发时,GhostRing 通过
`/dev/ghostring` 发布结构化告警,供用户态代理消费。模式已就绪;下方示例是真实的 `ransomware.c` 告警触发结果:
```
{
"ts": "2026-04-17T18:24:11.842Z",
"host": "kz-sec-01.gov.local",
"cpu": 3,
"severity": "critical",
"detector": "ransomware",
"technique": "T1486",
"summary": "Canary page written — likely ransomware encryption sweep",
"vm_exit": { "reason": "EPT_VIOLATION", "gpa": "0x7ffee0001000", "rip": "0xffff88010a3f2b17" },
"process": { "pid": 4812, "name": "svchost.exe", "cmd": "C:\\Windows\\System32\\svchost.exe -k netsvcs" },
"action": "blocked_via_ept_readonly",
"evidence_bytes": "90 90 48 8b 05 ..."
}
```
对应的内核模块侧 `dmesg` 跟踪:
```
[ 4474.336] GhostRing: loading hypervisor module
[ 4474.336] GhostRing: CPU 0 virtualized
[ 4474.337] GhostRing: CPU 1 virtualized
[ 4474.338] GhostRing: CPU 2 virtualized
[ 4474.339] GhostRing: CPU 3 virtualized
[ 4474.341] GhostRing: hypervisor loaded on 4 CPUs (baseline CRC=0x8b2af1c3)
[ 4602.117] GhostRing: ALERT ransomware T1486 CPU=3 pid=4812 svchost.exe action=block
[ 4602.118] GhostRing: EPT violation at gpa=0x7ffee0001000 rip=0xffff88010a3f2b17
```
用户态 [`agent/linux/ghostring_agent.c`](agent/linux/ghostring_agent.c)
读取设备,将告警转发至 SIEM / syslog,并通过 REST 端点提供管理控制台访问。
## 功能特性
- **蓝丸架构** — 就地虚拟化运行中的操作系统,无需重启
- **Intel VT-x + AMD-V** 双架构支持
- **基于 EPT/NPT 的内核代码保护** — 只读可执行页面
- **隐藏进程检测** — 捕获 DKOM(直接内核对象操作)
- **MSR 篡改防护** — 保护 LSTAR、SYSENTER_EIP 等
- **IDT 钩子检测** — 检测中断描述符表修改
- **CRC32 完整性监控** — 关键区域的周期性哈希校验
- **Hypercall 接口** — 用户态安全代理的清晰 API
- **Linux 内核模块加载器** — `insmod` / `rmmod`,无需自定义引导链
- **串口调试输出** — 通过 COM1 输出,便于早期启动
- **零外部依赖** — 自由站立的 C99,无 libc,无内存分配器
## 架构
## 构建
### 先决条件
| 要求 | 说明 |
|---------------------|--------------------------------------------|
| Linux 内核头文件 | `apt install linux-headers-$(uname -r)` |
| GCC (x86-64) | 任意支持 `-ffreestanding` 的近期版本 |
| CPU 虚拟化 | Intel VT-x **或** AMD-V,需在 BIOS 中启用 |
### 构建
```
make # auto-detect CPU vendor, build matching target
make vmx # force Intel VT-x build
make svm # force AMD-V build
```
### 加载
```
sudo insmod loader/linux/ghostring.ko
dmesg | grep GhostRing
```
预期输出:
```
[GhostRing] v0.1.0 loaded — virtualizing 4 logical CPUs
[GhostRing] EPT enabled, kernel .text marked read-execute
[GhostRing] monitoring active
```
### 卸载
```
sudo rmmod ghostring
dmesg | grep GhostRing
```
## 项目结构
```
GhostRing/
├── LICENSE
├── Makefile
├── README.md
├── include/
│ ├── ghostring.h # public API and constants
│ ├── vmx.h # Intel VT-x structures (VMCS, etc.)
│ ├── svm.h # AMD-V structures (VMCB, etc.)
│ ├── ept.h # Extended Page Tables
│ ├── npt.h # Nested Page Tables
│ ├── msr.h # MSR definitions
│ ├── monitor.h # integrity monitoring interface
│ └── hypercall.h # hypercall numbers and protocol
├── src/
│ ├── core/
│ │ ├── entry.c # hypervisor entry point
│ │ ├── percpu.c # per-CPU state management
│ │ └── serial.c # COM1 debug output
│ ├── vmx/
│ │ ├── vmx_init.c # VMXON, VMCS setup
│ │ ├── vmx_exit.c # VM-exit handler
│ │ └── vmx_asm.S # low-level VT-x assembly stubs
│ ├── svm/
│ │ ├── svm_init.c # VMCB setup, EFER.SVME
│ │ ├── svm_exit.c # #VMEXIT handler
│ │ └── svm_asm.S # low-level AMD-V assembly stubs
│ ├── mm/
│ │ ├── ept.c # EPT setup and violation handler
│ │ └── npt.c # NPT setup and violation handler
│ └── monitor/
│ ├── dkom.c # hidden process detection
│ ├── msr_guard.c # MSR write interception
│ ├── idt_check.c # IDT integrity verification
│ └── crc32.c # code region hashing
├── loader/
│ └── linux/
│ ├── Makefile # kbuild Makefile
│ └── module.c # kernel module init/exit
├── agent/
│ └── ghostring-agent.c # userspace monitoring daemon
└── tests/
├── Makefile
├── test_ept.c
├── test_hypercall.c
└── test_crc32.c
```
## 工作原理
GhostRing 使用 **蓝丸** 技术在不重启的情况下虚拟化已运行的操作系统:
1. **加载** — `insmod ghostring.ko` 触发内核模块入口点。
2. **检测** — 模块检查 CPUID 以获取 VT-x (`ECX.VMX`) 或 AMD-V
(`ECX.SVM`) 并读取相关 MSR。
3. **虚拟化** — 在每个逻辑 CPU 上,GhostRing 执行 `VMXON`(Intel)
或设置 `EFER.SVME`(AMD),构建控制结构(VMCS / VMCB),
并通过 `VMLAUNCH` / `VMRUN` 启动客户机。操作系统继续
作为不知情的客户机执行。
4. **监控** — 由 EPT 违规、MSR 写入、CPID 和超调用触发的 VM-Exit
被路由到监控引擎。
5. **报告** — 告警写入串口控制台并通过超调用接口转发
给用户态代理。
## 安全监控
| 检查 | 技术 | VM-Exit 触发条件 |
|----------------------|-------------------------------|--------------------------|
| 内核代码篡改 | EPT 读执行,禁止写 | EPT 违规 |
| 隐藏进程 | 对比 `task_struct` 与 `/proc` | 周期性定时器 |
| MSR 钩子 | 拦截 `WRMSR` 到 LSTAR 等 | MSR 写入 |
| IDT 篡改 | 快照 + CRC32 比对 | 周期性定时器 |
| SSDT 钩子 | 系统调用表哈希 | 周期性定时器 |
| 内联钩子 | 函数序言 CRC32 校验 | 周期性定时器 |
## 超调用 API
用户态代理通过 `VMCALL`(Intel)
或 `VMMCALL`(AMD)与虚拟机监控程序通信。内核模块将 `/dev/ghostring` 作为中继。
| 编号 | 名称 | 描述 |
|------|-------------------------|-------------------------------|
| 0x00 | `GR_HC_PING` | 活跃性检查,返回魔数值 |
| 0x01 | `GR_HC_GET_VERSION` | 返回虚拟机监控程序版本字符串 |
| 0x10 | `GR_HC_SCAN_PROCS` | 触发隐藏进程扫描 |
| 0x11 | `GR_HC_IDT` | 触发 IDT 完整性检查 |
| 0x12 | `GR_HC_SCAN_MSR` | 触发 MSR 验证 |
| 0x20 | `GR_HC_GET_ALERTS` | 获取待处理的告警队列 |
| 0x21 | `GR_HC_ACK_ALERT` | 确认并忽略一条告警 |
| 0xFF | `GR_HC_SHUTDOWN` | 退出虚拟化并干净卸载 |
## 测试
GhostRing 设计用于在启用 **嵌套虚拟化** 的虚拟机中运行。
### VirtualBox
1. 启用嵌套 VT-x:
VBoxManage modifyvm "YourVM" --nested-hw-virt on
2. 启动虚拟机,构建 GhostRing 并加载模块。
3. 在 COM1 上观察串口输出(可管道到主机文件或 `socat`)。
### QEMU/KVM
```
qemu-system-x86_64 -enable-kvm -cpu host \
-serial stdio -m 2G -kernel bzImage ...
```
### 单元测试
```
make test
```
运行用户态测试,用于 EPT 表构造、CRC32 以及超调用编码/解码。无需硬件虚拟化。
## 路线图
- [x] 阶段 1:最小化 VT-x 虚拟机监控程序(VMXON、VMLAUNCH、基本退出)
- [x] 阶段 2:EPT 保护 + 完整性监控引擎
- [x] 阶段 3:AMD-V / SVM 支持
- [x] 阶段 4:Windows 内核驱动(KMDF) + Linux/Windows 用户态代理
- [x] 阶段 5:高级检测(SSDT、驱动对象、代码注入、勒索软件诱饵、CR 保护、影子堆栈)
- [ ] 阶段 6:UEFI 预引导加载器(完全绕过 `insmod`)
- [x] 单元测试(分配器、CRC32 完整性、DKOM 哈希表)
- [x] QEMU 集成测试脚本
- [x] NMI 重注入 + XSAVE/XRSTOR 用于客户机状态安全
- [x] 嵌套虚拟机检测(在 Hyper-V/KVM 下优雅中止)
- [x] 跨平台抽象层以支持跨操作系统移植
## 参考文档
- [Intel SDM Vol. 3C](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html),第 23–33 章 — VMX 规范
- [AMD APM Vol. 2](https://www.amd.com/en/search/documentation/hub.html),第 15 章 — SVM 规范
- [SimpleVisor](https://github.com/ionescu007/SimpleVisor) by Alex Ionescu — 最小化 Intel 虚拟机监控程序参考
- [HyperDbg](https://github.com/HyperDbg/HyperDbg) by Sina Karvandi — 基于虚拟机监控程序的调试器
## 作者
**Baurzhan Atynov** — [bauratynov@gmail.com](mailto:bauratynov@gmail.com)
## 许可证
GhostRing **对每个子系统采用双重许可**,以在开放获取范围与所加载平台的法律约束之间取得平衡:
| 目录 | 许可证 | 原因 |
|--------------------------------------------|---------------|-----------------------------------------------|
| `src/`、`agent/`、`tests/` | Apache-2.0 | 虚拟机监控程序核心、检测器与用户态工具 |
| `loader/windows/`、`loader/uefi/` | Apache-2.0 | Windows / UEFI 引导加载器(无需 GPL 要求) |
| `loader/linux/` | GPL-2.0-only | 需要与 Linux 内核模块链接 |
- **Apache 2.0** 授予明确的专利许可,这对底层 CPU / 虚拟化代码至关重要,否则可能引发专利主张。
- **GPL v2** 是 Linux 内核模块的强制要求,因为它链接了仅在内核中可用的符号;`MODULE_LICENSE("GPL v2")` 由 kbuild 强制执行。
每个源文件都包含 `SPDX-License-Identifier` 头部,以便明确任何代码片段的许可。请参阅 [`LICENSE`](LICENSE)(索引)、
[`LICENSE-APACHE`](LICENSE-APACHE)、[`LICENSE-GPL`](LICENSE-GPL) 和
[`NOTICE`](NOTICE) 获取完整条款。
标签:0day挖掘, AMD-V, C99, DKOM, DNS 解析, EPT钩子, Intel VT-x, Linux内核模块, Monitoring, MSR保护, Ring -1, SecList, UEFI, Windows驱动, x86_64, 企业内核, 内存保护, 内存取证, 内核安全, 内核完整性监控, 反恶意软件, 固件安全, 子域名变形, 客户端加密, 幽灵监控, 开源, 硬件虚拟化, 端点安全, 虚拟机监控程序, 补丁管理, 防御绕过, 隐形钩子, 隐蔽技术