亚洲日本免费-啊轻点灬太粗太长了三男一女-麻豆av电影在线观看-日韩一级片毛片|www.grbbt.com

CVE-2019-11477:Linux 內(nèi)核中TCP SACK機(jī)制遠(yuǎn)程Dos預(yù)警分析

0x00 漏洞描述

2019年6月18日,RedHat官網(wǎng)發(fā)布報(bào)告:安全研究人員在Linux內(nèi)核處理TCP SACK數(shù)據(jù)包模塊中發(fā)現(xiàn)了三個(gè)漏洞,CVE編號(hào)為CVE-2019-11477、CVE-2019-11478和CVE-2019-11479,其中CVE-2019-11477漏洞能夠降低系統(tǒng)運(yùn)行效率,并可能被遠(yuǎn)程攻擊者用于拒絕服務(wù)攻擊,影響程度嚴(yán)重。

360CERT 判斷此次漏洞影響面廣,危害嚴(yán)重,建議廣大用戶及時(shí)更新。

漏洞細(xì)節(jié)

SACK(Selective ACK)是TCP選項(xiàng),它使得接收方能告訴發(fā)送方哪些報(bào)文段丟失,哪些報(bào)文段重傳了,哪些報(bào)文段已經(jīng)提前收到等信息。根據(jù)這些信息TCP就可以只重傳哪些真正丟失的報(bào)文段。需要注意的是只有收到失序的分組時(shí)才會(huì)可能會(huì)發(fā)送SACK,TCP的ACK還是建立在累積確認(rèn)的基礎(chǔ)上的。

Linux SKB 最多可以容納17個(gè)片段:

linux/include/linux/skbuff.h
define MAX_SKB_FRAGS (65536/PAGE_SIZE + 1)  => 17

每個(gè)片段在x86(PowerPC上為64KB)的數(shù)據(jù)中最多可容納32KB,當(dāng)數(shù)據(jù)包將被發(fā)送時(shí),它被放置在發(fā)送隊(duì)列中,它的詳細(xì)信息保存在控制緩沖區(qū)結(jié)構(gòu)中:

   linux/include/linux/skbuff.h
struct 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用于記錄數(shù)據(jù)包個(gè)數(shù),類型為u16,最多記錄65526個(gè)。但是SACK機(jī)制允許TCP在重傳中合并多個(gè)SKB隊(duì)列,從而填充17個(gè)片段到最大容量, 17?321024 /8 = 69632,造成tcp_gso_segs整數(shù)溢出,進(jìn)而觸發(fā)BUG_ON()調(diào)用,導(dǎo)致內(nèi)核崩潰。

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 panic
tcp_skb_pcount_add(skb, -pcount);
…
}

攻擊者可以通過發(fā)送一系列特定的SACK包,觸發(fā)內(nèi)核模塊的整數(shù)溢出漏洞,進(jìn)而實(shí)行遠(yuǎn)程拒絕服務(wù)攻擊。

0x01 影響版本

影響Linux 內(nèi)核2.6.29及以上版本

0x02 修復(fù)方案

(1)及時(shí)更新補(bǔ)丁

https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_1_4.patch

Linux內(nèi)核版本>=4.14需要打第二個(gè)補(bǔ)丁

https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_1a.patch

(2)禁用SACK處理

echo 0 > /proc/sys/net/ipv4/tcp_sack

(3)使用過濾器來阻止攻擊

https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/block-low-mss/README.md

此緩解需要禁用TCP探測(cè)時(shí)有效(即在/etc/sysctl.conf文件中將net.ipv4.tcp_mtu_probingsysctl設(shè)置為0)

(4)RedHat用戶可以使用以下腳本來檢查系統(tǒng)是否存在漏洞

https://access.redhat.com/sites/default/files/cve-2019-11477–2019-06-17-1629.sh

0x03 時(shí)間線

2019-06-17?linux內(nèi)核補(bǔ)丁公布

2019-06-18?RedHat公布漏洞信息

2019-06-18?360CERT發(fā)布漏洞預(yù)警

0x04 參考鏈接

  1. https://access.redhat.com/security/vulnerabilities/tcpsack

上一篇:DNS 防火墻可防止網(wǎng)絡(luò)犯罪造成的千億損失

下一篇:悲劇的 SACK:各種設(shè)備都能被 “Ping of Death” 網(wǎng)絡(luò)包搞崩潰