文 / 许庆伟:龙蜥社区 eBPF 技术摸索 SIG 组 Maintainer 高级内核技术专家,对 Linux 内核、零碎稳定性畛域有深入研究。
01 启示录
新约圣经启示录认为:恶魔其实自身是天使,但炽天使长路西法背离了地狱,翅膀变成了彩色,坠落天堂,腐化成为恶魔。这些恶魔主宰着光明权势,妨碍人类与上帝沟通,无所不用其极。所以能够说天使和恶魔原本是一体的,只是命运不同。
随着 eBPF 技术在各种行业畛域上的应用和遍及,人们在享受着技术改革红利的同时,也蒙受着无孔不入的歹意攻打,就像任何事物都有两面性一样。没有任何一项技术只有居高临下的劣势,而没有弊病,只有更加清晰的刨析分明 eBPF 的内核,能力推动它一直的提高,趋利避害,尽可能施展正向的作用。
那么,eBPF 是天使,亦或恶魔?
越来越严厉的 Linux 安全形势
依据平安剖析机构 ESG 云原生平安钻研(链接见文末),88% 的网络安全专业人士示意,在过来 12 个月中,他们的云原生应用程序和基础设施蒙受过攻打。然而,许多旨在爱护 Linux 的云平安解决方案可能很麻烦且具备破坏性,因为它们是从 Mac 或 Windows 操作系统上移植而来,这些计划有时会影响到 Linux 零碎的解决能力,甚至进行更改。
在 Linux 畛域,很多平安公司都公布了自研的 MDR、XDR、EDR 产品,大多数计划是基于轻量级代理在静默收集遥测数据,同时最大限度地缩小任何可能的性能影响,并将托管检测和响应扩大到零碎的本地和云上,通常构建有基于规定的主动响应和剖析性能,比方 SanerNow、Automox、Cybereason、Syxsense Secure、Sangfor Endpoint Secure 等等,大抵有以下特点:
- 从端点监督和收集可能暗示威逼的流动数据
- 评估收集的数据以确定威逼模式
- 主动响应已辨认的威逼以打消或遏制它们,并告诉平安人员
- 应用取证和剖析工具钻研已辨认的威逼并寻找可疑流动
目前在 Linux 环境下,对于 EDR、XDR 产品也提出更加严格的要求:
- Linux 威逼和攻打媒介与 Windows/Mac OS 对应物不同,须要独自构建策略。
- Linux 通常是生产零碎的根底,不能因为产品的中断或烦扰会对业务产生负面影响。
- 构建轻型 Linux EDR 传感器专为 Linux 构建和优化,对系统的影响降到最小。
基于 Linux 零碎的云原生基础架构设施
云原生应用程序的组合是 CI/CD 继续集成和交付的 API、容器、VM 和无服务器性能的组合。爱护这些应用程序、底层基础设施和协调其部署的自动化平台,须要从新扫视威逼模型、取得组织一致性并利用有目标的管制。此外,随着安全性和 DevOps 一直交融,云安全控制正在失去整合。将孤立的办法倒退为对立的策略,以爱护云原生应用程序和平台是目前很多平安厂商发力的指标,也是甲方实实在在的需要。与此同时,更多的平安厂商正在尝试将云平安态势治理 (CSPM)、云工作负载爱护 (CWP)、容器平安等计划,整合到集成的云平安套件中,从而增大本身平安产品在市场上的竞争力和话语权,也防止平安产品的碎片化。
云原生的基础设施蕴含 CPU 硬件、指令集,操作系统等,加强操作系统的高性能和安全性,也是目前 eBPF 技术正在深刻的畛域,所以 eBPF 本身的平安能力,也是测验该项技术是否有可继续倒退的重要指标。
02 eBPF:恶魔脸孔
eBPF(扩大的 Berkeley 数据包过滤器)席卷了 Linux 世界。它于 2013 年首次推出以反对可编程网络,当初用于可察看性、安全性、网络等。许多大公司——包含 Meta、谷歌、微软和 Netflix——都致力于帮忙开发和反对它,尤其是在云原生畛域的重要性越来越高。留神:“eBPF”和“BPF”实际上是同义词,社区常常调换应用这些术语,局部起因是 eBPF 简直齐全取代了经典的 BPF 技术。
在过来的几年里,黑产组织始终在钻研利用 eBPF 来开发并扩充 Linux 恶意软件方面的作用,平安钻研人员则不停的修复破绽,并试图提前感知预测 0-day 破绽。最近,有一些 eBPF 相干的 CVE 报告示例频繁的呈现在 DEFCON 和 BlackHat 等顶级平安会议上,也让人们更加的器重和放心 eBPF 的安全性,如下 topic,后续我会逐渐翻译验证,并同步分享进去:
- Evil eBPF In-Depth: Practical Abuses of an In-Kernel Bytecode Runtime
- Warping Reality – creating and countering the next generation of Linux rootkits using eBPF
- eBPF, I thought we were friends !
- With Friends Like eBPF, Who Needs Enemies?
- Fixing a Memory Forensics Blind Spot: Linux Kernel Tracing
当初让咱们深刻理解 eBPF 机制,看看黑客是如何利用这些弱小性能来达到攻打的目标。
- bpf_probe_write_user
利用:eBPF 程序能够拜访一组无限的辅助函数,这些函数内置于内核中。基于 eBPF 歹意利用的一个助手就是 bpf_probe_write_user。此函数容许 eBPF 程序写入以后正在运行的过程的用户空间内存。歹意利用能够应用这种能力在零碎调用期间批改过程的内存,例如 bad-bpfsudo 在读取时写入用户空间内存 /etc/sudoers。它注入了一个额定 code,容许特定用户应用该 sudo 命令。
限度:
(1)如果内存被换出或未标记为可写,该函数将失败。
(2)一条正告音讯会打印到内核日志中,阐明正在应用该函数。这是为了正告用户程序正在应用具备潜在危险的 eBPF 辅助函数。
- bpf_override_return
利用:另一个 eBPF 辅助函数 bpf_override_return 容许程序笼罩返回值。黑客能够利用它来阻止歹意利用行为。例如,如果你想运行 kill -9,黑客能够将 kprobe 附加到适当的内核函数以解决 kill 信号,返回谬误,并无效地阻止零碎调用的产生。开源我的项目 ebpfkit 应用它来阻止可能导致发现管制 eBPF 程序的用户空间过程的操作。
限度:
(1)内核构建时关上选项:CONFIG_BPF_KPROBE_OVERRIDE
(2)目前仅反对 x86
(3)只能与 kprobes 一起应用
- XDP 和 TC
利用:ebpfkit 利用 XDP 和 TC 进行隐式通信。下图来自 Blackhat 会议演讲 PPT,其中 ebpfkit 的创建者(Guillaume Fournier、Sylvain Afchain 和 Sylvain Baubeau),在演讲中,他们概述了如何应用 XDP 和 TC 暗藏发送到 ebpfkit 的命令,主机上运行的 XDP 程序接管并解决申请。该程序将其辨认为对主机上运行的歹意利用的申请,并将数据包批改为对主机上运行的 Web 应用程序的一般 HTTP 申请。在出口处,ebpfkit 应用 TC 程序捕捉来自 web app 的响应,并应用来自 ebpfkit 的响应数据批改其输入。
限度:
XDP 程序运行得太早,数据与过程或套接字无关,因而数据包四周简直没有上下文。
https://www.blackhat.com/us-2…
03 eBPF:天使脸孔
eBPF 的外围是能够在 Linux 内核中相似虚拟机构造中运行的一种指令集架构 (ISA),领有寄存器、指令和堆栈等。为了应用 eBPF,用户能够创立 eBPF 程序并将它们附加到零碎的适当地位,通常是在内核中。当与附加点相干的事件产生时,程序运行并有机会从零碎读取数,将该数据返回给用户空间中的控制应用程序。总而言之,eBPF 容许用户动静装置在内核上下文中执行,但可从用户空间编排的代码。它有点像用户空间应用程序和 Linux 内核模块之间的混合体。
对于 eBPF 的基础知识无需赘述,网络上曾经有太多丰盛的教程和剖析文章,集体倡议初学者能够先从官方网站 上开始理解 eBPF 的前生今世,也能够间接在 kernel 源码具体实例中学习和验证。eBPF 在为诸多 Linux 内核开发者提供便当的同时,也为恶意软件的开发者提供了新的利用畛域,这也就是“天使恶魔”的混合体起源。
下图总结了 eBPF 程序的整个生命周期:
平安劣势:
- Socket filters 套接字过滤器是经典 BPF 的原始用例。套接字过滤器是一个能够附加到套接字的 eBPF 程序。而后该程序能够过滤该套接字的传入流量。Berkley Packet Filter 的名称暗示它是一种旨在过滤数据包数据的技术。这个性能甚至始终保留到古代 eBPF 中。
- ByteCode eBPF 程序通常以“受限”C 程序开始。受限意味着堆栈大小、程序大小、循环、可用函数等与一般 C 程序相比受到限制。C 代码被编译成 eBPF 字节码。
- Verifier 在 eBPF 代码齐全加载到内核之前,它会通过验证器运行。验证者的工作是确定 eBPF 程序是否能够平安运行。“平安”是指它不会陷入有限循环,没有不平安的内存操作,并且低于最大复杂度 / 代码大小。
安全策略:
- 确保非特权 eBPF 被禁用。现在,要装置 eBPF 程序,您通常须要 root——或至多须要 CAP_SYS_ADMIN 和 / 或 CAP_BPF。状况并非总是如此。围绕内核 4.4 引入了非特权 eBPF。请务必通过运行以下命令查看此配置选项:
sysctl kernel.unprivileged_bpf_disabled
- 禁用不须要的性能。管理员能够通过编程形式禁用诸如 kprobes 之类的货色:
echo 0 > /sys/kernel/debug/kprobes/enabled
- 在不反对 kprobes、基于 eBPF 的 TC 过滤器或齐全反对 eBPF 的状况下构建内核(只管这可能不是许多人的抉择)。
- ONFIG_BPF_KPROBE_OVERRIDE 除非相对必要,否则不设置 Ensure。
平安检测:
从平安周期的角度来看,一场检测分为三个大阶段:事先(运行前)、事中(运行时)、预先(攻打后)。平安人员都心愿能够在运行前通过一系列的动态分析方法来检测出异样,从而将问题扼杀在摇篮里。但事实往往大失所望,更多的异样检测场景产生在运行时,这个时候就须要平安人员设计的产品模型具备很强的鉴白和鉴黑能力,这也是相对了最终计划是否胜利的基石。
从 eBPF 以及 Linux Tracing 的维度来看看具体计划:
- 寻找加载的意外 kprobes。
#cat /sys/kernel/debug/kprobes/ 列表
ffffffff8ad687e0 r ip_local_out+0x0 [FTRACE]
ffffffff8ad687e0 k ip_local_out+0x0 [FTRACE]
- 用 bpftool 列出零碎中正在应用 eBPF 的程序。
# bpftool prog
176: cgroup_skb tag 6deef7357e7b4530 gpl
loaded_at 2022-10-31T04:38:09-0700 uid 0
xlated 64B jited 54B memlock 4096B
185: kprobe tag a7ce508aab49e47f gpl
loaded_at 2022-10-31T10:03:16-0700 uid 0
xlated 112B jited 69B memlock 4096B map_ids 40
# bpftool perf
pid 543805 fd 22: prog_id 3610 kprobe func tcp_v4_connect offset 0
pid 543805 fd 23: prog_id 3610 kprobe func tcp_v6_connect offset 0
pid 543805 fd 25: prog_id 3611 kretprobe func tcp_v4_connect offset 0
pid 543805 fd 26: prog_id 3611 kretprobe func tcp_v6_connect offset 0
pid 543805 fd 28: prog_id 3612 kretprobe func inet_csk_accept offset 0
- 查找加载的 XDP 程序。
$ ip link show dev <interface>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 xdpgeneric qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
prog/xdp id 220 tag 3b185187f1855c4c jited
- 查看 bpffs(BPF 文件系统)中是否有任何 pinned objects。
$ mount | grep bpf
…
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
…
#ls -la /sys/fs/bpf/
- 查看是否加载了任何 TC 程序。
#tc filter show dev <device-name>
- 监视系统日志中是否提及 BPF 帮忙程序生成的正告音讯。
#dmesg -k | grep‘bpf_probe_write_user’
04 序幕
总之,eBPF 目前曾经成了平安钻研人员和黑客手中弱小的工具,亦正亦邪,取决于使用者的抉择。因为这种范式将过来施行歹意利用的形式和流程进行了转变,对于平安人员也晋升了要求,须要钻研和了解新兴威逼的前沿技术及利用。
随着一直地地剖析并意识到了如何辨认和检测 eBPF 的歹意滥用,咱们将来将更深刻地理解此类利用的原理、行为形式以及检测它的最佳形式,后续钻研剖析将继续分享。
eBPF 双子座:天使 or 恶魔?由你决定!
eBPF 技术摸索 SIG 主页:
https://openanolis.cn/sig/ebp…
平安剖析机构 ESG 云原生平安钻研:
https://www.esg-global.com/re…
—— 完 ——