linux无原生零日漏洞自动隔离能力,需通过systemd沙箱(如privatetmp=yes、protectsystem=strict)、cgroups v2资源硬限(memory.max、pids.max)和ebpf行为过滤(execve拦截、连接限流)三者协同实现攻击面收缩与快速封控。

Linux系统本身不提供“检测到零日漏洞后自动隔离进程”的原生能力。零日漏洞是尚未公开、未打补丁的未知缺陷,内核和标准服务无法在运行时识别“这个请求正在利用一个零日漏洞”——它不像内存溢出或段错误那样有明确的内核异常信号可捕获。
所谓“自动隔离”,实际是通过提前收缩攻击面、限制行为边界、叠加实时监控与策略响应,实现对可疑服务的快速资源封控。核心思路不是“等漏洞被利用再反应”,而是“让漏洞即使存在,也无法有效逃逸或横向扩散”。
以下是三类可立即落地、无需等待补丁的配置路径:
用systemd沙箱化加固开放服务
对已知对外暴露的服务(如Nginx、OpenSSH、PostgreSQL),直接在单元文件中启用多层隔离,从启动即切断常见利用链:
-
PrivateTmp=yes:为服务分配独立/tmp和/var/tmp,阻断临时文件竞争与符号链接攻击 -
PrivateDevices=true:隐藏/dev/sda、/dev/mem等高危设备节点 -
ProtectSystem=strict:将/usr、/boot、/etc全部设为只读,防止写入恶意配置或二进制 -
ProtectHome=read-only:禁止访问用户主目录,限制凭据窃取路径 -
NoNewPrivileges=true+RestrictSUIDSGID=true:彻底禁用提权能力,使 setuid 程序失效
验证是否生效:
systemctl show sshd.service | grep -E "(Private|Protect|NoNew|Restrict)" sudo nsenter -t $(pgrep -f "sshd") -m -- ls /etc # 应返回“Permission denied”
用cgroups v2设硬性资源上限,触发局部OOM而非全局崩溃
即使服务被攻破并开始滥用资源(如fork炸弹、内存泄漏型exploit),也能将其影响锁死在组内:
# 创建隔离组(需root) sudo mkdir -p /sys/fs/cgroup/zero-day-guard echo "+memory +pids" | sudo tee /sys/fs/cgroup/zero-day-guard/cgroup.subtree_control echo 536870912 | sudo tee /sys/fs/cgroup/zero-day-guard/memory.max # 512MB echo 200 | sudo tee /sys/fs/cgroup/zero-day-guard/pids.max # 最多200个进程 # 将服务主进程加入(例如sshd主进程PID为1234) echo 1234 | sudo tee /sys/fs/cgroup/zero-day-guard/cgroup.procs
✅ 效果:当攻击者试图耗尽内存或创建大量子进程时,内核仅在该cgroup内触发OOM或拒绝fork,宿主机和其他服务完全不受影响。
用eBPF+iptables/nftables做行为级实时拦截(轻量级主动响应)
不依赖漏洞签名,而是监控异常行为模式,发现即限流或丢包,为人工响应争取时间:
-
检测短时高频连接(疑似扫描或爆破):
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 --connlimit-mask 32 -j REJECT
-
拦截已知攻击载荷特征(如shellcode常见指令序列):
iptables -A INPUT -p tcp -m string --string "execve" --algo kmp -j DROP iptables -A INPUT -p tcp -m string --string "/bin/sh" --algo kmp -j DROP
配合eBPF工具(如
bpftool+libbpf)监听sys_enter_execve,对非预期路径的execve调用直接send_signal(9)终止进程(需自行编译加载)。
不复杂但容易忽略:真正的“零日防护”不在事后隔离,而在让服务即使被攻破,也只剩下一个无法读文件、无法开新进程、无法访问网络的空壳——systemd沙箱+cgroups硬限+eBPF行为过滤,这三者组合,就是当前Linux下最接近“自动隔离”的可行方案。











