前言
昨天講述了釣魚攻擊 Phishing Attack 的原理,用簡單的圖文示例了攻擊的過程,以及攻擊者背後釣魚到的資料。
今天要分享的攻擊是 DoS/DDoS Attack(阻斷式服務攻擊,又稱拒絕服務攻擊 → 大陸用法)要知道有些攻擊不是為了單純竊取資料作為目的,而是為了「讓你系統停擺、癱瘓」,而今天要介紹的 DoS/DDoS 就是屬於這類攻擊。
服務被打垮、客戶連不上、品牌信任被破壞,短時間內造成的損失遠超過修補成本。理解 DDoS 不只是我等資安人的事,也是產品、網路、SRE 與高階管理層要關心的風險!🫵 今天的文章主要會從此攻擊類型的本質開始,講怎麼偵測、如何分層防禦、以及發生時的應變流程 —「拯救伺服器大行動💪」。
什麼是 DoS / DDoS?
Denial of Service(DoS)是「讓服務無法繼續提供使用者服務」的一種攻擊。分散式 DoS(DDoS,Distributed DoS)則是由大量來源(通常是被綁架的裝置)多個裝置同時發起的攻擊,大大提升了其攻擊效果、增加緩解難度,可以算是一般 DoS 的 pro max 升級版 😱😰😨。
三個常見的攻擊面向:
- Volumetric(流量型):用極大量的封包或字節耗盡 Target 目標的網路頻寬或上游 up-stream 的 ISP 資源,造成合法流量無法到達 → 想像是一條路被一大群車量堵死 ❌
- Protocol(協定型):利用協定交互握手或伺服器資源分配的特性(例如大量半開連線),使 middlebox(防火牆、NAT、HTTP 加速器等等設備)或伺服器維持過量的 half-opened 狀態 → 耗盡可用連線或狀態記憶體 ❌
- Application-layer(應用層型):發送看似合法但高成本的請求(例如複雜查詢、需產生大量後端運算的 API 請求),消耗伺服器 CPU/DB 連線或記憶體,使真實使用者回應遲緩或失敗 ❌
上面是概念性分類,目的在於讓你知道「攻擊的目標是什麼資源」-> 帶寬?連線狀態?或後端運算?防禦策略會針對被攻擊的資源去布置。
攻擊者的視角?🤔
我列出了通常攻擊者在選擇攻擊方式時會考慮以下三件事:
- 可影響面(能打到哪)
- 成本/風險(發動成本)
- 成功機率
常見邏輯是先做偵查(找出公開 IP、CDN / 直接 IP、未經保護的入口),再挑選能最有效耗盡受害方資源的向量。
實務上,攻擊者會把大量小裝置(IoT、家用路由器、失控的 VM)集合成 botnet,或濫用一些網際網路服務來放大流量(amplification)——而這些全都是為了讓攻擊的成本更低、影響力更大。OK!再了解這些攻擊思路後,就可以把「易受攻擊的弱點」排在優先修正、優化的名單上咯~!
🔍 偵測 DDoS:監控指標(KPI)
然而,要知道我們在被攻擊之前,要先能偵測到它才可以有效預防吧?(不然等到真的被攻擊才亂了陣就沒有意義了)。所以,以下是實務上 SOC / SRE 應該持續監控的關鍵指標:
- 帶寬/流量速率(bps)與封包速率(pps):突發的大量流量或 pps 是最直接的訊號!
- 連線狀態(active connections)與半開連線數:突然大量 SYN 或未完成的 TCP 握手 → 就要有警覺!
- 服務回應時間(latency/p95/p99)與錯誤率(5xx、timeouts):應用層被耗盡時最先出現。
- 來源分佈(src IP unique count / AS / country):不同的 Sources 來源或短時間內大量新 IP 訪問是 DDoS 的非常常見特徵!
- 異常流量模式(大量相似的 User-Agent / URL / header patterns):攻擊常是可辨識的「噪音」模式,通常這種 User-Agent/ url/ 特別標頭只要被發現,就很容易被視為 suspicious activities 可疑行為!像是如果是用 python requests 訪問網站的話,User-Agent default value 就會是 python-request 的形式(超級容易分辨出來是爬蟲或者編碼攻擊,進而被防火牆、系統阻擋)。
- 上游警示(ISP / CDN alerts):ISP/下游提供商若有異常也會發警示~
這些指標最好做閾值與基準(baseline)比對,才能在短時間內辨別「真實流量突增」與「季節性流量高峰」!
📍 如何防禦:分層策略
防禦 DDoS 最有效的方式是分層防護,把不同類型的攻擊在不同位置攔截或進行緩解。接下來會依照「從邊緣到應用」的順序來描述在實務通常可能會運用的做法!(可能會有出入,如果有任何錯誤也請各位大大指正 🙏🙏)
邊緣 / 上游(最前線!!!)
- 啟用 CDN / Anycast:利用邊緣節點分散攻擊流量,讓攻擊被多點吸收並在邊緣就被緩解。Anycast 路由可以把流量導到最近且有處理能力的節點。
- 與 ISP / 安全供應商合作(scrubbing center):當攻擊量超過自有頻寬時,上游 ISP 或專業清洗中心能做流量清洗,把惡意流量丟棄後再把乾淨的流量放回。因此,簽訂 SLA 與應急聯絡資訊是非常重要的!
- 黑洞(blackholing)與 sinkholing(慎用):在極端情況可把被攻擊 IP 黑洞以保全核心網路;但相反地,會讓服務短暫完全不可用 —— 不到萬不得已不會使用,可以說是 last resort 最後手段。
網路層(路由器、防火牆、L3-L4)
- ACL / Rate-limiting(在邊緣邊配置):過濾顯著異常的协议/來源,限制單一來源的連線數與速率。
- SYN cookie / 半開連線保護:針對 TCP 握手型攻擊,讓 kernel 用 SYN cookie 減少資源消耗。
- 分散 IP 與負載平衡:避免單一公開 IP 成為瓶頸;使用多個公網 IP 或負載平衡器分散流量。
應用層(L7 最上層)
- WAF 與行為式防禦:針對大量相似的高成本請求(例如搜索、複雜 API),在 WAF 做速率限制或 CAPTCHA 挑戰。
- API Gateway / 雪崩模式保護:針對會觸發後端昂貴運算的 API,加入速率控制、回退與熔斷(circuit breaker)策略,避免單一請求導致整體崩潰。
- 快取(Caching):靜態內容或可快取的 API 回應放到 CDN 或邊緣快取,減少 origin 負載。
運維 & SRE 措施 🤖
- 自動擴充(auto-scaling)要謹慎:scale-out 能暫時吸收增加的負載,但若攻擊量持續且高昂,會造成高額成本或資源耗盡;需與上游保護配合。
- 健全的 monitoring 與 runbook:測試你的自動化 playbook(例如 DNS failover、traffic reroute)並在非高峰時間演練。
- 測試容量(capacity planning):理解你的正常峰值,並與 ISP / CDN 協商可動用的緩解能力。
結語
不要等到被打掛才開始處理!
DoS/ DDoS 不只是技術方面存在的問題,更是一個營運風險。總結三件事可以手刀學習實作預防:建立監控基線(能在 1 分鐘內偵測到異常)、確認與上游的緊急聯絡與緩解方案(CDN / ISP / scrubbing)、以及把 DDoS runbook 演練一次。以攻擊者思維檢視伺服器的弱點以及漏洞,我認為才是最實際也最有效的預防方法!