从 Linux 安全看,eBPF 的出现是“天使”还是“恶魔”?

3da83866f4978d79f960cf74ed982362.gif

【CSDN 编者按】eBPF 目前已经成了安全研究人员和黑客手中强大的工具,亦正亦邪,取决于使用者的选择。

作者 | 许庆伟    责编 | 王子彧

出品 | OpenAnolis(龙蜥)

62863a555867330d1844e3231896f32d.png

启示录

新约圣经启示录认为:恶魔其实本身是天使,但炽天使长路西法背叛了天堂,翅膀变成了黑色,坠落地狱,堕落成为恶魔。这些恶魔主宰著黑暗势力,阻碍人类与上帝沟通,无所不用其极。所以可以说天使和恶魔本来是一体的,只是命运不同。

随着 eBPF 技术在各种行业领域上的使用和普及,人们在享受着技术变革红利的同时,也遭受着无孔不入的恶意攻击,就像任何事物都有两面性一样。没有任何一项技术只有高高在上的优势,而没有弊端,只有更加清晰的刨析清楚 eBPF 的内核,才能推动它不断的进步,趋利避害,尽可能发挥正向的作用。

那么,eBPF 是天使,亦或恶魔?

越来越严峻的 Linux 安全形势

根据安全分析机构 ESG 云原生安全研究(链接见文末),88% 的网络安全专业人士表示,在过去 12 个月中,他们的云原生应用程序和基础设施遭受过攻击 。然而,许多旨在保护 Linux 的云安全解决方案可能很麻烦且具有破坏性,因为它们是从 Mac 或 Windows 操作系统上移植而来,这些方案有时会影响到 Linux 系统的处理能力,甚至进行更改。

在 Linux 领域,很多安全公司都发布了自研的 MDR、XDR、EDR 产品,大多数方案是基于轻量级代理在静默收集遥测数据,同时最大限度地减少任何可能的性能影响,并将托管检测和响应扩展到系统的本地和云上,通常构建有基于规则的自动响应和分析功能,比如 SanerNow、Automox、Cybereason、Syxsense Secure、Sangfor Endpoint Secure 等等,大致有以下特点:

1. 从端点监视和收集可能暗示威胁的活动数据

2. 评估收集的数据以确定威胁模式

3. 自动响应已识别的威胁以消除或遏制它们,并通知安全人员

4. 使用取证和分析工具研究已识别的威胁并寻找可疑活动

目前在 Linux 环境下,对于 EDR、XDR 产品也提出更加严格的要求:

1. Linux 威胁和攻击媒介与 Windows/Mac OS 对应物不同,需要单独构建策略。

2. Linux 通常是生产系统的基础,不能因为产品的中断或干扰会对业务产生负面影响。

3. 构建轻型 Linux EDR 传感器专为 Linux 构建和优化,对系统的影响降到最小。

872405bc21c290b949d5b8efe83a232c.jpeg

基于 Linux 系统的云原生基础架构设施

云原生应用程序的组合是 CI/CD 持续集成和交付的 API、容器、VM 和无服务器功能的组合。保护这些应用程序、底层基础设施和协调其部署的自动化平台,需要重新审视威胁模型、获得组织一致性并利用有目的的控制。此外,随着安全性和 DevOps 不断融合,云安全控制正在得到整合。将孤立的方法发展为统一的策略,以保护云原生应用程序和平台是目前很多安全厂商发力的目标,也是甲方实实在在的需求。与此同时,更多的安全厂商正在尝试将云安全态势管理 (CSPM)、云工作负载保护 (CWP)、容器安全等方案,整合到集成的云安全套件中,从而增大自身安全产品在市场上的竞争力和话语权,也避免安全产品的碎片化。

a6611245cba6cf5ece98cb9ee8977267.png

云原生的基础设施包含 CPU 硬件、指令集,操作系统等,增强操作系统的高性能和安全性,也是目前 eBPF 技术正在深入的领域,所以 eBPF 自身的安全能力,也是检验该项技术是否有可持续发展的重要指标。

1b9337648ab58258060c57e5e4d7efa3.jpeg

18845b40a40c9f4d99271836a728ea64.png

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 的响应数据修改其输出。

限制:

(1)XDP 程序运行得太早,数据与进程或套接字无关,因此数据包周围几乎没有上下文。

ec00aa632737f8f5350d489449673308.png

https://www.blackhat.com/us-21/briefings/schedule/index.html#with-friends-like-ebpf-who-needs-enemies-23619

772bc884018dc3ff5a70e9ffe7f50b0d.png

eBPF:天使面孔

eBPF 的核心是可以在 Linux 内核中类似虚拟机结构中运行的一种指令集架构 (ISA),拥有寄存器、指令和堆栈等。为了使用 eBPF,用户可以创建 eBPF 程序并将它们附加到系统的适当位置,通常是在内核中。当与附加点相关的事件发生时,程序运行并有机会从系统读取数,将该数据返回给用户空间中的控制应用程序。总而言之,eBPF 允许用户动态安装在内核上下文中执行,但可从用户空间编排的代码。它有点像用户空间应用程序和 Linux 内核模块之间的混合体。

11f0d01db3f50b70fb2973bf485a3924.jpeg

关于 eBPF 的基础知识无需赘述,网络上已经有太多丰富的教程和分析文章,个人建议初学者可以先从官方网站 上开始了解 eBPF 的前生今世,也可以直接在 kernel 源码具体实例中学习和验证。eBPF 在为诸多 Linux 内核开发者提供便利的同时,也为恶意软件的开发者提供了新的利用领域,这也就是“天使恶魔”的混合体来源。

下图总结了 eBPF 程序的整个生命周期:

f928ca735e981c8b63ac516464e6af55.png

安全优势:

1. Socket filters 套接字过滤器是经典 BPF 的原始用例。套接字过滤器是一个可以附加到套接字的 eBPF 程序。然后该程序可以过滤该套接字的传入流量。Berkley Packet Filter 的名称暗示它是一种旨在过滤数据包数据的技术。这个功能甚至一直保留到现代 eBPF 中。

2. ByteCode eBPF 程序通常以“受限”C 程序开始。受限意味着堆栈大小、程序大小、循环、可用函数等与普通 C 程序相比受到限制。C 代码被编译成 eBPF 字节码。

3. Verifier 在 eBPF 代码完全加载到内核之前,它会通过验证器运行。验证者的工作是确定 eBPF 程序是否可以安全运行。“安全”是指它不会陷入无限循环,没有不安全的内存操作,并且低于最大复杂度/代码大小。

安全策略:

1. 确保非特权 eBPF 被禁用。 如今,要安装 eBPF 程序,您通常需要 root——或至少需要 CAP_SYS_ADMIN 和/或 CAP_BPF。情况并非总是如此。围绕内核 4.4 引入了非特权 eBPF。请务必通过运行以下命令检查此配置选项:

sysctl kernel.unprivileged_bpf_disabled

2. 禁用不需要的功能。管理员可以通过编程方式禁用诸如 kprobes 之类的东西:

echo 0 > /sys/kernel/debug/kprobes/enabled

3. 在不支持 kprobes、基于 eBPF 的 TC 过滤器或完全支持 eBPF 的情况下构建内核(尽管这可能不是许多人的选择)。

4. ONFIG_BPF_KPROBE_OVERRIDE 除非绝对必要,否则不设置 Ensure。

安全检测:

从安全周期的角度来看,一场检测分为三个大阶段:事前(运行前)、事中(运行时)、事后(攻击后)。安全人员都希望可以在运行前通过一系列的静态分析方法来检测出异常,从而将问题扼杀在摇篮里。但现实往往事与愿违,更多的异常检测场景发生在运行时,这个时候就需要安全人员设计的产品模型具有很强的鉴白和鉴黑能力,这也是绝对了最终方案是否成功的基石。

从 eBPF 以及 Linux Tracing 的维度来看看具体方案:

1. 寻找加载的意外 kprobes。

#cat /sys/kernel/debug/kprobes/列表
ffffffff8ad687e0 r ip_local_out+0x0 [FTRACE]
ffffffff8ad687e0 k ip_local_out+0x0 [FTRACE]

2. 用 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

3. 查找加载的 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

4. 检查 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/

5. 检查是否加载了任何 TC 程序。

#tc filter show dev <device-name>

6. 监视系统日志中是否提及 BPF 帮助程序生成的警告消息。

#dmesg -k | grep ‘bpf_probe_write_user’

137003a320aae05c7199e1614bb2acad.png

尾声

总之,eBPF 目前已经成了安全研究人员和黑客手中强大的工具,亦正亦邪,取决于使用者的选择。由于这种范式将过去实施恶意利用的方式和流程进行了转变,对于安全人员也提升了要求,需要研究和理解新兴威胁的前沿技术及利用。

随着不断地地分析并认识到了如何识别和检测 eBPF 的恶意滥用,我们未来将更深入地了解此类利用的原理、行为方式以及检测它的最佳方式,后续研究分析将持续分享。

作者简介:

许庆伟:龙蜥社区 eBPF 技术探索 SIG 组 Maintainer 、高级内核技术专家,对 Linux 内核、系统稳定性领域有深入研究。

参考链接:

eBPF 技术探索 SIG 主页:https://openanolis.cn/sig/ebpfresearch

安全分析机构 ESG 云原生安全研究:https://www.esg-global.com/research/esg-research-report-the-maturation-of-cloud-native-security

本文经授权转自微信公众号 OpenAnolis(龙蜥)

65be09393bc90e0a733f87cd3e2f8d6d.gif

☞华为回应出售手机业务传闻:假消息;微软将ChatGPT整合到更多工具中:不用写代码就能开发应用;苹果更新Mac产品线|极客头条
☞不写代码就能开发应用,微软借助 ChatGPT,正在打造一个全新的商业软件帝国!
☞没有 Nginx 的未来,Cloudflare 工程师正在用 Rust 重构代码!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20881.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

182-问chatGPT想一点游戏职业

问了一下chatGPT帮我想出一些游戏职业 1.精灵剑士- 长着修长耳朵、娇小玲珑的精灵女孩&#xff0c;手持一把细长的剑&#xff0c;身穿华丽的绿色铠甲。 2.亡灵法师-看起来非常阴森恐怖的法师&#xff0c;蓝色的长袍下暗藏着黑色的甲胃&#xff0c;手中握着一根水晶魔杖. 3.火焰…

基于Spark的FPGrowth(关联规则算法)

转载请标明出处&#xff1a;小帆的帆的专栏 例子&#xff1a; 总共有10000个消费者购买了商品&#xff0c; 其中购买尿布的有1000人&#xff0c; 购买啤酒的有2000人&#xff0c; 购买面包的有500人&#xff0c; 同时购买尿布和啤酒的有800人&#xff0c; 同时购买尿布的…

Matlab隐藏彩蛋

Matlab中的彩蛋实现与Matlab的版本有着重要关系&#xff0c;像Android一样&#xff0c;不同的版本对应不同的彩蛋。这里以Matlab 2016A为例。 1.最著名的一个&#xff0c;命令行窗口输入“image”&#xff0c;就会出现一张倒置的小孩脸&#xff0c;不知情的使用者很可能会被吓…

“男医生,女护士?”消除偏见,Google有大招

编译整理 | 若奇 出品 | AI科技大本营 如何消除 AI 带来的性别偏见是个令人头疼的问题&#xff0c;那究竟有没有方法去解决&#xff1f; 12 月 6 日&#xff0c;Google 宣布他们迈出了减少 Google 翻译中性别偏见的第一步&#xff0c;并且还详细介绍了如何为 Google 翻译上的性…

71个外贸工具集合!2023年外贸业务员开发客户必备!

即时通讯工具 国际电话 叮咚&#xff1a;查找或添加成为叮咚好友&#xff0c;可以免费拨打电话&#xff0c;发送消息&#xff0c;语音对话。需要打开梯子网络下载&#xff0c;登陆的时候建议用Facebook账号登录。 链接: http://dingtone.me/and/fl/cn/a/?i Ringo&#xff1a…

ChatGPT工作提效之生成开发需求和报价单并转为Excel格式

ChatGPT工作提效之生成开发需求和报价单并转为Excel格式 一、提出需求如何撰写百度地图标注开发的需求文档 二、针对性地连续提问推荐下一下百度地图标注文档的详细需求列表如何撰写百度地图标注开发的技术规范如何确定百度地图标注开发后的部署计划... 三、生成报价单四、运营…

外贸报价后如何跟进客户?winseeing可快速报价展示样品

外贸公司的业务人员获取了高质量的询盘&#xff0c;若是不细心维护会有与大单和大客户失之交臂的可能。那外贸业务人员常容易犯的错误有哪些&#xff1f; 总结了以下几点&#xff1a; 1、仓促回复询盘&#xff1a;由于回复的太快&#xff0c;缺乏了对客户提出问题的分析过程&a…

PPT Cookbook by Eric

1. 快速生成背景和配色 1.1 ChatGPT 闪击PPT [blog] 1.2 ChatGPT MindShow [blog] 2. 图形和图像 2.1 绘制图形 水平倾斜图形&#xff08;边框为平行四边形&#xff09; 图形的效果是这样的&#xff1a; 就是这里最下方的图像&#xff0c;不过这里该怎么进行绘制呢&am…

快速生成ppt的新方法

1、对着chatgpt输入&#xff1a; 生成一份大纲&#xff0c;主题是&#xff1a;如何做好PPT插件程序编写。请用Markdown语言生成。 chatgpt反馈&#xff1a; 如何做好PPT插件程序编写 引言 PPT插件在现代演示文稿中扮演着非常重要的角色&#xff0c;能够帮助演讲者快速制作高…

放屁模拟器v1.0手机版

软件介绍: 对于喜欢恶搞网友来说&#xff0c;绝对是个好玩的软件。模仿真实放屁声音&#xff0c;多种声音可以选择&#xff01; 软件版本&#xff1a;1.0 支持系统&#xff1a;安卓 软件大小&#xff1a;3.6MB 软件下载: https://lanzoui.com/ioQ5qisaz3e

2022全新恶搞放屁小程序源码

正文: 这小程序的是属于云开发的&#xff0c;暂时没有发现后端源码&#xff0c;安装方法跟其它小程序一样&#xff0c;直接用开发者工具编译上传审核就可以了&#xff0c;这源码还是比较好玩的。 下载方式: lanzou.com/icGNT03h4k4j

js实现Tom猫

效果 HTML&#xff1a; <img class"bg" src"./assets/img/Animations/eat/eat_00.jpg"><img class"drink" src"./assets/img/Buttons/drink/drink.png"><img class"eat" src"./assets/img/Buttons/eat/…

leetcode【每日一题】141. 环形链表 Java【经典放屁题干

题干 给定一个链表&#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0 开始&am…

搞怪放屁微信小程序源码-无需服务器即可搭建

介绍&#xff1a; 很有意思的小程序源码&#xff0c;而且功能也不少&#xff0c;流量主这个不用说&#xff0c;现在的小程序基本都有。有喜欢的自己去搭建&#xff0c;我这测试没有问题。 网盘下载地址&#xff1a; http://kekewl.org/ra6oqMMvbvk0 图片&#xff1a;

全新恶搞放屁小程序源码

源码介绍&#xff1a; 3种语言白色汇汇通微盘程序源码&#xff0c;有k线修改教程。 源码截图&#xff1a;

恶搞放屁小程序源码

恶搞放屁小程序源码&#xff0c;无流量主&#xff0c;点击选择一款符合您品味气质的&#xff0c;设置播放参数&#xff0c;然后可以发送伪装二维码&#xff0c;发送给好友。 http://bbs.lxh5068.com/12647.html

SAPAS91导入期初固定资产数据往年购置与当年购置的区别

设定上线时间为2018月5月31号 1.AS91 创建一资产&#xff0c;购置日期为2016.05.15购置价值为90000&#xff0c;截止2017年年底折旧额为13537.5&#xff0c;2018年当年折旧2000元。 则如图&#xff1a; 案例二 设定上线时间为2018年5月31号&#xff0c;现有2018年1月份购置的…

全网最新的LoadRunner压力测试实例

摘要&#xff1a;本文通过实例讲解介绍了LoadRunner 工具的使用&#xff0c;介于公司的实际情况&#xff0c;文中主要是对工具的基本使用做了详细描述&#xff0c;高级运用方面除性能计数器与参数设置外其它均未涉及&#xff0c;待以后补充。目的是使公司人员根据该手册便可以独…

新黑马头条项目经验(黑马)

swagger (1)简介 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(API Documentation & Design Tools for Teams | Swagger)。 它的主要作用是&#xff1a; 使得前后端分离开发更加方便&#xff0c;有利于团队协作 接…

1313: [蓝桥杯2016决赛]赢球票

题目 感觉这题的意思比较难懂&#xff0c;题目比较简单&#xff0c;直接模拟就过了 题意&#xff1a;每次都只取出一个&#xff0c;好像和约瑟夫环有点像 AC代码&#xff1a; package 蓝桥杯2016; import java.util.*; public class 赢球票 {static Scanner scnew Scanner(Sy…