從XcodeGhost漏洞事件看手游安全測試

本文轉載自:騰訊WeTest專欄--《從XcodeGhost漏洞事件看手游安全測試》

安全領域有一個詞出現頻率很高,XcodeGhost,這種病毒不僅會在應用運行時竊取用戶信息,甚至還會模擬收費或帳號彈窗來竊取你的iCloud及iTunes密碼。受影響應用數超過76款,涉及用戶多達1個億。

那么XcodeGhost究竟是什么?

簡單的說,就是在iOS開發工具中加入一段惡意代碼,導致凡是使用這個工具開發的APP都會被感染,而安裝被感染APP的手機則會淪為黑客的“玩具”。

在用戶心目中“堅不可摧”的蘋果生態系統這一次遭遇了“信任危機”,人們開始發現蘋果的安全防御機制比想象的更加脆弱。

“信任危機”是企業危機中最嚴重的之一。“信任危機”讓企業無論做什么都會讓用戶產生懷疑,讓企業的一切舉措都將事倍功半。

從XcodeGhost漏洞事件來看手游領域,手游的安全問題是引發“信任危機”的重要導火索,作為安全領域的老鳥,在手游一片紅海的當下,想談談手游安全的重要性,同時想給大家分享一些實用的手游安全測試方法。

一、為什么安全測試這么重要?

來看看幾種常見的安全問題:

1.游戲盜號,利用安全漏洞對游戲內賬號做批量盜取,對玩家的直接損傷不用提,盜號的資金流入市場影響的是整個游戲市場平衡。

2.外掛,從端游到頁游,太多游戲是因為外掛問題被玩家拋棄,直接影響著玩家體驗。

3.客戶端二次打包,這個帶來的風險比前幾個都大,而且后患無窮。可能是直接被安裝了購買插件,開發者的利潤流向了黑客的口袋,更恐怖的是向玩家投放釣魚病毒,直接獲取玩家的銀行賬號等個人資產信息。

除了這些問題外,還有非常多的安全問題。這些問題都將直接、間接影響游戲游戲的收入、留存,給開發者造成重大損失。所以,如何預防安全問題迫在眉睫,安全測試應運而生。簡單概括安全測試是泛指能夠影響游戲平衡性,并且對游戲有破壞性和惡意影響的問題。包括幾大安全領域:

包括網絡帳號、網絡充值的問題涉及到了網絡安全的領域;

客戶端的安全,反破解、反調試等屬于軟件安全的領域;

游戲外掛的檢測與防御,就比較類似于殺毒軟件的檢測做法;

游戲內邏輯漏洞的檢測,又更傾向于軟件測試領域的內容;

還有游戲內的欺騙、釣魚等方面。

二、該如何做安全測試?

其實游戲的本質,是客戶端與服務器端的數據通信。安全測試的過程也主要是圍繞數據來進行。手游安全測試,其實也是手游安全攻擊的過程。在攻擊的過程中,讓其存在的安全問題自動顯現出來。通過對數據的修改,讓服務器端承認修改后的異常數據,就是安全測試所需要發現的問題。首先,開始手游安全測試前,需要對游戲的分類有大概了解。

(一)游戲的分類

在PC端游盛行的時代,網絡游戲根據交互實現的不同就已經分為了兩種類型。封包邏輯強校驗的游戲,例如MMORPG等類型游戲,這類是主流。還有一類游戲,由于需要考慮到游戲的實時操作體驗,使用的是UDP協議交互。這類游戲使用了弱校驗的封包邏輯。

而到了手游時代,除了上述兩個原因,還需要考慮手機不同于PC端的獨特情況。因此,弱校驗類型的游戲也變得更多。

針對強校驗類型的游戲,一般情況只需要測試器游戲協議封包邏輯。因為,這種類型的游戲,在本地的所有關鍵數據都不參與運算,均是在服務器端進行的運算。

(二)常用手游安全測試方法

了解了游戲分類,下面從游戲邏輯內容的角度,說明常規的一些測試方法。

1.協議測試

例如天天富翁和全民小鎮等手機游戲,就是屬于強校驗的手游。玩家在天天富翁游戲內的每個基本操作,都有與服務器端通信處理。例如投擲骰子。

針對這些類型的游戲,并沒有太多可以本地修改的內容。因為本地修改的內容,都會通過每個封包去與服務器端交互。

因此,只需要對游戲內的每個封包進行安全測試,那么這個游戲的安全問題,就比較有保證。封包測試時,可以從兩個角度進行測試。

A、針對每個封包的字段內容,進行邊界測試;

B、每個封包也可以在不同的場景下,嘗試進行狀態測試。

可以根據游戲的內容,對測試內容交互封包進行羅列,循序漸進,完成測試。

天天富翁的強制拍賣問題

(在天天富翁的前期版本,可以通過修改發送封包實現強制拍賣對方地標建筑的問題。該BUG為通過修改封包實現。)

2.?內存數據修改

而針對弱校驗類型的游戲,其在本地有部分的計算替代了服務器端的計算邏輯。目前,更多的做法是在游戲結束時,將計算操作的數據保留發送向服務器端。由服務器端確認計算邏輯的有效性。

例如天天酷跑內角色在游戲內的跳躍等動作。

這種類型的游戲,測試重點則放在了內存數據修改和代碼修改上。因為計算的數據存放在本地,雖然服務器端最終有校驗處理,但不能夠完全的保證校驗處理的全面性。

常用的安卓內存修改器

對于手游來說,內存數據修改測試也是目前門檻最低的測試方法。但是測試的覆蓋度,相對協議測試來說,沒法準備的保證。但是可以根據單局游戲結束時,客戶端向服務器端發送的封包、以及游戲界面上的顯示數據等來確認可能可以修改的數據內容。

3.代碼修改測試

繼續弱校驗類游戲,當通過修改內存數據不能實現部分測試功能時,亦可通過修改代碼實現。如下圖。

針對于2dx類型的游戲,可以通過IDA分析so中的函數名稱,定位關鍵函數,修改實現安全測試的功能。

而針對與unity類型的游戲,其主要邏輯代碼均存放與C#的dll中。可以通過反編譯獲取源碼后,修改IL代碼實現測試功能。

4.變速測試

針對于有些游戲,可以通過調整游戲的運行速度來實現測試功能。

希望的測試結果是,首先,游戲本身的防護可以阻止加速插件的加載;其次,如果可以加速效果,那么希望加速后可以不影響到游戲的功能和平衡性。

如果使用加速后,可以降低游戲難度,或者增加游戲得分,那這就屬于安全的問題。

(三)Wetest手游安全測試

Wetest手游安全測試,主要側重于Apk層面的權限、策略風險等問題。其主要功能包含有:

敏感權限檢測、本地數據安全、網絡數據安全、應用的C#源代碼上的邏輯錯誤語法錯誤等問題。

目前市面上的其他保護,更多的是安全加固,提供保護方案。而Wetest的安全測試則側重于安全掃描的功能,能夠自動的發現一些Apk層面的問題,并且無需上傳工程源代碼。

三、結語

游戲安全領域的攻防向來是道高一尺魔高一丈,攻防雙方都處于不斷的演變和進化過程中,因此游戲安全防護需要長期持續的研究與投入,是場持久戰。

個人認為,手游的安全問題,不是就單靠技術就能完全解決的問題。技術手段只是提高了門檻,并沒有從根本上解決手游的安全問題。

這是需要從多方面多管齊下,例如技術防護提高門檻,用戶反饋提供渠道信息,法律角度增強威懾。需要提供從多個維度來保護才能達到比較理想的效果。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容