專利名稱:防止網(wǎng)絡(luò)數(shù)據(jù)注入攻擊的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及計算機(jī)網(wǎng)絡(luò)。更具體而言,本發(fā)明涉及防止網(wǎng)絡(luò)中的數(shù)據(jù)注入攻擊。
背景技術(shù):
這一部分中描述的方法可以實現(xiàn),但是并不一定是先前已察覺或已實現(xiàn)的方法。因此,除非這里另有指明,否則這一部分中描述的方法并不是本申請中權(quán)利要求的現(xiàn)有技術(shù),也不應(yīng)當(dāng)因為被包括在這一部分中而被當(dāng)作現(xiàn)有技術(shù)。
網(wǎng)絡(luò)已經(jīng)變?yōu)槠髽I(yè)和消費者等的重要工具,許多企業(yè)和消費者當(dāng)前依賴于諸如郵件服務(wù)器、網(wǎng)站和內(nèi)容服務(wù)器之類的網(wǎng)絡(luò)資源的恒定可用性。隨著網(wǎng)絡(luò)使用的增加,保護(hù)網(wǎng)絡(luò)免受惡意實體的破壞變得更加重要。例如,拒絕服務(wù)(“DoS”)攻擊可以剝奪合法用戶對網(wǎng)絡(luò)服務(wù)的訪問權(quán)限,并且已被成功地用來破壞合法用戶對諸如Yahoo!和CNN之類的因特網(wǎng)站點的訪問。
數(shù)據(jù)注入攻擊可能導(dǎo)致DoS或其他不利影響。一種類型的數(shù)據(jù)注入攻擊利用了傳輸控制協(xié)議(“TCP”)的基本設(shè)計,TCP是因特網(wǎng)的基礎(chǔ)協(xié)議之一,如因特網(wǎng)工程任務(wù)組(IETF)請求注解(RFC)793中所定義。在數(shù)據(jù)注入攻擊中,攻擊者猜測有效TCP連接的參數(shù)值,然后發(fā)送包含惡意或偽造的數(shù)據(jù)有效載荷的偽造片段。如果接收者將這種片段傳遞給應(yīng)用,則當(dāng)應(yīng)用對數(shù)據(jù)有效載荷進(jìn)行操作或執(zhí)行數(shù)據(jù)有效載荷時,就會發(fā)生故障。
遵從RFC 793并充當(dāng)數(shù)據(jù)接收者的TCP的典型實現(xiàn)方式在重組裝緩沖器中維護(hù)亂序數(shù)據(jù),直到接收到任何遺失的片段。接收者針對每個未按正常順序接收到的指示最后的有效序列號的片段發(fā)送確認(rèn)(“ACK”)消息。發(fā)送者將未經(jīng)確認(rèn)的片段保存在重傳緩沖器中。該過程使得發(fā)送者能夠迅速重傳在傳輸中丟失的片段,因為這種片段未被確認(rèn)。
一種類型的TCP數(shù)據(jù)注入攻擊利用了用來管理按亂序到達(dá)并且在被傳遞到TCP以上的邏輯層中的應(yīng)用之前需要被重新組裝成正確順序的片段的TCP實現(xiàn)方式中的前述機(jī)制。邊界網(wǎng)關(guān)協(xié)議(BGP)、超文本傳送協(xié)議(HTTP)、某些語音協(xié)議、多協(xié)議標(biāo)簽交換(MPLS)和其他協(xié)議使用TCP連接,并且是這些攻擊的目標(biāo)。后果可能是嚴(yán)重的。例如,當(dāng)路由器的BGP會話被通過關(guān)閉相關(guān)聯(lián)的TCP連接而破壞時,路由器將會丟棄其已創(chuàng)建的所有BGP路由,從而實質(zhì)上導(dǎo)致BGP進(jìn)程發(fā)生故障。結(jié)果,BGP進(jìn)程必須使其自身和網(wǎng)絡(luò)中的對等路由器之間重新同步,并且在重新同步時段期間,故障路由器不能轉(zhuǎn)發(fā)任何流量。
此外,數(shù)據(jù)注入攻擊可能導(dǎo)致向上游進(jìn)程給出惡意命令、不必要地填充重組裝緩沖器、錯誤地操作其他更高層應(yīng)用、發(fā)起“ACK戰(zhàn)爭”等等。因此,本領(lǐng)域的研究者的興趣在于創(chuàng)建某些方式來阻止TCP數(shù)據(jù)注入攻擊,而不會從根本上改變RFC 793中指定的TCP的操作。
成功的攻擊必須注入攜帶著源端口、目的地端口的正確值的TCP片段;對于序列號和ACK號允許了某個值范圍。這些值的允許范圍是很大的,從而看起來是不可能發(fā)動涉及順次檢查每個參數(shù)的所有可能值的強(qiáng)力攻擊的。但是,在大多數(shù)TCP實現(xiàn)方式中,選擇有效值的任務(wù)是較為簡單的,因為在RFC 793中存在某些漏洞。這些漏洞在遵從RFC 793的實現(xiàn)方式中產(chǎn)生了安全性弱點。例如,為新的TCP連接分配32位偽隨機(jī)值作為初始序列號(ISN)看起來可以防止攻擊者以任何實際可行的方式猜測正確的序列號,這是因為可能正確的值的數(shù)目是232或近似40億個值。然而,如果片段的序列號落在可接受值的窗口或范圍內(nèi),則即使該序列號與下一期望序列號不是精確匹配,遵從RFC 793的傳統(tǒng)TCP實現(xiàn)方式也會接受該片段。窗口或范圍的大小就字節(jié)而言一般與重組裝緩沖器相同,并且被用來補(bǔ)償片段丟失的可能性。在某些TCP實現(xiàn)方式中,允許的序列值的范圍可以大到16,384、65,535、或者更大。
其后果是攻擊者不需要正確地生成所有32位的序列號以提供接收節(jié)點將會接受的號,即使在使用了真隨機(jī)或偽隨機(jī)ISN時也是如此。如果允許的序列值的范圍足夠大,則攻擊者可以在實際可行的時間量中通過隨機(jī)或強(qiáng)力選擇猜測出正確序列值的機(jī)會大大增加。接收節(jié)點建立的窗口越大,黑客執(zhí)行該攻擊就越容易。
此外,大多數(shù)實現(xiàn)方式對于初始端口號使用相對較小的值范圍,并且僅為每個新連接遞增端口號。結(jié)果,利用普通的計算資源,攻擊者就可以相對容易地猜測出合法TCP連接的兩個端點所使用的端口值。
由于大多數(shù)TCP實現(xiàn)方式并不測試ACK值是否等于期望ACK值,或者甚至是否在允許的ACK值的范圍內(nèi),因此會出現(xiàn)另一個弱點。相反,許多實現(xiàn)方式會接受任何攜帶著大于前一個接收到的ACK值的ACK值的片段,只要序列號在允許的范圍內(nèi)。RFC 793將ACK值定義為范圍1至232內(nèi)的無符號整數(shù)。從而,猜測出允許的序列號的攻擊者可以通過只嘗試兩個ACK值-一(1)或232-1(其中之一肯定會被接受),就能成功進(jìn)行數(shù)據(jù)注入攻擊。
前述折衷的結(jié)果是在大多數(shù)實現(xiàn)方式中,攻擊者理論上可以在(232/窗口大小/2)個片段或大約30,000個片段中將數(shù)據(jù)注入到連接中。因此,即使是強(qiáng)力攻擊也可以利用傳統(tǒng)的計算設(shè)備相對快速地進(jìn)行。
用于防止網(wǎng)絡(luò)DoS重置攻擊的方法在Mitesh Dalal等人2004年1月9日提交的題為“Preventing Network Reset Denial of Service Attacks”的未決申請No.NNN、律師案卷號No.50325-0868中有所描述。一種用于解決類似攻擊(被稱為SYN-RST攻擊)的方法在Pritam Shah等人2003年8月14日提交的題為“Detecting network denial of service attacks”的未決申請No.10/641,494中提供,該申請與本申請被轉(zhuǎn)讓給同一受讓人。Shah等人的方法適合于中間路由器而不是TCP端點設(shè)備,但是沒有完全解決在本公開中描述的所有問題。
在附圖中以示例方式而非以限制方式圖示了本發(fā)明,在附圖中,相似的標(biāo)號指代類似的元件,在附圖中
圖1是示出一種用于進(jìn)行TCP數(shù)據(jù)注入攻擊的技術(shù)的消息流程圖;圖2是示出用于在到達(dá)后丟棄數(shù)據(jù)片段的方法的流程圖;圖3是示出用于基于重疊從重組裝緩沖器中去除偽造的數(shù)據(jù)片段的方法的流程圖;圖4是示出圖3的操作的示例的框圖;圖5是示出可以實現(xiàn)實施例的計算機(jī)系統(tǒng)的框圖。
具體實施例方式
本發(fā)明描述了一種用于防止網(wǎng)絡(luò)數(shù)據(jù)注入攻擊的方法和裝置。在下面的描述中,為了說明目的,給出了大量具體細(xì)節(jié)以提供對本發(fā)明的完全理解。但是,本領(lǐng)域技術(shù)人員將會清楚,沒有這些具體細(xì)節(jié)也可以實施本發(fā)明。在其他實例中,公知的結(jié)構(gòu)和設(shè)備以框圖形式示出,以避免不必要地模糊本發(fā)明。
這里根據(jù)下面的大綱描述實施例1.0概述2.0用于防止網(wǎng)絡(luò)數(shù)據(jù)注入攻擊的方法2.1用于在到達(dá)后丟棄數(shù)據(jù)片段的方法2.2用于基于重疊從重組裝緩沖器中去除偽造的數(shù)據(jù)片段的方法3.0實現(xiàn)機(jī)構(gòu)—硬件概述4.0擴(kuò)展和替換1.0概述僅作為導(dǎo)論,并且并不是要限制所附權(quán)利要求的范圍,在本發(fā)明中實現(xiàn)了在前述背景技術(shù)中提出的需要,以及將從下面的描述中變清楚的其他需要和目的,本發(fā)明在一個方面包括一種用于防止網(wǎng)絡(luò)上的攻擊的方法,其中所述攻擊包括向發(fā)送者和接收者之間的TCP連接中注入偽造的傳輸控制協(xié)議(TCP)片段,該方法包括以下由計算機(jī)實現(xiàn)的步驟接收攜帶ACK值的TCP片段;確定該ACK值是否小于下一個未確認(rèn)序列值和與TCP連接相關(guān)聯(lián)的最大窗口大小之間的差;以及當(dāng)該ACK值小于下一個未確認(rèn)序列值與到目前為止發(fā)送的片段總數(shù)或與TCP連接相關(guān)聯(lián)的最大窗口大小中較小的那個之間的差時,丟棄TCP片段。
第二種方法包括接收攜帶序列值的第一TCP片段;確定該序列值是否等于下一個期望序列值;當(dāng)該序列值等于下一個期望序列值時,確定第一TCP片段中攜帶的數(shù)據(jù)是否與重組裝緩沖器中先前接收到的一個或多個第二TCP片段中攜帶的數(shù)據(jù)重疊;當(dāng)?shù)谝籘CP片段與重組裝緩沖器中先前接收到的任何數(shù)據(jù)片段重疊時,丟棄所述一個或多個第二TCP片段。
在其他方面中,本發(fā)明包含被配置用來執(zhí)行前述步驟的計算機(jī)裝置和計算機(jī)可讀介質(zhì)。另外,許多其他的特征和方面將從下面的描述和所附權(quán)利要求中變清楚。
2.0用于防止TCP拒絕服務(wù)攻擊的方法描述了若干種用于防止網(wǎng)絡(luò)數(shù)據(jù)注入攻擊的方法。第一方法規(guī)定丟棄接收到的攜帶這樣的ACK值的片段該ACK值小于下一個未確認(rèn)序列值減去最大窗口大小。術(shù)語“小于”在這里用在可能發(fā)生卷繞的無符號整數(shù)值的上下文中。這種方法有助于使偽造的注入片段不能進(jìn)入TCP重組裝緩沖器。充當(dāng)接收者的TCP進(jìn)程的邏輯只需要有微小改動。在第二種方法中,采用了試探法來檢查新到達(dá)的片段的序列號,并且當(dāng)序列號是下一個期望序列號時,則使用新到達(dá)的片段并且不考慮重組裝緩沖器的內(nèi)容。此外,如果新到達(dá)的片段的數(shù)據(jù)有效載荷在順序上重疊已經(jīng)在重組裝緩沖器中的片段,則重組裝緩沖器中的重疊片段被認(rèn)為是偽造的,并且被丟棄。從而,如果第一方法出于某種原因未能防止數(shù)據(jù)進(jìn)入重組裝緩沖器,則此方法有助于從重組裝緩沖器中去除偽造的數(shù)據(jù)。
2.1用于在到達(dá)后丟棄數(shù)據(jù)片段的方法現(xiàn)參考圖1和圖2描述用于防止TCP數(shù)據(jù)注入攻擊的第一方法。圖1是圖示一種用于進(jìn)行TCP數(shù)據(jù)注入攻擊的技術(shù)的消息流程圖。圖2是圖示一種用于在到達(dá)后丟棄數(shù)據(jù)片段的方法的流程圖。
圖2的用于導(dǎo)致圖1的示例所示的消息流程的過程可以實現(xiàn)在一個或多個計算機(jī)程序、指令序列或其他軟件元素中,這些軟件元素由充當(dāng)TCP連接中的端點的網(wǎng)絡(luò)元件執(zhí)行。例如,圖2可以實現(xiàn)為路由器、交換機(jī)或網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)的其他元件的操作系統(tǒng)的TCP應(yīng)用或特征的一部分?;蛘撸瑘D2可以實現(xiàn)為由個人計算機(jī)、工作站或其他網(wǎng)絡(luò)末端臺站的操作系統(tǒng)容宿的或與之相關(guān)聯(lián)的TCP進(jìn)程、棧、適配器或代理。
在圖1中,發(fā)送者102、攻擊者104和接收者106代表TCP連接中的端點。發(fā)送者102、攻擊者104和接收者106可以包括路由器、交換機(jī)、集線器、網(wǎng)關(guān)、個人計算機(jī)、工作站、服務(wù)器或者連接到或可以連接到網(wǎng)絡(luò)或與網(wǎng)絡(luò)通信的其他設(shè)備。攻擊者104是將一個或多個有害的或偽造的分段注入到已在發(fā)送者102和接收者106之間建立的TCP流或連接中的任何實體。攻擊者104可以包括工作站、個人計算機(jī)、路由器、交換機(jī)或其他處理元件。
發(fā)送者102、接收者106和攻擊者104加入一個或多個網(wǎng)絡(luò)。另外,發(fā)送者102、接收者106和攻擊者104可以處于局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、一個或多個互聯(lián)網(wǎng)、或者其中使用傳輸控制協(xié)議(TCP)來建立網(wǎng)絡(luò)元件之間的連接的任何其他種類的網(wǎng)絡(luò)或其子集中,或者可以通過這些網(wǎng)絡(luò)被訪問。這種網(wǎng)絡(luò)可以包括附加的網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)元件(如路由器、交換機(jī)等)和其他末端臺站設(shè)備(如工作站、打印機(jī)、服務(wù)器等)。在一種實現(xiàn)方式中,發(fā)送者102、接收者106和攻擊者104都通信地耦合到諸如互聯(lián)網(wǎng)之類的公共分組交換網(wǎng)絡(luò)。
發(fā)送者102、接收者106和攻擊者104可以連接到附加的網(wǎng)絡(luò)元件。其他實施例可以包括比圖示情形更少或更多的系統(tǒng)組件。具體而言,在實際系統(tǒng)中可以有任何數(shù)目的網(wǎng)絡(luò)元件。
為了描述圖1,假設(shè)發(fā)送者102和接收者106僅實現(xiàn)RFC 793中所定義的TCP,并且使用4000的窗口大小。發(fā)送者102向接收者106發(fā)送SeqNo(序列號)為101、ACK值為5005并且具有441字節(jié)數(shù)據(jù)的片段110。接收者106發(fā)送具有SeqNo 5005和ACK 543的確認(rèn)消息112。在本描述中,提到諸如“SeqNo 543”或“ACK 5005”分別是對TCP片段攜帶有為543的序列號值和為5005的確認(rèn)值的簡稱。
接下來,攻擊者104發(fā)送具有SeqNo 3000、ACK 0x2000000(33,554,432)和256字節(jié)惡意數(shù)據(jù)的片段114。攻擊者104是在不知道當(dāng)前被發(fā)送者102和接收者106用于TCP連接的序列號的情況下猜測SeqNo3000的,并且SeqNo 3000是允許的SeqNo值,因為(3000<543+4000)。通常不對ACK值進(jìn)行窗口大小比較,因此處于2,147,488,649到4,294,967,295以及0到5001的范圍中的ACK值都是可接受的。攻擊者104還確定或猜測出發(fā)送者102和接收者106的網(wǎng)絡(luò)地址,例如它們的IP地址,以及用于當(dāng)前連接的端口號。地址和端口值被置于偽造的片段114中,但為清晰起見被省略。由于攻擊者104不確定ACK值0x2000000(33,554,432)是否適當(dāng),因此攻擊者104還發(fā)送了具有相同SeqNo 3000但具有ACK值0x82000000(2,181,038,080)的片段116。
在步驟118,接收者106接受片段116,但丟棄片段114,因為其ACK值不可接受。接收者然后通過發(fā)送具有SeqNo 5005和ACK 543的片段120來確認(rèn)片段116。使用SeqNo 5005是因為片段112是接收到的最后一個順序正確的片段,并且接收者106需要表明它正在等待緊隨其后的片段,即使它已經(jīng)接收到了看起來是從處于流中較遠(yuǎn)處接收來的片段116。在沒有防御方法的情況下,如步驟122中所示,片段116最終被轉(zhuǎn)發(fā)到使用、依賴于或執(zhí)行片段116中的數(shù)據(jù)的應(yīng)用,并且可能對其造成危害。
現(xiàn)參考圖2,在這里的第一種防止方法中,在步驟202中,接收到TCP片段。在步驟204中,執(zhí)行測試以確定接收到的片段中攜帶的ACK值是否小于下一個發(fā)送但未確認(rèn)的序列值(按RFC 793的說法是snduna)減去到目前為止發(fā)送的片段的總數(shù)或與TCP連接相關(guān)聯(lián)的最大窗口大小中較小的那個的差。在一個實施例中,表達(dá)式min(snduna-isn,max windowsize)得出與未確認(rèn)序列值相比較的值。
最大窗口大小值反映對等體可管理的最大窗口大小。對于特定的片段交換,允許的窗口大小可以被改為另一窗口大小,但是即使發(fā)生這種調(diào)整,在步驟204的測試中也使用最大窗口大小。從而步驟204對照過去的有效ACK值的窗口來測試接收到的片段的ACK值。要使步驟204得出真性結(jié)果,有效ACK值不能比下一個期望序列值晚一個窗口以上。
相反,現(xiàn)有方法容許具有任何在序列值空間的一半以內(nèi)并且早于下一個未確認(rèn)序列值的ACK值的片段(假如序列值本身在進(jìn)入窗口內(nèi))。在這種情況下,RFC 793允許接收者忽略ACK。RFC 793只要求如果接收到的ACK值大于接收者所期望的值,則接收者必須發(fā)回指定期望ACK值的ACK片段。RFC 793缺少嚴(yán)格的用于處理早于期望值的ACK值的要求,這給攻擊者提供了給出將被接受的偽造片段的可能性。
如果步驟204的測試為真,則在步驟206中,片段被丟棄,并且不被轉(zhuǎn)發(fā)到應(yīng)用,或者被置于重組裝緩沖器,以便進(jìn)行可能的重排序和后續(xù)轉(zhuǎn)發(fā)。如果步驟204的測試為假,則在步驟208中,對接收到的片段執(zhí)行其他TCP片段處理。
在一種替換方案中,步驟204的測試不允許ACK值落在窗口內(nèi),而是測試接收到的TCP片段的ACK值是否確切等于期望ACK值或小于初始窗口的值范圍。如果未發(fā)現(xiàn)確切匹配,則傳入片段被丟棄。這種替換方案可能導(dǎo)致接收者丟棄在其他有效但被延遲的數(shù)據(jù)之前到達(dá)的數(shù)據(jù),這是因為當(dāng)較早的數(shù)據(jù)到達(dá)時,接收者需要發(fā)送者尚未遇到的ACK值。結(jié)果,這種方法可能迫使發(fā)送者執(zhí)行重傳。但是,在已知易受攻擊影響的網(wǎng)絡(luò)環(huán)境中,這種缺陷可能是可以接受的,因為它實現(xiàn)了提高攻擊抵抗力的益處。
利用前述方法,偽造的片段被保持在重組裝緩沖器之外,并且不被轉(zhuǎn)發(fā)到偽造片段可能對其造成問題的更高層應(yīng)用或進(jìn)程。具體而言,利用本方法,僅當(dāng)片段的序列號在可接受窗口內(nèi)并且其ACK值正確的情況下,片段才被接受。
2.2用于基于重疊從重組裝緩沖器中去除偽造的數(shù)據(jù)片段的方法圖3是圖示一種用于基于重疊從重組裝緩沖器中去除偽造的數(shù)據(jù)片段的方法;圖4是示出圖3的操作的示例的框圖。一般來說,圖3提供了一種通過檢測片段是偽造的來從TCP重組裝緩沖器中去除不正確注入的片段的方法,其中檢測出片段是偽造的是因為它們不正確地重疊了與先前接收到的正確確認(rèn)的片段相關(guān)聯(lián)的數(shù)據(jù)。
首先參考圖3,步驟302-304代表被描述來提供由后續(xù)步驟代表的解決方案的上下文的預(yù)備步驟。在步驟302中,接收到順序正確的第一TCP片段。該片段被轉(zhuǎn)發(fā)到應(yīng)用,并且下一個期望序列號值在存儲器中被更新。在步驟302中使用術(shù)語“第一”是為了表示步驟302的片段發(fā)生在步驟304和步驟306的片段之前,但是步驟302的片段可以在TCP連接建立之后的任何時間到達(dá),并不需要是完成TCP握手階段之后實際接收到的第一個片段。在步驟304中,接收到順序混亂的第二片段,因此第二片段被存儲在重組裝緩沖器中。
在步驟306中,接收到第三片段。在步驟308中,執(zhí)行測試以確定第三片段所攜帶的SeqNo值是否等于下一期望SeqNo值。步驟308還可以包括核實第三片段的SeqNo與其數(shù)據(jù)長度之和與重組裝緩沖器中的其他片段確切地對齊。如果否,則在步驟309中應(yīng)用針對亂序片段的傳統(tǒng)處理。如果SeqNo值正是下一個期望值,則第三片段被視為來自當(dāng)前連接中的合法發(fā)送者的可信片段。第三片段被視為可信是因為攻擊者猜測出并發(fā)送確切的下一期望SeqNo值的機(jī)率是1/232。
因此,在步驟310中,執(zhí)行測試以確定第三片段是否與已經(jīng)在重組裝緩沖器中的任何片段重疊。在此上下文中,“重疊”是指第三片段中攜帶的SeqNo和數(shù)據(jù)長度之和與重組裝緩沖器中的任何片段的SeqNo重疊。在某些情況下,第三傳入片段可能與可能來自攻擊者的多個片段重疊。如果沒有重疊,則在步驟316中,執(zhí)行緩沖器和第三片段的常規(guī)重組裝處理。
但是,如果發(fā)現(xiàn)重疊,則先前接收到重組裝緩沖器中的重疊的片段被視為偽造的片段,并且第三片段被視為真實片段。重疊指示偽造片段已被接收到重組裝緩沖器中,這是因為當(dāng)連續(xù)的SeqNo值被與流中的前一片段的數(shù)據(jù)長度大小相比較時,一組真實片段最終在順序上將會確切對齊。此外,攻擊者需要猜測SeqNo值,因此重疊的存在有力地表明SeqNo已經(jīng)被猜測出,并且相關(guān)聯(lián)的片段是偽造的。步驟310中發(fā)現(xiàn)的重疊可以是完全重疊或部分重疊。在步驟312,從重組裝緩沖器中丟棄偽造的片段。
在步驟313中,發(fā)送ACK消息,ACK消息攜帶第三片段的SeqNo。在步驟314中,正常TCP處理繼續(xù)開始。這種處理可以包括重傳,這種重傳通過要求發(fā)送者重傳處于丟棄的偽造片段所覆蓋的范圍內(nèi)的數(shù)據(jù),來幫助確保重組裝緩沖器中只包含有效數(shù)據(jù)。
現(xiàn)聯(lián)系圖4圖說明一個示例。具有SeqNo 201和100字節(jié)數(shù)據(jù)的亂序片段先前已被接收到重組裝緩沖器402中,如標(biāo)號1所示。如標(biāo)號2所示,下一個期望序列號為101,這就是片段404被視為順序混亂的原因。
在標(biāo)號3,片段406到達(dá),其具有SeqNo 101和150字節(jié)數(shù)據(jù)。SeqNo值101正是期望的下一SeqNo值,因此步驟308(圖3)的測試對于片段406來說為真。此外,101和150的和為251,這與片段404所攜帶的值201重疊。由于片段406因其攜帶確切的下一期望序列號而被視為可信的,因此片段404被視為偽造的并且被丟棄,如標(biāo)號4所示。然后發(fā)送具有SeqNo 251的ACK片段,以確認(rèn)片段406。
從而,前述方法去除了被不小心接收到重組裝緩沖器中的偽造的注入數(shù)據(jù)片段。該方法可以單獨實現(xiàn),或與此處2.1節(jié)的方法結(jié)合實現(xiàn)。
3.0實現(xiàn)機(jī)構(gòu)—硬件概述圖5是示出可以實現(xiàn)實施例的計算機(jī)系統(tǒng)700的框圖。優(yōu)選實施例是利用運行在諸如路由器設(shè)備之類的網(wǎng)絡(luò)元件上的一個或多個計算機(jī)程序?qū)崿F(xiàn)的。從而,在該實施例中,計算機(jī)系統(tǒng)700是路由器。
計算機(jī)系統(tǒng)700包括用于傳輸信息的總線702或其他通信機(jī)構(gòu)和與總線702相耦合用于處理信息的處理器704。計算機(jī)系統(tǒng)700還包括諸如隨機(jī)存取存儲器(RAM)、閃存或其他動態(tài)存儲設(shè)備之類的主存儲器706,其耦合到總線702,用于存儲信息和處理器704要執(zhí)行的指令。主存儲器706還可用于存儲在處理器704執(zhí)行指令期間的臨時變量或其他中間信息。計算機(jī)系統(tǒng)700還包括只讀存儲器(ROM)708或其他靜態(tài)存儲設(shè)備,其耦合到總線702,用于存儲靜態(tài)信息和處理器704的指令。提供了諸如磁盤、閃存或光盤之類的存儲設(shè)備710,其耦合到總線702,用于存儲信息和指令。
通信接口718可以耦合到總線702,用于將信息和命令選擇傳輸?shù)教幚砥?04。接口718是諸如RS-232或RS-422接口之類的傳統(tǒng)串行接口。外部終端712或其他計算機(jī)系統(tǒng)利用接口714連接到計算機(jī)系統(tǒng)700并向其提供命令。運行在計算機(jī)系統(tǒng)700中的固件或軟件提供終端接口或基于字符的命令接口,從而可以向計算機(jī)系統(tǒng)給出外部命令。
交換系統(tǒng)716耦合到總線702,并且具有去往一個或多個外部網(wǎng)絡(luò)元件的輸入接口714和輸出接口719。外部網(wǎng)絡(luò)元件可以包括耦合到一個或多個主機(jī)724的本地網(wǎng)絡(luò)722,或者諸如因特網(wǎng)728之類的具有一個或多個服務(wù)器730的全球網(wǎng)絡(luò)。交換系統(tǒng)716根據(jù)公知的預(yù)定協(xié)議和協(xié)定將到達(dá)輸入接口714的信息流量交換到輸出接口719。例如,交換系統(tǒng)716與處理器704協(xié)同操作可以確定到達(dá)輸入接口714的數(shù)據(jù)分組的目的地,并利用輸出接口719將其發(fā)送到正確的目的地。目的地可以包括主機(jī)724、服務(wù)器730、其他末端臺站或者本地網(wǎng)絡(luò)722或因特網(wǎng)728中的其他路由和交換設(shè)備。
本發(fā)明涉及使用計算機(jī)系統(tǒng)700來實現(xiàn)這里的方法。根據(jù)本發(fā)明的一個實施例,這里的方法的實現(xiàn)方式由計算機(jī)系統(tǒng)700響應(yīng)于處理器704執(zhí)行包含在主存儲器706中的一條或多條指令的一個或多個序列而提供。這些指令可以被從另一計算機(jī)可讀介質(zhì)(如存儲設(shè)備710)讀取到主存儲器706中。包含在主存儲器706中的指令序列的執(zhí)行使得處理器704執(zhí)行這里描述的過程步驟。也可以采用多處理布置中的一個或多個處理器來執(zhí)行包含在主存儲器706中的指令序列。在替換實施例中,可以使用硬線電路來替換軟件指令或與軟件指令相組合以實現(xiàn)本發(fā)明。從而,本發(fā)明的實施例并不限于硬件電路和軟件的任何特定組合。
這里所用的術(shù)語“計算機(jī)可讀介質(zhì)”指參與向處理器704提供指令以供執(zhí)行的任何介質(zhì)。這種介質(zhì)可以采取許多形式,包括但不限于非易失性介質(zhì)、易失性介質(zhì)和傳輸介質(zhì)。非易失性介質(zhì)例如包括光盤或磁盤,如存儲設(shè)備710。易失性介質(zhì)包括動態(tài)存儲器,如主存儲器706。傳輸介質(zhì)包括同軸電纜、銅線和光纖,包括含總線702的線路。傳輸介質(zhì)也可以采取聲波或光波的形式,例如在無線電波和紅外數(shù)據(jù)通信期間生成的聲波或光波。
計算機(jī)可讀介質(zhì)的常見形式例如包括軟盤、柔性盤、硬盤、磁帶或任何其他磁介質(zhì),CD-ROM、任何其他光介質(zhì),穿孔卡、紙帶、任何其他具有孔圖案的物理介質(zhì),RAM、PROM和EPROM、FLASH-EPROM、任何其他存儲器芯片或卡盤,下文中描述的載波,或者計算機(jī)可以讀取的任何其他介質(zhì)。
計算機(jī)可讀介質(zhì)的各種形式可用于將一條或多條指令的一個或多個序列傳輸?shù)教幚砥?04以供執(zhí)行。例如,指令可以首先承載在遠(yuǎn)程計算機(jī)的磁盤上。遠(yuǎn)程計算機(jī)可以將指令加載到其動態(tài)存儲器中,并利用調(diào)制解調(diào)器經(jīng)由電話線發(fā)送指令。計算機(jī)系統(tǒng)700本地的調(diào)制解調(diào)器可以接收電話線上的數(shù)據(jù),并使用紅外發(fā)送器來將數(shù)據(jù)轉(zhuǎn)換為紅外信號。耦合到總線702的紅外檢測器可以接收在紅外信號中攜帶的數(shù)據(jù),并將數(shù)據(jù)置于總線702上??偩€702將數(shù)據(jù)傳輸?shù)街鞔鎯ζ?06,處理器704從主存儲器706取得指令并執(zhí)行指令。主存儲器706接收的指令可以可選地在處理器704執(zhí)行之前或之后存儲到存儲設(shè)備710上。
通信接口718也提供到連接到本地網(wǎng)絡(luò)722的網(wǎng)絡(luò)鏈路720的雙向數(shù)據(jù)通信耦合。例如,通信接口718可以是集成業(yè)務(wù)數(shù)字網(wǎng)絡(luò)(ISDN)卡或調(diào)制解調(diào)器,以提供到相應(yīng)類型電話線的數(shù)字通信連接。作為另一個示例,通信接口718可以是局域網(wǎng)(LAN)卡,以提供到兼容LAN的數(shù)據(jù)通信連接。也可以實現(xiàn)無線鏈路。在任何這種實現(xiàn)方式中,通信接口718發(fā)送并接收電的、電磁的或光信號,這些信號攜帶了代表各種類型信息的數(shù)字?jǐn)?shù)據(jù)流。
網(wǎng)絡(luò)鏈路720一般經(jīng)過一個或多個網(wǎng)絡(luò)提供到其他數(shù)據(jù)設(shè)備的數(shù)據(jù)通信。例如,網(wǎng)絡(luò)鏈路720可以經(jīng)過本地網(wǎng)絡(luò)722提供到主機(jī)計算機(jī)724或由因特網(wǎng)服務(wù)供應(yīng)商(ISP)726操作的數(shù)據(jù)設(shè)備的連接。ISP 726又經(jīng)過全球分組數(shù)據(jù)通信網(wǎng)絡(luò)(現(xiàn)在通常稱為“因特網(wǎng)”728)提供數(shù)據(jù)通信服務(wù)。本地網(wǎng)絡(luò)722和因特網(wǎng)728都使用攜帶數(shù)字?jǐn)?shù)據(jù)流的電的、電磁的或光信號。經(jīng)過各種網(wǎng)絡(luò)的信號和在網(wǎng)絡(luò)鏈路720上并經(jīng)過通信接口718的信號(這些信號攜帶去往和來自計算機(jī)系統(tǒng)700的數(shù)字?jǐn)?shù)據(jù))是傳輸信息的載波的示例性形式。
計算機(jī)系統(tǒng)700可以經(jīng)過網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路720和通信接口718發(fā)送消息并接收數(shù)據(jù),包括程序代碼。在因特網(wǎng)示例中,服務(wù)器730可以經(jīng)過因特網(wǎng)728、ISP 726、本地網(wǎng)絡(luò)722和通信接口718發(fā)送針對應(yīng)用程序的請求代碼。根據(jù)本發(fā)明,一個這種下載的應(yīng)用程序提供了如這里所述的檢測網(wǎng)絡(luò)數(shù)據(jù)注入攻擊的方法。
處理器704可以在接收時執(zhí)行所接收的代碼,和/或?qū)⑵浯鎯υ诖鎯υO(shè)備710或其他非易失性存儲介質(zhì)中以供后續(xù)執(zhí)行。以這種方式,計算機(jī)系統(tǒng)700可以獲得載波形式的應(yīng)用代碼。
4.0擴(kuò)展和替換在前述說明書中,已參考特定實施例描述了本發(fā)明。但是,應(yīng)當(dāng)清楚,在不脫離本發(fā)明更寬廣的精神和范圍的前提下,可以進(jìn)行各種修改和改變。因此,說明書和附圖都應(yīng)當(dāng)認(rèn)為是示例性的,而非限制性的。
權(quán)利要求
1.一種防止網(wǎng)絡(luò)上的攻擊的方法,其中所述攻擊包括向發(fā)送者和接收者之間的TCP連接中注入偽造的傳輸控制協(xié)議(TCP)片段,所述方法包括以下由計算機(jī)實現(xiàn)的步驟接收攜帶ACK值的TCP片段;確定所述ACK值是否小于下一個未確認(rèn)序列值與(a)所述TCP連接中發(fā)送的字節(jié)的總數(shù)或(b)與所述TCP連接相關(guān)聯(lián)的最大窗口大小中較小的那個之間的差;以及當(dāng)所述ACK值小于下一個未確認(rèn)序列值與(a)所述TCP連接中發(fā)送的字節(jié)的總數(shù)或(b)與所述TCP連接相關(guān)聯(lián)的最大窗口大小中較小的那個之間的差時,丟棄所述TCP片段。
2.如權(quán)利要求1所述的方法,其中所述步驟由充當(dāng)所述TCP連接中的數(shù)據(jù)的接收者的端點節(jié)點執(zhí)行。
3.如權(quán)利要求1所述的方法,其中所述步驟由網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)元件的操作系統(tǒng)的TCP應(yīng)用執(zhí)行。
4.如權(quán)利要求1所述的方法,其中所述步驟由個人計算機(jī)、工作站或其他網(wǎng)絡(luò)末端臺站的操作系統(tǒng)所容宿的或與之相關(guān)聯(lián)的TCP進(jìn)程、棧、適配器或代理執(zhí)行。
5.如權(quán)利要求1所述的方法,其中所述最大窗口大小包括所述TCP連接中的端點節(jié)點能夠管理的最大TCP序列值窗口大小,而不考慮所述TCP連接期間任一端點可能建立的當(dāng)前窗口大小的任何變化。
6.如權(quán)利要求1所述的方法,其中所述確定步驟包括確定所述ACK值是否等于期望ACK值或小于初始序列值窗口的值范圍;以及其中所述丟棄步驟包括在所述ACK值等于期望ACK值或小于初始序列值窗口的值范圍時丟棄所述TCP片段。
7.一種防止網(wǎng)絡(luò)上的攻擊的方法,其中所述攻擊包括向發(fā)送者和接收者之間的TCP連接中注入偽造的傳輸控制協(xié)議(TCP)片段,所述方法包括以下由計算機(jī)實現(xiàn)的步驟接收攜帶序列值的第一TCP片段;確定所述序列值是否等于下一個期望序列值;當(dāng)所述序列值等于下一個期望序列值時,確定所述第一TCP片段中攜帶的數(shù)據(jù)是否與重組裝緩沖器中先前接收到的一個或多個第二TCP片段中攜帶的數(shù)據(jù)重疊;以及當(dāng)所述第一TCP片段與所述重組裝緩沖器中先前接收到的任何數(shù)據(jù)片段重疊時,丟棄所述一個或多個第二TCP片段。
8.如權(quán)利要求7所述的方法,其中所述丟棄步驟丟棄所述重組裝緩沖器中的所有TCP片段。
9.如權(quán)利要求7所述的方法,其中,當(dāng)所述第一TCP片段中攜帶的第一序列值和數(shù)據(jù)長度的第一總和小于所述第二片段中的任何一個中攜帶的第二序列值時,所述第一TCP片段中攜帶的數(shù)據(jù)與所述重組裝緩沖器中先前接收到的所述一個或多個第二TCP片段重疊。
10.如權(quán)利要求7所述的方法,其中所述丟棄步驟是在所述第一TCP片段與所述重組裝緩沖器中先前接收到的任何數(shù)據(jù)片段完全重疊時執(zhí)行的。
11.如權(quán)利要求7所述的方法,還包括以下步驟發(fā)送確認(rèn)所述第一TCP片段的數(shù)據(jù)和序列值的確認(rèn)消息。
12.如權(quán)利要求7所述的方法,其中所述步驟由充當(dāng)所述TCP連接中的數(shù)據(jù)的接收者的端點節(jié)點執(zhí)行。
13.如權(quán)利要求7所述的方法,其中所述步驟由網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)元件的操作系統(tǒng)的TCP應(yīng)用執(zhí)行。
14.如權(quán)利要求7所述的方法,其中所述步驟由個人計算機(jī)、工作站或其他網(wǎng)絡(luò)末端臺站的操作系統(tǒng)所容宿的或與之相關(guān)聯(lián)的TCP進(jìn)程、棧、適配器或代理執(zhí)行。
15.一種用于防止網(wǎng)絡(luò)上的攻擊的裝置,其中所述攻擊包括發(fā)送具有偽造的或有害的數(shù)據(jù)的偽造的傳輸控制協(xié)議(TCP)片段,所述裝置包括用于接收攜帶ACK值的TCP片段的裝置;用于確定所述ACK值是否小于下一個未確認(rèn)序列值與(a)所述TCP連接中發(fā)送的字節(jié)的總數(shù)或(b)與所述TCP連接相關(guān)聯(lián)的最大窗口大小中較小的那個之間的差的裝置;以及用于當(dāng)所述ACK值小于下一個未確認(rèn)序列值與(a)所述TCP連接中發(fā)送的字節(jié)的總數(shù)或(b)與所述TCP連接相關(guān)聯(lián)的最大窗口大小中較小的那個之間的差時,丟棄所述TCP片段的裝置。
16.如權(quán)利要求15所述的裝置,還包括用于執(zhí)行如權(quán)利要求2、3、4、5、6、7、8、9、10、11、12、13或14所述的步驟中的任何步驟的裝置。
17.一種用于防止網(wǎng)絡(luò)上的攻擊的裝置,其中所述攻擊包括發(fā)送具有偽造的或有害的數(shù)據(jù)的偽造的傳輸控制協(xié)議(TCP)片段,所述裝置包括處理器;所述處理器可訪問的一個或多個存儲的指令序列,所述指令序列當(dāng)被所述處理器執(zhí)行時,使得所述處理器執(zhí)行以下步驟接收攜帶ACK值的TCP片段;確定所述ACK值是否小于下一個未確認(rèn)序列值與(a)所述TCP連接中發(fā)送的字節(jié)的總數(shù)或(b)與所述TCP連接相關(guān)聯(lián)的最大窗口大小中較小的那個之間的差;以及當(dāng)所述ACK值小于下一個未確認(rèn)序列值與(a)所述TCP連接中發(fā)送的字節(jié)的總數(shù)或(b)與所述TCP連接相關(guān)聯(lián)的最大窗口大小中較小的那個之間的差時,丟棄所述TCP片段。
18.如權(quán)利要求17所述的裝置,還包括能夠被所述處理器訪問的并且在被所述處理器執(zhí)行時使得所述處理器執(zhí)行如權(quán)利要求2、3、4、5、6、7、8、9、10、11、12、13或14所述的步驟中的任何步驟的指令序列。
19.一種承載一個或多個指令序列的計算機(jī)可讀介質(zhì),所述指令序列用于防止網(wǎng)絡(luò)上的攻擊,其中所述攻擊包括發(fā)送具有有害的或偽造的數(shù)據(jù)的偽造的傳輸控制協(xié)議(TCP)分組,并且一個或多個處理器執(zhí)行所述一個或多個指令序列使得所述一個或多個處理器執(zhí)行以下步驟接收攜帶ACK值的TCP片段;確定所述ACK值是否小于下一個未確認(rèn)序列值與(a)所述TCP連接中發(fā)送的字節(jié)的總數(shù)或(b)與所述TCP連接相關(guān)聯(lián)的最大窗口大小中較小的那個之間的差;以及當(dāng)所述ACK值小于下一個未確認(rèn)序列值與(a)所述TCP連接中發(fā)送的字節(jié)的總數(shù)或(b)與所述TCP連接相關(guān)聯(lián)的最大窗口大小中較小的那個之間的差時,丟棄所述TCP片段。
20.如權(quán)利要求19所述的計算機(jī)可讀介質(zhì),還包括能夠被所述處理器訪問的并且在被所述處理器執(zhí)行時使得所述處理器執(zhí)行如權(quán)利要求2、3、4、5、6、7、8、9、10、11、12、13或14所述的步驟中的任何步驟的指令序列。
全文摘要
本發(fā)明公開了用于防止分組交換網(wǎng)絡(luò)中的TCP數(shù)據(jù)注入攻擊的方法。第一方法規(guī)定丟棄接收到的攜帶這樣的ACK值的片段該ACK值小于下一個未確認(rèn)序列值減去最大窗口大小。這種方法有助于使偽造的注入片段不能進(jìn)入TCP重組裝緩沖器。在第二種方法中,采用了試探法來檢查新到達(dá)的片段的序列號,并且當(dāng)序列號是下一個期望序列號時,則使用新到達(dá)的片段并且不考慮重組裝緩沖器的內(nèi)容。此外,如果新到達(dá)的片段的數(shù)據(jù)有效載荷在順序上重疊已經(jīng)在重組裝緩沖器中的片段,則重組裝緩沖器中的重疊片段被認(rèn)為是偽造的,并且被丟棄。從而,如果第一方法出于某種原因未能防止數(shù)據(jù)進(jìn)入重組裝緩沖器,則此方法有助于從重組裝緩沖器中去除偽造的數(shù)據(jù)。
文檔編號G06F15/16GK1906884SQ200580001600
公開日2007年1月31日 申請日期2005年1月11日 優(yōu)先權(quán)日2004年1月16日
發(fā)明者阿納恩薩·拉邁阿, 蘭德爾·斯圖爾特, 彼得·李, 帕特里克·梅翰 申請人:思科技術(shù)公司