NeuVector 的 Zero-drift 与 Basic 模式
NeuVector 提供 Zero-drift 和 Basic 两种运行模式,其中 Zero-drift 模式为默认模式。本文基于 NeuVector v5.4.8 版本,通过实际测试对比两种模式在不同 Group 状态(Discover / Monitor / Protect)下的行为差异。
在两种模式下,系统默认都会为容器自身创建进程规则:

同时,默认会对常用目录启用文件访问监控:

Zero-drift 模式
Discover 模式
在 Zero-drift 模式下,当通过 kubectl exec 进入容器并执行命令时,Group 不会自动学习新的进程规则,对应行为会直接触发告警:

在默认被监控的目录(如 /etc/hosts 或其他已配置 File Access Rule 的目录)中执行文件相关操作,同样会产生告警:


对于 Action 为 Block unauthorized access 和 Monitor file changes 的 File Access Rule:
- 未经授权的访问会产生告警
- 同时触发自动学习行为
- 被访问的进程会被添加到规则的 Allowed Applications 中
学习前的规则状态如下:

学习完成后的规则状态:

注意:即使进程已经被学习并加入 Allowed Applications,后续仍然会产生告警,但在 Protect 模式 下不会被拦截。
通过
kubectl exec等方式后期手动创建的目录,似乎不会触发学习或监控告警行为,暂不确定是否为产品缺陷,需进一步与研发团队确认。
当存在多条 File Access Rule 时,一次学习行为会对所有规则同时生效:

暂不确定是否为预期行为,需进一步与研发团队确认。
Monitor 模式
将 Group 切换至 Monitor 模式:

在 Monitor 模式下执行与 Discover 阶段相同的测试:
- 不会触发任何学习行为
- 所有不被允许的行为都会产生告警
在 Zero-drift 模式 中有一个重要特性:
只要进程是通过外部 Shell(如
kubectl exec、SSH)启动的,即使已经存在自动学习得到的进程规则,默认仍然不被信任,并会持续产生告警。
只有在以下操作完成后,该行为才会被视为可信:
- 通过 Review Rule 或手动方式创建规则
- 规则状态从
Learned转变为User Created
此时,该行为才不会再产生告警。
可以看到当前存在自动学习得到的非容器自身进程规则(可先在 Basic 模式的 Discover 中学习,再切换回 Zero-drift):

执行对应命令后,仍会触发告警:

通过 Review Rule 将规则状态转为 User Created 后,告警不再出现:


Protect 模式
将 Group 切换至 Protect 模式:

切换后,由于 kubectl exec 等行为没有对应的 User Created 进程规则,相关操作会被直接拦截,并产生告警:


对于 Action 为 Block unauthorized access 的 File Access Rule:
- 若访问进程未在 Allowed Applications 中授权
- 即使该命令已在进程规则中被允许
- 仍然会被拦截并产生告警


对于 Action 为 Monitor file changes 的 File Access Rule,仅会产生告警,不会执行拦截。
对于 AUFS 的存储驱动,由于驱动本身的限制,在 Protect 模式下不支持对文件创建 / 修改的拒绝(Block)操作。其行为与 Monitor 模式相同,仅对可疑活动进行告警。
Basic 模式
Discover 模式
在 Basic 模式下,通过 kubectl exec 在容器内执行命令后,Group 会自动学习对应的进程规则:

目录监控相关行为与 Zero-drift 模式下表现一致,都会有告警和学习行为。
Monitor 模式
切换 Group 至 Monitor 模式:

在该模式下:
- 不再发生学习行为
- 不被允许的操作会产生告警
与 Zero-drift 模式的关键区别在于:
在 Basic 模式中,状态为
Learned的进程规则不会触发告警。
Protect 模式
切换至 Protect 模式:

测试结果显示,其行为与 Zero-drift 模式下的 Protect 阶段保持一致。
NeuVector 的 Zero-drift 与 Basic 模式
https://warnerchen.github.io/2026/01/25/NeuVector-的-Zero-Draft-与-Basic-模式/
install_url to use ShareThis. Please set it in _config.yml.