PF 保留 UDP 数据包的状态 = 安全问题?

PF 保留 UDP 数据包的状态 = 安全问题?

在过去的几天里,我读了很多关于 PF 的文章,它是 iptables 的一个很好的替代品,也是一种更加改进和安全的过滤方式。尽管如此,我还是遇到了以下声明,我认为这可能是一个安全问题:

保持 UDP 的状态:有时会听到这样的说法:“无法使用 UDP 创建状态,因为 UDP 是一种无状态协议!”虽然 UDP 通信会话确实没有任何状态概念(通信的显式启动和停止),但这不会对 PF 为 UDP 会话创建状态的能力产生任何影响。对于没有“开始”和“结束”数据包的协议,PF 只是跟踪自匹配数据包通过以来已经过去了多长时间。如果达到超时,则状态被清除。超时值可以在 pf.conf 文件的选项部分中设置。

我的担忧:UDP没有SequenceNr。因此,如果攻击者窃听 UDP 流(已在 pf 的状态表中接收到状态),他可以轻松注入欺骗包,然后这些包将通过防火墙,不是吗?

这不是一个很大的安全问题吗?或者我误解了 pf 机制中的某些内容?

答案1

情况1:防火墙内的UDP客户端发起与UDP服务器的通信。防火墙创建一个映射条目以允许对话继续。攻击者利用这一点反向欺骗一些数据包。

首先,必须对数据包进行欺骗,使其看起来像是来自服务器,否则它们将无法与远程地址匹配。它们还必须定向到客户端的 IP 和 UDP 端口,否则它们无法通过防火墙。因此,这些欺骗性的数据包到达客户端,客户端认为它们来自服务器:即使客户端应用程序的数据报套接字被标记为已连接到服务器,它们也会被客户端应用程序接收。如果应用程序是安全编写的,它们最终会在其内部协议级别上被丢弃,因为它们没有通过完整性检查(加密和校验和)。当然,欺骗性的 UDP 数据报会对本质上不安全的应用程序造成严重破坏;这不是防火墙的错。

情况2:防火墙内的UDP服务器有永久端口转发。当然任何人都可以向其发送 UDP;它只需要验证数据包并仅支持安全、经过身份验证的会话。

答案2

任何其他防火墙都会遇到与 PF 相同的问题,因为它们都必须保留某种类型的“状态”,以使数据包能够返回到 NAT 后面的设备或其他类型的入站阻止(允许回复但阻止新数据包) 。

答案3

在您描述的场景中,这不是重大风险。

能够窃听 UDP 流量的攻击者已经处于非常有利的地位。实际上,连接是否在连接跟踪表中列出并不是特别相关。

从网络角度来看,攻击者通常希望 a) 观察进出主机的流量和数据,b) 修改其中一些数据以适应特定目的。然后,根据目标,该信息可用于冒充主机或实体、尝试危害主机、攻击其他主机等。

相关内容