RenatoMignone/Linux-eBPF-Verifier-Bypass-Research
GitHub: RenatoMignone/Linux-eBPF-Verifier-Bypass-Research
针对 Linux LTS 6.8 内核 eBPF 验证器的安全研究项目,将理论漏洞评估转化为可实际提权的 PoC 漏洞利用代码。
Stars: 0 | Forks: 0
# Linux eBPF 验证器漏洞实战利用 (LTS 6.8)

## 摘要
本项目探讨了 **eBPF (extended Berkeley Packet Filter)** 的安全边界,这是一项革命性的技术,允许用户定义的程序在 Linux 内核中安全运行。虽然 eBPF 的验证器旨在保证内存安全并防止恶意代码执行,但某些逻辑错误可能绕过这些保护。
## 📚 README 层次结构与导航
本项目的文档分布在多个按层次组织的 README 文件中。请从此处开始,沿着导航路径深入探索:
```
├── README.md (you are here)
│ ├─ Explains: eBPF fundamentals, verifier concepts, threat model, inherited work
│ ├─ Audience: Readers unfamiliar with eBPF or the project context
│ └─ Next: See "My Objective: Practical Exploitation" section below, then proceed to src/README.md
│
├── src/README.md
│ ├─ Explains: Exploitation workflow, VM setup, compilation pipeline, overall methodology
│ ├─ Audience: Readers ready to understand the practical approach and environment
│ └─ Next: Proceed to src/exploits/README.md for detailed vulnerability analysis
│
├── src/exploits/README.md
│ ├─ Explains: Multi-stage analysis methodology (bytecode → verifier → xlated → runtime)
│ ├─ Explains: 5 vulnerabilities with evidence chains and classification
│ ├─ Audience: Readers interested in the analysis approach and vulnerability summaries
│ └─ Next: Drill into individual vulnerabilities (5_06a, 5_06b, 5_06d, 5_39, 5_46b)
│
└── src/exploits/{vulnerability}/README.md (one per vulnerability)
├─ Explains: Deep technical analysis, bytecode dumps, verifier logs, exploitation mechanics
├─ Explains: Complete evidence chain from source code to runtime traces
├─ Audience: Readers performing detailed technical analysis or reproducing exploits
└─ Files: Specific PoC scripts, patch files, analysis logs
```
**快速导航:**
- **只想看概述?** → 阅读本文件(根目录 README.md)
- **想运行漏洞利用程序?** → 跳转到 [src/README.md](src/README.md)
- **想了解方法论和分析?** → 查看 [src/exploits/README.md](src/exploits/README.md)
- **正在分析特定漏洞?** → 查看 [src/exploits/{vulnerability}/README.md](src/exploits/) 文件夹
1. [什么是 eBPF?](#what-is-ebpf)
- [起源与演变](#origins-and-evolution)
- [架构概述](#architecture-overview)
- [eBPF 验证器](#the-ebpf-verifier)
- [程序类型与使用场景](#program-types-and-use-cases)
- [安全隐患](#security-implications)
2. [威胁模型](#threat-model)
3. [为何选择 LTS 6.8?](#why-target-lts-68)
4. [eBPF 漏洞利用原语](#ebpf-exploitation-primitives)
5. [继承的工作:前一个团队做了什么](#inherited-work-what-the-previous-team-did)
- [ISO-IEC TS 17961-2013 标准](#the-iso-iec-ts-17961-2013-standard)
- [什么是 XDP SynProxy?](#what-is-xdp-synproxy)
- [理论与实战:差距何在](#theoretical-vs-practical-the-gap)
6. [我的目标:实战利用](#my-objective)
7. [仓库结构](#repository-structure)
8. [快速开始](#quick-start-using-inherited-infrastructure)
9. [进度追踪](#progress-tracking)
10. [参考资料](#references)
## 什么是 eBPF?
### 起源与演变 **eBPF (extended Berkeley Packet Filter)** 是一项革命性的技术,起源于 1992 年创建的经典 BPF (Berkeley Packet Filter),最初用于网络数据包过滤。虽然经典 BPF 仅限于简单的数据包检查(被 `tcpdump` 等工具使用),但 eBPF 已演变成一个通用的**内核内虚拟机**,能够在 Linux 内核中运行沙盒程序。
Date: Wed, 27 Aug 2025 13:10:03 +0200
Subject: [PATCH] feat(5.10a_exploit): intptrconv
---
XDPs/xdp_synproxy/xdp_synproxy_kern.c | 251 ++++++++++++++++++++++++++
1 file changed, 251 insertions(+)
diff --git a/XDPs/xdp_synproxy/xdp_synproxy_kern.c b/XDPs/xdp_synproxy/xdp_synproxy_kern.c
index 0d0d990..34a1474 100644
--- a/XDPs/xdp_synproxy/xdp_synproxy_kern.c ← Original file
+++ b/XDPs/xdp_synproxy/xdp_synproxy_kern.c ← Modified file
@@ -373,6 +431,9 @@ struct header_pointers { ← Location marker
static __always_inline int tcp_dissect(void *data, void *data_end,
struct header_pointers *hdr)
{
+ __u32 data_base_truncated; ← Lines starting with + are ADDED
+ void *calculated_ptr;
+
hdr->eth = data;
- old_line_here ← Lines starting with - are REMOVED
if (hdr->eth + 1 > data_end)
```
**关键要素:**
- **头部**:提交元数据(作者、日期、消息)
- **文件路径**:修改了哪些文件
- **块**(`@@`):显示行号的位置标记
- **`+` 行**:正在添加的代码
- **`-` 行**:正在删除的代码
- **上下文行**:未更改的定位行
#### Git Apply 命令
Git 提供了 `git apply` 命令将补丁应用到工作目录:
```
# 应用补丁 (修改文件但不创建 commit)
git apply patches/5_10a_exploit_intptrconv/0001-feat-5_10a_exploit.patch
# 检查补丁是否可以干净地应用 (dry-run)
git apply --check patches/5_10a_exploit_intptrconv/0001-feat-5_10a_exploit.patch
# 反向应用 (移除补丁更改)
git apply -R patches/5_10a_exploit_intptrconv/0001-feat-5_10a_exploit.patch
# 替代方案: git am 从补丁创建 commit
git am patches/5_10a_exploit_intptrconv/0001-feat-5_10a_exploit.patch
```
#### 本项目中的工作流程
/.patch
make clean && make
```
这允许您测试 eBPF 验证器是阻止还是接受易受攻击的代码。
### 3. 设置测试环境:tmux 会话和脚本
同一文件夹中的 `start_session.sh` 脚本设置了一个用于交互式测试的多窗格 tmux 会话:
- **窗格 1:** 运行 XDP SynProxy 加载器(`sudo ./xdp_synproxy ...`)以将 eBPF 程序附加到网络接口。
- **窗格 2:** 启动 netcat 服务器(`sudo nc -lvnp 80`)以监听 TCP 连接。
- **窗格 3:** 显示内核调试输出(`sudo cat /sys/kernel/debug/tracing/trace_pipe`)。
此环境允许您:
- 观察 eBPF 程序如何处理数据包
- 查看注入漏洞的影响
- 通过从客户端发送精心构造的数据包(例如,使用主机的 netcat)测试利用
### 4. 利用:客户端-服务器交互
tmux 会话运行后:
- netcat 服务器监听传入的 TCP 连接。
- 客户端(您的宿主机或另一个 VM)使用 netcat 连接:
nc 80 -v
- 这模拟攻击者发送数据包以利用加载的 eBPF 程序。
- 内核跟踪和服务器输出帮助您观察漏洞是否可利用。
### 5. 理论与实战:有何变化
**前一个团队(理论):**
- 编目漏洞并测试 eBPF 验证器是否会阻止它们。
- 未尝试实际利用或权限提升。
**您的工作(实战):**
- 应用补丁、编译并加载代码。
- 使用 tmux 会话模拟真实攻击并观察内核影响。
- 记录哪些漏洞在实践中真正可利用。
### 6. 自动化工具
`xvtlas` 工具(基于 Go)可以自动化补丁应用、编译、加载和结果收集,用于批量测试。
## 实战利用步骤摘要
1. 使用 `vmctl.sh` **启动 VM** 并连接。
2. 使用 `make` **编译基础代码或打过补丁的代码**。
3. 使用用户空间加载器**加载 eBPF 程序**(验证器自动检查)。
4. 使用 `start_session.sh` **启动 tmux 会话**。
5. 使用主机的 netcat **模拟客户端攻击**。
6. 在 tmux 窗格和内核跟踪中**观察结果**。
7. **记录发现**:验证器是否阻止了漏洞?是否可利用?
此工作流程弥合了理论漏洞评估与实战利用之间的差距,为 eBPF 安全研究提供了可复现、自动化的环境。
## 进度追踪
- [ ] 环境搭建(VM、内核 6.8)
- [ ] 研究继承的代码库
- [ ] 分析优先漏洞
- [ ] 开发 PoC #1:(待定)
- [ ] 开发 PoC #2:(待定)
- [ ] 编写利用报告
- [ ] 最终文档
## 参考资料
- [ISO-IEC TS 17961-2013](https://www.iso.org/standard/61134.html) - C 安全编码标准
- [eBPF 文档](https://ebpf.io/)
- [Linux 内核 BPF 验证器](https://www.kernel.org/doc/html/latest/bpf/verifier.html)
- 前一个团队的详细文档:`ebpf-exploitability-test/codebase/XDPs/xdp_synproxy/README.md`
## 实战利用的优先漏洞
以下是本项目实战利用的主要焦点漏洞:
- **5.6a argcomp** — 函数指针类型不兼容
- **5.6b argcomp** — 参数数量错误
- **5.6d argcomp** — 参数类型错误
- **5.39 taintnoproto** — 将污点值用作没有原型的函数指针
- **5.46b taintsink** — 具有污点长度的内存拷贝
## 📖 后续步骤
既然您已经了解了背景和目标,请继续阅读实战利用文档:
**→ [继续阅读 src/README.md](src/README.md)** 以了解利用工作流程、环境设置和整体方法论。
### 起源与演变 **eBPF (extended Berkeley Packet Filter)** 是一项革命性的技术,起源于 1992 年创建的经典 BPF (Berkeley Packet Filter),最初用于网络数据包过滤。虽然经典 BPF 仅限于简单的数据包检查(被 `tcpdump` 等工具使用),但 eBPF 已演变成一个通用的**内核内虚拟机**,能够在 Linux 内核中运行沙盒程序。
标签:eBPF安全, Go语言工具, ISO-IEC TS 17961, Linux内核漏洞, LTS 6.8, PoC, Web报告查看器, 云资产清单, 内存安全, 内核安全研究, 内核提权, 反取证, 子域名枚举, 安全测试, 安全评估, 底层安全, 技术白帽, 攻击性安全, 攻击技术, 日志审计, 暴力破解, 系统安全, 缓冲区溢出, 网络安全, 逆向工程, 逻辑漏洞, 隐私保护, 零日漏洞, 验证器绕过