NeuVector 的 Zero-drift 与 Basic 模式

NeuVector 提供 Zero-driftBasic 两种运行模式,其中 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 accessMonitor 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 阶段保持一致。


Author

Warner Chen

Posted on

2026-01-25

Updated on

2026-01-26

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.