閱讀90 返回首頁    go 阿裏雲 go 技術社區[雲棲]


阻擊外掛——《龍之穀手遊》安全測試的那點事

作者:sheldon,騰訊遊戲漏洞測試高級工程師
商業轉載請聯係騰訊WeTest獲得授權,非商業轉載請注明出處。 


一、項目背景

外掛的危害

隨著智能手機的全麵普及和市場泛娛樂化,移動遊戲行業發展迅勐,無論是市場收入還是用戶規模,手遊在遊戲市場上已經占據了半壁江山。如此火熱的市場吸引了大量外掛、輔助工作室等非法盈利團隊,嚴重影響了遊戲的收益、平衡,縮短遊戲的生命周期,外掛對手遊形成了這些危害:

手遊外掛的八大危害

 

為了避免這些損害,騰訊遊戲內部的測試流程已經將“手遊安全測試”設立為必經環節,騰訊大部分手遊上線前都會進行手遊安全測試,《王者榮耀》、《穿越火線:槍戰王者》,《夢幻誅仙》等六星級遊戲更是每一個版本都主動尋求手遊漏洞掃描。《龍之穀手遊》同樣也是如此。

 

《龍之穀手遊》的加入

《龍之穀》在端遊時代遭受過遊戲外掛“洗禮”,從簡單的遊戲內存修改、變速齒輪到後麵越演越烈N倍攻擊掛、無敵掛、穿牆掛,曾經一度被玩家稱作“外掛穀”。《龍之穀手遊》依然延續端遊ACT類的玩法與類型,原汁原味還原端遊經典,在手遊版本發布前,遊戲測試和運營團隊將遊戲安全性作為一個重要專項來持續開展。

為了吸取端遊的曆史教訓,避免手遊上線後再次出現遊戲外掛,《龍之穀手遊》測試團隊選擇與騰訊WeTest合作,使用手遊安全測試專家模式,對遊戲的客戶端、服務器、以及通信協議方麵的安全質量進行全麵檢測和把控。在順利上線後,騰訊WeTest團隊整理了《龍之穀手遊》安全測試過程中的一些思路和實踐內容,對外分享。

 

二、技術難點

手遊的使用場景與傳統APP有著巨大的差異,不同的遊戲玩法, 技術實現都不一樣,因此手遊安全測試團隊需要對每一個遊戲,都從零開始研究遊戲內部實現架構。

經過分析,《龍之穀手遊》使用Google protobuf組件來實現協議數據通信,而騰訊WeTest手遊安全測試團隊具備protobuf等主流協議結構的自動接入和解析技術,無需利用proto文件自動提取遊戲協議結構代碼,自動分析遊戲通信協議明文點,完成通信協議工具接入。《龍之穀手遊》屬於重度RPG類型,帶有實時PVP玩法,包含多種類型副本、小遊戲玩法、公會、家園、天梯賽、英雄戰場、世界boss等50多個功能係統,如何在短時間內完成全量內容的漏洞檢測是當時麵臨的最大挑戰。手遊安全測試團隊一方麵使用函數風險智能分析係統、盜刷漏洞掃描和拒絕服務攻擊掃描對遊戲進行一輪漏洞自動化檢測,另一方麵根據各功能風險性和優先級對遊戲的戰鬥係統、交易所和戰力成長係統進行深度分析和漏洞挖掘。

 

函數風險智能分析流程
 

三、實現方案

測試目標

根據手遊安全測試團隊對騰訊遊戲多年的測試經驗,手遊安全漏洞主要會出現在客戶端、遊戲邏輯和服務器三個層麵,為了整體全麵的發現手遊外掛情況,測試團隊將手遊外掛的風險項細化情況如下:

 

測試前的分析

前文提到不同手遊玩法都會使用不同的技術實現,因此在《龍之穀手遊》安全測試之初,團隊對遊戲進行了一個詳細的分析與拆解。

遊戲實現——拆分遊戲玩法中風險節點

分析過程中,測試團隊發現《龍之穀手遊》的 “戰鬥係統”和“交易係統”是手遊漏洞產生的高危模塊,下文也將從這兩塊出發,拆分其中的風險節點。

 

戰鬥係統——單機模式與多人聯機模式結合

√ 《龍之穀手遊》核心玩法包括PVP和PVE戰鬥係統以及各種模式的副本單機模式:主線副本屬於單機模式,戰鬥過程完全在客戶端側實現,測試中可重點通過內存修改和函數修改來挖掘漏洞;

√ 多人聯機模式:巢穴副本、1V1天梯賽、保衛隊長等屬於多人聯機模式,戰鬥過程的實現由客戶端和服務器相互配合來完成。根據實現,優先采用協議測試工具進行漏洞挖掘,在驗證部分風險項時仍然要使用客戶端的內存、函數、變速測試工具。

 

交易係統——遊戲道具流通的核心樞紐

遊戲允許玩家通過交易所進行物品交易流通,安全漏洞的影響麵將會被交易係統進一步放大,也是需要優先進行外掛檢測和漏洞挖掘的內容。

對於手遊玩法的具體拆分,可見下圖的安全風險分析示例(部分):

《龍之穀手遊》風險分析片段


 

安全風險項下鑽分析示例(部分):

《龍之穀手遊》安全風險項下鑽分析
 

 

除上述外掛風險以外,服務器端程序的健壯性也需要通過拒絕服務攻擊掃描進行宕機風險的檢測。

根據對於《龍之穀手遊》的拆分,測試團隊基本確認遊戲核心玩法在於多人聯機的PVP或PVE模式以及其豐富的交易係統,因此團隊也將測試的策略調整為“協議測試為主,函數及內存修改測試為輔“。

 

遊戲引擎——針對引擎與實現尋找突破口

遊戲使用Unity3D引擎開發,該類型遊戲遊戲源代碼一般會使用C#、Lua、C++中的一種或多種。經過分析《龍之穀》客戶端部分代碼邏輯是使用C#腳本語言,不過出於安全性考慮,研發團隊已經將遊戲安裝包中客戶端邏輯代碼文件XxxxxClient.dll進行了加密,所以在逆向分析前要進行該文件的解密操作獲取明文。獲取明文源碼的辦法比較多:

1、逆向解密函數,利用遊戲解密函數解密;

2、在遊戲運行過程中將XxxxxClient.dll從內存中Dump出來;

3、Hook Mono函數mono_image_open_from_data_with_name()和mono_class_from_name ()也可以獲取明文源碼。

 

遊戲某版本測試後發現安全問題

遊戲風險分析完成後,漏洞挖掘的工作其實就完成了一大半,之後利用安全測試工具對風險進行逐一驗證即可。在遊戲中發現以下幾種類型的漏洞,均屬於致命級漏洞:

類型一:外掛類漏洞

(1) PVP模式加速移動

(2) PVE主線副本存在無敵秒殺、全屏攻擊等大量安全漏洞

“PVP天梯加速”漏洞視頻:https://v.qq.com/x/page/h0390e2ias6.html

無敵全屏秒殺”漏洞視頻:https://v.qq.com/x/page/v0390tzwloc.html

 

類型二:盜刷類漏洞

(1) 拍賣可任意複製物品,無限盜刷龍幣

(2) 驅逐家園中的妖精可無限盜刷獎勵

“拍賣所複製物品”漏洞視頻:https://v.qq.com/x/page/o0390uhyk8l.html

 

類型三:宕機類漏洞

(1) 圖鑒分解請求中,構造異常圖鑒ID引發服務器宕機

(2) 圖鑒分解請求中,構造異常圖鑒數量引發服務器宕機

(3) 公會、競技場、圖鑒商店的購買請求中,構造異常的物品數量引發服務器宕機

(4) 紋章洗練請求中,構造異常的洗練次數引發服務器宕機

 

解決方法

外掛類漏洞

  • 變速漏洞實現方式有多種,相應也有多種修複方案。可監控係統時間相關函數是否被篡改來檢測通用變速器類的修改器;針對修改遊戲內部保存角色移動速度變量的內存,也可以通過內存加密、設置影子變量和服務器坐標校驗等方式來解決。

  • 對PVE單機副本外掛類漏洞的處理,可從副本結算請求的內容上做文章。如加入副本挑戰序列號來防止結算重發;加入CRC、md5或一些冗餘信息來防止結算請求被篡改;加入戰鬥過程數據采樣甚至隱形NPC通過服務器安全策略校驗,來防止無敵秒殺全屏攻擊等類型外掛。

盜刷類漏洞

  • 服務器處理購買、結算等物品發放請求時,需要加強對請求中各項信息合法性校驗,另外運營側可以接入運營經分係統,對各種道具和金錢的產出進行實時監控與告警。

宕機類漏洞

  • 因程序健壯性導致的服務器宕機漏洞被檢測出之後,修複起來比較簡單,針對性做好異常值處理就能夠修複。

 

四、最終效果

在項目測試階段,手遊安全測試團隊累積為《龍之穀手遊》挖掘出了7個致命級漏洞,8個高危級漏洞,5個中危級漏洞,將潛伏在遊戲中的龍幣盜刷、PVP/PVE外掛、服務器宕機等各類致命級、高危級漏洞提前揭露出來,提前製定修複方案進行修複,並評估和驗收結果與風險。手遊安全漏洞的測試為《龍之穀手遊》項目組避免了經濟損失,為遊戲正式開啟不刪檔,為用戶提供安全、公平、健康的遊戲環境提供了堅實支撐和保障。


關於騰訊WeTest手遊安全測試團隊

騰訊WeTest手遊安全測試團隊從2011年初開始對手遊安全領域進行探索和技術積累,旨在通過提前發現遊戲版本的安全漏洞,預警風險,打造出業界領先的手遊安全測試技術方案,在工具上已經支持所有騰訊在研和運營的手遊項目。團隊通過使用與正式服同樣的遊戲客戶端和服務器,模擬外掛工作室製作外掛的過程,依靠自身的技術積累來提高專業程度,持續保持漏洞的發現率。

目前提供了專家測試服務,希望通過提前發現遊戲版本的安全漏洞,預警風險,幫助提高騰訊遊戲的品牌和口碑。

服務目前已經登陸騰訊雲,歡迎前來使用https://www.qcloud.com/product/sr

手遊安全測試接入流程:https://www.qcloud.com/document/product/574/8807

常見問題:https://www.qcloud.com/document/product/574/8813

最後更新:2017-04-12 23:26:17

  上一篇:go 使用阿裏雲PCDN降低內容分發成本
  下一篇:go java麵試題—精選30道Java筆試題解答(二)