recientemente 发布了有关识别Linux TCP堆栈中几个关键漏洞的新闻 和FreeBSD 允许攻击者远程启动内核故障 或通过处理特制的TCP数据包(死亡数据包)而导致过多的资源消耗。
问题是由数据块最大大小的句柄中的错误引起的 在TCP数据包中(MSS,最大段大小)和选择性连接识别机制(SACK,选择性TCP识别)。
什么是选择性识别?
选择性TCP识别(SACK) 它是一种机制,数据接收者可以将已成功接受的所有段通知给发送者。
埃斯托 允许发送方重新传输丢失的流段 从他的“众所周知”的背景。 禁用TCP SACK时,需要更大的重传集来重传整个序列。
在Linux内核中,此问题已在版本4.4.182、4.9.182、4.14.127、4.19.52和5.1.11中修复。 FreeBSD的解决方案可作为补丁获得。
已针对Debian,RHEL,SUSE / openSUSE,ALT,Ubuntu,Fedora和Arch Linux发布了内核软件包更新。
CVE-2019-11477(简报恐慌)
问题 从2.6.29版本开始在Linux内核中体现出来,并允许您使内核崩溃 由于控制器中发生整数溢出而发送一系列SACK数据包时(紧急)。
对于攻击而言,将TCP连接的MSS值设置为48个字节就足够了 并以某种方式发送一系列已安排的SACK数据包。
问题的实质是结构 tcp_skb_cb(套接字缓冲区) 用于存储17个片段 (“定义MAX_SKB_FRAGS(65536 / PAGE_SIZE +1)=> 17”)。
在发送数据包的过程中,将其放置在发送队列中,并且tcp_skb_cb存储有关该数据包的详细信息,例如序列号,标志以及用于发送的“ tcp_gso_segs”和“ tcp_gso_size”字段分段信息发送给控制器(TSO,分段分段下载)以处理网卡侧的分段。
如果启用了SACK并且驱动程序支持TSO,则在发生数据包丢失或需要选择性地重发数据包时,将保存块。
作为保护的一种解决方法,您可以使用低MSS禁用SACK处理或使用较小的MSS阻止连接(仅在将sysctl net.ipv4.tcp_mtu_probing设置为0并可能破坏某些正常状态时有效)。
CVE-2019-11478(SACK慢度)
这个失败 导致SACK机制中断 (在4.15中使用Linux内核时)或过多的资源消耗。
在处理可用于分割重传队列(TCP重传)的特制SACK数据包时,该问题就会显现出来。 保护解决方案与以前的漏洞相似
CVE-2019-5599(SACK慢度)
允许在处理SACK序列时导致发送的数据包映射的碎片 在单个TCP连接中运行,并导致运行资源密集型列表查找操作。
这个问题在带有RACK丢包检测机制的FreeBSD 12中表现出来。 作为一种解决方法,您可以禁用RACK模块(默认情况下未加载该模块,通过指定sysctl net.inet.tcp.functions_default = freebsd可以禁用它)
CVE-2019-11479
该缺陷使攻击者可以使Linux内核将响应分为多个TCP段, 每个端口仅包含8个字节的数据,这可能导致流量显着增加,CPU负载增加以及通信通道阻塞。
另外,它消耗额外的资源 (处理器电源和网卡)。
此攻击需要攻击者持续不断的努力,并且影响将在攻击者停止发送流量后立即终止。
在进行这种攻击时,系统将以降低的容量运行,从而导致某些用户拒绝服务。
远程用户可以通过设置最大段大小来触发此问题 (MSS)处于最低限度(48个字节),并发送一系列特制SACK数据包。
解决方法是,建议使用低MSS阻止连接。