itsystem/afalg-check
GitHub: itsystem/afalg-check
一款 Linux 安全诊断工具,用于检查 AF_ALG/algif_aead 可用性并评估 CVE-2026-31431 及 Dirty Frag 漏洞风险,同时输出针对性的缓解建议。
Stars: 1 | Forks: 0
# Itsumma AF_ALG 检查
一款 Linux 诊断实用工具,用于检查:
- `AF_ALG` / `algif_aead` 的可用性,并帮助评估 `CVE-2026-31431` (copy-fail) 风险;
- 针对 **Dirty Frag** 漏洞类别(`xfrm-ESP Page-Cache Write` + `RxRPC Page-Cache Write` 攻击链)的攻击面,检查 `esp4`、`esp6`、`rxrpc` 组件是否存在,并输出缓解措施。
## 功能特性
- 执行针对 `AF_ALG AEAD` 的 `socket + bind` 运行时探测;
- 通过 `/proc/modules`、`modules.builtin`、`modules.builtin.modinfo` 分析内核组件;
- 尝试根据 changelog (`rpm`/Debian changelog) 确定是否存在供应商的 backport 修复;
- 显示持有 `AF_ALG` 套接字的进程(`/proc/*/fd`,尽力而为);
- 针对不同的发行版系列输出缓解措施建议。
针对 Dirty Frag 的附加功能:
- 检查 `esp4`、`esp6`、`rxrpc` 的存在情况(已加载 / 内置 / 未知);
- 执行 `socket(AF_NETLINK, NETLINK_XFRM)` 和 `socket(AF_RXRPC)` 运行时探测,且不改变系统配置;
- 如果组件存在,则输出紧急缓解措施(禁用模块加载 + 尝试卸载)。
## 系统要求
- Linux;
- Go `1.24+`;
- 为了完整扫描 `/proc/*/fd`,最好以 `root` 用户身份运行。
## 构建
入口点 (Entrypoint) 位于项目根目录,构建在根目录下执行:
```
go build -o itsumma-afalg-check .
```
## 运行
```
./itsumma-afalg-check
```
## 工具输出内容
启动时:
`Itsumma Security Check — AF_ALG / CVE-2026-31431`
接下来输出:
- `AF_ALG` (`socket + bind`) 运行时探测结果;
- 内核版本以及 `modules.builtin` 的可用性;
- `af_alg` 和 `algif_aead` 的状态(已加载 / 内置 / 未知);
- 针对 `CVE-2026-31431` 的最终评估(包括尝试检测供应商 backport);
- 当前持有 `AF_ALG` 套接字的进程列表(如果找到);
- 分步缓解措施命令以及重启后的后续检查。
## 缓解措施后的基本后续检查
```
cat /proc/cmdline
echo 3 | sudo tee /proc/sys/vm/drop_caches
modprobe -n -v algif_aead
lsmod | grep '^algif_aead\b' || echo 'algif_aead not loaded'
./itsumma-afalg-check
```
对于内置 (built-in) 场景,相比于 `modprobe/lsmod`,最好额外检查:
```
dmesg | grep -i 'algif_aead\|initcall_blacklist'
```
## Dirty Frag:基本缓解命令
来自公开的 Dirty Frag runbook 的命令(禁用加载 `esp4`、`esp6`、`rxrpc` 并尝试卸载已加载的模块)。
如果使用了 IPSec / XFRM(例如通过 strongSwan),建议在卸载模块之前执行 flush:
```
sudo ip xfrm state flush
sudo ip xfrm policy flush
echo 3 | sudo tee /proc/sys/vm/drop_caches
```
如果 `esp4`/`esp6`/`rxrpc` 被编译为内置(仅在 `modules.builtin` 中可见),`modprobe blacklist` 和 `rmmod` 将无法禁用它们:在这种情况下需要更新或重新编译内核。
对于 strongSwan,在安装 `libcharon-extra-plugins` 之后,请启用 `kernel-libipsec`:
```
sudo sed -i 's/^\s*load\s*=\s*no/load = yes/' /etc/strongswan.d/charon/kernel-libipsec.conf
sudo systemctl restart strongswan || sudo systemctl restart strongswan-starter
```
```
lsmod | egrep '^(esp4|esp6|rxrpc)\b' || echo 'esp4/esp6/rxrpc not loaded'
sudo modprobe esp4 esp6 rxrpc || true
sudo modprobe -r esp6 rxrpc
sudo modprobe -r esp4 || true
sudo rmmod -f esp4
sudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp6 rxrpc 2>/dev/null; rmmod -f esp4 2>/dev/null; true"
```
后续检查:
```
modprobe -n -v esp4 esp6 rxrpc
lsmod | egrep '^(esp4|esp6|rxrpc)\b' || echo 'esp4/esp6/rxrpc not loaded'
./itsumma-afalg-check
```
## 重要提示
- 本工具仅作诊断用途,不能替代供应商提供的内核更新。
- 存在 `algif_aead` 意味着存在攻击面,但最终结论取决于内核版本及发行版的 backport 补丁。
- 如果 `AF_ALG AEAD` 运行时探测未通过,则在此检查的上下文中,该攻击向量被视为不可用。
标签:0day挖掘, AF_ALG, algif_aead, CVE-2026-31431, Dirty Frag, DNS枚举, EVTX分析, Golang, Go语言, 内核安全, 后渗透检测, 安全合规, 安全基线检查, 安全渗透, 安全编程, 库, 应急响应, 插件系统, 无线安全, 日志审计, 程序破解, 系统诊断, 系统运维, 缓解措施建议, 网络代理, 网络安全审计, 网络安全工具