DDoS攻擊和自架低價防DDoS系統

背景

分散式阻斷服務攻擊(DDoS)向來甚為流行,攻擊方法是操控大量有漏洞或被入侵的伺服器或電腦發送極大量無用並無法簡單阻擋的網絡封包,令受害者網絡癱瘓。

許多商業機構因為種種理由(如勒索、惡意競爭等)而一一成為目標。受DDoS攻擊的商業機構,輕則服務質素受影響,重則網絡完全癱瘓,嚴重損害商業機構的聲譽和利益。

近年來,針對個人的DDoS服務更為猖獗,甚至有人借「網絡壓力測試」之名,在網上為不法之禽提供收費甚至免費的DDoS攻擊服務(booter)

使用DDoS攻擊的電腦技術要求只為低至中低等,只需透過極為簡單的方法取得伺服器IP,再登入相關DDoS攻擊服務網站,填入有關資料即可。

booter

災情

在香港,有不少熱愛電子遊戲「Minecraft」的人士在家中自架伺服器,為其他同樣熱愛Minecraft的大家提供玩樂的地方。但近年來,Minecraft伺服器受到攻擊而被逼關閉的情況十分普遍,影響玩家對Minecraft伺服器的信心。不法之禽以低技術的小動作已可影響整個遊戲社區,間接令香港的Minecraft熱潮提早進入黃昏,實在令人感到可惜。

在外國,關於DDoS的資訊更為流通,不止自架TeamSpeak、CS:GO等遊戲伺服器的愛好者受到DDoS攻擊,連一般遊戲玩家如LoL玩家亦有機會遭殃。

只需打開Skype等通訊軟件,你的IP已等同被公開,隨時受到網絡攻擊的目標。不法之禽只要找到你的Skype帳戶,便可隨時對你發動攻擊。雖然近期Skype已加強保護用戶並隱藏用戶的IP,但這不代表遊戲玩家的IP不會從其他途徑洩露,令玩家受到DDoS攻擊。

攻擊方法

一般Windows電腦感染木馬後,或者伺服器被入侵後,有機會成為殭屍網絡(Botnet)的一部份,不法之徒可利用殭屍網絡產生巨大的UDP網絡流量,從而發動攻擊。

近年較常見的攻擊方法,是利用帶有漏洞的伺服器作出流量放大(Amplification)攻擊。網絡上有一些DNS、NTP、SSDP公共伺服器的仍在使用舊版軟件,那些舊版軟件有漏洞,可被利用作發動攻擊。

攻擊者以未遵從BCP38規則的網絡,成功偽裝為受害者IP,並對有關的伺服器發送大量UDP請求。請求所產生的UDP流量不會返回到攻擊者的IP,而是傳送至受害者IP。

攻擊者只向伺服器傳送少量的資料,但伺服器可傳回相對大量的資料。以NTP Amplification攻擊為例,攻擊者使用舊版NTP公共伺服器的monlist指令,以數十bytes的請求資料即可令NTP伺服器傳送數千bytes的資料到受害者IP。換句話說,若攻擊者有以下的條件:

  • 攻擊者的網絡為1Gbps
  • 攻擊者的網絡未遵從BCP38規則
  • 攻擊者已收集舊版NTP公共伺服器列表

攻擊者即可向受害者發動50Gbps起跳的網絡攻擊。

UDP協定為無連線的,受害者並不能以切斷連線的方式阻擋攻擊流量。除非受害者有100Gbps以上的網絡,否則一般只能看著自己的網絡癱瘓,就跟強姦一樣,過程十分殘忍。

若攻擊者以TCP協定或發動應用層(OSI Model layer 7)攻擊的話,流量還是有機會以技術手段被阻擋的,只是對防護方的電腦或網絡技術和統計學能力要求比較高。此文不對TCP協定或應用層攻擊作詳細討論。

現行保護伺服器的方法

運用GRE Tunnel技術,你可以將伺服器的IP隱藏。假設伺服器IP未被洩露,你的伺服器網絡將不會受到DDoS攻擊。準確地來說,只是DDoS攻擊達不到你的伺服器網絡。

現在有許多網絡保護公司以GRE Tunnel技術保護客戶網絡的可用性(Availability)。

GRE Tunnel技術大致如下圖: GRE Tunnel

  1. 當客戶網絡受到DDoS攻擊,客戶將使用BGP廣播,在上遊路由器(Upstream)指示所有流量導向網絡保護公司的網絡。
  2. 網絡保護公司分析並排除惡意攻擊流量。
  3. 以GRE Tunnel技術,把正常的流量導向至客戶的網絡。
  4. 客戶網絡透過正常通道與訪客通訊。

然而,網絡保護公司的服務十分昂貴,非商業機構基本上無法負擔高昂的防護費用。

自架低價防DDoS系統

自架低價防DDoS系統有兩種詮釋方法:

  1. 只確保遊戲伺服器的網絡(家中網絡)不受到攻擊;或
  2. 確保遊戲伺服器的可用性。

由於此兩種方法以十分有限的預算建議保護遊戲伺服器,事先聲明:

  • 此方法不防止TCP/應用層攻擊。
  • 此方法不保證遊戲伺服器的可用性。
  • 此方法從未被本文作者驗證或實行過。
  • 此方法必然會增加對遊戲伺服器的連線延遲。
  • 此方法要錢。
  • 使用者需有相當的程式編寫技術和Linux伺服器管理技術。
  • 此方法有未知的風險,如受到DDoS太頻繁有機會令伺服器供停止向你服務。
  • 本文作者不對使用者行為和損失負責。

方法一

此方法實行起來相對上比較簡單,花費亦比較低。此方法是以防護伺服器來保護遊戲伺服器,當防護伺服器受到攻擊,可能會有以下三種情況:

  • 防護伺服器自動被Blackhole或null route一段時間,如幾小時。當所有防護伺服器被Blackhole其間,遊戲伺服器將不可用。
  • 防護伺服器沒有明顯受到影響,或網絡效能稍為下降。
  • 防護伺服器流量過大,需另外付錢。

需另外付錢的情況一般不會發生。無論如何,你的遊戲伺服器不會直接受到攻擊,避免家中網絡癱瘓或遊戲伺服器供應商停止向你服務。

相信一般自架遊戲伺服器的玩家不會有進行BGP廣播的能力,修改DNS記錄又費時,因此,所有流量應先經過保護伺服器,再到達遊戲伺服器。

Linux核心內置GRE模組和iptables,使用者可透過相關模組建立連接遊戲伺服器(下稱G)和保護伺服器(下稱A, B, C...)的GRE Tunnel。這是設定GRE Tunnel的教學。

G與A, B, C成功連接後,需設定DNS A記錄。假設:

  • 你的域名是domain.tld
  • A的IP是A.A.A.A
  • B的IP是B.B.B.B
  • C的IP是C.C.C.C

請於DNS新增n個關於gre.domain.tld的A記錄,例如,

gre.domain.tld.        300    IN    A    A.A.A.A
gre.domain.tld.        300    IN    A    B.B.B.B
gre.domain.tld.        300    IN    A    C.C.C.C

這是在實作Round-robin DNS技術,假設玩家要取得gre.domain.tld的IP,玩家的電腦會隨意從A, B, C伺服器的IP中選擇一個。當伺服器A不可用時,玩家重新整理便可連接到B或C伺服器。

方法二

方法二建基在方法一之上,並使用監察伺服器(M)則會監察所有防護伺服器的可用性,當防護伺服器受攻擊或其他原因導致不可用時,監察伺服器會以程式自動新增防護伺服器,並更新DNS記錄,希望盡量減少攻擊對遊戲伺服器可用性的影響。

監察伺服器和遊戲伺服器可以是同一部伺服器。

比起方法一,方法二新增了以下先決條件:

  • 使用者需以程式即時監察所有伺服器網絡狀況。
  • 使用者需在防護伺服器不可用時以程式和相關API即時增減防護伺服器。
  • 使用者需以程式和相關API更新DNS記錄。

主要邏輯如下:

  1. M被動監察A, B, C,A, B, C每隔一段時間自動向M報平安。
  2. 若A, B, C其中一台伺服器(如B)太久未向M報平安的話,M將認定B為不可用。
  3. M向伺服器供應商請求刪除B,並向伺服器供應商要求一部新的伺服器D,取得D的IP D.D.D.D,並使G與D立即建立新的GRE Tunnel。
  4. M更新DNS記錄,把B的A記錄刪除,新增D的A記錄。
  5. M亦會監察防護伺服器的異常情況,如費用或流量超出限制時,刪除該伺服器。

由於本文作者未有相關需求,恕未能提供相關程式,請自行編寫。

防護伺服器選擇

對香港而言,防護伺服器主要有三個選擇:

  1. DigitalOcean SG
  2. AWS EC2 SG
  3. BuyVM Las Vegas

DigitalOcean SG 512MB RAM

  • 0.05 HKD/小時
  • Ping大約38 ms
  • 流量: 軟性限制1TB/月,無硬性規定
  • 受到DDoS攻擊: Blackhole 3小時

AWS EC2 t2.nano SG 512MB RAM

  • 0.078 HKD/小時
    • Free tier的話,主機一年免費
  • Inbound不收費
  • Outbound好很貴
    • 1 HKD/GB左右
    • Free tier的話,頭15GB免費
  • 可設定超支警報
  • Ping可能也是大約3x ms
  • 受到DDoS攻擊: 可無視之

BuyVM Las Vegas 128MB/256MB RAM

  • 39 HKD/月或50 HKD/月
  • Ping大約173 ms
    • 延遲巨大,已到影響服務的程度,請逼不得已才去使用
  • 流量: 硬性規定500GB/月或1TB/月
    • 其後每TB/月 20 HKD
  • 受到DDoS攻擊: 未知,可無視之?

方法二防護策略

建議策略

此策略平衝風險與開支。最少的開支為10USD/月,而受攻擊時,最大的開支為25USD/月。

  1. 設定AWS EC2的billing alert為10USD。
  2. 先用兩部DigitalOcean SG做防護。
  3. 其中一部伺服器不可用時,啟動一部AWS EC2 t2.nano SG,但不要刪除不可用的伺服器。更新DNS記錄。
  4. 當AWS billing alert啟動(一個月內超過10USD)時,該月份內不再啟動EC2,而改用BuyVM伺服器做後備。
  5. 當原先不可用的DigitalOcean伺服器報平安時,刪除(terminate)EC2伺服器,並從DNS記錄中刪除EC2和BuyVM的A記錄。

較方便但較高風險策略

此策略有較大的風險,你的DigitalOcean帳戶可能會被封禁。使用此方法開支可能更低。

  1. 先用兩部DigitalOcean SG做防護。
  2. 當有伺服器不可用時,啟動一部新的DigitalOcean SG伺服器,再刪除不可用的伺服器,最後更新DNS記錄。

無限金錢策略

由始至終使用AWS EC2,適合家境富裕的人士。請注意1TB的outbound流量收費約為930HKD。


CloudFlare絕招

任意TCP server防DDoS

Recommendations

Last modified: 2016-12-29 18:24:53
Powered by Simple Blog