bauratynov/GhostRing

GitHub: bauratynov/GhostRing

轻量级开源基于硬件虚拟化的 Ring -1 端点安全监控方案,通过蓝丸技术实现内核完整性检测与 Rootkit 防御。

Stars: 1 | Forks: 0

GhostRing

[![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/07fd69dbf7134131.svg)](https://github.com/bauratynov/GhostRing/actions/workflows/ci.yml) [![License: Apache 2.0 + GPL v2](https://img.shields.io/badge/License-Apache%202.0%20%2B%20GPLv2-blue.svg)](LICENSE) [![Language: C99](https://img.shields.io/badge/Language-C99-blue.svg)](https://en.wikipedia.org/wiki/C99) [![Platform: x86_64](https://img.shields.io/badge/Platform-x86__64-green.svg)](https://en.wikipedia.org/wiki/X86-64) 轻量级开源虚拟机监控程序,用于端点安全。在 操作系统底层(Ring -1)运行,使用 Intel VT-x 和 AMD-V 硬件虚拟化 提供隐形内核完整性监控、Rootkit 检测和内存取证。 ## 检测覆盖范围

MITRE ATT&CK detection coverage

覆盖图将 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,无内存分配器 ## 架构

GhostRing Architectural Stack — Userspace Agent → Kernel → Hypervisor (Ring -1) → CPU Hardware

## 构建 ### 先决条件 | 要求 | 说明 | |---------------------|--------------------------------------------| | 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, 企业内核, 内存保护, 内存取证, 内核安全, 内核完整性监控, 反恶意软件, 固件安全, 子域名变形, 客户端加密, 幽灵监控, 开源, 硬件虚拟化, 端点安全, 虚拟机监控程序, 补丁管理, 防御绕过, 隐形钩子, 隐蔽技术