我到底是怎麼被"炸房掛"轟炸掉線的?
炸房掛?
眾所周知,在一些吃雞類、MOBA對戰類遊戲中,我們經常都會遇到一些”神仙局”,比如在吃雞,FPS類遊戲中經常遇到”槍槍爆頭”,在MOBA類遊戲中遇到各種對手的技能零CD無限釋放,這型別的外掛,都是利用模擬滑鼠鍵盤,或者是擷取Sock和API內容,將其修改達到效果的。
而另外一類的外掛,就是關鍵的對戰時刻,直接讓玩家網路卡頓甚至掉線了;或者在遊戲剛開始的時候,直接讓所有玩家掉線,然後通過控制攻擊的停止時間,更快地重新連線到戰鬥服中,比如在吃雞遊戲裡面,如果遊戲剛開始的時候,大家都掉線了,然後60秒後再重連回去,首先重連成功的玩家(一般是開外掛的玩家,因為他可以控制停止時間),將可以輕易地將周邊的落地玩家擊殺,從而獲利。這類外掛統稱為“炸房掛”,這就是今天主要的話題。
遊戲中的UDP協議
在即時多人對戰類的遊戲裡面,通常都會使用UDP協議直接讓多個玩家連線到同一局戰鬥伺服器中(同一局對戰/副本,會分配到相同的公網IP地址和埠),所以惡意玩家(開掛)是可以輕易地獲取到具體的對戰伺服器地址和埠的。
DDoS攻擊與UDP
常見的DDoS攻擊手段,主要分為兩種型別:
- 控制外部大量的肉機,使用指令碼,讓這些肉機使用指令碼,直接攻擊目標伺服器。
- 僅需要控制少量的肉機,通過訪問網際網路的公共服務,然後通過修改源地址,對目標伺服器進行分散式的反射攻擊。
我們來對比一下TCP和UDP的協議包結構:
我們可以發現,在UDP的業務流中,並不像TCP那樣,有多個欄位維度可以檢測的。
所以總結一下,UDP的主要特點是:
- 無連線
- 源IP容易偽造(有很多運營商是不會檢測源地址是否是自己分配的),難溯源
- 攻擊成本低
Azure防護方案
所以,針對這些攻擊,我們有5種主要的防護思路:
1. 伺服器白名單、黑名單
只允許業務目的埠,遮蔽常見的反射源埠。
2. 地理位置過濾
針對業務使用者的地理位置特性,在遇到UDP反射攻擊時,優先從使用者量最少地理位置的源IP進行封禁阻斷,直到將異常地理位置的源IP請求全部封禁,使流量降至伺服器可處理的範圍之內,可有效減輕干擾流量。
3. 基於IP和埠的限速
通過對源IP、源埠、目標IP、目標埠的多種搭配組合進行限速控制,實現靈活有效的防護策略,降低業務影響範圍。
4. 流量異常波動抑制演算法
對正常的業務流量進行學習建模,當某類異常流量出現快速突增的波動時,自動判斷哪些是異常從而進行限速/封禁,以避免對正常流量造成影響。
5. 指紋(水印)過濾
協商好特定的水印演算法,在客戶端發包的時候帶上水印欄位,然後通過水印過濾識別正常還是攻擊流量。
而這5種防護的思路,Azure都能提供對應的防護方案。
- Network Security Group
- Azure Firewall
- 高階定製防護
- Azure DDoS Standard Plan
- 高階定製防護
我們大致總結為三道主要的防線:
第一道防線:Azure DDoS Standard Plan
啟用Azure DDoS標準防護,阻擋大部分的3-4層攻擊。
第二道防線:新增水印
在手機客戶端傳送每條資訊中都嵌入了水印,而攻擊的報文沒有攜帶水印,Azure可以通過這些水印進行過濾,只有攜帶水印的報文,才會到達後端遊戲伺服器,從而達到防護的效果。
第三道防線:基於埠的速率限制
我們不能保障水印方案可以100%抵擋所有DDoS流量,所以當DDoS仍然可以到達後端伺服器的時候,我們可以通過限制每個埠的速率,以犧牲一局遊戲的代價(作廢處理),來換取整臺伺服器上的其他遊戲房間的正常執行。