1. 程式人生 > 其它 >簡單的Dos攻擊-死亡之Ping

簡單的Dos攻擊-死亡之Ping

簡單的Dos攻擊-死亡之Ping

最簡單的基於IP的攻擊可能要數著名的死亡之ping,這種攻擊主要是由於單個包的長度超過了IP協議規範所規定的包長度。產生這樣的包很容易,事實上,許多作業系統都提供了稱為ping的網路工具。在為Windows作業系統中開一個DOS視窗,輸入ping -l 65500 目標ip -t (65500 表示資料長度上限,-t 表示不停地ping目標地址)就可達到該目的。UNIX系統也有類似情況。

通俗來說,就是對方IP記憶體溢位,達到使對方系統崩潰的效果

一、如何工作呢?

死亡之ping是如何工作的呢?首先是因為乙太網長度有限,IP包片段被分片。當一個IP包的長度超過乙太網幀的最大尺寸(乙太網頭部和尾部除外)時,包就會被分片,作為多個幀來發送。接收端的機器提取各個分片,並重組為一個完整的IP包。在正常情況下,IP頭包含整個IP包的長度。當一個IP包被分片以後,頭只包含各個分片的長度。分片並不包含整個IP包的長度資訊,因此IP包一旦被分片,重組後的整個IP包的總長度只有在所在分片都接受完畢之後才能確定。

在IP協議規範中規定了一個IP包的最大尺寸,而大多數的包處理程式又假設包的長度超過這個最大尺寸這種情況是不會出現的。因此,包的重組程式碼所分配的記憶體區域也最大不超過這個最大尺寸。這樣,超大的包一旦出現,包當中的額外資料就會被寫入其他正常區域。這很容易導致系統進入非穩定狀態,是一種典型的快取溢位(Buffer Overflow)攻擊。在防火牆一級對這種攻擊進行檢測是相當難的,因為每個分片包看起來都很正常。

由於使用ping工具很容易完成這種攻擊,以至於它也成了這種攻擊的首選武器,這也是這種攻擊名字的由來。當然,還有很多程式都可以做到這一點,因此僅僅阻塞ping的使用並不能完全解決這個漏洞。預防死亡之ping的最好方法是對作業系統打補丁,使核心將不再對超過規定長度的包進行重組。

二、現象

這個問題出現在早期的Windows內,不過在接近Windows Me的時候已經見不到了。不僅已經ping不到65500以上,各大網站限制資料包傳入大小來防止有人用多臺電腦同時ping一個ip導致癱瘓,一般大型網站把資料包壓到3000以下;而伺服器或者dns一般把資料包壓到10000以下來防止這個問題,超過數值會提示連線超時。

  • 不要大資料ping自己的ip地址。

  • 不要亂ping網站網址

  • 不要ping自己的IP地址

三、操作

DOS攻擊之死亡之ping,俗稱拒絕服務攻擊,通過傳送大量的無用請求資料包給伺服器,耗盡伺服器資源,從而無法通過正常的訪問伺服器資源,導致伺服器崩潰。

如果多個ip通過發起對一個伺服器的攻擊,如果無防禦措施,不管伺服器記憶體多大,寬頻多寬,CPU多快,都無法抵禦這種攻擊。

​ 死亡之ping程式碼:

​ 開啟系統的命令視窗,windows電腦按win+R ,輸入cmd命令後進入命令介面:

​ 輸入:

ping -l 65500 目標ip -t

(65500 表示資料長度上限,-t 表示不停地ping目標地址) 這就是簡單的拒絕服務攻擊。

四、常見攻擊與防範

SYN Flood攻擊:

  問題就出在TCP連線的三次握手中,假設一個使用者向伺服器傳送了SYN報文後突然宕機或掉線,那麼伺服器在發出SYN+ACK應答報文後是無法收到客戶端的ACK報文的(第三次握手無法完成),這 種情況下伺服器端一般會重試(再次傳送SYN+ACK給客戶端)並等待一段時間後丟棄這個未完成的連線,這段時間的長度我們稱為SYN Timeout,一般來說這個時間是分鐘的數量級(大約為30秒 -2分鐘);一個使用者出現異常導致伺服器的一個執行緒等待1分鐘並不是什麼很大的問題,但如果有一個惡意的攻擊者大量模擬這種情況,伺服器端將為了維護一個非常大的半連線列表而消耗非常多的資源----數以萬計的半連線,即使是簡單的儲存並遍歷也會消耗非常多的CPU時間和記憶體,何況還要不斷對這個列表中的IP進行SYN+ACK的重試。實際上如果伺服器的TCP/IP棧不夠強大,最 後的結果往往是堆疊溢位崩潰---即使伺服器端的系統足夠強大,伺服器端也將忙於處理攻擊者偽造的TCP連線請求而無暇理睬客戶的正常請求(畢竟客戶端的正常請求比率非常之小),此時從 正常客戶的角度看來,伺服器失去響應,這種情況我們稱作:伺服器端受到了SYN Flood攻擊(SYN洪水攻擊)。

防範:

  第一種是縮短SYN Timeout時間   第二種方法是設定SYN Cookie,就是給每一個請求連線的IP地址分配一個Cookie,如果短時間內連續受到某個IP的重複SYN報文,就認定是受到了攻擊,以後從這個IP地址來的包會被一概丟棄。   >netstat -n -p tcp >result.txt

Smurf攻擊:   傳送偽裝的ICMP資料包,目的地址設為某個網路的廣播地址,源地址設為要攻擊的目的主機,使所有收到此ICMP資料包的主機都將對目的主機發出一個迴應,使被攻擊主機在某一段時間內收到 成千上萬的資料包   防範:   在cisco路由器上配置如下可以防止將包傳遞到廣播地址上:   Router(config-if)# no ip directed-broadcast

Ping of Death:

  "ping ofdeath"攻擊就是我們常說的"死亡Ping"   這種攻擊通過傳送大於65536位元組的ICMP包使作業系統崩潰;通常不可能傳送大於65536個位元組的ICMP包,但可以把報文分割成片段,然後在目標主機上重組;最終會導致被攻擊目標緩衝區溢位,引起拒絕服務攻擊。有些時候導致telne和http服務停止,有些時候路由器重啟。

teardown攻擊:

  對於一些大的IP資料包,往往需要對其進行拆分傳送,這是為了迎合鏈路層的MTU(最大傳輸單元)的要求。比如,一個6 000位元組的IP包,在MTU為2 000的鏈路上傳輸的時候,就需要分成3個IP 包。在IP報頭中有一個偏移欄位和一個拆分標誌(MF)。如果MF標誌設定為1,則表示這個IP包是一個大IP包的片段,其中偏移欄位指出了這個片段在整個IP包中的位置。例如,對一個6 000字 節的IP包進行拆分(MTU為2 000),則3個片段中偏移欄位的值依次為0,2000,4 000。這樣接收端在全部接收完IP資料包後,就可以根據這些資訊重新組裝這幾個分次接收的拆分IP包。在這 裡就有一個安全漏洞可以利用了,就是如果黑客們在擷取IP資料包後,把偏移欄位設定成不正確的值,這樣接收端在收到這些分拆的資料包後,就不能按資料包中的偏移欄位值正確組合這些拆分的資料包,但接收端會不斷嘗試,這樣就可能致使目標計算機作業系統因資源耗盡而崩潰。

Land(LandAttack)攻擊:

在Land攻擊中,黑客利用一個特別打造的SYN包--它的原地址和目標地址都被設定成某一個伺服器地址進行攻擊。此舉將導致接受伺服器向它自己的地址傳送SYN-ACK訊息,結果這個地址又發回ACK訊息並建立一個空連線,每一個這樣的連線都將保留直到超時,在Land攻擊下,許多UNIX將崩潰,NT變得極其緩慢(大約持續五分鐘)。

IP欺騙: 這種攻擊利用TCP協議棧的RST位來實現,使用IP欺騙,迫使伺服器把合法使用者的連線復位,影響合法使用者的連線。假設有一個合法使用者(100.100.100.100)已經同伺服器建了正常的連線,攻擊者構造攻擊的TCP資料,偽裝自己的IP為100.100.100.100,並向伺服器傳送一個帶有RST位的TCP資料段。伺服器接收到這樣的資料後,認為從100.100.100.100傳送的連線有錯誤,就會清空緩衝區中已建立好的連線。這時,合法使用者100.100.100.100再發送合法資料,伺服器就已經沒有這樣的連線了,該使用者就被拒絕服務而只能重新開始建立新的連線。