Opensvp 是一个安全工具,实现了各种“攻击”,用于测试防火墙对协议层攻击的抵抗能力。它既实现了经典攻击,也实现了针对应用层网关(在 Netfilter 世界中称为 helper)的一些新型攻击。
例如,在某些条件下(详见下文说明),opensvp 能够在保护 FTP 服务器的防火墙上打开一个针孔(pin hole):即使过滤策略保证只有 21 端口对服务器开放,你仍然可以通过 opensvp 打开服务器上的“任意”端口。
假设 192.168.2.3 是一台位于防火墙之后、运行 FTP 的服务器。如果用户以 root 身份运行::
opensvp --attacker -t 192.168.2.3 --helper ftp --port 23 -v -i eth0
那么,无论防火墙规则如何,他都将临时获得服务器 23 端口的访问权限。
文档“Secure use of iptables and connection tracking helpers” https://home.regit.org/netfilter-en/secure-use-of-helpers/ 描述了针对此类攻击的防护方法。
有关所实现攻击的精确描述,请参见下一章。
攻击者位于通过 eth0 接口直接连接到防火墙的网络中,可以运行以下命令::
opensvp --attacker -t 192.168.2.3 --helper ftp --port 23 -v -i eth0
192.168.2.3 是 FTP 服务器的地址,23 是我们要在服务器上打开的端口。攻击成功后,即可连接到 192.168.2.3 的 23 端口。
客户端可以发送一条伪造的命令消息,防火墙可能将其解释为开启动态连接。可以使用标准服务器发起攻击;而使用自定义服务器时,你可以获知可能的 NAT 网关所进行的转换。
一个典型的会话如下。在 IP 地址为 1.2.3.4 的服务器上,你可以运行::
$ opensvp --server --helper irc -v
然后,在客户端上运行::
$ opensvp --client -t 1.2.3.4 --helper irc --port 23 -v 2.3.4.5:23 should be opened from outside
服务器端会显示以下消息::
You should be able to connect to 2.3.4.5:23
这里的 2.3.4.5 是客户端的公网地址。
在攻击者一侧,你需要启动 opensvp,并指定所使用的 Netfilter 队列以及输出接口::
然后,你需要使用 iptables 将希望隐藏于协议识别机制的流量发送到用户空间::
iptables -I INPUT -p tcp --sport 443 -j NFQUEUE iptables -I OUTPUT -p tcp --dport 443 -j NFQUEUE
完成后,按 CTRL+C 中断攻击进程。
一些网络协议在客户端和服务器之间通信时会使用多条连接。最著名的例子是 FTP:命令通过 21 端口的连接传输,数据交换则使用两种不同模式完成(从 20 端口发起连接,或使用动态连接)。
某些防火墙实现带有应用层网关(ALG),以检测这种并行连接并动态地授权它们。其它解决方案是使用应用中继(透明代理),或开放所有可能的流量(几乎全部放行)。
ALG 分析流量,检测并解析对等方之间发送的命令,以声明并行连接的参数。完成后,它们会在防火墙中临时打开针孔,让可能产生的流量通过。
这种攻击的思路是伪造这类消息,以在防火墙中打开针孔——但打开的针孔本不应被打开。
条件:
攻击过程如下:
攻击者网络上的嗅探器从协议流中捕获一个数据包
将伪造的数据包发送到连接到防火墙的接口
防火墙将该数据包传回客户端,并开始期待根据攻击者输入特征的数据包
该攻击是上述原理的直接应用。一旦收到数据包,攻击者就会发送伪造的 DCC 命令。
在这种攻击中,客户端连接由攻击者打开。他连接到防火墙后面的 FTP 服务器,并建立一个真实连接。会话建立后,他通过发送伪造的 227 命令发动攻击。
如果使用 IPv6,则通过伪造的 229 命令完成相同的攻击。
可能的目标
这些攻击的主要限制是,攻击者必须位于直接连接到防火墙的网络中。
因此,主要可能性有:
* 从用户局域网发起攻击
* 在托管机房发起攻击
这两种情况都可能造成严重的信息泄露,因为攻击者可以访问未受保护的服务。
Linux
~~~~~
已知在 rp_filter 设置为 0 的情况下,该攻击对 IPv4 Netfilter 防火墙有效(希望这不是默认值)。
目前还没有针对 IPv6 的反向路径过滤实现,因此防火墙不受保护,防护必须设置在防火墙规则中(见下一章)。
已知以下一些防火墙软件容易受到攻击:
* fwbuilder:需要设置特定策略
* shorewall:最新版本修复了该问题
* edenwall:存在漏洞
该攻击对网关防火墙和本地防火墙都有效。在本地防火墙上,需要激活 FORWARD 过滤,并在此链上设置 ESTABLISHED ACCEPT 规则。运行虚拟机的系统就可能出现这种情况。
防御该攻击
==========================
Linux
-----
参见专门讨论该主题的文档:https://home.regit.org/netfilter-en/secure-use-of-helpers/
其他操作系统和设备
--------------------
基本要求是启用严格的反欺骗,并在可能的情况下控制 ALG 的加载。