我到底是怎麼被"炸房掛"轟炸掉線的?

微軟技術棧發表於2021-11-10

我到底是怎麼被"炸房掛"轟炸掉線的?

炸房掛?

眾所周知,在一些吃雞類、MOBA對戰類遊戲中,我們經常都會遇到一些”神仙局”,比如在吃雞,FPS類遊戲中經常遇到”槍槍爆頭”,在MOBA類遊戲中遇到各種對手的技能零CD無限釋放,這型別的外掛,都是利用模擬滑鼠鍵盤,或者是擷取Sock和API內容,將其修改達到效果的。

而另外一類的外掛,就是關鍵的對戰時刻,直接讓玩家網路卡頓甚至掉線了;或者在遊戲剛開始的時候,直接讓所有玩家掉線,然後通過控制攻擊的停止時間,更快地重新連線到戰鬥服中,比如在吃雞遊戲裡面,如果遊戲剛開始的時候,大家都掉線了,然後60秒後再重連回去,首先重連成功的玩家(一般是開外掛的玩家,因為他可以控制停止時間),將可以輕易地將周邊的落地玩家擊殺,從而獲利。這類外掛統稱為“炸房掛”,這就是今天主要的話題。

遊戲中的UDP協議

在即時多人對戰類的遊戲裡面,通常都會使用UDP協議直接讓多個玩家連線到同一局戰鬥伺服器中(同一局對戰/副本,會分配到相同的公網IP地址和埠),所以惡意玩家(開掛)是可以輕易地獲取到具體的對戰伺服器地址和埠的。
53f071b7d4f50fa5e28e0744cf73f19a.png

DDoS攻擊與UDP

常見的DDoS攻擊手段,主要分為兩種型別:

  1. 控制外部大量的肉機,使用指令碼,讓這些肉機使用指令碼,直接攻擊目標伺服器。
  2. 僅需要控制少量的肉機,通過訪問網際網路的公共服務,然後通過修改源地址,對目標伺服器進行分散式的反射攻擊。
    b8d4869eae7e8cd649a1a3fa303399d5.png
    我們來對比一下TCP和UDP的協議包結構:
    f2f1462429b1f663c416e4c3cb5feceb.png
    我們可以發現,在UDP的業務流中,並不像TCP那樣,有多個欄位維度可以檢測的。
    所以總結一下,UDP的主要特點是:
  1. 無連線
  2. 源IP容易偽造(有很多運營商是不會檢測源地址是否是自己分配的),難溯源
  3. 攻擊成本低

Azure防護方案

所以,針對這些攻擊,我們有5種主要的防護思路:

1. 伺服器白名單、黑名單

只允許業務目的埠,遮蔽常見的反射源埠。

2. 地理位置過濾

針對業務使用者的地理位置特性,在遇到UDP反射攻擊時,優先從使用者量最少地理位置的源IP進行封禁阻斷,直到將異常地理位置的源IP請求全部封禁,使流量降至伺服器可處理的範圍之內,可有效減輕干擾流量。

3. 基於IP和埠的限速

通過對源IP、源埠、目標IP、目標埠的多種搭配組合進行限速控制,實現靈活有效的防護策略,降低業務影響範圍。

4. 流量異常波動抑制演算法

對正常的業務流量進行學習建模,當某類異常流量出現快速突增的波動時,自動判斷哪些是異常從而進行限速/封禁,以避免對正常流量造成影響。

5. 指紋(水印)過濾

協商好特定的水印演算法,在客戶端發包的時候帶上水印欄位,然後通過水印過濾識別正常還是攻擊流量。

而這5種防護的思路,Azure都能提供對應的防護方案。

  1. Network Security Group
  2. Azure Firewall
  3. 高階定製防護
  4. Azure DDoS Standard Plan
  5. 高階定製防護

我們大致總結為三道主要的防線:

第一道防線:Azure DDoS Standard Plan

啟用Azure DDoS標準防護,阻擋大部分的3-4層攻擊。
dab188947485b109621847c0359807ec.png

第二道防線:新增水印

在手機客戶端傳送每條資訊中都嵌入了水印,而攻擊的報文沒有攜帶水印,Azure可以通過這些水印進行過濾,只有攜帶水印的報文,才會到達後端遊戲伺服器,從而達到防護的效果。
1d10fbe0982dc012480e1057de3d06cf.png

第三道防線:基於埠的速率限制

我們不能保障水印方案可以100%抵擋所有DDoS流量,所以當DDoS仍然可以到達後端伺服器的時候,我們可以通過限制每個埠的速率,以犧牲一局遊戲的代價(作廢處理),來換取整臺伺服器上的其他遊戲房間的正常執行。
fdadef90fd4e59d8a8d1eb5fd3cc82e2.png


3af9d0ddb87683c8959fdea4d68de3b3.png

相關文章