我和我的兄弟花了很多时间从头开始设计我们的 eBPF 安全代理,使其速度非常快,但最近我们发现我们可以使用记忆让它变得更快!
几周前,我分析了 eBPF 代码,发现保护中最昂贵的部分实际上并不是执行策略(允许/拒绝),而是弄清楚哪个策略适用于给定的打开文件。
我们的策略是基于路径的,因此我们的 eBPF 利用在文件打开时触发的 LSM 挂钩。
然后,我们重建路径,遍历父目录,并检查文件或任何祖先目录是否具有匹配的策略。
虽然这有效,但它的性能不高,并且我们最终会对我们已经见过的文件重复大部分工作(例如,重复重新访问文件路径的数据库访问)。
因此,我们缓存适用于每个索引节点的策略。
这使我们的内核 CPU 成本降低了约 90%。
此外,我们最近开源了我们的存储库,因此这篇博文中的所有内容都可以在以下位置找到: 问题 在缓存之前,每个打开的文件都会遍历整个路径。
所以流程看起来像这样:
获取文件路径。
使用目录项沿着文件路径向上走。
在每个级别,检查该路径是否存在策略。
🔗 原始来源
如果你要核对细节,可以再看原文: Hacker News AI原文链接
AI热榜