作者: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