MatheuZSecurity/ksentinel

GitHub: MatheuZSecurity/ksentinel

Linux 内核模块级别的 syscall 完整性监控器,用于检测各类 rootkit 对内核函数和系统调用表的篡改行为。

Stars: 80 | Forks: 7

# ksentinel - 内核 Syscalls 完整性监控器 Singularity Rootkit ## 概述 ksentinel 监控关键内核函数和 syscall 表的未授权修改。它检测大多数 rootkit 针对的常见 syscalls,包括 ftrace hooks、kprobes 和 syscall 表劫持。 ## 功能特性 - 函数序言完整性检查(基于 FNV-1a 哈希) - 系统调用表监控(512 个条目) - LSTAR MSR 验证(x86_64 syscall 入口点) - 带解锁密钥机制的反卸载保护 - 可配置间隔的持续监控 注意:ksentinel 处于初始版本;更多改进将在未来的提交中推出。 ## 监控的函数 **VFS 层:** - filldir, filldir64, do_getdents64, vfs_read, vfs_write, vfs_open **网络栈:** - tcp4_seq_show, tcp6_seq_show, udp4_seq_show, udp6_seq_show **凭证:** - commit_creds, prepare_kernel_cred **模块系统:** - load_module, free_module **追踪基础设施:** - register_kprobe, register_ftrace_function, ftrace_set_filter 以及通过前缀匹配的 500 多个额外 syscall 包装器。 ## 构建 ``` make ``` 在编译期间,会生成并显示一个随机的 32 字符解锁密钥。请立即记下它。 此密钥嵌入在编译后的模块中,不存储在外部。 如果启用了反卸载保护,请妥善保管此密钥。 ## 安装 ``` sudo make install ``` 该模块加载后会从 lsmod 中隐藏,并默认启用反卸载保护。 ## 使用方法 ### 手动加载 ``` sudo insmod ksentinel.ko ``` ### 使用管理脚本 ``` sudo ./ksentinel-manager.sh load # load module sudo ./ksentinel-manager.sh status # check status sudo ./ksentinel-manager.sh watch # monitor live sudo ./ksentinel-manager.sh violations # view alerts ``` ### 监控日志 ``` dmesg -wT | grep ksentinel ``` ### 解锁模块 当启用反卸载时,必须在移除前解锁模块: ``` echo "your_32char_key" > /proc/.ksctl ``` 或者使用管理器: ``` sudo ./ksentinel-manager.sh unlock ``` ### 移除模块 ``` sudo rmmod ksentinel ``` ## 模块参数 | 参数 | 类型 | 默认值 | 描述 | |-----------|------|---------|-------------| | period_ms | uint | 2000 | 完整性检查间隔(毫秒) | | sym_prefixes | string | "sys_,__x64_sys_,do_sys_,ksys_" | 要监控的逗号分隔符号前缀 | | extra_syms | string | "" | 要监控的额外特定符号 | | anti_unload | bool | true | 启用反卸载保护 | 使用自定义参数的示例: ``` sudo insmod ksentinel.ko period_ms=5000 anti_unload=false ``` ## 性能考量 ksentinel 根据 `period_ms` 参数执行定期完整性检查。 较低的间隔可提供更快的检测速度,但会增加 CPU 使用率。 默认间隔(2000ms)对现代系统影响极小。 ## 检测示例 ### 检测到 Inline Hook ``` ksentinel: [CHANGE - HOOK PATTERN] sys_getdents64 @ 0xffffffff81234567 baseline=1234567890abcdef current=fedcba0987654321 bytes: e9 ab cd ef 12 90 90 90 ... flags: JMP/CALL_DETECTED ENDBR64_PREFIX ``` ### Syscall 表 Hook ``` ksentinel: [SCT HOOK] syscall[78] expected=0xffffffff81111111 got=0xffffffffa0222222 (fake_getdents+0x0) ``` ### LSTAR 篡改 ``` ksentinel: [LSTAR TAMPERED] baseline=0xffffffff81800000 now=0xffffffffa0300000 (evil_syscall_entry+0x0) ``` ## 已知 Rootkit 检测 ksentinel 可以检测由以下工具进行的修改: - **PUMAKIT** - 基于 ftrace 的 hooking(18 个 syscalls) - **Diamorphine** - syscall 表修补 - **KoviD** - 基于 kprobes 的隐藏 检测取决于在 rootkit 之前加载 ksentinel。 ## 系统要求 **内核配置:** - CONFIG_KALLSYMS=y - CONFIG_KPROBES=y - CONFIG_MODULES=y **支持的内核:** - Linux 5.4 到 6.12+ - x86_64 架构(LSTAR 检查) - ARM64 支持(无 LSTAR 检查) ## 局限性 1. **仅检测** - 不阻止或移除 rootkit 2. **基线假设** - 假设模块加载时内核是干净的 3. **竞态条件** - 在 ksentinel 之前加载的 rootkit 无法被检测 4. **规避** - 复杂的 rootkit 可以针对监控代码本身 ## 安全注意事项 - 尽早在启动过程中加载 ksentinel - 安全地离线存储解锁密钥 ## 故障排除 ### 模块无法加载 检查内核配置: ``` grep -E "KALLSYMS|KPROBES" /boot/config-$(uname -r) ``` ### 模块无法卸载 该模块已隐藏并启用了反卸载保护。请先解锁: ``` sudo ./ksentinel-manager.sh unlock ``` ## 开发 ``` make clean # clean build artifacts make # compile module make install # load module make uninstall # unload module ``` ## 贡献 欢迎贡献。请保持代码风格,并为新功能添加测试。 ## 许可证 GPL-2.0-only 本程序是按 GPL version 2.0 许可的自由软件。任何修改必须保留对原作者的署名,并在相同许可下分发。 有关完整条款,请参阅 LICENSE 文件。 ## 作者 **MatheuZSecurity** Rootkit 研究人员社区:https://discord.gg/66N5ZQppU7 ## 免责声明 本工具用于安全研究和系统管理。请负责任地使用。作者不对滥用或本软件造成的损害负责。
标签:Cutter, EDR组件, FNV-1a哈希, Ftrace保护, Kprobes监测, Linux内核安全, Linux安全管理, LSTAR MSR验证, Syscall Hooking, VFS层监控, 入侵检测系统, 内核态开发, 内核模块, 反Rootkit, 安全数据湖, 安全资源, 完整性校验, 客户端加密, 特权提升防护, 网络安全栈监控, 防御规避检测