防范竞争条件漏洞需组合策略:及时升级内核(Dirty Cow≥4.8、Dirty Pipe≥5.8)、禁用高危模块、加固内核参数;收紧文件与进程权限;限制SUID/SGID及危险环境变量;启用auditd监控与SELinux/AppArmor强制访问控制。

防范恶意程序利用竞争条件(如 Dirty Cow、Dirty Pipe)进行特权提升,核心在于切断漏洞利用链:不让低权限进程有机会干扰内核内存管理或管道缓冲区,同时限制其对关键资源的访问路径。这不单靠打补丁,而是一套组合策略。
及时升级内核并锁定关键组件
竞争条件漏洞高度依赖内核版本,防御首要动作是保持内核处于安全基线:
- 将内核升级至已修复对应漏洞的版本——Dirty Cow 需 ≥4.8,Dirty Pipe 需 ≥5.8,Use-After-Free 类漏洞(如 netfilter)建议 ≥6.6;
- 禁用非必要内核模块,例如通过 /etc/modprobe.d/blacklist.conf 屏蔽
nf_tables或ip_set等高危模块(若业务无需); - 启用内核加固参数,在 /etc/default/grub 中添加:
GRUB_CMDLINE_LINUX="slab_nomerge pti=on spectre_v2=mitigate spec_store_bypass=off",然后运行update-grub && reboot。
收紧文件与进程权限边界
即使存在内核缺陷,若攻击者无法写入目标文件或触发特定系统调用,利用链即中断:
- 将 /etc/passwd、/etc/shadow、/usr/bin/sudo 等关键文件权限设为
600或4755(仅保留必需 SUID),并用chown root:root固定属主; - 使用 fs.protected_hardlinks=1 和 fs.protected_symlinks=1(写入
/etc/sysctl.conf),阻止普通用户创建硬链接或符号链接绕过权限检查; - 对运行中服务(如 PostgreSQL、Docker)启用 seccomp 或 AppArmor profile,显式禁止
pipe、userfaultfd、memfd_create等易被滥用的系统调用。
限制提权路径与执行上下文
多数竞争条件利用需借助特定工具或环境变量落地,切断这些“跳板”能大幅提高攻击成本:
- 清理无用 SUID/SGID 程序:
find / -perm -4000 -o -perm -2000 2>/dev/null | grep -E "(nmap|vim|find|bash)",非必要一律chmod u-s; - 禁用危险的环境变量继承:在 /etc/sudoers 中添加
Defaults env_delete+="LD_PRELOAD LD_LIBRARY_PATH",防止通过预加载劫持; - 对定时任务、systemd service 及 cron job 实施最小权限原则——避免以 root 身份运行脚本,改用专用低权限服务账户,并通过
RestrictSUIDSGID=yes、NoNewPrivileges=true等 unit 选项约束。
启用运行时监控与响应机制
静态配置无法覆盖所有未知变种,需叠加行为感知能力:
- 部署 auditd 规则,监控对
/proc/*/mem、/proc/*/fd、/dev/mem的 open/write 操作,以及异常频繁的userfaultfd或memfd_create系统调用; - 使用 lynis 定期扫描配置偏差(
lynis audit system),重点检查内核参数、文件权限、sudoers 策略是否符合最小权限模型; - 在容器或虚拟化环境中,默认启用 SELinux enforcing mode 或 AppArmor,为每个服务定义明确的域(domain),使即使 exploit 成功,也无法突破策略边界读取其他进程内存或写入敏感路径。

















