喬遷啟示:因應實體教室租約到期,富捷培訓於八月起將在長安新址,以線上直播教學為您服務,懇請舊雨新知繼續支持與指教。 地址:台北市長安東路二段201巷19號之1一樓,電話: 02-27116373

阻斷式攻擊防禦系統-Cisco Guard XT 5650-B

18 四月 2018

阻斷式攻擊 防禦系統-Cisco Guard XT 5650-B(下)

全方位阻斷式攻擊(DDoS, DoS)防禦系統 - Cisco Guard XT 5650 - B(下) 文◎奇科電腦資深網路技術顧問 – Ben 哥

 

Cisco-ddos-guard-5650

附圖:Cisco Guard XT 5650-B 阻斷式攻擊 防禦設備

 

technum_02前言

對於 阻斷式攻擊 的防禦理論以及瞭解,讀者們必須把握住IP,TCP,UDP,HTTP,SMTP等常用的通訊協定,也就是說,對於上述的通訊協定的瞭解必須要有一定的深度,例如:TCP連線建立的三向交握(Three Way Handshake),IP定址的計算(例如:10.1.3.24/14的網路及廣播位址為何?),TCP表頭中每個旗標(Flag)所代表的意義為何等,都是Ben老師認為瞭解通訊協定的開始,如果讀者們目前並不是很瞭解Ben老師剛剛所提的問題,那麼建議往後再來看看這篇文章。

在DDoS的上集,Ben老師向各位讀者介紹了防範DDoS的各種方法,每個方法都有其優缺點,但是有一個共通的缺點就是:當DDoS的防禦機制啟動後,無論正常的或是不正常的連線,完全都無法到達提供服務的伺服器,這樣只保護了該伺服器而已,但是對於目的在讓該伺服器停止提供服務的駭客們,事實上已經達到了某種程度的目的了。 所以,Ben老師在這篇專欄中,會以理論為基礎,向各位讀者解釋較為簡單且流行的DDoS方式。

 

technum_02簡述TCP的攻擊方式

Ben老師在此提供一些常用的TCP DDoS方式:

  1. SYN Flood
  2. ACK-Flood
  3. SYN+ACK Flood
  4. SYN+RST Flood
  5. RST Flood
  6. Established Flood
  7. FIN Flood
  8. TCP Options Flood
  9. X-Tree Flood

各位讀者可以看到有相當多的旗標在這些攻擊的方式裡,這也是在本專欄內容的中後段,會簡單的介紹TCP連線方式及原理的原因。

每每談到DDoS,大部分的人會想到SYN Flood,但是Ben老師在這裡要特別提出一個想法,SYN Foold並不是唯一的一種DDoS攻擊方式,也不是攻擊的終極目的,在現實的網路環境中,SYN Flood的攻擊通常是為了另一種攻擊鋪路,而達到植入後門或是竊取資料等目的。

 

technum_03TCP連線的建立及結束

在瞭解TCP的連線建立及結束前,讀者們必須先對TCP表頭的各個領域的功能稍作瞭解,Ben老師特別在此提供TCP的表頭,並且簡單的解釋一下其中的一些領域功能:

TCP-header-info

TCP表頭領域 功能
Sequence Number 由電腦本身產生出來的一個號碼,用來區隔該電腦所發出的各個不同的TCP連線。
Acknowledgment Number 用來標示接下來期望從另一台連線電腦,所發出的TCP封包的sequence number。
HLEN (Head Length) 標示TCP表頭的大小(以bit為單位)。
Code (Flag) 標示該TCP封包的目的及內容特質。
Window 指定電腦一次要接收多少的資料。
Options 用來決定最大的TCP封包大小,預設的MTU為536。

跟DDoS相關性較高的領域就是所謂的旗標(Code或是Flag),下面的表格解釋了部分旗標的功能:

旗標 功能
URG 用來指定該TCP封包的內容是緊急的,就算在該封包之前有先到達的TCP正常封包,此封包也會被優先處理;通常用來緊急中斷某些服務。
ACK 該封包包含Acknowledge number。
PSH Push。把該封包直接交由應用層的軟體處理。
RST Reset。中斷TCP連線。
SYN 該封包包含了Suequence number。
FIN 用來終結TCP連線的旗標。

建立TCP連線的建立大致上可以分為三個部分:

  1. 連線的建立 – 三向交握 (Three-Way Handshake)。
  2. 傳輸資料。
  3. 結束連線。

如下圖所示:

How-tcp-syn-ack-fin-works

由此,讀者們可以知道到對於TCP連線的瞭解,必須要深入到棋標的用途以及各個領域的瞭解,才能真正的掌握TCP連線的效能調整,以及攻擊的防範。

 

technum_04簡述SYN Flooding

對於TCP稍作瞭解後,Ben老師會提出一些不同的狀況讓各位讀者知道大概會有哪些狀況發生;下圖表示了一般TCP的正常三向交握。

TCP-1)

但是如果TCP的用戶端(Client)因為某種原因無法在三向交握中的最後一個步驟確認連線,會有什麼樣的狀況發生呢?

Tcp-three-way-handshake-client-no-ack-response

所以我們現在來看看,TCP的伺服器端 (Server)要如何因應用戶端不回應連線確認(ACK封包)的狀況?伺服器端會等待用戶端的ACK封包,如果等不到的話,會再重新傳送一個SYN+ACK的封包,再一直等不到的話,就會持續的傳送SYN+ACK封包,直到逾時(timeout)為止,接著送出一個RST封包來中斷該TCP的連線,如下圖所示。

Tcp-three-way-handshake-timeout

 

technum_05DoS,DDoS的攻擊理論

DoS及DDoS的攻擊所涵蓋的面相當廣,DNS、HTTP、SMTP等協定也有其相關的漏洞可被攻擊,今天Ben老師所要討論的是專門就TCP的SYN Flood角度來探討。

SYN Round Trip Time (RTT)定義當機器送出SYN+ACK封包後的第一時間,到收到另一端所發出的ACK封包所需的時間;當伺服器收到用戶端的第一個TCP SYN封包時,該TCP連線就會進入SYN_RCVD的狀態,也就是SYN的封包被RECEIVED的意思,RCVD也就是RECEIVED的縮寫,SYN_RCVD的狀態在收到相關的ACK封包的之後,就會轉成ESTABLISHED的狀態,因而TCP的連線就建立完成,開始傳送資料。

Tcp-three-way-handshake-syn-ack-rtt

重點來了,每台機器聽取TCP連線的都有其一定數目的限制(queue),因此,當伺服器端的SYN_RCVD到達queue的極限時,最老的SYN_RCVD就會被刪除掉以便接受新的連線;假設Ben老師很快的發出了數量相當多的SYN封包,對某伺服器作連線,第一個送出去的SYN封包,在伺服器端所產生的TCP SYN_RCVD狀態,已經因為過多的後繼SYN_RCVD給推擠掉了,所以,就算Ben老師的機器已經送出ACK封包想要建立連線,也因為相對應的SYN_RCVD狀態不存在,而無法建立連線。

所以,在TCP層面上的阻斷式攻擊,只要能夠迅速的把SYN_RCVD狀態消耗掉,就可以達到目的。

 
Tcp-sync-flood

 
Tcp-sync-flood-netstat

 
Tcp-sync-flood-result

SYN Flood基本上有兩種類型:Non-Spoofed(不偽裝IP位址)以及Spoofed(偽裝的IP位址);Non-Spoofed的攻擊方式並不偽裝其發出攻擊的的IP位址,所以會收到伺服器端所發出的SYN+ACK封包,這種方式會暴露攻擊者的位址;Spoofed的攻擊方式使用了假的IP位址,所以伺服器端所送出的SYN+ACK封包會送到那個假的IP位址去,因此很難發現攻擊機器的位址,但是,這種攻擊方式會送出大量的封包到擁有那個假IP的機器,這也是另一種的攻擊方式,如下圖所示。

 
Tcp-reflectioin-sync-flood

 

technum_06結論

阻斷式攻擊是一個既便宜又有效的攻擊方式,攻擊工具隨處可得,就算是系統上的指令ping,或是Apache套件內所附的指令ab(Apache Benchmark)等,都可以拿來當成阻斷式攻擊的利器;除了Cisco的 Guard跟Detector外,目前並沒有專門針對阻斷式攻擊的專門設備,另外,頻寬的攻擊並不是企業端可以防制的,因此,也必須仰賴服務提供商(ISP)提供相關的防禦措施,方才能達到完全的解決方案。


feebackbtn