juliosuas/copyfail-guard
GitHub: juliosuas/copyfail-guard
针对Linux内核CVE-2026-31431「Copy Fail」漏洞的快速评估与缓解工具,可检查algif_aead暴露面、安装模块阻止配置并为容器添加seccomp加固规则。
Stars: 2 | Forks: 0
# CopyFail Guard
[](https://github.com/juliosuas/copyfail-guard/actions/workflows/ci.yml)
[](LICENSE)



```
______ ______ _ __ ______ __
/ ____/___ ____ __ _/ ____/___ _(_) / / ____/_ ______ __________/ /
/ / / __ \/ __ \/ / / / /_ / __ `/ / / / / __/ / / / __ `/ ___/ __ /
/ /___/ /_/ / /_/ / /_/ / __/ / /_/ / / / / /_/ / /_/ / /_/ / / / /_/ /
\____/\____/ .___/\__, /_/ \__,_/_/_/ \____/\__,_/\__,_/_/ \__,_/
/_/ /____/
```
**快速、可审计的 Linux 暴露面评估和缓解工具,针对 CVE-2026-31431 "Copy Fail",在内核修复期间使用。**
CopyFail Guard 帮助运维人员降低 Linux `algif_aead` / `AF_ALG` 问题的暴露面:
- 在不使用漏洞代码的情况下安全评估暴露面
- 检查 `algif_aead` 是否可用、已加载、内置或已被阻止
- 安装持久的 `modprobe.d` 阻止配置并在安全时卸载模块
- 为 Docker、Podman 和 Kubernetes seccomp 配置文件添加 AF_ALG 拒绝规则
- 验证 AF_ALG 可达性,且不包含漏洞代码
## 我是否受影响?
首先运行安全暴露检查:
```
sudo ./bin/copyfail-guard.sh assess
```
如何解读结果:
| 结果类别 | 含义 | 应对措施 |
|---|---|---|
| `EXPOSED_*` | `algif_aead` / AF_ALG 似乎可达或可加载 | 立即缓解,然后打补丁并重启 |
| `PARTIALLY_MITIGATED_*` | 存在阻止配置,但已加载模块或重启状态仍需关注 | 安全重启或卸载,然后验证 |
| `INTERIM_MITIGATED_*` | 本地缓解措施已启用 | 保持,但仍需打补丁和重启 |
| `LOW_OBVIOUS_EXPOSURE_*` | 本地检查未发现明显的 `algif_aead` 暴露 | 仍需确认供应商补丁状态 |
如果您运行不受信任的容器、CI 任务、沙箱或多用户工作负载,还需测试该运行时环境内是否阻止了 AF_ALG 套接字创建:
```
python3 tools/afalg-socket-test.py
```
`PERMITTED` 不能证明成功利用,但能证明相关的用户空间加密 API 是可达的。对于防御性运营而言,这足以成为应用缓解措施的理由,同时您可以确认已打补丁内核的部署情况。
## 这是否能证明漏洞?
不包含破坏性概念验证代码。这是一个功能,而非缺陷。
真正的 Copy Fail 漏洞利用概念验证需要验证内核内存/页缓存影响或权限提升。在公共缓解仓库中包含这些内容会使项目安全性降低,且难以在生产环境中部署。
CopyFail Guard 可以证明运维人员可以安全采取行动的以下事项:
- 危险组件是否可用、已加载、内置或被阻止
- AF_ALG 套接字创建在目标运行时是否被允许
- 主机是否已有临时缓解措施
- 剩余需要的操作是卸载、重启、seccomp 还是供应商打补丁
要获得最终漏洞状态,请将此工具与供应商公告/软件包清单和重启证据结合使用。
## 可用性和解决模式
本项目面向 Linux 系统管理员、DevSecOps 工程师、平台团队和事件响应人员。设计为克隆即用:核心主机工作流程不需要编译器、内核头文件、漏洞代码或第三方包管理器。
目标用户的高操作性体验:`doctor`、`assess`、`mitigate`、`verify`、`rollback` 和 `--json` 直接对应事件响应流程。普通用户的中等体验是必然的,因为这是内核/容器加固,仍需要 Linux 管理判断。
解决模式:**缓解,而非治愈**。CopyFail Guard 减少暴露面并验证控制措施。持久的修复仍然是供应商打补丁的内核加上重启。
## 快速开始
克隆即用:
```
git clone https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
chmod +x bin/copyfail-guard.sh
sudo ./bin/copyfail-guard.sh doctor
sudo ./bin/copyfail-guard.sh assess
sudo ./bin/copyfail-guard.sh mitigate --yes
sudo ./bin/copyfail-guard.sh verify
```
可选的系统安装:
```
git clone https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
sudo ./scripts/install.sh
sudo copyfail-guard status
```
容器 / CI 加固:
```
./bin/copyfail-guard.sh seccomp-patch docker-default.json copyfail-seccomp.json
docker run --security-opt seccomp=./copyfail-seccomp.json IMAGE
```
验证受保护容器内 AF_ALG 是否被阻止:
```
docker run --rm \
--security-opt seccomp=./copyfail-seccomp.json \
-v "$PWD/tools:/tools:ro" \
python:3.12-alpine \
python /tools/afalg-socket-test.py
```
预期的受保护结果:
```
BLOCKED: socket(AF_ALG) denied by policy (...)
```
## 为什么这很重要
Copy Fail 是 Linux 内核中的本地权限提升漏洞,位于 AF_ALG 用户空间加密 API 的 `algif_aead` 组件中。公开公告描述了一个页面缓存写入原语,可由非特权本地用户访问,在共享内核系统上尤其危险:Kubernetes 节点、CI/CD 运行器、多租户主机、代理沙箱和开发机。
正确的修复是包含上游回滚/修复的供应商内核更新,并重启进入打补丁的内核。CopyFail Guard 是该重启在全部设备上完成之前的防御性运营辅助工具。
## 工具功能
| 领域 | 命令 | 用途 |
|---|---|---|
| 安全评估 | `assess` | 给出非漏洞利用的暴露结论、后续操作和自动化友好的退出码 |
| 依赖检查 | `doctor` | 检查必需/可选工具并解释运行时限制 |
| 主机检查 | `status` | 显示 OS/内核、模块可用性、加载状态、内置警告、modprobe 配置和明显的 AF_ALG 消费者 |
| 主机缓解 | `mitigate` | 写入 `/etc/modprobe.d/99-copyfail-guard.conf` 并尝试卸载 `algif_aead` |
| 验证 | `verify` | 如果模块已加载、内置或未被阻止则明确失败 |
| 回滚 | `rollback` | 仅删除 CopyFail Guard 管理的 modprobe 文件 |
| 容器 | `seccomp-patch` | 修补现有 seccomp 配置文件以拒绝 `socket(AF_ALG, ...)`,同时保留正常套接字使用 |
| 紧急配置 | `seccomp-docker` | 生成针对 AF_ALG 拒绝的紧急配置文件 |
| Kubernetes | `k8s-example` | 打印 Localhost seccomp Pod 示例 |
## 安装要求
核心主机命令:
- Linux
- `bash`
- kmod 工具:`modinfo`、`modprobe`、`lsmod`、`rmmod`(如可用)
- `grep`、`awk`、`mktemp`、`install`
可选的可见性工具:
- `lsof` 或 `ss` 用于 AF_ALG 消费者检查
Seccomp 配置文件修补:
- `seccomp-patch` 需要 `python3`
不需要漏洞代码、编译器、内核头文件或第三方包。
## 安全评估 vs 概念验证
CopyFail Guard **不**包含漏洞利用概念验证。这是故意的。请参阅[这是否能证明漏洞?](#does-this-prove-vulnerability)。
相反,`assess` 执行安全运营检查:
- 检测 `algif_aead` 是否可用、已加载、内置或被阻止
- 区分"临时缓解"和"实际解决"
- 建议主机缓解、seccomp 或打补丁/重启
- 返回用于批量自动化的退出码
自动化 JSON:
```
sudo ./bin/copyfail-guard.sh assess --json
./bin/copyfail-guard.sh doctor --json
```
退出码:
| 代码 | 含义 |
|---|---|
| `0` | 本地检查显示低明显暴露 |
| `1` | 临时缓解已启用,仍需打补丁/重启 |
| `10` | 已暴露/有缓解可用 |
| `11` | 部分缓解;需要重启或卸载 |
| `12` | 内置模块路径;需要打补丁/重启 |
| `20` | 未知评估状态 |
## 主机缓解详情
`mitigate` 写入:
```
/etc/modprobe.d/99-copyfail-guard.conf
```
内容为:
```
# Managed by CopyFail Guard for CVE-2026-31431
install algif_aead /bin/false
blacklist algif_aead
```
然后尝试:
```
sudo rmmod algif_aead
```
如果模块当前正在使用中,`rmmod` 可能会失败。在这种情况下,持久阻止配置仍然存在;在应用缓解措施后停止 AF_ALG 消费者或重启。
脚本拒绝在其管理的 modprobe 路径上覆盖符号链接,并以安全权限原子写入文件。
## 容器和 CI 加固
对于不受信任的工作负载,即使在打补丁主机时也用 seccomp 阻止 AF_ALG 套接字创建。
推荐路径:修补您现有的运行时 seccomp 基线而非替换它:
```
./bin/copyfail-guard.sh seccomp-patch docker-default.json copyfail-seccomp.json
```
与 Docker 一起使用:
```
docker run --security-opt seccomp=./copyfail-seccomp.json IMAGE
```
与 Podman 一起使用:
```
podman run --security-opt seccomp=./copyfail-seccomp.json IMAGE
```
如果您没有基线配置文件的紧急路径:
```
./bin/copyfail-guard.sh seccomp-docker ./copyfail-afalg-seccomp.json
```
生成的紧急配置文件阻止 AF_ALG,但允许其他系统调用。将其视为有针对性的临时措施,而非 Docker 正常默认 seccomp 加固的替代品。
对于 Kubernetes,将配置文件放在 kubelet seccomp 根目录下,通常是:
```
/var/lib/kubelet/seccomp/profiles/copyfail-seccomp.json
```
然后引用它:
```
securityContext:
seccompProfile:
type: Localhost
localhostProfile: profiles/copyfail-seccomp.json
```
请参阅 `examples/kubernetes-seccomp-pod.yaml`。
## 安全验证
本项目包含非漏洞利用的 AF_ALG 可达性测试:
```
python3 tools/afalg-socket-test.py
```
它只尝试创建和关闭一个 `AFG` 套接字。它不会绑定加密操作、调用 `splice`、触碰 setuid 二进制文件、损坏页缓存或尝试权限提升。
结果:
- `BLOCKED` 表示策略拒绝该进程的 AF_ALG。
- `PERMITTED` 表示该进程仍允许创建 AF_ALG 套接字。
- `UNSUPPORTED` 表示该运行时中 AF_ALG 不可用。
## 命令
```
copyfail-guard assess Safe exposure assessment, no exploit attempt
copyfail-guard status Inspect host exposure indicators
copyfail-guard doctor Check dependencies and runtime readiness
copyfail-guard mitigate Disable algif_aead persistently and unload it
copyfail-guard verify Verify host mitigation is active
copyfail-guard rollback Remove CopyFail Guard's modprobe mitigation
copyfail-guard seccomp-docker [FILE] Generate emergency AF_ALG-deny profile
copyfail-guard seccomp-patch BASE OUT Patch existing seccomp profile safely
copyfail-guard k8s-example Print Kubernetes seccomp example
```
标志可以放在命令之前或之后:
```
--dry-run Show planned changes without writing files or unloading modules
--yes Non-interactive confirmation
--no-logo Disable ASCII banner
--json Emit JSON for supported commands: assess, doctor
```
## 什么不应该被破坏
在典型配置中,禁用 `algif_aead` 预计不会影响:
- LUKS / dm-crypt
- SSH
- OpenSSL、GnuTLS、NSS 默认构建
- kTLS / 内核内 TLS
- IPsec / XFRM
- 正常的内核加密消费者
它可能会影响明确配置为使用 AF_ALG 引擎的应用程序或直接创建 AF_ALG 套接字的应用程序。首先检查:
```
sudo lsof | grep AF_ALG || true
ss -xa | grep -i alg || true
```
## 运维人员文档
- [事件响应运行手册](docs/incident-response-runbook.md)
- [Seccomp 验证说明](docs/seccomp-validation.md)
- [安全策略](SECURITY.md)
- [变更日志](CHANGELOG.md)
## 可用性评级
当前目标受众:Linux 系统管理员、DevSecOps 工程师、平台团队和事件响应人员。
- 安装摩擦:低。克隆即用不需要标准 Linux 工具之外的包管理器;`python3` 仅在 `seccomp-patch` 时需要。
- 运维人员体验:高。`doctor`、`assess`、`mitigate`、`verify` 和 `rollback` 对应事件响应流程。
- 普通用户体验:中等。这是内核/容器加固;工具保持语言直接,但仍需要 Linux 管理判断。
解决评级:缓解,而非治愈。工具减少暴露面并验证控制措施;供应商内核更新 + 重启是最终解决方案。
## 限制
CopyFail Guard **不能**:
- 为您打补丁内核
- 证明您的具体内核构建是否可被利用
- 包含漏洞代码
- 保护已被入侵的 root 用户
- 取代 EDR、批量清单、供应商公告或重启规划
主机模块缓解对模块化 `algif_aead` 有效。如果 `algif_aead` 已内置到您的内核中,`modprobe.d` 和 `rmmod` 无法禁用它;必须打补丁/重启,并且在打补丁期间应将 seccomp 用于不受信任的工作负载。
Seccomp 仅保护使用该配置文件启动的工作负载。现有运行的容器或 Pod 必须使用加固配置文件重新启动。
## 回滚
```
sudo ./bin/copyfail-guard.sh rollback --yes
```
回滚仅删除此工具管理的文件。它不会重新加载模块。仅在您明确需要它并已接受风险或已打补丁内核后才重启或手动 `modprobe algif_aead`。
## 常见问题
### 这是打补丁的替代品吗?
不是。打补丁和重启仍然是最终修复。
### 这能测试漏洞利用吗?
不能。该项目故意避免漏洞利用行为。`tools/afalg-socket-test.py` 仅检查 AF_ALG 套接字创建是否可达。
### 为什么在主机缓解后还要在容器中阻止 AF_ALG?
纵深防御。容器和 CI 工作负载是共享内核上运行不受信任代码的常见地方。Seccomp 使这类攻击的第一步对该工作负载不可达。
### 为什么修补现有 seccomp 配置文件而不是生成新的?
因为默认运行时配置文件包含许多加固决策。用最小的紧急配置文件替换它们可能会意外移除保护。`seccomp-patch` 保留您的基线并添加 AF_ALG 拒绝。
## 参考资料
- NVD:CVE-2026-31431
- CERT-EU 公告:Linux 内核高危漏洞("Copy Fail")
- copy.fail 公开技术公告
- Linux 上游修复/回滚:`crypto: algif_aead - Revert to operating out-of-place`
## 作者
由 **Julio César Suástegui Calderón** 构建。
安全工程、Linux 系统和实用的防御自动化。
## 许可证
MIT
标签:AF_ALG, algif_aead, Chrome Headless, CopyFail, CVE-2026-31431, Docker安全, Kubernetes安全, Linux内核安全, Linux防护, modprobe, Podman, seccomp, Web截图, 内核模块, 反取证, 子域名突变, 安全评估, 安全资源, 容器安全, 应用安全, 暴露面评估, 漏洞修复, 漏洞缓解, 系统加固, 网络安全培训, 请求拦截