为什么说eBPF比LKM更安全



当谈到ebpf优势时,它总是提到比lkm安全。我阅读了一些文档,ebpf通过在加载之前验证代码来确保安全。这些是验证要做的检查表:

  • 循环
  • 超范围跳跃
  • 无法访问的指令
  • 无效指令
  • 未初始化的寄存器访问
  • 未初始化的堆栈访问
  • 堆栈访问不对齐
  • 超出范围的堆栈访问
  • 无效的调用约定

这些检查中的大多数我都能理解,但这都是lkm导致内核恐慌的原因吗?这些能保证安全吗?我有120000台服务器在生产中,这个问题是阻止我从传统的hids迁移到ebpf hids的唯一原因。但如果它能引起大规模的内核恐慌,只有一次,我们的业务就会结束。

是的,据我所知,BPF验证器旨在防止任何类型的内核崩溃。然而,并不意味着你不能在生产中无意地破坏东西。例如,您可以通过将BPF程序附加到所有内核函数来冻结系统,或者通过丢弃所有接收到的数据包来丢失所有连接。在这些情况下,验证者无法知道你并非有意执行这些操作;它不会阻止你。

也就是说,任何类型的验证都比传统内核模块中的不验证要好。使用内核模块,不仅可以像我上面描述的那样自食其果,而且还可能因为代码中的某个细微错误而导致整个系统崩溃。

无论您使用的是什么,在部署到生产环境之前,显然都应该对其进行广泛的测试。

相关内容

  • 没有找到相关文章

最新更新