douglasmun/pagecache-lpe-containment-kit

GitHub: douglasmun/pagecache-lpe-containment-kit

针对 Linux page-cache 本地提权漏洞的教育性防御套件,提供加固、检测、验证与容器 seccomp 防护工具,帮助在内核补丁部署期间遏制攻击路径。

Stars: 0 | Forks: 0

# Page-Cache LPE 防护套件 [![许可证: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) [![TLP:CLEAR](https://img.shields.io/badge/TLP-CLEAR-brightgreen.svg)](#scope--ethics) [![范围: 检测与预防](https://img.shields.io/badge/scope-detection%20%26%20prevention-informational.svg)](#scope--ethics) [![平台: Linux](https://img.shields.io/badge/platform-Linux-lightgrey.svg)](#requirements) 这是一个**教育性质的防御性**安全套件。它解释了这两个漏洞在 syscall 层面是如何运作的,并提供了强化、检测、验证和 seccomp 工具——此外还包含一个验证测试套件,用于证明这些工具在真实内核上是有效的。**根据设计,它不包含任何漏洞利用代码、shellcode 或目标偏移量。** ## 目录 - [为什么会有这个项目](#why-this-exists) - [30秒了解漏洞](#the-vulnerability-in-30-seconds) - [快速开始](#quick-start) - [套件包含内容](#whats-in-the-box) - [环境要求](#requirements) - [范围与道德规范](#scope--ethics) - [了解更多](#learn-more) - [贡献指南](#contributing) - [许可证](#license) ## 为什么会有这个项目 这两个 CVE 漏洞都允许**非特权本地用户通过破坏 setuid-root 二进制文件(例如 `/usr/bin/su`)的 page cache(内存副本)来获取 root 权限**——而且完全不需要碰磁盘上的文件。这使得它们非常隐蔽:文件完整性监控显示正常,磁盘取证查不到任何异常,并且在重启后破坏痕迹就会消失。 修补内核是真正的修复方法。但在补丁推广期间——以及作为后续的纵深防御——你需要**关闭攻击路径、监控攻击链并验证你的防御姿态**。这正是该套件所提供的,每个防御措施都映射到漏洞利用链中已记录的步骤,让你明白它_为什么_有效。 ## 30秒了解漏洞 这两个 bug 属于同一个缺陷类别:**内核在向一个它认为是私有的缓冲区写入数据时,该缓冲区实际上仍然由共享的、基于文件的 page-cache 内存提供支持。** 两个结构性关卡控制着这两条攻击链的所有变体: | 关卡 | 是什么 | 作为防御措施的有效性 | |------|------------|-----------------------| | **1. Capability 路径** | 通过非特权 user namespaces(`unshare(CLONE_NEWUSER\|CLONE_NEWNET)`)获取的 `CAP_NET_ADMIN` | **稳健的瓶颈点** — *所有*变体(无论已知还是未知)都必须经过此处。请优先关闭它。 | | **2. 模块层面** | 易受攻击的模块:`act_pedit`、`esp4`/`esp6`、`rxrpc`、`xt_TEE`、`nf_dup_ipv4`/`nf_dup_ipv6` | **纵深防御** — 仅移除*已知*的利用原语;未知的攻击点可能会绕过它。 | 已在 upstream 的**稳定点版本**中修复(DirtyClone ≥ 6.12.91 / 7.0.10;pedit COW 6.12.94 / 7.0.13),以及各发行版的后向移植版本;mainline 7.1 为最终版本。请根据你所使用发行版的追踪系统确认你的内核版本——详见 [`docs/analysis.md`](docs/analysis.md) §8。 ## 快速开始 ``` # 1. 预览主机遏制更改(不写入任何内容) sudo ./kit/harden-pagecache-lpe.sh --dry-run # 2. 应用 userns 限制 + vulnerable-module 拦截 sudo ./kit/harden-pagecache-lpe.sh # 3. 验证安全态势 — 以 UNPRIVILEGED 用户身份运行功能性探测 sudo -u nobody ./kit/verify-pagecache-lpe.sh # exit: 0=PASS 1=WARN 2=FAIL # 4. (可选)使用 eBPF 实时查看攻击链 sudo bpftrace ./kit/detect-pagecache-lpe.bt ``` 对于容器,请应用 seccomp 覆盖配置 ([`kit/seccomp-pagecache-lpe.json`](kit/seccomp-pagecache-lpe.json)): ``` docker run --security-opt seccomp=kit/seccomp-pagecache-lpe.json ``` **初次接触?** 请阅读 **[`START-HERE.md`](START-HERE.md)** ——这是一份带有指导性、讲座式的全面解析,涵盖了从根本原因到完整验证运行的全过程。 ## 套件包含内容 ``` . ├── START-HERE.md Guided walkthrough — the recommended entry point ├── docs/ The "why": analysis and operator guidance │ ├── analysis.md Root-cause analysis, attack chains, detection engineering │ ├── HARDENING-GUIDE.md Operator containment guide (host → systemd → Docker → Kubernetes) │ └── plain-language-summary.md Gentler, plain-English overview of both bugs ├── kit/ The "what you run": four self-contained artifacts │ ├── harden-pagecache-lpe.sh Apply host containment (sysctl + module blocks) │ ├── verify-pagecache-lpe.sh Read-only posture check (PASS/WARN/FAIL) │ ├── detect-pagecache-lpe.bt bpftrace/eBPF telemetry for the staging chain │ └── seccomp-pagecache-lpe.json Container seccomp overlay denying the chain's syscalls └── testkit/ The "proof": validation harness + SHOWCASE.md writeup ``` | 组件 | 作用 | |-----------|------| | [`docs/analysis.md`](docs/analysis.md) | 事实来源:根本原因、行为攻击链、检测工程、强化措施、对比表。 | | [`docs/HARDENING-GUIDE.md`](docs/HARDENING-GUIDE.md) | 针对主机、systemd 单元、Docker/Podman 以及 Kubernetes 的分层防护。 | | [`kit/`](kit/) | 四个交付物。将此目录复制到主机上即可进行防御。 | | [`testkit/`](testkit/) | 在真实内核上进行可重复验证(本地 Docker + 一次性 EC2),以及 [`SHOWCASE.md`](testkit/SHOWCASE.md) ——客观评估测试能够证明和不能证明的内容。 | ## 环境要求 - **强化与验证** (`harden`, `verify`):装有 `bash`、`sysctl`、`modprobe` 和 `unshare` 的 Linux 主机。强化操作需要 root 权限;验证探测请以非 root 用户身份运行。 - **检测** (`detect-pagecache-lpe.bt`):需要 root 权限,`bpftrace` ≥ 0.16,以及内核 **BTF** (`/sys/kernel/btf/vmlinux`)。某些 kprobes 在特定的内核中可能会被内联——脚本头部说明了如何进行调整。 - **Seccomp 覆盖配置**:任何 OCI 运行时(Docker、Podman、containerd)。 - **验证测试套件** (`testkit/`):需要一台**一次性的** Linux 虚拟机——它会写入真实配置并卸载内核模块。EC2 启动器需要 AWS CLI v2 和 `jq`;不使用 SSH(传输通过 AWS SSM 进行)。macOS 用户可以运行本地 Docker 冒烟测试,但完整验证需要 Linux 环境。 ## 范围与道德规范 **TLP:CLEAR — 公开发布,无传播限制。** 本代码库**仅用于检测和预防**。它故意包含以下内容: - 基于 syscall / 内核子系统层面的根本原因分析 - 强化、检测、验证和 seccomp 工具 - 针对*防御措施*进行验证的测试套件 …and 故意**排除**: - 可运行的漏洞利用代码、概念验证 payload 或 shellcode - 受控写入推导或目标偏移量 - 任何有助于武器化的内容 这种处理方式所存在的客观局限性——即验证测试能够证明什么以及不能证明什么——记录在 [`testkit/SHOWCASE.md`](testkit/SHOWCASE.md) §8 中。**请仅在你拥有或被授权测试的系统上使用。** 强化只是一种控制手段,而非根治方法:**请及时为你的内核打补丁。** ## 了解更多 - **[`START-HERE.md`](START-HERE.md)** — 引导式演练(从这里开始) - **[`docs/analysis.md`](docs/analysis.md)** — 完整的技术分析 - **[`docs/plain-language-summary.md`](docs/plain-language-summary.md)** — 更 通俗易懂的概述 ## 贡献指南 欢迎提交 Issue 和 pull request——详见 [`CONTRIBUTING.md`](CONTRIBUTING.md)。由于各项防御措施在多个文件中进行了映射(模块列表、userns 开关、检测位图),请在更改攻击面之前阅读该指南中的 **同步不变量** 部分。 ## 许可证 采用 [Apache License 2.0](LICENSE) 授权。
标签:Docker镜像, GitHub Advanced Security, Linux内核, Seccomp, Web报告查看器, 子域名突变, 安全加固, 安全防护, 应用安全, 本地提权, 漏洞缓解, 请求拦截