Linux中基于eBPF的恶意利用与检测机制

本文深入探讨了eBPF在Linux中的恶意利用,包括网络层和运行时的攻击原理,展示了如何通过XDP/TC层修改TCP包实现隐蔽的后门。同时,文章详细阐述了防御策略,包括运行前、运行时和运行后的检测措施,如环境限制、seccomp限制、内核编译参数限制以及审计和筛查。最后,提出了eBPF在检测防御产品中的工程实现建议,强调了面对eBPF恶意利用的安全挑战,需要加强防御体系的建设。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

近几年,云原生领域飞速发展,K8s成为公认的云操作系统。容器的高频率部署、短暂的生命周期、复杂的网络路由,都给内核安全带来了新的挑战。系统内核面对的复杂性在不断增长,在满足性能、可扩展性等新需求的同时,还需要保障系统稳定可用,这是极其困难的事情。此时,eBPF出现,它以较小的子系统改动,保障了系统内核的稳定,还具备实时动态加载的特性,能将业务逻辑加载到内核,实现热更新的动态执行。

eBPF由BPF发展而来,BPF全称Berkeley Packet Filter,1992年由Steven McCanne和Van Jacobson提出,1997年引入Linux Kernel 2.1,3.0中增加了即时编译器,应用在网络过滤领域。2014年Alexei Starovoitov实现了eBPF并扩展到用户空间,威力更大。常用的TCPDUMP&LIBPCAP就是基于它。在Linux Kernel 4.x中,扩展了内核态函数、用户态函数、跟踪点、性能事件(perf_events)以及安全控制等事件类型。尤其是近几年云原生快速发展,也带动了eBPF的繁荣。微软、Google、Facebook等企业成立eBPF基金会,Cilium公司也发布了基于eBPF技术实现的网络产品。不过,在eBPF技术带动新业务快速发展的同时,也带来了安全威胁。

现状分析

我们可以从一些海外资料和国内资料中可以看到,eBPF在解决很多技术难题的同时,也被很多非法的组织和机构恶意利用。

海外资料

Black Hat

在Black Hat 2021的峰会中,Datadog工程师Guillaume Fournier带来主题为《With Friends Like eBPF, Who Needs Enemies?》的分享,他介绍了eBPF如何被恶意利用,包括如何构建一个rootkit、如何利用,并将检测防御代码放在了GitHub 上。

DEFCON

在DEF CON29峰会上,安全研究员Pat Hogan也分享了一些eBPF被恶意利用的案例:《Warping Reality - creating and countering the next generation of Linux rootkits using eBPF》 ,这里介绍了eBFP rootkit的应用场景,包括网络、运行时等场景,以及如何检测eBPF被恶意利用等。代码也放在了GitHub 上。

国内资料

对比国外,国内eBPF被恶意利用的资料较少,相关技术分享也较少。可能这方面的危害还没有得到国内安全同行的关注,如果我们继续这样,势必影响到国内公司在网络安全防御体系层面的建设,进而导致安全防护落后于国外,给企业安全甚至国家安全带来较大的风险。美团信息安全团队作为防御体系的建设方,有责任也有义务带领大家更好地认识这种恶意利用,分享美团在检测防御方面的经验,加固网络安全产品,希望能为国内信息安全建设贡献一份绵薄之力。

eBPF技术恶意利用的攻击原理

知己知彼,才能百战不殆,要想做好防御,必须要了解它的攻击原理。我们先来看下eBPF的rootkit是如何设计的。从eBPF的功能来看,它提供了以下领域的功能:

  • 网络

  • 监控

  • 观测

  • 跟踪&性能分析

  • 安全

网络领域,Cilium等云原生公司做了很多网络层的产品,在实现网格管理的同时,也做了相应的网络层面安全策略,尤其是在网络编排领域,表现尤为亮眼,逐步代替iptables等产品,大有一统江山的趋势。而在监控观测等领域也有很多产品。尤其是运行时安全(Runtime Security)领域,Datadog、Falco、Google等公司也都推出了相应的产品。感兴趣的同学,可以参考相关产品源码分析(Cilium eBPF实现机制源码分析Datadog的eBPF安全检测机制分析)的分享。

我们回顾一下eBPF技术的hook点:

eBPF hook位置

从图中可以看出,eBPF的hook点功能包括以下几部分:

  1. 可以在Storage、Network等与内核交互之间;

  1. 也可以在内核中的功能模块交互之间;

  1. 又可以在内核态与用户态交互之间;

  1. 更可以在用户态进程空间。

eBPF的功能覆盖XDP、TC、Probe、Socket等,每个功能点都能实现内核态的篡改行为,从而使得用户态完全致盲,哪怕是基于内核模块的HIDS,一样无法感知到这些行为。

基于eBPF的功能函数,从业务场景来看,网络、监控、观测类的功能促进了云原生领域的产品发展;跟踪/性能分析、安全类功能,加快了安全防御、审计类产品演进;而安全领域的恶意利用,也会成为黑客关注的方向。本文将与大家探讨一下新的威胁与防御思路。

从数据流所处阶段来看,本文划分为两部分,接下来一起来讨论恶意利用、风险危害与防御思路。

  1. Linux网络层恶意利用

  1. Linux系统运行时恶意利用

Linux网络层恶意利用

以一个SSH、Web服务的服务器为例,在IDC常见网络访问策略中,开放公网Web 80端口允许任意来源的IP访问。而SSH服务只允许特定IP,或者只开放内网端口访问。

假设这台服务器已经被黑客入侵,黑客需要留下一个后门,且需要一个隐藏、可靠的网络链路作为后门通道,那么在eBPF技术上,会如何实现呢?

XDP/TC层修改TCP包

为了让后门隐藏的更好,最好是不开进程,不监听端口(当前部分我们只讨论网络层隐藏)。而eBPF技术在XDP、TC、Socket等内核层的功能,能够实现流量信息修改,这些功能常被应用在L3、L4的网络负载均衡上。比如Cilium的网络策略都是基于eBPF XDP实现。eBPF hook了XDP点后,更改了TCP包的目标IP,系统内核再将该数据包转发出去。

按照XDP与TC在Linux内核中,处理ingress与egress的位置,可以更准确地确定hook点。

  • XDP的BPF_PROG_TYPE_XDP程序类型,可以丢弃、修改、重传来自ingress的流量,但无法对egress起作用。

  • TC的BPF_PROG_TYPE_SCHED_CLS除了拥有XDP“BPF_PROG_TYPE_XDP”的功能外,还可以对egress起作用。

前者最常用的场景就是做网络防火墙,用于网络流量清洗,效率比传统防火墙的高很多。后者常用于云原生场景下,容器、Pod的网络监控、安全访问控制等。在这个例子中,要对进出流量都做调整,故两个hook点都需要有。同样,在XDP等阶段的hook,在这里做相关包逻辑的处理,能更好地将通信包隐藏,tcpdump等工具都抓不到。

控制链路

在后门场景里,可以在同样的位置,像eBPF的负载均衡一样,修改目标端口,从Web Nginx的80改为SSHD的22,就可以实现网络数据的透传,绕开防火墙以及网络访问限制。

认证密钥

由于后门rootkit是在XDP\TC层工作,为了尽可能的简单,认证密钥最好只使用链路层、网络层、传输层的数据,即MAC信息、IP五元组之类。IP经常变动,MAC地址大概率是唯一的,以及设定一个固定的端口,这样更加唯一,作为rootkit的认证密钥即可实现(需要Client发起连接时,指定客户端的TCP端口)。

eBPF uprobe与eBPF map联动

对于后门rootkit的密钥更新,利用eBPF也很好实现。比如在Nginx的场景中,uprobe实现hook HTTP的函数,获取URL参数中特定字符串,再将字符串保存到eBPF map里,就实现了密钥更新。

XDP/TC层的eBPF rootkit执行时,读取eBPF map里的密钥,进行比较运算。

实现流程

这里举个XDP处理ingress的例子:

SEC("xdp/ingress")
int xdp_ingress(struct xdp_md *ctx) {
struct cursor c;
struct pkt_ctx_t pkt;

//判断是否为SSHD的协议,不是则直接放行if (!(不是SSHD协议(&c))) {
return XDP_PASS;
}

//判断rootkit是否匹配,网卡信息与来源端口是否
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值