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 三次握手機制:
- 客戶端發送
SYN訊息 - 伺服器回應
SYN-ACK - 客戶端應發送
ACK完成連線
攻擊者大量發送 SYN 訊息但不完成握手,使伺服器累積大量「半開」連線,耗盡連線池,導致合法客戶端無法連線。
Application Layer 攻擊#
應用層攻擊濫用 HTTP 協定:
- Slowloris:開啟大量 HTTP 連線,定期發送部分 HTTP 請求以保持連線開啟,耗盡連線池
- R-U-Dead-Yet? (RUDY):發送帶有超長
Content-Lengthheader 的永不結束的 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(快取):有效的快取可防止資料庫在流量暴增時過載
- 可儲存在磁碟、記憶體,或共享記憶體快取如 Redis、Memcached
- 設定
Cache-Controlheader 讓瀏覽器快取資源
- Job queue(工作佇列):將長時間任務(如產生大型檔案、發送郵件)卸載到背景 worker 程序
- 水平擴展:使用 IaaS 服務(如 AWS)或平台(如 Heroku)快速增加伺服器數量
- 流量監控:使用 Google Analytics 等工具追蹤流量,當達到閾值時增加伺服器
建構可擴展的架構不僅能抵禦 DoS 攻擊,也能應對網站意外爆紅帶來的流量暴增。CDN、快取、工作佇列和自動擴展是四個最具影響力的方向。
總結#
- DoS 攻擊透過大量流量淹沒目標,使合法使用者無法存取服務
- 攻擊可發生在網路堆疊的任何層級,可透過第三方服務進行反射或放大
- 現代攻擊通常是由 botnet 發動的 DDoS 攻擊
- 基本防護:合理的防火牆設定和 application firewall
- 進階防護:DDoS 防護服務商,將所有流量路由到其資料中心過濾
- 建構可擴展的網站架構(CDN、caching、job queue、水平擴展)本身就是有效的防禦措施