dynamo-pentester/sentinel-x

GitHub: dynamo-pentester/sentinel-x

SENTINEL-X 是一款跨平台内核完整性监控器,通过同步拦截与周期性结构检查检测内核级 rootkit 攻击,并将检测证据锚定至以太坊区块链以实现防篡改取证。

Stars: 1 | Forks: 0

# SENTINEL-X **跨平台内核完整性监控器与基于区块链锚定的取证证据** ## 功能简介 运行于 Ring-0 的内核 rootkit 通过简单的竞态击败了传统扫描器:在一次扫描间隔内完成安装、运行并删除痕迹。SENTINEL-X 通过**双层架构**消除了这种竞态: - **同步层** — kprobe/kretprobe 处理程序在首次调用违规内核函数时触发,不依赖于任何计时器。检测延迟:针对四类攻击低于 **5 ms** (p95)。 - **周期层** — `guard_tick()` 以 2 秒为周期强制执行九项结构性内核不变量,涵盖需要随时间进行观测的攻击。 - **证据流水线** — 每一次检测均经过 ECDSA-P256 签名、AES-256-GCM 加密、Merkle 批处理,并锚定至 Ethereum Sepolia 智能合约,以实现防篡改的第三方审计。 **评估结果(每个阶段 n=100 次试验):** 在所有 9 个 Linux 攻击阶段和 2 个 Windows 阶段中,真阳性率达到 100%。假阳性率为 2.0%,仅限于已记录文档的 `do_task_dead()` 内核线程退出路径。 ## 架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ KERNEL SPACE (Ring 0) │ │ │ │ sentinelx.ko (Linux, kernel 6.18) │ │ Periodic layer: guard_tick() every 2s │ │ SCT baseline diff, CR0 read, LSTAR rdmsr, │ │ FNV-1a prologue hash, task-list walk (DKOM) │ │ Synchronous layer: kprobe / kretprobe │ │ commit_creds, nf_register_*, register_ftrace_*, │ │ do_init_module, wake_up_new_task, do_exit │ │ │ │ ksentinel.sys (Windows 10 x64, KMDF) │ │ SSDT scanner: 489 entries vs ntoskrnl bounds │ │ PE image scanner: MZ/PE walk across 1,927 MB │ └──────────────┬──────────────────────────────────────────────────┘ │ /dev/kmsg (Linux) │ IOCTL_READ_EVENT (Windows) ┌──────────────▼──────────────────────────────────────────────────┐ │ USER SPACE │ │ sentinel_daemon.py │ │ LinuxBridge / WindowsBridge → event_parser.py │ │ → evidence_manager.py │ │ ECDSA-P256 sign → AES-256-GCM encrypt │ │ → SHA-256 Merkle tree (batch=32) │ │ → Ethereum Sepolia smart contract anchor │ │ → SQLite (sentinel.db) │ └─────────────────────────────────────────────────────────────────┘ ``` ## 检测覆盖范围 ### Linux (内核 6.18) | 阶段 | 攻击 | 方法 | 层级 | 平均延迟 | |-------|--------|--------|-------|-------------| | S1 | SCT Hook | Baseline diff | Periodic | 1,651 ms | | S2 | CR0 WP Tamper | Per-CPU `read_cr0()` | Periodic | 1,699 ms | | S3 | LSTAR Tamper | `rdmsr(MSR_LSTAR)` | Periodic | 2,035 ms | | S4 | Prologue Hook | FNV-1a hash | Periodic | 1,675 ms | | S5 | Module Hide | kretprobe on `do_init_module` | Sync | 137 ms | | S6 | Priv. Escalation | kprobe on `commit_creds` | Sync | 2.5 ms | | S7 | Netfilter Hook | kprobe on `nf_register_*` | Sync | 3.0 ms | | S8 | ftrace Hook | kprobe on `register_ftrace_*` | Sync | 3.7 ms | | S9 | DKOM | kprobe + periodic poll | Hybrid | 5,096 ms | ### Windows (10 x64, 22H2) | 阶段 | 攻击 | 方法 | 平均延迟 | |-------|--------|--------|-------------| | W1 | SSDT Hook (NtYieldExecution) | SSDT entry bounds check | 9,811 ms | | W2 | DKOM via ZwQSI hook | SSDT scanner | Verified† | | W3 | Driver Hide (PsLoadedModuleList unlink) | PE image scan | 5,836 ms | † W2 在评估测试工具记录延迟之前触发了 PatchGuard bugcheck (0x109)。检测已通过重启后从 `sentinel.db` 的 WAL 恢复中得到确认。 ## 仓库结构 ``` sentinel-x/ ├── sentinelx/ # Linux LKM source (sentinelx.c, Makefile) ├── sentinelx-windows/ # Windows KMDF driver (driver.c, dkom.c, ssdt.c) ├── rootkit-test/ # Linux test rootkit (sentinel_test_rootkit.c) ├── sentinel-test-windows/ # Windows test driver (sentinel_test_win.c) ├── bridge/ # OS bridge layer │ ├── linux_bridge.py # /dev/kmsg reader │ ├── windows_bridge.py # IOCTL_READ_EVENT poller │ ├── event_parser.py # KernelEvent schema parser │ └── os_detector.py ├── src/ # Evidence pipeline │ ├── evidence_manager.py # Sign + encrypt + Merkle + anchor │ ├── crypto_utils.py # ECDSA-P256, AES-256-GCM, HKDF │ ├── db_utils.py # SQLite schema and queries │ ├── merkle_utils.py # SHA-256 Merkle tree │ └── web3_utils.py # Sepolia Web3 + contract interaction ├── evaluation/ # Eval scripts and results │ ├── run_linux_eval.sh │ ├── run_windows_eval.ps1 │ ├── analyze_results.py │ └── results/ # CSV + summary files per stage ├── sentinel_daemon.py # Unified daemon (Linux + Windows) ├── deploy_contract.py # MILBASTERLog Solidity contract deploy ├── check.py # Blockchain verification tool ├── setup.sh # Automated setup (Ubuntu/Kali) ├── MILBASTERLog_abi.json # Smart contract ABI ├── .env.example # Config template └── requirements.txt ``` ## 快速开始 ### 前置条件 - **Linux:** Kali 2025 / Ubuntu 24.04,内核 6.17–6.18,内核头文件,Python 3.10+ - **Windows:** Windows 10 x64 (22H2),WDK,启用测试签名,推荐使用 VirtualBox ### Linux 设置 ``` # 1. Clone 并安装 Python dependencies git clone https://github.com/dynamo-pentester/sentinel-x.git cd sentinel-x pip install -r requirements.txt # 2. 配置环境 cp .env.example .env # 编辑 .env — 添加你的 Infura/Alchemy RPC URL 和 Ethereum key # 3. 构建 LKM cd sentinelx make cd .. # 4. 加载 monitor sudo insmod sentinelx/sentinelx.ko # 5. 启动 daemon sudo python3 sentinel_daemon.py # 实时查看警报(单独的终端) sudo dmesg -w | grep sentinelx ``` ### Windows 设置 有关驱动构建说明,请参阅 [`sentinelx-windows/README_BUILD.txt`](sentinelx-windows/README_BUILD.txt)。 以管理员身份运行守护进程: ``` python sentinel_daemon.py ``` ### 验证区块链锚定 ``` python3 check.py ``` ## 运行评估 ### Linux(每个阶段 100 次运行,所有阶段) ``` cd evaluation/ sudo bash run_linux_eval.sh python3 analyze_results.py # generates LaTeX table + summary ``` ### Windows(阶段 1 和 3 — 自动化) ``` # 以 Administrator 身份: powershell -ExecutionPolicy Bypass -File evaluation\run_windows_eval.ps1 -Runs 100 -Stage "1,3" ``` ### Windows 阶段 W2(手动) W2 通过挂钩(Hook)`ZwQuerySystemInformation` 来隐藏目标 PID。PatchGuard 检测到 SSDT 损坏并发出 bugcheck 0x109,在评估测试工具记录延迟之前终止了虚拟机。请手动运行: ``` # 打开 notepad,记录其 PID,然后: reg add "HKLM\SYSTEM\CurrentControlSet\Services\sentinel_test\Parameters" /v TargetPid /t REG_DWORD /d /f powershell -ExecutionPolicy Bypass -File evaluation\run_windows_eval.ps1 -Runs 1 -Stage "2" # 重启后可从 sentinel.db WAL 恢复检测 ``` ## 证据流水线 每个检测到的事件均遵循论文中的算法 1: ``` event_json → ECDSA-P256 sign → AES-256-GCM encrypt → SHA-256 leaf hash → Merkle tree (batch 32) → Sepolia smart contract anchor (root hash) → SQLite persist (encrypted blob + proof) ``` 任何第三方都可以通过从存储的叶子节点哈希重新计算 Merkle 包含路径,并将根节点与链上锚定进行比对检查,从而在不访问原始数据的情况下验证记录。 ## 配置 将 `.env.example` 复制为 `.env` 并填写: | 变量 | 描述 | |----------|-------------| | `SENTINEL_NODE_ID` | 用于证据签名的节点标识符 | | `INFURA_SEPOLIA_URL` | Alchemy/Infura Sepolia RPC endpoint | | `PRIVATE_KEY` | Ethereum 钱包私钥(十六进制,无 0x) | | `ACCOUNT` | Ethereum 钱包地址 | | `CONTRACT_ADDR` | 已部署的 MILBASTERLog 合约地址 | | `ANCHOR_BATCH_SIZE` | 每个 Merkle 批次的事件数(默认:32) | | `ANCHOR_INTERVAL` | 锚定工作线程的间隔时间(秒)(默认:60) | **切勿将 `.env` 或 `keystore/*_priv.pem` 提交到版本控制系统中。** ## 局限性 - **DKOM 假阳性 (2.0%):** `do_task_dead()` 会绕过 `do_exit` kprobe。修复方案(在 `do_task_dead` 上使用 kprobe 并结合 PID 命名空间交叉引用)正在进行中。 - **负载下的扫描周期膨胀:** `guard_tick()` 遍历 595 个符号;在 VirtualBox CPU 争用的情况下,有效周期可能会达到 22–27 秒。计划将监视列表拆分为较小的计划工作项。 - **纯数据子区间攻击:** 如果攻击者在未调用任何配置了 kprobe 的函数的情况下修改了内核数据结构,并在下一次周期性 tick 之前完成攻击,则可以逃过这两层的检测。这是所有纯软件内核监控器共同面临的基本约束。 - **自我针对型攻击者:** 能够修改 SENTINEL-X 自身 kprobe 处理程序内存的 Ring-0 攻击者可以禁用检测。这超出了既定的威胁模型。 ## 安全提示 包含的测试 rootkit(`rootkit-test/`、`sentinel-test-windows/`)**仅用于评估目的**。它们只在启用了测试签名的隔离虚拟机中运行,不适用于在生产系统上部署。Linux 测试 rootkit 可以通过 `rmmod` 完全逆转(卸载)。 ## 许可证 研究原型。有关条款,请参阅 LICENSE。 ## 引用 ``` @article{rishikesh2026sentinelx, title = {{SENTINEL-X}: A Cross-Platform Kernel Integrity Monitor with Verifiable Blockchain-Anchored Forensic Evidence}, author = {Rishikesh, R}, journal = {(under review)}, year = {2026} } ```
标签:Linux内核, Windows驱动开发, 内核完整性监控, 区块链存证, 取证, 客户端加密, 逆向工具