后三组六56注倍投方案素材资源网

?找回密码
?邀请注册
搜索
热搜: 活动 交友
查看: 219|回复: 0
打印 上一主题 下一主题

CVE-2019-11477 再爆 Linux 内核中TCP SACK机制远程DoS预警

[复制链接]

30

主题

30

帖子

30

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30
跳转到指定楼层
楼主
发表于 2019-6-19 14:48:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
更新日期:2019-06-18
0x00 漏洞描述
2019年6月18日,RedHat官网发布报告:安全研究人员在Linux内核处理TCP SACK数据包模块中发现了三个漏洞,CVE编号为CVE-2019-11477、CVE-2019-11478和CVE-2019-11479,其中CVE-2019-11477漏洞能够降低系统运行效率,并可能被远程攻击者用于拒绝服务攻击,影响程度严重。
360CERT 判断此次漏洞影响面广,危害严重,建议广大用户及时更新。
漏洞细节
SACK(Selective ACK)是TCP选项,它使得接收方能告诉发送方哪些报文段丢失,哪些报文段重传了,哪些报文段已经提前收到等信息。根据这些信息TCP就可以只重传哪些真正丢失的报文段。需要注意的是只有收到失序的分组时才会可能会发送SACK,TCP的ACK还是建立在累积确认的基础上的。
Linux SKB 最多可以容纳17个片段:
linux/include/linux/skbuff.hdefine MAX_SKB_FRAGS (65536/PAGE_SIZE + 1)??=> 17
每个片段在x86(PowerPC上为64KB)的数据中最多可容纳32KB,当数据包将被发送时,它被放置在发送队列中,它的详细信息保存在控制缓冲区结构中:
? ?linux/include/linux/skbuff.hstruct tcp_skb_cb {? ? __u32? ?? ? seq;? ?? ?? ?? ?? ?? ???/* Starting sequence number */? ? __u32? ?? ? end_seq;? ? /* SEQ + FIN + SYN + datalen */? ? __u32? ?? ? tcp_tw_isn;? ?? ???struct {? ?? ?? ?? ?? ? u16 tcp_gso_segs;? ?? ?? ?? ?? ? u16 tcp_gso_size;? ?? ?? ?};? ? __u8? ?? ???tcp_flags;??/2* TCP header flags. (tcp[13])??*/? ? …}
tcp_gso_segs用于记录数据包个数,类型为u16,最多记录65535个。但是SACK机制允许TCP在重传中合并多个SKB队列,从而填充17个片段到最大容量, 17 * 32 * 1024 / 8 = 69632,造成tcp_gso_segs整数溢出,进而触发BUG_ON()调用,导致内核崩溃。
static bool tcp_shifted_skb (struct sock *sk, …, unsigned int pcount, ...){...tcp_skb_pcount_add(prev, pcount);BUG_ON(tcp_skb_pcount(skb) < pcount);? ?<= SACK panictcp_skb_pcount_add(skb, -pcount);…}
攻击者可以通过发送一系列特定的SACK包,触发内核模块的整数溢出漏洞,进而实行远程拒绝服务攻击。
0x01 影响版本
影响Linux 内核2.6.29及以上版本
0x02 修复方案
(1)及时更新补丁
Linux内核版本>=4.14需要打第二个补丁
(2)禁用SACK处理
echo 0 > /proc/sys/net/ipv4/tcp_sack
(3)使用过滤器来阻止攻击
此缓解需要禁用TCP探测时有效(即在/etc/sysctl.conf文件中将net.ipv4.tcp_mtu_probingsysctl设置为0)
(4)RedHat用户可以使用以下脚本来检查系统是否存在漏洞

您需要登录后才可以回帖 登录 | 邀请注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hack168

GMT+8, 2019-9-23 05:59 , Processed in 0.045256 second(s), 14 queries , Yac On.

Powered by Discuz! X3.4

? 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表