最有效拦截非法越权请求的方式是在系统调用入口处设防,因所有请求必经此不可绕过的“安检门”;内核在此处校验进程cred与capability,结合seccomp-bpf细粒度过滤、prctl限制新权限及内核钩子监控,实现全量、底层、不可绕过防护。

直接在系统调用入口处设防,是最有效拦截非法越权请求的方式。攻击者无论伪装成什么进程、绕过多少层API,最终都必须经过内核的系统调用入口——这是唯一不可绕过的“安检门”。
在系统调用入口做权限校验
Linux内核在每个系统调用执行前,会检查当前进程的凭证(cred)和能力集(capability)。这不是靠文件权限或用户组控制的,而是硬性内核级检查。
- 用
capsh --print查看当前进程实际拥有的 capability,避免用sudo掩盖权限缺失 - 给程序只加必要能力,例如绑定低端口:
sudo setcap 'cap_net_bind_service=+ep' /path/to/binary - 对高危调用(如
ptrace、mount、setuid)默认拒绝,除非明确授权 - 启用
prctl(PR_SET_NO_NEW_PRIVS, 1)防止后续execve获得新权限,配合 seccomp 使用更可靠
用 seccomp-bpf 实施细粒度过滤
seccomp 是 Linux 内核提供的轻量级系统调用过滤机制,可在用户态定义白名单或黑名单策略,拦截非法参数组合。
- 可精确拦截某次
openat对/etc/shadow的访问,比 chmod 更底层、更可靠 - WSL 的 SecComp 实现(位于
src/linux/init/SecCompDispatcher.cpp)已验证该机制在阻止ptrace、mount等调用的同时,不影响read、write正常工作 - 策略需在进程启动前加载,一旦生效,所有子线程继承相同限制
部署内核级监控钩子
在中断处理或系统调用表层面插入监控逻辑,实现全量、不可绕过的捕获。
- 修改 IDT 中系统调用对应的中断处理函数(参考
os-tutorial/18-interrupts/cpu/idt.c),在真正执行前插入审计或阻断逻辑 - 替换系统调用表中目标函数指针(需先改写内存保护属性),适用于需要深度干预的场景
- 利用硬件调试寄存器(DRx)设置执行断点,实现无侵入式监控(见
os-tutorial/19-interrupts-irqs/cpu/interrupt.asm)
结合运行时环境加固
监控本身不能替代权限设计,必须与运行时约束协同生效。
- Docker 容器中仅用
--user不够安全,需配合no-new-privileges: true运行时限制 - Windows 服务进程默认运行在 Session 0,无法访问用户桌面或
HKEY_CURRENT_USER,需显式调用WTSQueryUserToken+CreateProcessAsUser并及时清理模拟令牌 - 容器宿主机上的 HSS Agent 可检测“高危系统调用”类告警,说明生产环境已将此类行为纳入实时风控体系











