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