上周披露的 Linux 内核漏洞 CVE-2016-5696 影响了大量设备,而网络管理员可能没有所有设备的 root 权限(如果设备由客户拥有,或者在 Android 中,root 权限由制造商而非所有者拥有)。认为所有这些设备都会很快得到补丁是不切实际的,而且如果没有 root 权限,甚至不可能增加全局速率限制来缓解侧信道。
但是,这种攻击依赖于攻击者能够故意触发一定数量的质询-ACK 数据包返回给自己,以便查看欺骗连接上的数据包是否会导致达到限制。如果边界防火墙将返回给攻击者的质询-ACK 数据包数量限制为低于受攻击设备的限制,则信息泄露将被堵住。
例如,如果易受攻击的设备默认全局速率限制为 100,那么在边界路由器上实施每个节点速率限制为 20 将阻止外部攻击者执行路径外攻击,即使设备和防火墙时钟不同步(攻击者能做到的最好情况是一秒结束时发送 20,下一秒立即发送 40,远远低于受攻击设备配置发送的 100)。本地设备仍可进行通信,不受速率限制的影响。
如何在运行内核版本 4.x 的 Linux 防火墙上使用 iptables 实现此类缓解?应匹配哪些数据包,哪些模块将跟踪每个节点的速率并允许限制?
是否可以通过计算挑战 ACK 数据包来检测正在进行的攻击(防火墙是否有足够的信息来区分它们?),然后将攻击者列入黑洞?(这可能无法单独使用 iptables 来实现,而需要使用反应规则生成器)
检测挑战-ACK 数据包可能是一个先决条件,以便不限制来自真正对等方的 ACK 数据包。
答案1
出于我能想到的几个原因,我不太确定担心托管网络中的这个漏洞是否现实。
- 当 Bob 带着他那部易受攻击的 Android 手机上班并连接到公司 WiFi 时,他的手机是无法公开访问的,因此没有外部人员可以向他发送数据包来尝试触发挑战 ACK。*
- 企业网络很可能在边界使用 NAT,以防止任何可疑的伪造 IP 数据包离开网络。即使没有 NAT,伪造的 IP 数据包也不应该离开网络。
*当然,Bob 仍然有可能尝试对 LAN 上的设备进行 DoS 攻击,但是无论如何,流量都不会穿过防火墙。
值得注意的是,挑战 ACK 只是带有特定序列号的 ACK,因此您可能需要在防火墙上实现自定义跟踪/数据包解析才能将其识别出来。这听起来很不错。
答案2
是否可以使用周边防火墙缓解 CVE-2016-5696?
可能不会。至少,我不希望任何防火墙供应商正式支持针对这种情况的缓解措施。有太多场景会导致误报导致合法流量被阻止。
您能做的最好的事情就是更新服务器上的配置,或者在启动时运行一个命令,直到您拥有修补的内核。该漏洞是由于 Linux 确认了其他人都不遵守的 RFC 而造成的。
要消除此行为,请使用以下命令更新所有服务器/etc/sysctl.conf
:
net.ipv4.tcp_challenge_ack_limit = 131070
然后sysctl -e -p
在应用此设置的所有服务器上运行。
如果您计划很快更新内核,您只需运行:
sysctl -w "net.ipv4.tcp_challenge_ack_limit=131070"
这样您就不需要更改配置文件。
为什么是 131070?如果内核更新时使用了随机化,那么任何超过 1000 的数字都足够了。内核补丁将数字设置为 1000,并添加了随机化以缓解攻击场景。如果没有随机化,您需要一个更大的数字。我见过一些人使用 900 万。
[ 更新 ] 总结:根据您的评论,外围防火墙不太可能对您有帮助。外围第 4 层代理可以。我会认真阅读有关 haproxy 的资料。