一. 概述
1.1
什么是eBPF?
eBPF(扩展的Berkeley数据包过滤器)源自BPF,是一种通用的执行引擎,为Linux内核提供了可编程的通用能力。自Linux内核3.18版本后,BPF扩展了Berkeley数据包过滤器等多项功能,这使得eBPF与之前的cBPF区分开来。如图1所示,eBPF的架构因新功能的加入而更新,eBPF在更多场景中展现出更大的潜力,同时由于其执行速度更快,cBPF在新内核中已基本被淘汰[1]。
图1 eBPF架构图
1.2
eBPF的应用场景有哪些?
eBPF能够深入覆盖从用户态到内核级的能力,这意味着其应用领域具有颠覆性。官方大致总结了如图2所示的四类应用场景[2]:
图2 eBPF应用场景
1.2.1
安全防护
通过系统调用和网络过滤,eBPF能够阻止恶意的调用动作或丢弃非预期的流量,这正是检测或防护类产品的核心操作,eBPF直接作用于原对象,无需额外备份,处理效率远超传统手段。因此,绿盟科技创新研究院在云原生API网关的网络优化技术实施中也采用了这一技术。
1.2.2
调用追踪
通过在内核或用户应用程序的几乎任何位置附加eBPF程序,可以实现从用户程序到内核级别的上下文追踪。不过,笔者认为构建一个通用的追踪模型还有很长的路要走。例如,Containiq的联合创始人兼首席技术官Matt Lenhard在一篇关于分布式追踪的文章中提到,尽管在整个Kubernetes集群中的调用追踪关联性很好,但在不改动请求头的情况下,lambda函数调用的相关性追踪却非常困难[3]。
1.2.3
网络编排
eBPF最初的设计目标是优化网络过滤器的内部BPF指令集处理,这显示了其在网络技术中的重要地位。通过在网络驱动特定位置进行Hook,优化最佳路径,并利用其先天的无需包复制即可进行数据包过滤的优势,这对网络编排具有显著的优势。在此领域,Isovalent公司开发的开源项目Cilium将eBPF技术融入Kubernetes,成为了云原生的革命性技术。
1.2.4
数据监控
官方介绍,基于eBPF的数据监控不依赖于系统应用的数据,而是直接指向内核,这意味着数据审计更加透明和实时。
二. 为何讨论Tetragon?
第一,Tetragon是一款基于eBPF技术的运行时安全实施和可观察性开源工具。多年来,它一直是Isovalent Cilium Enterprise的一部分,直到2022年5月决定开源。了解这一开源背景后,许多朋友可能会像笔者一样对其更加关注。
第二,Tetragon仅实现了可视化和动作执行,留下了更多思考的空间。这就像“削了皮的土豆”,从种植到收获和清洗削皮都有完整的指导,接下来是炒土豆丝还是土豆片,甚至是雕花,全都交给大家去探索。
三. Tetragon的部署
理论上,Tetragon可以部署在任何支持BTF的内核系统中,包括虚拟机、容器或K8s集群等方式。如图3所示,在K8s环境中,Tetragon以DaemonSet的方式部署在集群的每个节点上。通过配置文件可以看到,Tetragon目前以特权容器方式运行。笔者认为,特权运行会增加整个环境的不安全风险,是否有其他更小权限的方案(如SYS_BPF_ADMIN等)值得去实践和思考。除非特别说明,本文稍后涉及的部署位置讨论均默认在K8s集群内进行。
图3 K8s环境中Tetragon的部署方式
四. Tetragon的功能特性
相对于传统技术,Tetragon基于eBPF提供了丰富的过滤器,包括文件、套接字、二进制名称、命名空间/函数等,直接在内核中应用这些过滤器,无需繁重的上下文切换和唤醒资源。值得注意的是,开源工具本身并未内置跟踪哪些函数和应用哪些过滤器,仅在目录中提供了部分场景示例,这为后期的功能扩展和自定义跟踪提供了较大的灵活性。此外,Tetragon的两个主打功能(可视化和实时执行)也值得进一步发掘和延伸。
4.1
可视化
基于eBPF技术,Tetragon可以轻松观测内核子系统,包括文件系统访问、网络数据访问以及系统调用层的事件。如图4所示[4],Tetragon能够对集群进行感知,针对集群内的活动上下文事件将体现集群特性,如命名空间和pod。看到这一点,笔者不禁想到此技术在集群安全取证产品上会有无限的应用空间。
图4 K8s环境中Tetragon的监控数据
对于可视化来说,如图5所示,Tetragon通过网络过滤和运行时过滤的结合,可以轻松展示特定单体对象(如文件、函数等)的上下文关联。Isovalent官方博客中描述其是“智能的”,不可否认,对于单个数据链的可视化深度来说,上下文信息是相当丰富的,但离智能似乎还有一段路要走。笔者认为,如何将系统中无数的调用链进行关联,以形成“血管网络图谱”,如何对调用链路进行分类乃至自动标记异常特征,以达到异常调用链路联想的效果,这是走向“智能”的一条道路。
图5 某横向移动的可视化
Tetragon借助eBPF技术可以对网络、运行时、敏感文件以及云原生生态链组件信息进行检测,这充分展示了eBPF的强大之处,但正因为如此,应用eBPF技术到攻击面将是更加可怕的,正如美团信息安全团队所表达的担忧[5],Tetragon也是使用eBPF的相关接口,如果环境中已经有恶意程序对eBPF的结果进行伪装,那么所有的可视化上下文将无法发现问题。借用其列出的取证思路,提前结合系统层和用户态的信息进行比对将是一种最直接的解决方法。笔者还想到的是:在eBPF用户空间程序层利用第三方可信组件(注意这里不使eBPF本身变复杂)提供签名验证(如结合类似Sigstore + In-toto保证供应链组件的调用来源可信+调用内容可信),以此保证加载程序的合法性来避免此类攻击是否是一种较好的解决思路呢?
4.2
实时执行
如图6所示[6],Tetragon支持来自多层级的安全策略机制,如通过用户层、CRD和JSON API等第三方应用层或OPA等系统层注入安全策略,当然也可以在内核层预制规则。当策略被触发时,实时对下一步操作做出响应,如拦截等。这些响应动作直接在内核中对事件做出反应,而不是将事件发送到用户空间代理,这极大地缩短了上下游的响应链。
图6 Tetragon策略架构
Tetragon提供基于多层的策略抽象代理,面向用户态的操作者可以轻松定义规则配置,达到从上至下的实时管控效果。需要注意的是,这也面临同样的问题,如果环境已经被恶意利用eBPF技术攻击,那么Tetragon的实时执行结果将可能是被篡改的。
五. 总结
由于笔者对eBPF攻击和防御技术的认识有限,本文仅依托开源组件Tetragon对eBPF技术进行一些浅显的思考,如有不妥之处,观点仅代表笔者本人,同时也欢迎有兴趣的同学后台联系我们一起交流学习,更多深层次的eBPF技术剖析后期将会由此方向的研究同学进行分享。
参考文献
1. 狄卫华.深入浅出eBPF
2. eBPF.What is eBPF
3. Matt Lenhard.Automated Distributed Tracing Using eBPF (Part 1)
4. https://www.php.cn/link/eb72d013ce941d098d78e1ed837a7b92
5. 美团信息安全团队.Linux中基于eBPF的恶意利用与检测机制
6. Isovalent.Tetragon – eBPF-based Security Observability & Runtime Enforcement
内容编辑:创新研究院 张小勇
责任编辑:创新研究院 陈佛忠
本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。
以上就是Tetragon – 盯向内核的眼睛的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号