
Kernel-level iptables backdoor that accepts all packets with the RFC 3514 evil bit set, bypassing firewall rules. Includes in-tree and out-of-tree builds for Linux. 内核级 iptables 后门,接受所有设置了 RFC 3514 邪恶位的数据包,绕过防火墙规则。包含适用于 Linux 的内核树内和树外构建。
iptable_eviliptable_evil 是一个针对 iptables 的特定后门,它允许所有设置了邪恶比特的数据包通过,无论防火墙规则如何。
初始实现在 iptable_evil.c 中,它为 iptables 添加了一个表,并且需要修改一个内核头文件来为其插入一个位置。
第二个实现是修改后的 ip_tables 核心模块及其依赖项,以允许所有邪恶数据包通过。
我已在 Linux 内核版本 5.8.0-48 上进行了测试,但这应该适用于几乎所有具有完整 iptables 实现的内核版本。
RFC3514(2003年4月1日发布)将 IP 分片偏移字段中先前未使用的高位定义为安全标志。
对于符合 RFC 的系统,该位位置的 1 表示恶意意图,并将导致数据包被阻止。
默认情况下,此位是关闭的,但如果你在组装完整的 IP 数据包(就像某些黑客工具所做的那样),或者在内核中使用此补丁(已镜像到此仓库此处),则可以在你的软件中打开它。
当 Linux 内核收到一个数据包时,它会由 iptables 处理,并根据配置的规则发送到用户空间、丢弃或修改。
具体来说,每个 iptables 表使用 ip_tables.c 中的 ipt_do_table 函数来决定是否接受某个数据包。
我已修改该函数,使其自动接受任何设置了邪恶比特的数据包,并跳过所有后续处理。
我还尝试添加另一个表(iptable_evil.c),它会接受所有邪恶数据包,并将其他数据包交给标准表处理,但我一直没弄清楚如何将数据包传递给下一个表,并认为将 ipt_do_table 作为后门已经足以作为概念验证。
我需要为我的一个课程编写一个相当大的计算安全项目并撰写报告,这似乎是个很酷的主意。 这可能比他预期的要多得多的工作,但 ¯\_(ツ)_/¯。
evil 表需要修改内核头文件,因此要安装它,必须运行通过完整树构建生成的内核。
replace-existing 的内容复制到你的内核源代码树中,覆盖现有文件。iptable_evil.c 复制到 linux-X.Y.Z/net/ipv4/netfilterip_tables.c 复制到 linux-X.Y.Z/net/ipv4/netfilteriptables -t filter -Liptables -t evil -L(输出会混乱,但会加载模块)这要简单得多,也快得多,但不支持 evil 表,并且会将内核标记为“污染”。
应该可以将此构建产生的 ko 文件复制到具有完全相同内核版本的另一台计算机上,但我还没有测试过。
makermmod iptable_*rmmod ip_tablesinsmod ip_tables.koinsmod iptable_filter.ko要测试此功能,你需要使用此补丁重新构建整个内核,或者使用像 Scapy 这样的工具创建自己的数据包。
我选择了第一个选项,因为我正在为 evil 表构建内核。
在第一张截图中,我已在 iptables 中阻止了到此虚拟机的所有流量,但我仍然能够通过 SSH 连接,因为我的数据包设置了邪恶比特,如第二张截图所示。

当从未设置邪恶比特的虚拟机连接到打过后门的虚拟机时,SSH 连接最终会超时。

后门和非后门的 SSH 连接的数据包捕获文件位于此仓库的 docs/ 文件夹中,供你查阅。
iptables_uwu(主要用于提供研究方向的名称):https://github.com/benjojo/iptables-uwu