ksentinel 监控关键内核函数和系统调用表是否存在未经授权的修改。它检测大多数根工具包(包括 ftrace 挂钩、kprobes 和系统调用表劫持)所针对的常见系统调用。
注意:ksentinel 处于初始版本;未来提交将带来更多改进。
VFS 层:
网络栈:
凭据:
模块系统:
跟踪基础设施:
另外通过前缀匹配监控 500 多个额外的系统调用包装器。
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
使用自定义参数的示例:
sudo insmod ksentinel.ko period_ms=5000 anti_unload=false
ksentinel 基于 period_ms 参数执行周期性完整性检查。
较低的间隔可提供更快的检测,但会增加 CPU 使用率。 默认间隔(2000ms)对现代系统的影响微乎其微。
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
ksentinel: [SCT HOOK] syscall[78] expected=0xffffffff81111111 got=0xffffffffa0222222 (fake_getdents+0x0)
ksentinel: [LSTAR TAMPERED] baseline=0xffffffff81800000 now=0xffffffffa0300000 (evil_syscall_entry+0x0)
ksentinel 可以检测由以下工具包所做的修改:
检测依赖于在根工具包之前加载 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 2.0 版本许可。任何修改必须保留对原作者的署名,并在相同许可下分发。
查看 LICENSE 文件以获取完整条款。
MatheuZSecurity
根工具包研究人员社区:https://discord.gg/66N5ZQppU7
本工具用于安全研究和系统管理。请负责任地使用。作者不对因使用本软件而导致的误用或损害承担责任。
| 参数 | 类型 | 默认值 | 描述 |
|---|
| period_ms | uint | 2000 | 完整性检查间隔(毫秒) |
| sym_prefixes | string | "sys_,x64_sys,do_sys,ksys_" | 要监控的逗号分隔符号前缀 |
| extra_syms | string | "" | 额外监控的特定符号 |
| anti_unload | bool | true | 启用反卸载保护 |