网络安全:与 TCP 连接管理相关的网络攻击
目錄
攻擊方法1:SYN 泛洪
攻擊方法2:影響路徑最大傳輸單元
攻擊方法3:破壞現(xiàn)有的TCP連接
攻擊方法4:欺騙攻擊
攻擊方法1:SYN 泛洪
SYN 泛洪是一種 TCP 拒絕服務(wù)攻擊,在這種攻擊中一個或多個惡意的客戶端產(chǎn)生一系列 TCP 連接嘗試( SYN 報文段),并將它們發(fā)送給一臺服務(wù)器,它們通常采用?"偽造"?的源 IP 地址。服務(wù)器會為每一條?TCP?連接分配一定數(shù)量的連接資源。由于連接尚未完全建立,服務(wù)器為了維護(hù)大量的半打開連接會在耗盡自身內(nèi)存后拒絕為后續(xù)的合法連接請求服務(wù)。
因?yàn)閰^(qū)分合法的連接嘗試與 SYN 泛洪并不是一件容易的事情,所以抵御上述攻擊存在一定的難度。一種針對此問題的機(jī)制被稱作SYN cookies [RFC4987]。SYN cookies 的主要思想是:當(dāng)一個 SYN 到達(dá)時,這條連接存儲的大部分信息都會被編碼并保存在SYN + ACK 報文段(第二次握手)的序列號字段。采用 SYN cookies 的目標(biāo)主機(jī)不需要為進(jìn)入的連接請求分配任何存儲資源——只有當(dāng) SYN +?ACK 報文段本身被確認(rèn)后(并且已返回初始序列號)才會分配真正的內(nèi)存。在這種情況下,所有重要的連接參數(shù)都能夠重新獲得,同時連接也能夠被設(shè)置為 ESTABLISHED 狀態(tài)。
在執(zhí)行?SYN cookies?過程中需要服務(wù)器仔細(xì)地選擇 TCP 初始序列號。本質(zhì)上,服務(wù)器必須將任何必要的狀態(tài)編碼并存于 SYN + ACK 報文段的序列號字段。這樣一個合法的客戶端會將其值作為報文段的 ACK?號字段返回給服務(wù)器。很多方法都能夠完成這項(xiàng)工作,下面將具體介紹 Linux 系統(tǒng)所采用的技術(shù)。
服務(wù)器在接收到一個 SYN 后會采用下面的方法設(shè)置初始序列號的數(shù)值:首 5 位是?t?模 32 的結(jié)果,其中 t?是一個 32 位的計數(shù)器,每隔 64 秒增 1;接著 3 位是對服務(wù)器最大段大小的編碼值;剩余的 24 位保存了 4 元組與?t?值的散列值。該數(shù)值是根據(jù)服務(wù)器選定的散列加密算法計算得到的。
在采用?SYN cookies?方法時,服務(wù)器總是以一個 SYN + ACK 報文段作為響應(yīng)(符合任何典型的 TCP 連接建立過程)。在接收到 ACK 后,如果根據(jù)其中的?t?值可以計算出與加密的散列值相同的結(jié)果,那么服務(wù)器才會為該 SYN 重新構(gòu)建隊(duì)列。這種方法至少有兩個缺陷。首先,由于需要對最大段大小進(jìn)行編碼,這種方法禁止使用任意大小的報文段。其次,由于計數(shù)器會回繞,連接建立過程會因周期非常長(長于64秒)而無法正常工作。基于上述原因,這一功能并未作為默認(rèn)設(shè)置。
?
攻擊方法2:影響路徑最大傳輸單元
另一種攻擊方法與路徑最大傳輸單元發(fā)現(xiàn)過程相關(guān)。在這種攻擊中,攻擊者偽造一個 ICMP PTB 消息(需要進(jìn)行分片但設(shè)置了不分片位)。該消息包含了一個非常小的 MTU 值(例如,68字節(jié))。這樣就迫使受害的 TCP 嘗試采用非常小的數(shù)據(jù)包來填充數(shù)據(jù),從而大大降低了它的性能。
最強(qiáng)力的攻擊方法是簡單地禁用主機(jī)的路徑最大傳輸單元發(fā)現(xiàn)功能。當(dāng)接收到的 ICMP PTB 消息的下一跳最大傳輸單元小于 576字節(jié)時,其他選項(xiàng)會禁用路徑最大傳輸單元發(fā)現(xiàn)功能。Linux?的一個系統(tǒng)的選項(xiàng),例如:ifconfig ppp0 mtu 288。該選項(xiàng)會保持最小的數(shù)據(jù)包大小(為了 TCP 的大數(shù)據(jù)包)。如果該選項(xiàng)被固定為某一數(shù)值,那么較大的數(shù)據(jù)包則不能將 IPv4 的 DF 位置位。這種方法雖然比完全禁用路徑最大傳輸單元發(fā)現(xiàn)功能更具攻擊性。
?
TCP的路徑最大傳輸單元發(fā)現(xiàn)
路徑最大傳輸單元(MTU)是指經(jīng)過兩臺主機(jī)之間路徑的所有網(wǎng)絡(luò)報文段中最大傳輸單元的最小值。知道路徑最大傳輸單元后能夠有助于一些協(xié)議(比如 TCP )避免分片。有興趣的可以看看基于 ICMP 消息的路徑最大傳輸單元發(fā)現(xiàn)(PMTUD)過程,但由于應(yīng)用程序已經(jīng)指定了尺寸(即非傳輸層協(xié)議),?UDP 協(xié)議一般不會采用上述發(fā)現(xiàn)過程獲得的數(shù)據(jù)報大小。TCP 在支持字節(jié)流抽象的實(shí)現(xiàn)過程中能夠決定使用多大的報文段,因此它很大程度上控制了最后生成的IP數(shù)據(jù)包。
TCP 常規(guī)的路徑最大傳輸單元發(fā)現(xiàn)過程如下:在一個連接建立時,TCP 使用對外接口的最大傳輸單元的最小值,或者根據(jù)通信對方聲明的最大段大小來選擇發(fā)送方的最大段大小(SMSS)。路徑最大傳輸單元發(fā)現(xiàn)不允許 TCP 發(fā)送方有超過另一方所聲明的最大段大小的行為。如果對方?jīng)]有指明最大段大小的數(shù)值,發(fā)送方將假設(shè)采用默認(rèn)的 536 字節(jié),但是這種情況比較少見。如果為每一個目的地保存對應(yīng)的路徑最大傳輸單元,那么就能方便地對段大小進(jìn)行選擇。值得注意的是,一條連接的兩個方向的路徑最大傳輸單元是不同的。
一旦為發(fā)送方的最大段大小選定了初始值,?TCP 通過這條連接發(fā)送的所有 IPv4 數(shù)據(jù)報都會對 DF 位字段進(jìn)行設(shè)置。TCP/IP 沒有 DF 位字段,因此只需要假設(shè)所有的數(shù)據(jù)報都已經(jīng)設(shè)置了該字段而不必進(jìn)行實(shí)際操作。如果接收到 PTB 消息,?TCP 就會減少段的大小,然后用修改過的段大小進(jìn)行重傳。如果在 PTB 消息中已包含了下一跳推薦的最大傳輸單元,段大小的數(shù)值可以設(shè)置為下一跳最大傳輸單元的數(shù)值減去 IPv4 (或IPv6 )與 TCP 頭部的大小。如果下一跳最大傳輸單元的數(shù)值不存在(例如,一個之前的 ICMP 錯誤被返回時會缺乏這一信息),發(fā)現(xiàn)者可能需要嘗試多個數(shù)值(例如,采用二分搜索法選擇一個可用的數(shù)值)。這也會影響到 TCP 的擁塞控制管理。對于分組層路徑最大傳輸單元發(fā)現(xiàn)而言,除了 PTB 的消息不被使用以外其他情況基本類似。相反,執(zhí)行路徑最大傳輸單元發(fā)現(xiàn)的協(xié)議必須能夠快速地檢測消息丟棄并調(diào)整自已的數(shù)據(jù)報大小。
由于路由是動態(tài)變化的,在減少段大小的數(shù)值一段時間后需要嘗試一個更大的數(shù)值(接近初始的發(fā)送方最大段大小)。根據(jù) [RFCl191] 與 [RFC1981] 的指導(dǎo)意見,該時間間隔大約為 10 分鐘。
在互聯(lián)網(wǎng)環(huán)境中,由于防火墻阻塞 PTB 消息 [RFC2923]?,路徑最大傳輸單元發(fā)現(xiàn)過程會存在一些問題。在各種操作問題中,黑洞問題的情況雖有所好轉(zhuǎn)(在[LSlO]中,80%被調(diào)查的系統(tǒng)都能夠正確地處理 PTB 消息),但仍懸而未決。在 TCP 實(shí)現(xiàn)依靠傳輸 ICMP 消息來調(diào)整它的段大小的情況下,如果 TCP 從未接收到任何 ICMP 消息,那么在路徑最大傳輸單元發(fā)現(xiàn)過程中就會造成黑洞問題。這種情況可能由多方面的原因造成,其中包括了防火墻或 NAT 配置為禁止轉(zhuǎn)發(fā) ICMP 消息。其后果在于一旦 TCP 使用了更大的數(shù)據(jù)包將不能被正確處理。由于只是不能轉(zhuǎn)發(fā)大數(shù)據(jù)包,所以診斷出這一問題是十分困難的。那些較小的數(shù)據(jù)包(比如用于建立連接的 SYN 與 SYN +ACK 數(shù)據(jù)包)是能夠成功處理的。一些 TCP 實(shí)現(xiàn)具有?"黑洞探測"?功能。當(dāng)一個報文段在反復(fù)重傳數(shù)次后,將會嘗試發(fā)送一個較小的報文段。
?
攻擊方法3:破壞現(xiàn)有的TCP連接
另一種類型的攻擊涉及破壞現(xiàn)有的 TCP 連接,甚至可能將其劫持(hijacking)。這一類攻擊通常包含的第一步是使兩個之前正在通信的 TCP 節(jié)點(diǎn)?"失去同步"?。這樣它們將使用不正確的序列號。它們是序列號攻擊的典型例子 [RFC1948] 。至少有兩種方法能實(shí)現(xiàn)上述攻擊:在連接建立過程中引發(fā)不正確的狀態(tài)傳輸,在 ESTABLISHED 狀態(tài)下產(chǎn)生額外的數(shù)據(jù)。一旦兩端不能再進(jìn)行通信(但卻認(rèn)為它們間擁有一個打開的連接),攻擊者就能夠在連接中注入新的流量,而且這些注入的流量會被 TCP 認(rèn)為是正確的。
?
攻擊方法4:欺騙攻擊
有一類攻擊被稱作欺騙攻擊。這類攻擊所涉及的 TCP 報文段是由攻擊者精心定制的,目的在于破壞或改變現(xiàn)有 TCP 連接的行為。在 [RFC4953] 中大量討論了此類攻擊及它們的防治技術(shù)。攻擊者可以生成一個偽造的重置報文段并將其發(fā)送給一個 TCP 通信節(jié)點(diǎn)。假定與連接相關(guān)的 4 元組以及校驗(yàn)和都是正確的,序列號也處在正確的范圍。這樣就會造成連接的任意一端失敗。隨著互聯(lián)網(wǎng)變得更快,為了維持性能被認(rèn)為?"處于窗口"?的序列號范圍也在不斷地擴(kuò)大,上述攻擊也受到越來越多的關(guān)注。欺騙攻擊還存在于其他類型的報文段(SYN,甚至 ACK )中(有時會與泛洪攻擊結(jié)合使用),引發(fā)大量的問題。相關(guān)的防御技術(shù)包括:認(rèn)證每一個報文段(例如,使用 TCP-AO?選項(xiàng)) ;要求重置報文段擁有一個特殊的序列號以代替處于某一范圍的序列號;要求時間戳選項(xiàng)具有特定的數(shù)值;使用其他形式的 cookie 文件,讓非關(guān)鍵的數(shù)據(jù)依賴于更加準(zhǔn)確的連接信息或一個秘密數(shù)值。
欺騙攻擊雖然不是 TCP 協(xié)議的一部分,但是能夠影響 TCP 的運(yùn)行。例如,?ICMP 協(xié)議能夠被用于修改路徑最大傳輸單元的發(fā)現(xiàn)行為。它也能夠被用于指出一個端口號或一臺主機(jī)已失效,從而終止一個 TCP 連接。 [RFC5927] 介紹了大量的此類攻擊,并且還提出了一些防御 ICMP 欺騙消息、提高魯棒性的方法。這些建議不僅局限于驗(yàn)證 ICMP 消息,而且還涉及其可能包含的 TCP 報文段。例如,包含的報文段應(yīng)該擁有正確的 4 元組與序列號。
總結(jié)
以上是生活随笔為你收集整理的网络安全:与 TCP 连接管理相关的网络攻击的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 安装 MySQL 5.7 并
- 下一篇: 计算机网络:子网划分、子网掩码、CIDR