https://zhuanlan.zhihu.com/p/598793866
你好,我是倪朋飞。
不知不觉间,2022 年已经走到了尾声。每个年尾我都喜欢回顾一下过去这一年的旅程,看看过去这一年都发生了什么事情,有什么收获,有什么遗憾,有什么值得期待的事情等等。对 eBPF 的学习和应用也是一样,今天的内容我就带你一起总结一下 eBPF 在 2022 年的旅程。
作为 Linux 内核的一部分,我们先从内核来看看 eBPF 在 2022 年中都有哪些新的变化。
Linux 内核在 2022 年主要发布了 5.16-5.19 以及 6.0 和 6.1 这几个版本,每个版本都为 eBPF 引入了大量的新特性。具体来说,每个版本引入的主要特性包括:
关于这些版本详细的发布文档这儿不再展开,如果你有兴趣的话,可以点击这里的链接查看每个版本详细的发布文档。
伴随着这些内核版本的发布,新引入的功能特性也都集成到了 libbpf 和 bpftool 中。你可以访问它们的 Github 发布网站,查看最新的发布列表。
在 Linux 内核如火如荼发展的同时,eBPF for Windows 项目也在不断地推进。在 2022 年中,eBPF for Windows 项目发布了从 v0.2.0 到 v0.5.0 的多个版本,每个版本都为 eBPF for Windows 添加了大量的新特性,并完善了使用文档和 API 参考文档,简化了入门者的学习曲线。虽然 eBPF for Windows 还是处于早期预览的状态,但从目前的进展来看,它已经具备了在 Windows 上运行 eBPF 程序的基本能力,并且支持把基于 libbpf API 的 Linux eBPF 程序经过简单修改迁移到 Windows 平台(比如 Cilium L4LB 经过修改也可以运行在 Windows 上)。
从以上这些最新版本的发布情况来看,eBPF 在内核中依然是最活跃的模块之一,它的功能特性还在快速发展中。同样,在内核之外的开源社区和商业公司也在不断地推进 eBPF 的发展,完善 eBPF 生态的同时为 eBPF 带来了更多的应用实践。接下来,我再带你一起看看开源社区和商业公司又为 eBPF 的生态带来了哪些最新的进展。
在 2021 年的时候,大家看待 eBPF 还是一个比较新的技术,讨论的更多是 eBPF 的探索和调研,吸引的主要也是开发者。但是,随着 2022 过去一年的快速发展,eBPF 已经被广泛地应用到了生产环境中,同时也催生了大量的新生开源项目和商业案例。
以应用最为广泛的 eBPF 产品 Cilium 为例,自 2021 年 10 月加入 CNCF 作为孵化项目以来,Cilium 取得了可谓是突飞猛进的发展。
除了 Cilium,开源社区中还有非常多的项目借助 eBPF 的能力来实现各种各样的功能。比如:
除了开源项目,很多商业公司也已经把 eBPF 技术应用到了实际的业务中。比如,Linkedin 基于 eBPF 构建了其基础设施观测代理 Skyfall、宜家借助 Cilium L4LB 构建了其私有云网络负载均衡等等。
在利用 eBPF 强大能力的同时,这些开源项目和商业公司同时也积极参与构建 eBPF 生态,并通过开源贡献、社区会议等分享了他们的实践经验。所以,2022 年的社区会议也格外火热,不仅 eBPF Summit 2022、Linux Plumbers Conference (LPC) 2022、bpfconf 2022 等专注于 eBPF 的会议无一缺席,Cloud Native eBPF Day 也成了 KubeCon 的例行活动。在国内,西安邮电大学也举办了首届中国 eBPF 研讨会。这些繁荣的社区活动,不仅极大促进了 eBPF 技术的发展,也吸引了更多的人加入到 eBPF 中来,用 eBPF 解决更多的问题。
伴随着 eBPF 大量应用的同时,eBPF 带来的安全问题也逐渐暴露出来。Linux 内核中的漏洞可能会更容易地被恶意程序所利用,恶意程序也可以利用 eBPF 伪装自己的行为,从而绕过安全检测。在应用 eBPF 解决你的问题的同时,你也需要及时关注这些安全问题,以免受到新型恶意程序的攻击和影响。
比如,CVE-2022-23222 就是一个典型的 eBPF 权限提升漏洞,它会影响 Linux 5.8-5.16 之间的内核版本。由于内核在执行用户提供的 eBPF 程序前缺乏适当的验证,攻击者可利用这个漏洞提升权限并在内核上下文中执行代码,你可以在 Github 上找到这个漏洞的利用代码。
这类问题的解决方法相对比较简单,只需要你紧跟发行版的安全更新,及时更新到带有 CVE 修复的内核版本即可。但是,如果你使用的是自己编译的内核,那么你需要及时关注内核的安全更新,把相关的 CVE 修复带到你维护的内核版本中,以免被恶意程序利用。
相对来说,利用 eBPF 的能力伪装自身行为的恶意程序则更难防御。比如,被誉为 NSA 顶级后门的 Bvp47、具有极高隐匿性的恶意软件 Symbiote 和 BPFdoor 等都借助 eBPF 的强大的能力,来隐藏自己的行为,从而绕过安全检测。在开源社区中,boopkit、TripleCross、ebpfkit 等 Rootkit 程序也都借助 eBPF 对内核或应用程序的执行路径进行修改,从而达到后门注入、权限逃逸、隐藏自身以及系统破坏等各种目的。
这类恶意程序的特征都是非常难以被检测到的,其防范也比较复杂,你可以从以下几个角度进行防御:
今天,我带你一起梳理了 eBPF 在 2022 年的旅程。过去一年,不仅 Linux 内核极大地丰富了 eBPF 的功能特性,eBPF 的生态和实践也取得了突飞猛进的发展。如果你还没有在产品中使用过 eBPF,从某些方面来看(特别是网络、观测、安全的角度来看),你或许已经落后了。在带来极大便利的同时,你也要留心 eBPF 带来的一些新挑战,比如安全性、多内核版本兼容性、性能等都是在 eBPF 实践过程中需要考虑的问题。
今天这一讲就到这里了。在 2023 年,我们专栏将继续关注 eBPF 的发展,为大家带来更多的 eBPF 相关的内容。下一次的动态更新预计会在 4 月份。如果你有对我们课程未来内容的建议,欢迎在评论区提出来,期待你与我一起完善和构建一个最贴近实践的 eBPF 知识体系。
我想邀请你来聊一聊:
在今天分享的 eBPF 新进展和新项目中,有没有一些是你已经在工作中使用过的呢?如果有使用过,它们帮你解决了哪些实际的问题?或者,还有哪些其他的产品或开源项目是你经常使用的呢?