ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Bad BPF项目深度解析:探索7个恶意eBPF程序的攻击原理与防御策略

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文件。攻击步骤如下:

  1. 编译并复制劫持程序到根目录:
make sudo cp ./bin/hijackee /a sudo chmod ugo+rx /a
  1. 运行劫持程序:
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_BPFCAP_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),仅供参考

返回列表