这是关于 eBPF 研究项目的更新,主要内容如下:
- 项目概述:eBPF 已成为 Linux 内核的基础技术,但 eBPF 验证器面临安全漏洞和固有复杂性等挑战,项目提出将 BPF 程序重新定义为需要专用隔离的内核模式应用,以增强 eBPF 基础设施的安全性和可扩展性。
- 验证器工作流程:由三个连续阶段组成,预处理阶段扫描 BPF 程序以查找重定位项和检查不允许的操作码,CFG 检查阶段搜索控制流图并禁止越界跳转或不可达代码,最后阶段创建状态机以记录所有寄存器和堆栈槽的类型和范围,并验证所有状态符合一组安全属性。
- 全路径分析的内部:由于缺乏关于验证器的全面文档,通过自上而下和自下而上的分析来理解验证器的设计,全路径分析中的安全检查包括跟踪 BPF 对象的大小和权限、确保对内核对象的合法访问、检查参数与函数签名的匹配、防止指针泄漏等,最后进行全局安全检查。
- 全路径分析的困境:全路径分析的复杂设计和实现给验证器带来了负担,存在能力困境(如对程序的限制导致状态估计过高和复杂性问题)和正确性困境(代码大小和复杂性增加导致设计和实现错误以及额外的安全问题),且目前尚无工作证明全路径分析的完整性和健全性。
- 总结:验证方法有优势但局限性不可忽视,BPF 程序可采用类似用户模式进程的隔离机制,将验证和隔离结合成混合安全框架,BPF 程序的生命周期与 JavaScript 执行相似,这种分层方法可在不牺牲灵活性的情况下为 BPF 提供稳健的安全模型。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。