近日,Netflix公司已经确定了几个TCP网络FreeBSD 和Linux内核中的漏洞。这些漏洞特别涉及最小段大小(MSS)和TCP选择性确认(SACK)功能。最严重的,被称为“SACK Panic”,可以在Linux内核上远程触发内核崩溃,从而影响系统的可用性。 漏洞名称:Linux 内核中TCP SACK机制远程拒绝服务漏洞预警 威胁等级 :高危 影响范围:Linux> = 2.6.29(CVE-2019-11477) Linux <4.15/所有Linux版本(CVE-2019-11478) 使用RACK TCP堆栈的FreeBSD 12(CVE-2019-5599) 所有Linux版本(CVE-2019-11479) 漏洞类型:拒绝服务漏洞 利用难度 :简单
TCP SACK介绍
TCP是面向连接的协议。当双方希望通过TCP连接进行通信时,他们通过交换某些信息建立连接,例如请求发起(SYN)连接,初始序列号,确认号,通过此连接使用的最大段大小(MSS),权限发送和处理选择性确认(SACK)等。此连接建立过程称为3次握手。
TCP通过称为Segment的单元发送和接收用户数据。一个TCP段包括TCP报头,选项和用户数据的。
每个TCP段具有序列号(SEQ)和确认号(ACK)。
这些SEQ和ACK号用于跟踪接收器成功接收哪些段。ACK号表示接收器的下一个预期段。
示例:上面的用户'A'通过13个100字节的段发送1千字节的数据,13因为每个段具有20字节的TCP头。在接收端,用户'B'接收段1,2,4,6,8-13,段3,5和7丢失,不被用户'B'接收。
通过使用ACK号码,用户'B'将指示它正在期望段号3,用户'A'读取为用户'B'接收到2之后没有段,并且用户'A'将重新发送全部即使用户'B'成功接收到第4,6和8-13段,从3开始的段也是如此。用户'B'无法向用户'A'表明。这是导致网络低效使用的原因。
漏洞描述和修复建议
1:CVE-2019-11477:SACK Panic(Linux> = 2.6.29) 漏洞描述: 通过构造特殊的SACK,可以触发整数溢出,从而导致内核崩溃。 修复建议: 应用修补程序PATCH_net_1_4.patch(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_1_4.patch) 此外,Linux内核版本(包括4.14版本)需要第二个补丁PATCH_net_1a.patch(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_1a.patch)。 解决方法#1: 使用提供的过滤器(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/block-low-mss/README.md)之一阻止与低MSS的连接。(过滤器中的值是示例。您可以根据您的环境应用更高或更低的限制。)请注意,这些过滤器可能会破坏依赖于低MSS的合法连接。另请注意,此缓解仅在禁用TCP探测时有效(即,net.ipv4.tcp_mtu_probingsysctl设置为0,这似乎是该sysctl的默认值)。 解决方法#2: 禁用SACK处理(/proc/sys/net/ipv4/tcp_sack设置为0)。 (注:任何一种解决方法都应该足够了。没有必要同时应用这两种解决方法。)
2:CVE-2019-11478:SACK缓慢(Linux <4.15)或过多的资源使用(所有Linux版本) 漏洞描述:通过发送一个构造的SACK序列,分解TCP重传队列。针对4.15之前的Linux内核,攻击者可能进一步利用分段队列,为后续针对同一TCP连接接收的SACK导致消耗的链表运行的资源。 修复建议: 应用修补程序PATCH_net_2_4.patch(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_2_4.patch) 解决方法#1: 使用提供的过滤器之一阻止与低MSS的连接。(过滤器中的值是示例。您可以根据您的环境应用更高或更低的限制。)请注意,这些过滤器可能会破坏依赖于低MSS的合法连接。另请注意,此缓解仅在禁用TCP探测时有效(即,net.ipv4.tcp_mtu_probingsysctl设置为0,这似乎是该sysctl的默认值)。 解决方法#2: 禁用SACK处理(/proc/sys/net/ipv4/tcp_sack设置为0)。 (注:任何一种解决方法都应该足够了。没有必要同时应用这两种解决方法。)
3:CVE-2019-5599:SACK Slowness(使用RACK TCP堆栈的FreeBSD 12) 漏洞描述: 通过发送一个构造好的SACK序列,分割RACK发送映射。攻击者可能能够进一步利用分段发送映射来为后续针对该相同TCP连接接收的SACK引起消耗的链表运行的资源。 解决方法#1: 应用补丁split_limit.patch(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/split_limit.patch)并将net.inet.tcp.rack.split_limitsysctl设置为合理的值以限制SACK表的大小。 解决方法#2: 暂时禁用RACK TCP堆栈。 (注:任何一种解决方法都应该足够了。没有必要同时应用这两种解决方法。)
4:CVE-2019-11479:由于MSS值较低导致的过多资源消耗(所有Linux版本) 漏洞描述: 攻击者可以强制Linux内核将其响应分段为多个TCP段,每个TCP段仅包含8个字节的数据。这大大增加了提供相同数据量所需的带宽。此外,它消耗额外的资源(CPU和NIC处理能力)。此攻击需要攻击者不断努力,攻击将在攻击者停止发送流量后立即结束。 修复建议: 两个补丁PATCH_net_3_4.patch(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_3_4.patch)和PATCH_net_4_4.patch(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_4_4.patch)添加一个sysctl,它强制执行sysctl设置的最小MSS net.ipv4.tcp_min_snd_mss。这使管理员可以强制执行适合其应用程序的最小MSS。 解决方法: 使用提供的过滤器之一阻止与低MSS的连接。(过滤器中的值是示例。您可以根据您的环境应用更高或更低的限制。)请注意,这些过滤器可能会破坏依赖于低MSS的合法连接。另请注意,此缓解仅在禁用TCP探测时有效。(即,net.ipv4.tcp_mtu_probingsysctl设置为0,这似乎是该sysctl的默认值)。
参考链接
[1].https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001.md [2].https://www.openwall.com/lists/oss-security/2019/06/17/5 [3].https://access.redhat.com/security/vulnerabilities/tcpsack
时间轴
2019/06/17 Netflix公司已经确定了几个TCP网络FreeBSD和Linux内核中的漏洞 2019/06/19 某公司千里目安全实验室翻译并发布预警 |