目錄

DDoS 基礎了解

基礎簡介

常常用到的網路協定包含:

  • L3: ICMP
  • L4: TCP/UDP
  • L7: HTTP

打的受害目標:

  • 網卡頻寬
  • 一般電腦
    • CPU 的軟中斷 (%si)。即使頻寬沒滿,如果每秒湧入千萬個小封包,CPU 會花光所有時間在處理網卡中斷,導致系統崩潰
    • Kernel State Tables,SYN Backlog Queue 與 Conntrack Table。核心必須記住「誰還沒完成三次握手」。當這些表格滿了,系統會直接丟棄後續所有新連線
  • 防火牆
    • 也是有 Conntrack Table
  • 應用程式的資源,像是 Web Server (Nginx/Apache) 或資料庫
    • File Descriptors (FD)、Thread Pool、Memory、Database Connections
kola:~$ sysctl net.netfilter.nf_conntrack_max
net.netfilter.nf_conntrack_max = 262144
kola:~$ sysctl net.netfilter.nf_conntrack_count
net.netfilter.nf_conntrack_count = 213
kola:~$ cat /proc/sys/net/netfilter/nf_conntrack_buckets
262144

這是系統允許同時追蹤的最大連線數量。當這個數字滿了,系統就會開始丟棄新的連線封包,一般電腦不一定會用到 nf_conntrack,但很常會用到,像是 Docker 等應用程式。

TCP/UDP

  1. TCP 因為可能要三層握手,所以大部分攻擊時不能造假 IP,所以會需要像是殭屍網路有真的 IP 來發起攻擊
  2. UDP 可以造假 IP,因為不用握手

頻寬消耗型攻擊

通常攻擊封包會偽造來源 IP 避免被禁用。

L3

  1. ICMP flood: 就是 Echo,不停地 Ping,對方也必須回應,所以會導致對方的上傳頻寬消耗(上傳頻寬比較稀有)
    1. 更進階的利用反射的攻擊叫做 Smurf Attack,等下章節會講
    2. ICMPv6 在 IPv6 比較重要,因為 IPv6 的鄰居發現(Neighbor Discovery, ND)和路由宣告(RA)都靠 ICMPv6
  2. IGMP flood: 管理 Multicast 成員的協議,通常只能在 LAN 裡面發生

上面兩個現在都被 ISP 機制防禦了,在邊界路由器上都有設定 ICMP Rate Limiting(限速)。如果你發出的 Ping 流量大到像洪水,邊界設備在進到受害者網段前就會直接丟包(Drop)。

而 IGMP 是用來管理多播(Multicast)的協議。絕大多數的 ISP 邊界路由器會直接過濾掉來自外部(WAN 端)的 IGMP 封包,IGMP 的 TTL(存活時間)通常被強制設為 1。這代表這個封包「不准跨過路由器」。

L4

  • UDP flood: 根據設定封包的大小,可以對不同的受害者造成困擾
    • 小包:像是 64 byte,數量較多但小,對 router 造成困擾
    • 大包:像是 1500 byte,超過 MTU 單元,強迫受害者重組封包,數量較少但大包,對頻寬造成困擾
  • TCP PUSH + ACK flood: 許多簡單的防火牆或路由器為了效能,會採用「無狀態(Stateless)」過濾。它們會直接放行所有帶著 ACK 的封包,因為這看起來像是「已經建立連線(Established)」的合法流量
    • 正常的 TCP 會為了效能把收到的資料先放在核心緩衝區(Buffer),等集滿一大塊再交給應用程式(如 NGINX)。但 PSH Flag 是在告訴核心:「不要等了,立刻(Push)把這段資料丟給應用程式處理!」
    • 收到 ACK 的時候,核心必須先在 TCP 連接表(TCB) 或 Conntrack 表 中搜尋:「這組 IP+Port 的連線真的存在嗎?」,如果不存在會回 RST 封包

這邊會有兩種表格:

  • TCP 雜湊表 (TCP Hash Table),核心都會有
  • Conntrack Table,只有特定開啟才有

放大攻擊

UDP 放大攻擊是一種常見的反射型 DDoS 攻擊,攻擊者利用開放的 UDP 服務來產生比原始請求更大的回應流量,將這些流量反射到受害者身上,造成網路擁塞或服務中斷。

L4 資源消耗型攻擊 (攻擊連接表)

如果攻擊者知道你沒開連線表,他可以發動更高級的 「無狀態攻擊」:因為你沒記住連線狀態,他可以繞過很多行為偵測規則。

所以這邊是假設對方已經開啟連接表,或者可能有防火牆,我們要打他,這時候連接表還是可能成為瓶頸,受到攻擊。

L7 資源消耗型攻擊 (消耗目標 IO)

防禦

L3/L4

L7

Reference