✨ 要点🔬 技术摘要
想象一下,将 Linux 内核比作一个庞大且高度安全的机场。eBPF 程序 就像是机场允许在安全区内飞行的小型专用无人机,用于监控交通、检查隐患或管理行李。这些无人机极其有用,但它们是基于非常严格、老派的规则手册(用 C 编程语言编写)构建的。
机场设有一位验证器 (一名安检员),在每架无人机起飞前对其进行检查。这位安检员非常擅长检查基础事项:“油箱是否加满?”“引擎是否运转?”“无人机是否会撞墙?”如果无人机通过检查,就会获得绿灯放行。
问题:“静默”泄漏 该论文指出,虽然安检员擅长检查引擎,但他们却忽略了无人机构建方式 中一些微妙而危险的缺陷。
“脏餐巾”类比 :想象一位无人机飞行员在餐巾上写报告。他们写下了重要信息,但事先没有将餐巾擦干净。餐巾上仍留有上一位 飞行员的旧咖啡渍和秘密代码。当这架无人机飞行时,它会意外地将这些旧秘密泄露给外部世界。
“错误地图”类比 :有时,飞行员试图查看地图,却看错了区域。他们以为自己在看跑道,但实际上看的是秘密贵宾休息室。他们可能会意外泄露私人信息或走错方向。
该论文发现,许多流行的现实世界无人机(eBPF 程序)都存在这种“脏餐巾”和“错误地图”的漏洞。它们通过了安检员的检查,但仍在泄露敏感数据,例如可能让黑客攻破机场主控系统的秘密地址。
解决方案:海姆达尔(自动化转换器) 研究人员构建了一个名为海姆达尔 (Heimdall)的系统(以守护桥梁的北欧神命名)。海姆达尔是一个自动化流水线,它将这些老旧、高风险的 C 语言无人机拆解,并使用Rust (一种以极难构建出错误而闻名的现代语言)从头重建它们。
将海姆达尔想象为一位超级智能且极度挑剔的建筑师 ,它执行以下操作:
翻译器(大语言模型) :它利用强大的 AI 读取旧的 C 语言蓝图,并起草新的 Rust 蓝图。
检查员(编译器与验证器) :它立即检查新蓝图是否可构建,以及是否通过机场安检员的检查。如果失败,它将蓝图退回给 AI 进行修复。
安全官(静态分析) :即使蓝图通过了安检,安全官也会检查是否存在“懒惰”习惯。例如,如果 AI 试图使用“魔法技巧”(不安全代码)来绕过安全规则,安全官会将其驳回,并强制采用更安全的设计。
双重测试(符号执行) :这是最神奇的部分。海姆达尔为旧无人机和新无人机创建一个“数字孪生”。随后,它模拟它们可能采取的每一种飞行路径 。它会向一个数学大脑(Z3)提问:“如果旧无人机遇到风暴,新无人机是否会完全一样 地行动?”
如果新无人机以违反规则的方式表现出不同行为,海姆达尔会将其退回维修。
如果新无人机表现完全一致(但没有“脏餐巾”泄漏),它将获得最终批准印章。
结果 团队在102 个现实世界的 eBPF 程序 上测试了海姆达尔。
其中96 个 (94.1%)成功重建为安全的 Rust 版本。
该系统从数学上证明,这些新版本确实执行了旧版本的所有功能,但消除了危险的泄漏。
他们发现,原始程序中有 10 个存在隐藏的“脏餐巾”泄漏,可能导致黑客窃取秘密地址,而海姆达尔修复了所有这些泄漏。
总结 海姆达尔是一个工具,它能自动将高风险、老派的机场无人机,用现代、更安全的材料重建,并运行一百万次模拟,以证明它们在获准飞行前能完美工作。它不仅仅是猜测;它从数学上证明新无人机是旧无人机的安全、完全相同的孪生体,只是没有隐藏的危险。
技术摘要:Heimdall
问题陈述
扩展伯克利数据包过滤器(eBPF)程序对于 Linux 内核在网络、可观测性和安全领域的扩展至关重要。虽然内核内置的 eBPF 验证器强制执行底层内存安全和终止性,但它无法强制执行更高层级的源码级属性,如初始化纪律、模式一致性和错误处理。作者记录了六类源码级漏洞,这些漏洞能够编译并通过内核验证器,但可能导致静默数据损坏、敏感信息泄露或产生错误的执行结果。
已识别的关键漏洞包括:
未初始化状态 :程序发出驻留在栈上的结构体而未进行零初始化,会泄露每 CPU 栈残留数据,包括足以恢复内核地址空间布局随机化(KASLR)偏移量的内核指针和返回地址。
未检查的辅助函数返回值 :失败的辅助函数(例如 bpf_probe_read_user_str)常被忽略,导致发出陈旧的栈数据而非截断的字符串。
缓冲区/大小不匹配 :开发者向输出辅助函数传递错误的大小,可能导致泄露包含内核指针的相邻私有字段。
钩子/上下文不匹配 :在 XDP 钩子中使用错误的上下文结构体(例如 __sk_buff)会导致数据被错误解读。
映射类型/模式混淆 :声明的映射值大小与实际数据不匹配,或将映射查找结果重新解释为无关类型。
有符号/无符号混淆 :将有符号辅助函数返回值(指示错误)存储到无符号字段中,会生成虚假的大正数值,这些数值被用作映射键。
此外,eBPF 验证器本身存在已知漏洞(例如,不健全的剪枝、缺失的契约验证),这些漏洞可能被利用。迁移到像 Rust 这样的内存安全语言可以填补这些漏洞,但在大规模上进行手动重写是不切实际的,而现有的自动化工具缺乏确保语义等价性或 eBPF 上下文安全性的严谨性。
方法论:Heimdall 流水线
Heimdall 是一个自动化流水线,可将遗留的 libbpf C 程序翻译为惯用的、安全的 Aya Rust 程序。它采用结合大语言模型(LLM)、静态分析和形式化验证的五阶段迭代过程:
LLM 翻译 :LLM 利用 Aya API 映射、钩子宏和可用示例,将 C 源代码翻译为 Rust。
编译与内核验证 :生成的 Rust 代码被编译为 eBPF 字节码。编译器 lint 防护(例如拒绝未使用的 unsafe 块)和内核验证器检查基本安全性和正确性。错误被反馈给 LLM 进行修复。
安全检查(静态分析) :自定义静态分析引擎扫描 Rust 源代码,查找编译器和验证器可能遗漏的不安全逃逸机制。这包括禁止无类型的环形缓冲区预留、强制执行零初始化,并要求显式处理辅助函数返回值的 Result 类型。
符号执行 :原始 C 二进制文件和编译后的 Rust 二进制文件均被加载到自定义的 angr eBPF 后端 中。该后端对 eBPF 辅助函数、映射、重定位和原子操作进行建模。它执行符号执行以探索所有可行路径,生成关于返回值和映射副作用的结构化公式。
等价性检查 :基于 Z3 的求解器检查 C 和 Rust 程序是否在语义上等价。作者引入了条件语义等价性 ,即仅要求在满足声明的安全条件(例如辅助函数调用成功)的输入上实现等价。这使得更安全的 Rust 翻译(在错误处理或内存零填充方面表现不同)在触发漏洞的路径上被视为与有缺陷的 C 源代码等价,同时仍能验证在有效路径上逻辑是否得以保留。如果找到反例,则将其反馈给 LLM 进行针对性修复。
为了支持这一过程,作者构建了完整的 angr eBPF 后端,包括 ELF 加载器、架构定义、VEX IR 提升器和辅助函数存根。他们还开发了自定义的ITE 链编码 ,以在符号键下建模映射副作用,捕捉“最后写入获胜”的语义。
主要贡献
Heimdall 流水线 :首个将生产级 eBPF 程序从 C 自动翻译为 Rust 的系统,并为每个程序提供可观察行为保留的形式化保证。
条件等价性 :一种新颖的验证方法,通过将等价性检查限制在安全执行路径上,来验证在触发漏洞的路径上行为不同的安全性提升型翻译。
eBPF 符号执行后端 :一个完整的 angr eBPF 后端,对内核辅助函数、映射和 BPF 到 BPF 调用进行建模,支持在字节码级别进行形式化推理。
Safe-Aya 静态分析器 :一个策略引擎,拒绝通过内核验证器但属于不安全 Rust 模式的代码(例如无类型的环形缓冲区、被忽略的辅助函数错误)。
安全发现 :在十个开源 eBPF 程序中发现了此前未报告的信息泄露,包括通过栈残留恢复 KASLR 以及环形缓冲区中的跨事件内容泄露。
基准测试与评估 :包含 102 个 eBPF 程序的公开基准测试,以及对翻译流水线的全面评估。
结果
该系统在来自不同来源(libbpf-tools、libbpf-bootstrap、KEN、Suricata 等)的 102 个真实世界 eBPF 程序上进行了评估。
成功率 :Heimdall 生成了 96 个经过形式化验证等价的翻译(94.1%) 。其余六个要么部分验证(由于符号执行限制),要么超出了求解器的可扩展性限制。
漏洞修复 :在 96 个经过验证的翻译中,Heimdall 修复了 100% 观察到的未初始化状态、未检查辅助函数返回值和有符号/无符号混淆实例。
与基线对比 :与没有 Heimdall 流水线的基线 LLM 代理相比,Heimdall(智能体)实现了 98% 的三次通过率 (编译、内核验证、安全检查、等价性),而基线仅为 4–12%。
运行时开销 :对 10 个程序的运行时验证显示,Rust 翻译通常产生适度的开销(几何平均值相对于 C 从 0.44 倍到 3.60 倍不等),大多数落在 1.14 倍到 1.89 倍之间。
安全性 :翻译消除了导致已识别漏洞的特定不安全模式(未初始化内存、未检查的错误)。
意义
该论文声称 Heimdall 是首个系统 ,能够自动化生产级 eBPF 程序向内存安全的迁移,并提供每个程序的形式化保证 ,确保迁移保留了可观察行为。它解决了内核验证器的底层保证与现代 eBPF 应用高层安全需求之间的差距。通过将 LLM 与形式化验证和静态分析相结合,Heimdall 证明了自动翻译可以生成不仅在语法上正确,而且在语义上等价且不存在内核验证器无法检测的特定类源码级安全漏洞的代码。这项工作为 eBPF 迁移确立了新的基准,并为构建更健壮、内存安全的内核扩展奠定了基础。
每周获取最佳 computer science 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。