Bad BPF项目深度解析:探索7个恶意eBPF程序的攻击原理与防御策略
Bad BPF项目深度解析:探索7个恶意eBPF程序的攻击原理与防御策略
【免费下载链接】bad-bpfA collection of eBPF programs demonstrating bad behavior, presented at DEF CON 29项目地址: https://gitcode.com/gh_mirrors/ba/bad-bpf
Bad BPF是一个恶意eBPF程序集合,利用eBPF在用户态程序和内核之间读写用户数据的能力实施攻击。本文将深入剖析该项目中的7个典型恶意eBPF程序,揭示其攻击原理并提供针对性的防御策略,帮助系统管理员和安全爱好者有效防范eBPF带来的安全威胁。
一、eBPF技术与安全风险概述
eBPF(Extended Berkeley Packet Filter)技术允许在Linux内核中运行沙箱化的程序,无需重新编译内核或加载内核模块。这种灵活性使其在网络监控、性能分析等领域得到广泛应用,但同时也被恶意攻击者利用,成为新型攻击向量。Bad BPF项目展示了eBPF如何被滥用来实现进程隐藏、系统调用劫持、权限提升等恶意行为。
1.1 eBPF攻击的核心优势
- 隐蔽性强:eBPF程序运行在内核空间,传统用户态检测工具难以发现
- 权限高:可直接访问内核数据结构和系统调用
- 持久性好:部分恶意eBPF程序可实现用户态加载器退出后仍在后台运行
二、7个恶意eBPF程序的攻击原理
2.1 BPF-Dos:阻止调试的拒绝服务攻击
BPF-Dos通过向所有尝试使用ptrace系统调用的程序发送SIG_KILL信号,阻止调试工具(如strace)正常工作。攻击者可通过以下命令运行:
sudo ./bpfdos测试时,运行strace /bin/whoami会被立即终止,干扰安全人员对可疑进程的调试分析。
2.2 Exec-Hijack:进程执行流劫持
该程序拦截所有execve系统调用,将进程创建请求重定向到/a文件。攻击步骤如下:
- 编译并复制劫持程序到根目录:
make sudo cp ./bin/hijackee /a sudo chmod ugo+rx /a- 运行劫持程序:
sudo ./bin/exechijack所有新进程创建请求都会被重定向到/a程序,实现对系统执行流的完全控制。
2.3 Pid-Hide:进程隐藏技术
Pid-Hide通过挂钩getdents64系统调用,从/proc目录中移除指定PID对应的文件夹,使ps等工具无法发现目标进程:
sudo ./pidhide --pid-to-hide 2222这种技术常被恶意软件用于隐藏自身进程,逃避系统管理员的检测。
2.4 Sudo-Add:权限提升攻击
Sudo-Add通过拦截sudo读取/etc/sudoers文件的操作,动态修改文件内容,为低权限用户添加sudo权限:
sudo ./sudoadd --username lowpriv-user攻击原理是在sudo读取文件时,将第一行替换为:
lowpriv-user ALL=(ALL:ALL) NOPASSWD:ALL #使sudo误认为该用户拥有无密码sudo权限,而实际文件内容并未改变,极具隐蔽性。
2.5 Write-Blocker:数据写入拦截
Write-Blocker拦截指定PID进程的所有写操作,返回虚假的写入成功信息,实际不写入任何数据:
sudo ./writeblocker --pid 508该程序只拦截文件描述符大于2的写操作,保留标准输入输出,使攻击更难被发现。例如,拦截rsyslogd进程会导致ssh登录日志无法写入/var/log/auth.log,破坏审计追踪能力。
2.6 Text-Replace:动态文本替换
Text-Replace可实时替换指定文件中的文本内容,语法如下:
sudo ./textreplace --filename /path/to/file --input foo --replace bar典型恶意用途包括:
- 隐藏内核模块:
./textreplace -f /proc/modules -i 'joydev' -r 'cryptd' - 伪造MAC地址:
./textreplace -f /sys/class/net/eth0/address -i '00:15:5d:01:ca:05' -r '00:00:00:00:00:00'
注意:输入和替换文本必须长度相同,避免引入空字符。
2.7 Text-Replace2:高级动态文本替换
Text-Replace2在Text-Replace基础上增加两项关键功能:
- 运行时配置修改:通过eBPF Maps动态更新目标文件和替换规则
- 分离运行模式:用户态加载器退出后,eBPF程序仍可在后台运行
分离运行方法:
sudo mount bpffs -t bpf /sys/fs/bpf ./textreplace2 -f /proc/modules -i 'joydev' -r 'cryptd' --detach停止程序需删除BPF链接文件:
sudo rm -r /sys/fs/bpf/textreplace三、eBPF攻击的防御策略
3.1 内核版本与配置加固
- 使用Linux内核5.8+,支持eBPF验证器增强功能
- 启用内核参数
kernel.unprivileged_bpf_disabled=1,禁止非特权用户加载eBPF程序 - 限制
/sys/kernel/btf/vmlinux访问权限,防止攻击者获取内核类型信息
3.2 运行时监控与检测
- 定期使用
bpftool检查加载的eBPF程序:bpftool prog list - 监控
/sys/fs/bpf目录,检测异常BPF链接文件 - 通过内核跟踪点监控eBPF程序加载事件
3.3 权限控制与审计
- 严格限制
CAP_BPF和CAP_PERFMON等相关 capabilities - 实施最小权限原则,避免不必要的root权限进程
- 启用内核审计子系统,记录eBPF相关操作
3.4 工具与技术防御
- 使用eBPF-based安全工具(如Falco、Tracee)监控异常eBPF活动
- 部署内核运行时保护(LKRG等)检测异常系统调用钩子
- 定期更新系统和安全工具,获取最新eBPF漏洞补丁
四、总结与展望
Bad BPF项目展示了eBPF技术被恶意利用的多种可能性,这些攻击手法利用了eBPF的内核级访问能力和隐蔽性特点,对系统安全构成严重威胁。防御eBPF攻击需要从内核配置、权限控制、运行时监控等多方面入手,构建多层次防御体系。
随着eBPF技术的不断发展,其安全边界也在不断演变。安全社区需要持续关注eBPF安全问题,开发更有效的检测和防护工具,确保这一强大技术在安全可控的前提下发挥其优势。对于系统管理员而言,了解eBPF攻击原理和防御策略,是保护系统免受新型攻击的关键一步。
参考资料
- 项目源码:src/
- 构建脚本:src/Makefile
- 工具集:tools/
- 程序列表:src/bpfdos.c、src/exechijack.c、src/pidhide.c等
【免费下载链接】bad-bpfA collection of eBPF programs demonstrating bad behavior, presented at DEF CON 29项目地址: https://gitcode.com/gh_mirrors/ba/bad-bpf
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
