【漏洞预警】Linux 内核中TCP SACK机制远程拒绝服务漏洞
  

SANGFOR_智安全 2338

{{ttag.title}}
近日,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   
某公司千里目安全实验室翻译并发布预警

发表新帖
热门标签
全部标签>
每日一问
GIF动图学习
技术笔记
信服课堂视频
项目案例
产品连连看
安装部署配置
玩转零信任
在线直播
技术咨询
新版本体验
功能体验
专家分享
原创分享
技术圆桌
SDP百科
答题自测
畅聊IT
干货满满
安全攻防
用户认证
VPN 对接
SANGFOR资讯
功能咨询
专家问答
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
解决方案
sangfor周刊
技术顾问
信服故事
标准化排查
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告

本版达人

SANGFOR...

本周分享达人