1. 程式人生 > >泛洪攻擊的幾種方式

泛洪攻擊的幾種方式

轉載原文出處:https://blog.csdn.net/shixin_0125/article/details/78829061

ICMP泛洪

ICMP泛洪(ICMP flood)是利用ICMP報文 進行攻擊的一種方法。如果攻擊者向目標主機發 送大量的ICMP ECHO報文,將產生ICMP泛洪, 目標主機會將大量的時間和資源用於處理ICMP ECHO報文,而無法處理正常的請求或響應,從而實現對目標主機的攻擊。

ICMP反射泛洪:

Smurf IP利用廣播地址傳送ICMP包,一旦廣播出去,就會被廣播域內的所有主機迴應,當然這些包都回應給了偽裝的IP地址(指向被攻擊主機),偽裝IP地址可以是網際網路上的任何地址,不一定在本地;假如駭客不停地傳送此種類型的包,就會造成DoS攻擊。

TCP SYN 泛洪:

對於TCP協議,當客戶端向伺服器發起連線請求並初始化時,伺服器一端的協議棧會留一塊緩衝區來處理“握手”過程中的資訊交換。請求建立連線時傳送的資料包的包頭SYN位就表明了資料包的順序,攻擊者可以利用在短時間內快速發起大量連線請求,以致伺服器來不及響應。同時攻擊者還可以偽造源IP地址。也就是說攻擊者發起大量連線請求,然後掛起在半連線狀態,以此來佔用大量伺服器資源直到拒絕服務。雖然緩衝區中的資料在一段時間內(通常是三分鐘)都沒有迴應的話,就會被丟棄,但在這段時間內,大量半連線足以耗盡伺服器資源。

TCP LAND:

LAND攻擊利用了TCP連線建立的三次握手過程,通過向一個目標主機發送一個用於建立請求連線的TCP SYN報文而實現對目標主機的攻擊。與正常的TCP SYN報文不同的是:LAND攻擊報文的源IP地址和目的IP地址是相同的,都是目標主機的IP地址。這樣目標主機接在收到這個SYN 報文後,就會向該報文的源地址傳送一個ACK報文,並建立一個TCP連線控制結構,而該報文的源地址就是自己。由於目的IP地址和源IP地址是相同的,都是目標主機的IP地址,因此這個ACK 報文就發給了目標主機本身。

UDP FLOOD:

UDP泛洪(UDP flood)的實現原理與ICMP泛洪類似,攻擊者通過向目標主機發送大量的UDP報文,導致目標主機忙於處理這些UDP報文,而無法處理正常的報文請求或響應。

死亡之ping (ping of death) :
  由於在早期的階段,路由器對包的最大尺寸都有限制,許多作業系統對TCP/IP棧的實現在ICMP包上都是規定64KB,並且在對包的標題頭進行讀取之後,要根據該標題頭裡包含的資訊來為有效載荷生成緩衝區,當產生畸形的,聲稱自己的尺寸超過ICMP上限的包也就是載入的尺寸超過64K上限時,就會出現記憶體分配錯誤,導致TCP/IP堆疊崩潰,致使接受方當機。

 


TCP的FIN、ACK、SYN、URG、PSH及攻擊方式

三次握手Three-way Handshake

  一個虛擬連線的建立是通過三次握手來實現的

  1. (B) –> [SYN] –> (A)

  假如伺服器A和客戶機B通訊. 當A要和B通訊時,B首先向A發一個SYN (Synchronize) 標記的包,告訴A請求建立連線.

  注意: 一個 SYN包就是僅SYN標記設為1的TCP包(參見TCP包頭Resources). 認識到這點很重要,只有當A受到B發來的SYN包,才可建立連線,除此之外別無他法。因此,如果你的防火牆丟棄所有的發往外網介面的SYN包,那麼你將不 能讓外部任何主機主動建立連線。

  2. (B) <– [SYN/ACK] <–(A)

  接著,A收到後會發一個對SYN包的確認包(SYN/ACK)回去,表示對第一個SYN包的確認,並繼續握手操作.

  注意: SYN/ACK包是僅SYN 和 ACK 標記為1的包.

  3. (B) –> [ACK] –> (A)

  B收到SYN/ACK 包,B發一個確認包(ACK),通知A連線已建立。至此,三次握手完成,一個TCP連線完成

  Note: ACK包就是僅ACK 標記設為1的TCP包. 需要注意的是當三此握手完成、連線建立以後,TCP連線的每個包都會設定ACK位

  這就是為何連線跟蹤很重要的原因了. 沒有連線跟蹤,防火牆將無法判斷收到的ACK包是否屬於一個已經建立的連線.一般的包過濾(Ipchains)收到ACK包時,會讓它通過(這絕對不是個 好主意). 而當狀態型防火牆收到此種包時,它會先在連線表中查詢是否屬於哪個已建連線,否則丟棄該包

  四次握手Four-way Handshake

  四次握手用來關閉已建立的TCP連線

  1. (B) –> ACK/FIN –> (A)

  2. (B) <– ACK <– (A)

  3. (B) <– ACK/FIN <– (A)

  4. (B) –> ACK –> (A)

  注意: 由於TCP連線是雙向連線, 因此關閉連線需要在兩個方向上做。ACK/FIN 包(ACK 和FIN 標記設為1)通常被認為是FIN(終結)包.然而, 由於連線還沒有關閉, FIN包總是打上ACK標記. 沒有ACK標記而僅有FIN標記的包不是合法的包,並且通常被認為是惡意的

  連線復位Resetting a connection

  四次握手不是關閉TCP連線的唯一方法. 有時,如果主機需要儘快關閉連線(或連線超時,埠或主機不可達),RST (Reset)包將被髮送. 注意在,由於RST包不是TCP連線中的必須部分, 可以只發送RST包(即不帶ACK標記). 但在正常的TCP連線中RST包可以帶ACK確認標記

  請注意RST包是可以不要收到方確認的?

  無效的TCP標記Invalid TCP Flags

  到目前為止,你已經看到了 SYN, ACK, FIN, 和RST 標記. 另外,還有PSH (Push) 和URG (Urgent)標記.

  最常見的非法組合是SYN/FIN 包. 注意:由於 SYN包是用來初始化連線的, 它不可能和 FIN和RST標記一起出現. 這也是一個惡意攻擊.

  由於現在大多數防火牆已知 SYN/FIN 包, 別的一些組合,例如SYN/FIN/PSH, SYN/FIN/RST, SYN/FIN/RST/PSH。很明顯,當網路中出現這種包時,很你的網路肯定受到攻擊了。

  別的已知的非法包有FIN (無ACK標記)和”NULL”包。如同早先討論的,由於ACK/FIN包的出現是為了關閉一個TCP連線,那麼正常的FIN包總是帶有 ACK 標記。”NULL”包就是沒有任何TCP標記的包(URG,ACK,PSH,RST,SYN,FIN都為0)。

  到目前為止,正常的網路活動下,TCP協議棧不可能產生帶有上面提到的任何一種標記組合的TCP包。當你發現這些不正常的包時,肯定有人對你的網路不懷好意。

  UDP (使用者資料包協議User Datagram Protocol)

  TCP是面向連線的,而UDP是非連線的協議。UDP沒有對接受進行確認的標記和確認機制。對丟包的處理是在應用層來完成的。(or accidental arrival).

  此處需要重點注意的事情是:在正常情況下,當UDP包到達一個關閉的埠時,會返回一個UDP復位包。由於UDP是非面向連線的, 因此沒有任何確認資訊來確認包是否正確到達目的地。因此如果你的防火牆丟棄UDP包,它會開放所有的UDP埠(?)。

  由於Internet上正常情況下一些包將被丟棄,甚至某些發往已關閉埠(非防火牆的)的UDP包將不會到達目的,它們將返回一個復位UDP包。

  因為這個原因,UDP埠掃描總是不精確、不可靠的。

  看起來大UDP包的碎片是常見的DOS (Denial of Service)攻擊的常見形式 (這裡有個DOS攻擊的例子,http://grc.com/dos/grcdos.htm ).

  ICMP (網間控制訊息協議Internet Control Message Protocol)

  如同名字一樣, ICMP用來在主機/路由器之間傳遞控制資訊的協議。 ICMP包可以包含診斷資訊(ping, traceroute - 注意目前unix系統中的traceroute用UDP包而不是ICMP),錯誤資訊(網路/主機/埠 不可達 network/host/port unreachable), 資訊(時間戳timestamp, 地址掩碼address mask request, etc.),或控制資訊 (source quench, redirect, etc.) 。

  你可以在http://www.iana.org/assignments/icmp-parameters 中找到ICMP包的型別。

  儘管ICMP通常是無害的,還是有些型別的ICMP資訊需要丟棄。

  Redirect (5), Alternate Host Address (6), Router Advertisement (9) 能用來轉發通訊。

  Echo (8), Timestamp (13) and Address Mask Request (17) 能用來分別判斷主機是否起來,本地時間 和地址掩碼。注意它們是和返回的資訊類別有關的。 它們自己本身是不能被利用的,但它們洩露出的資訊對攻擊者是有用的。

  ICMP訊息有時也被用來作為DOS攻擊的一部分(例如:洪水ping flood ping,死 ping ?呵呵,有趣 ping of death)?/p>

  包碎片注意A Note About Packet Fragmentation

  如果一個包的大小超過了TCP的最大段長度MSS (Maximum Segment Size) 或MTU (Maximum Transmission Unit),能夠把此包發往目的的唯一方法是把此包分片。由於包分片是正常的,它可以被利用來做惡意的攻擊。

  因為分片的包的第一個分片包含一個包頭,若沒有包分片的重組功能,包過濾器不可能檢測附加的包分片。典型的攻擊Typical attacks involve in overlapping the packet data in which packet header is 典型的攻擊Typical attacks involve in overlapping the packet data in which packet header isnormal until is it overwritten with different destination IP (or port) thereby bypassing firewall rules。包分片能作為 DOS 攻擊的一部分,它可以crash older IP stacks 或漲死CPU連線能力。

 

ICMP泛洪

ICMP泛洪(ICMP flood)是利用ICMP報文 進行攻擊的一種方法。如果攻擊者向目標主機發 送大量的ICMP ECHO報文,將產生ICMP泛洪, 目標主機會將大量的時間和資源用於處理ICMP ECHO報文,而無法處理正常的請求或響應,從而實現對目標主機的攻擊。

ICMP反射泛洪:

Smurf IP利用廣播地址傳送ICMP包,一旦廣播出去,就會被廣播域內的所有主機迴應,當然這些包都回應給了偽裝的IP地址(指向被攻擊主機),偽裝IP地址可以是網際網路上的任何地址,不一定在本地;假如駭客不停地傳送此種類型的包,就會造成DoS攻擊。

TCP SYN 泛洪:

對於TCP協議,當客戶端向伺服器發起連線請求並初始化時,伺服器一端的協議棧會留一塊緩衝區來處理“握手”過程中的資訊交換。請求建立連線時傳送的資料包的包頭SYN位就表明了資料包的順序,攻擊者可以利用在短時間內快速發起大量連線請求,以致伺服器來不及響應。同時攻擊者還可以偽造源IP地址。也就是說攻擊者發起大量連線請求,然後掛起在半連線狀態,以此來佔用大量伺服器資源直到拒絕服務。雖然緩衝區中的資料在一段時間內(通常是三分鐘)都沒有迴應的話,就會被丟棄,但在這段時間內,大量半連線足以耗盡伺服器資源。

TCP LAND:

LAND攻擊利用了TCP連線建立的三次握手過程,通過向一個目標主機發送一個用於建立請求連線的TCP SYN報文而實現對目標主機的攻擊。與正常的TCP SYN報文不同的是:LAND攻擊報文的源IP地址和目的IP地址是相同的,都是目標主機的IP地址。這樣目標主機接在收到這個SYN 報文後,就會向該報文的源地址傳送一個ACK報文,並建立一個TCP連線控制結構,而該報文的源地址就是自己。由於目的IP地址和源IP地址是相同的,都是目標主機的IP地址,因此這個ACK 報文就發給了目標主機本身。

UDP FLOOD:

UDP泛洪(UDP flood)的實現原理與ICMP泛洪類似,攻擊者通過向目標主機發送大量的UDP報文,導致目標主機忙於處理這些UDP報文,而無法處理正常的報文請求或響應。

死亡之ping (ping of death) :
  由於在早期的階段,路由器對包的最大尺寸都有限制,許多作業系統對TCP/IP棧的實現在ICMP包上都是規定64KB,並且在對包的標題頭進行讀取之後,要根據該標題頭裡包含的資訊來為有效載荷生成緩衝區,當產生畸形的,聲稱自己的尺寸超過ICMP上限的包也就是載入的尺寸超過64K上限時,就會出現記憶體分配錯誤,導致TCP/IP堆疊崩潰,致使接受方當機。

 


TCP的FIN、ACK、SYN、URG、PSH及攻擊方式

三次握手Three-way Handshake

  一個虛擬連線的建立是通過三次握手來實現的

  1. (B) –> [SYN] –> (A)

  假如伺服器A和客戶機B通訊. 當A要和B通訊時,B首先向A發一個SYN (Synchronize) 標記的包,告訴A請求建立連線.

  注意: 一個 SYN包就是僅SYN標記設為1的TCP包(參見TCP包頭Resources). 認識到這點很重要,只有當A受到B發來的SYN包,才可建立連線,除此之外別無他法。因此,如果你的防火牆丟棄所有的發往外網介面的SYN包,那麼你將不 能讓外部任何主機主動建立連線。

  2. (B) <– [SYN/ACK] <–(A)

  接著,A收到後會發一個對SYN包的確認包(SYN/ACK)回去,表示對第一個SYN包的確認,並繼續握手操作.

  注意: SYN/ACK包是僅SYN 和 ACK 標記為1的包.

  3. (B) –> [ACK] –> (A)

  B收到SYN/ACK 包,B發一個確認包(ACK),通知A連線已建立。至此,三次握手完成,一個TCP連線完成

  Note: ACK包就是僅ACK 標記設為1的TCP包. 需要注意的是當三此握手完成、連線建立以後,TCP連線的每個包都會設定ACK位

  這就是為何連線跟蹤很重要的原因了. 沒有連線跟蹤,防火牆將無法判斷收到的ACK包是否屬於一個已經建立的連線.一般的包過濾(Ipchains)收到ACK包時,會讓它通過(這絕對不是個 好主意). 而當狀態型防火牆收到此種包時,它會先在連線表中查詢是否屬於哪個已建連線,否則丟棄該包

  四次握手Four-way Handshake

  四次握手用來關閉已建立的TCP連線

  1. (B) –> ACK/FIN –> (A)

  2. (B) <– ACK <– (A)

  3. (B) <– ACK/FIN <– (A)

  4. (B) –> ACK –> (A)

  注意: 由於TCP連線是雙向連線, 因此關閉連線需要在兩個方向上做。ACK/FIN 包(ACK 和FIN 標記設為1)通常被認為是FIN(終結)包.然而, 由於連線還沒有關閉, FIN包總是打上ACK標記. 沒有ACK標記而僅有FIN標記的包不是合法的包,並且通常被認為是惡意的

  連線復位Resetting a connection

  四次握手不是關閉TCP連線的唯一方法. 有時,如果主機需要儘快關閉連線(或連線超時,埠或主機不可達),RST (Reset)包將被髮送. 注意在,由於RST包不是TCP連線中的必須部分, 可以只發送RST包(即不帶ACK標記). 但在正常的TCP連線中RST包可以帶ACK確認標記

  請注意RST包是可以不要收到方確認的?

  無效的TCP標記Invalid TCP Flags

  到目前為止,你已經看到了 SYN, ACK, FIN, 和RST 標記. 另外,還有PSH (Push) 和URG (Urgent)標記.

  最常見的非法組合是SYN/FIN 包. 注意:由於 SYN包是用來初始化連線的, 它不可能和 FIN和RST標記一起出現. 這也是一個惡意攻擊.

  由於現在大多數防火牆已知 SYN/FIN 包, 別的一些組合,例如SYN/FIN/PSH, SYN/FIN/RST, SYN/FIN/RST/PSH。很明顯,當網路中出現這種包時,很你的網路肯定受到攻擊了。

  別的已知的非法包有FIN (無ACK標記)和”NULL”包。如同早先討論的,由於ACK/FIN包的出現是為了關閉一個TCP連線,那麼正常的FIN包總是帶有 ACK 標記。”NULL”包就是沒有任何TCP標記的包(URG,ACK,PSH,RST,SYN,FIN都為0)。

  到目前為止,正常的網路活動下,TCP協議棧不可能產生帶有上面提到的任何一種標記組合的TCP包。當你發現這些不正常的包時,肯定有人對你的網路不懷好意。

  UDP (使用者資料包協議User Datagram Protocol)

  TCP是面向連線的,而UDP是非連線的協議。UDP沒有對接受進行確認的標記和確認機制。對丟包的處理是在應用層來完成的。(or accidental arrival).

  此處需要重點注意的事情是:在正常情況下,當UDP包到達一個關閉的埠時,會返回一個UDP復位包。由於UDP是非面向連線的, 因此沒有任何確認資訊來確認包是否正確到達目的地。因此如果你的防火牆丟棄UDP包,它會開放所有的UDP埠(?)。

  由於Internet上正常情況下一些包將被丟棄,甚至某些發往已關閉埠(非防火牆的)的UDP包將不會到達目的,它們將返回一個復位UDP包。

  因為這個原因,UDP埠掃描總是不精確、不可靠的。

  看起來大UDP包的碎片是常見的DOS (Denial of Service)攻擊的常見形式 (這裡有個DOS攻擊的例子,http://grc.com/dos/grcdos.htm ).

  ICMP (網間控制訊息協議Internet Control Message Protocol)

  如同名字一樣, ICMP用來在主機/路由器之間傳遞控制資訊的協議。 ICMP包可以包含診斷資訊(ping, traceroute - 注意目前unix系統中的traceroute用UDP包而不是ICMP),錯誤資訊(網路/主機/埠 不可達 network/host/port unreachable), 資訊(時間戳timestamp, 地址掩碼address mask request, etc.),或控制資訊 (source quench, redirect, etc.) 。

  你可以在http://www.iana.org/assignments/icmp-parameters 中找到ICMP包的型別。

  儘管ICMP通常是無害的,還是有些型別的ICMP資訊需要丟棄。

  Redirect (5), Alternate Host Address (6), Router Advertisement (9) 能用來轉發通訊。

  Echo (8), Timestamp (13) and Address Mask Request (17) 能用來分別判斷主機是否起來,本地時間 和地址掩碼。注意它們是和返回的資訊類別有關的。 它們自己本身是不能被利用的,但它們洩露出的資訊對攻擊者是有用的。

  ICMP訊息有時也被用來作為DOS攻擊的一部分(例如:洪水ping flood ping,死 ping ?呵呵,有趣 ping of death)?/p>

  包碎片注意A Note About Packet Fragmentation

  如果一個包的大小超過了TCP的最大段長度MSS (Maximum Segment Size) 或MTU (Maximum Transmission Unit),能夠把此包發往目的的唯一方法是把此包分片。由於包分片是正常的,它可以被利用來做惡意的攻擊。

  因為分片的包的第一個分片包含一個包頭,若沒有包分片的重組功能,包過濾器不可能檢測附加的包分片。典型的攻擊Typical attacks involve in overlapping the packet data in which packet header is 典型的攻擊Typical attacks involve in overlapping the packet data in which packet header isnormal until is it overwritten with different destination IP (or port) thereby bypassing firewall rules。包分片能作為 DOS 攻擊的一部分,它可以crash older IP stacks 或漲死CPU連線能力。