天天看點

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

作者: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主線副本存在無敵秒殺、全屏攻擊等大量安全漏洞

類型二:盜刷類漏洞

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

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

類型三:當機類漏洞

(1) 圖鑒分解請求中,構造異常圖鑒id引發伺服器當機

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

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

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

外挂類漏洞

變速漏洞實作方式有多種,相應也有多種修複方案。可監控系統時間相關函數是否被篡改來檢測通用變速器類的修改器;針對修改遊戲内部儲存角色移動速度變量的記憶體,也可以通過記憶體加密、設定影子變量和伺服器坐标校驗等方式來解決。

對pve單機副本外挂類漏洞的處理,可從副本結算請求的内容上做文章。如加入副本挑戰序列号來防止結算重發;加入crc、md5或一些備援資訊來防止結算請求被篡改;加入戰鬥過程資料采樣甚至隐形npc通過伺服器安全政策校驗,來防止無敵秒殺全屏攻擊等類型外挂。

盜刷類漏洞

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

當機類漏洞

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

在項目測試階段,手遊安全測試團隊累積為《龍之谷手遊》挖掘出了7個緻命級漏洞,8個高危級漏洞,5個中危級漏洞,将潛伏在遊戲中的龍币盜刷、pvp/pve外挂、伺服器當機等各類緻命級、高危級漏洞提前揭露出來,提前制定修複方案進行修複,并評估和驗收結果與風險。手遊安全漏洞的測試為《龍之谷手遊》項目組避免了經濟損失,為遊戲正式開啟不删檔,為使用者提供安全、公平、健康的遊戲環境提供了堅實支撐和保障。

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

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