我到底是怎么被
"炸房掛"轟炸掉線的?
炸房掛?
眾所周知,在一些吃雞類、MOBA對戰(zhàn)類游戲中,我們經(jīng)常都會遇到一些”神仙局”,比如在吃雞,F(xiàn)PS類游戲中經(jīng)常遇到”槍槍爆頭”,在MOBA類游戲中遇到各種對手的技能零CD無限釋放,這類型的外掛,都是利用模擬鼠標(biāo)鍵盤,或者是截取Sock和API內(nèi)容,將其修改達(dá)到效果的。
而另外一類的外掛,就是關(guān)鍵的對戰(zhàn)時(shí)刻,直接讓玩家網(wǎng)絡(luò)卡頓甚至掉線了;或者在游戲剛開始的時(shí)候,直接讓所有玩家掉線,然后通過控制攻擊的停止時(shí)間,更快地重新連接到戰(zhàn)斗服中,比如在吃雞游戲里面,如果游戲剛開始的時(shí)候,大家都掉線了,然后60秒后再重連回去,首先重連成功的玩家(一般是開外掛的玩家,因?yàn)樗梢钥刂仆V箷r(shí)間),將可以輕易地將周邊的落地玩家擊殺,從而獲利。這類外掛統(tǒng)稱為“炸房掛”,這就是今天主要的話題。
01游戲中的UDP協(xié)議
在即時(shí)多人對戰(zhàn)類的游戲里面,通常都會使用UDP協(xié)議直接讓多個(gè)玩家連接到同一局戰(zhàn)斗服務(wù)器中(同一局對戰(zhàn)/副本,會分配到相同的公網(wǎng)IP地址和端口),所以惡意玩家(開掛)是可以輕易地獲取到具體的對戰(zhàn)服務(wù)器地址和端口的。
02DDoS攻擊與UDP
常見的DDoS攻擊手段,主要分為兩種類型:
1. 控制外部大量的肉機(jī),使用腳本,讓這些肉機(jī)使用腳本,直接攻擊目標(biāo)服務(wù)器。
2. 僅需要控制少量的肉機(jī),通過訪問互聯(lián)網(wǎng)的公共服務(wù),然后通過修改源地址,對目標(biāo)服務(wù)器進(jìn)行分布式的反射攻擊。
我們來對比一下TCP和UDP的協(xié)議包結(jié)構(gòu):
我們可以發(fā)現(xiàn),在UDP的業(yè)務(wù)流中,并不像TCP那樣,有多個(gè)字段維度可以檢測的。
所以總結(jié)一下,UDP的主要特點(diǎn)是:
1. 無連接
2. 源IP容易偽造(有很多運(yùn)營商是不會檢測源地址是否是自己分配的),難溯源
3. 攻擊成本低
03Azure防護(hù)方案
所以,針對這些攻擊,我們有5種主要的防護(hù)思路:
1. 服務(wù)器白名單、黑名單
只允許業(yè)務(wù)目的端口,屏蔽常見的反射源端口。
2. 地理位置過濾
針對業(yè)務(wù)用戶的地理位置特性,在遇到UDP反射攻擊時(shí),優(yōu)先從用戶量最少地理位置的源IP進(jìn)行封禁阻斷,直到將異常地理位置的源IP請求全部封禁,使流量降至服務(wù)器可處理的范圍之內(nèi),可有效減輕干擾流量。
3. 基于IP和端口的限速
通過對源IP、源端口、目標(biāo)IP、目標(biāo)端口的多種搭配組合進(jìn)行限速控制,實(shí)現(xiàn)靈活有效的防護(hù)策略,降低業(yè)務(wù)影響范圍。
4. 流量異常波動(dòng)抑制算法
對正常的業(yè)務(wù)流量進(jìn)行學(xué)習(xí)建模,當(dāng)某類異常流量出現(xiàn)快速突增的波動(dòng)時(shí),自動(dòng)判斷哪些是異常從而進(jìn)行限速/封禁,以避免對正常流量造成影響。
5. 指紋(水?。┻^濾
協(xié)商好特定的水印算法,在客戶端發(fā)包的時(shí)候帶上水印字段,然后通過水印過濾識別正常還是攻擊流量。
而這5種防護(hù)的思路,Azure都能提供對應(yīng)的防護(hù)方案。
1. Network Security Group
2. Azure Firewall
3. 高級定制防護(hù)
4. Azure DDoS Standard Plan
5. 高級定制防護(hù)
我們大致總結(jié)為三道主要的防線:
第一道防線:Azure DDoS Standard Plan
啟用Azure DDoS標(biāo)準(zhǔn)防護(hù),阻擋大部分的3-4層攻擊。
第二道防線:添加水印
在手機(jī)客戶端發(fā)送每條信息中都嵌入了水印,而攻擊的報(bào)文沒有攜帶水印,Azure可以通過這些水印進(jìn)行過濾,只有攜帶水印的報(bào)文,才會到達(dá)后端游戲服務(wù)器,從而達(dá)到防護(hù)的效果。
第三道防線:基于端口的速率限制
我們不能保障水印方案可以100%抵擋所有DDoS流量,所以當(dāng)DDoS仍然可以到達(dá)后端服務(wù)器的時(shí)候,我們可以通過限制每個(gè)端口的速率,以犧牲一局游戲的代價(jià)(作廢處理),來換取整臺服務(wù)器上的其他游戲房間的正常運(yùn)行。