Denial-of-Service Attacks#

2016 年 10 月 21 日,Twitter、Spotify、Netflix、GitHub、Amazon 等眾多網站同時無法存取。根本原因是針對 DNS 提供商 Dyn 的一次大規模 denial-of-service (DoS) 攻擊,海量的 DNS 查詢請求讓 Dyn 不堪負荷。

DoS 攻擊與其他漏洞不同,其目的不是入侵系統,而是讓系統無法為合法使用者提供服務。攻擊手法通常是用大量流量淹沒目標,耗盡伺服器資源。

DoS 攻擊類型#

回應網路請求通常比發送請求需要更多的處理能力。網頁伺服器需要解析請求、執行資料庫查詢、寫入日誌、建構 HTML;而攻擊者只需產生包含 HTTP verb、IP 位址和 URL 的簡單請求。駭客利用這種不對稱性來癱瘓伺服器。

Internet Control Message Protocol (ICMP) 攻擊#

ICMP 是最簡單的網際網路協定之一,用於檢查網路位址是否在線上(例如 ping 指令)。

  • Ping flood:發送無止境的 ICMP 請求流來淹沒伺服器
  • Ping of death:發送損壞的 ICMP 封包,利用舊版軟體未正確檢查邊界的漏洞來使伺服器當機

Transmission Control Protocol (TCP) 攻擊#

大多數 ICMP 攻擊已能被現代網路介面化解,因此攻擊者轉向更上層的 TCP 協定。

SYN flood 攻擊利用 TCP 三次握手機制:

  1. 客戶端發送 SYN 訊息
  2. 伺服器回應 SYN-ACK
  3. 客戶端應發送 ACK 完成連線

攻擊者大量發送 SYN 訊息但不完成握手,使伺服器累積大量「半開」連線,耗盡連線池,導致合法客戶端無法連線。

Application Layer 攻擊#

應用層攻擊濫用 HTTP 協定:

  • Slowloris:開啟大量 HTTP 連線,定期發送部分 HTTP 請求以保持連線開啟,耗盡連線池
  • R-U-Dead-Yet? (RUDY):發送帶有超長 Content-Length header 的永不結束的 POST 請求
  • Zip bombs:上傳展開後體積呈指數增長的損壞壓縮檔,耗盡磁碟空間
  • 任何執行 deserialization(反序列化)的 URL 都可能受到攻擊,例如前一章的 XML bomb

Reflected and Amplified Attacks(反射與放大攻擊)#

攻擊者利用第三方服務產生流量,將帶有偽造回覆位址(受害者的 IP)的請求發送到第三方服務,使回應 reflect(反射)到目標。

  • 反射攻擊同時隱藏了攻擊來源
  • 如果第三方回應比原始請求更大或更多,就會 amplify(放大)攻擊威力

2018 年針對 GitHub 的攻擊就是使用反射技術。攻擊者找到大量不安全的 Memcached 伺服器,發送帶有 GitHub IP 的 UDP 請求。每個回應約為原始請求的 50 倍大,最終產生每秒 1.3 TB 的攻擊流量。

Distributed Denial-of-Service (DDoS) 攻擊#

來自單一 IP 的攻擊容易被封鎖。現代 DoS 攻擊通常來自多個協同來源,稱為 DDoS 攻擊。

  • 通常由 botnet(殭屍網路)發動
  • 各種連網裝置(恆溫器、冰箱、汽車、門鈴等)都可能被感染成為 bot

非惡意的 DoS#

並非所有流量暴增都是惡意的。網站爆紅或登上社群新聞首頁(如 Reddit hug of death)也可能導致服務中斷。

DoS 攻擊的防禦措施#

防禦大規模 DoS 攻擊既昂貴又耗時。好消息是,大多數網站不太可能成為大規模攻擊的目標。但較小規模的 DoS 攻擊搭配勒索確實存在,因此仍需建立基本的防護措施。

Firewalls 與 Intrusion Prevention Systems#

Firewall(防火牆)根據預設的安全規則監控並控制進出的網路流量:

  • 設定哪些 port 應對外開放
  • 透過 access control rules 過濾特定 IP 的流量
  • 現代防火牆可封鎖大多數 ICMP 攻擊,也能黑名單特定 IP

Application firewall(應用防火牆)在更高層運作,作為代理伺服器掃描 HTTP 流量:

  • 掃描損壞或惡意的請求,拒絕符合已知惡意特徵的流量
  • 可封鎖 SQL injection 等攻擊嘗試
  • 開源方案如 ModSecurity,商業方案如 Norton、Barracuda Networks

Intrusion Prevention Systems (IPS) 採取更全面的方法:

  • 結合防火牆與特徵比對
  • 分析網路流量的統計異常
  • 掃描磁碟上的檔案異動
  • 投資大但防護效果優秀

DDoS 防護服務#

進階 DDoS 攻擊的封包通常與正常流量無法區分,防火牆無法有效過濾。

  • 專業 DDoS 防護服務商會將所有流量路由到其資料中心進行掃描和過濾
  • 這些服務商擁有全球惡意活動的視野和大量頻寬,能有效防禦
  • CDN 經常提供 DDoS 防護,因為他們已有地理分散的資料中心並代管大量流量

建構可擴展的架構(Building for Scale)#

承受 DoS 攻擊與應對大量合法訪客在很多方面是相同的。建構可擴展的架構本身就是一種防禦:

  • CDN:將靜態內容(圖片、字型檔案等)卸載到第三方,大幅減少伺服器負載
  • Caching(快取):有效的快取可防止資料庫在流量暴增時過載
    • 可儲存在磁碟、記憶體,或共享記憶體快取如 RedisMemcached
    • 設定 Cache-Control header 讓瀏覽器快取資源
  • Job queue(工作佇列):將長時間任務(如產生大型檔案、發送郵件)卸載到背景 worker 程序
  • 水平擴展:使用 IaaS 服務(如 AWS)或平台(如 Heroku)快速增加伺服器數量
  • 流量監控:使用 Google Analytics 等工具追蹤流量,當達到閾值時增加伺服器

建構可擴展的架構不僅能抵禦 DoS 攻擊,也能應對網站意外爆紅帶來的流量暴增。CDN、快取、工作佇列和自動擴展是四個最具影響力的方向。

總結#

  • DoS 攻擊透過大量流量淹沒目標,使合法使用者無法存取服務
  • 攻擊可發生在網路堆疊的任何層級,可透過第三方服務進行反射或放大
  • 現代攻擊通常是由 botnet 發動的 DDoS 攻擊
  • 基本防護:合理的防火牆設定和 application firewall
  • 進階防護:DDoS 防護服務商,將所有流量路由到其資料中心過濾
  • 建構可擴展的網站架構(CDN、caching、job queue、水平擴展)本身就是有效的防禦措施