本文轉載自:騰訊WeTest專欄--《從XcodeGhost漏洞事件看手游安全測試》
安全領域有一個詞出現頻率很高,XcodeGhost,這種病毒不僅會在應用運行時竊取用戶信息,甚至還會模擬收費或帳號彈窗來竊取你的iCloud及iTunes密碼。受影響應用數超過76款,涉及用戶多達1個億。
那么XcodeGhost究竟是什么?
簡單的說,就是在iOS開發工具中加入一段惡意代碼,導致凡是使用這個工具開發的APP都會被感染,而安裝被感染APP的手機則會淪為黑客的“玩具”。
在用戶心目中“堅不可摧”的蘋果生態系統這一次遭遇了“信任危機”,人們開始發現蘋果的安全防御機制比想象的更加脆弱。
“信任危機”是企業危機中最嚴重的之一。“信任危機”讓企業無論做什么都會讓用戶產生懷疑,讓企業的一切舉措都將事倍功半。
從XcodeGhost漏洞事件來看手游領域,手游的安全問題是引發“信任危機”的重要導火索,作為安全領域的老鳥,在手游一片紅海的當下,想談談手游安全的重要性,同時想給大家分享一些實用的手游安全測試方法。
一、為什么安全測試這么重要?
來看看幾種常見的安全問題:
1.游戲盜號,利用安全漏洞對游戲內賬號做批量盜取,對玩家的直接損傷不用提,盜號的資金流入市場影響的是整個游戲市場平衡。
2.外掛,從端游到頁游,太多游戲是因為外掛問題被玩家拋棄,直接影響著玩家體驗。
3.客戶端二次打包,這個帶來的風險比前幾個都大,而且后患無窮。可能是直接被安裝了購買插件,開發者的利潤流向了黑客的口袋,更恐怖的是向玩家投放釣魚病毒,直接獲取玩家的銀行賬號等個人資產信息。
除了這些問題外,還有非常多的安全問題。這些問題都將直接、間接影響游戲游戲的收入、留存,給開發者造成重大損失。所以,如何預防安全問題迫在眉睫,安全測試應運而生。簡單概括安全測試是泛指能夠影響游戲平衡性,并且對游戲有破壞性和惡意影響的問題。包括幾大安全領域:
包括網絡帳號、網絡充值的問題涉及到了網絡安全的領域;
客戶端的安全,反破解、反調試等屬于軟件安全的領域;
游戲外掛的檢測與防御,就比較類似于殺毒軟件的檢測做法;
游戲內邏輯漏洞的檢測,又更傾向于軟件測試領域的內容;
還有游戲內的欺騙、釣魚等方面。
二、該如何做安全測試?
其實游戲的本質,是客戶端與服務器端的數據通信。安全測試的過程也主要是圍繞數據來進行。手游安全測試,其實也是手游安全攻擊的過程。在攻擊的過程中,讓其存在的安全問題自動顯現出來。通過對數據的修改,讓服務器端承認修改后的異常數據,就是安全測試所需要發現的問題。首先,開始手游安全測試前,需要對游戲的分類有大概了解。
在PC端游盛行的時代,網絡游戲根據交互實現的不同就已經分為了兩種類型。封包邏輯強校驗的游戲,例如MMORPG等類型游戲,這類是主流。還有一類游戲,由于需要考慮到游戲的實時操作體驗,使用的是UDP協議交互。這類游戲使用了弱校驗的封包邏輯。
而到了手游時代,除了上述兩個原因,還需要考慮手機不同于PC端的獨特情況。因此,弱校驗類型的游戲也變得更多。
針對強校驗類型的游戲,一般情況只需要測試器游戲協議封包邏輯。因為,這種類型的游戲,在本地的所有關鍵數據都不參與運算,均是在服務器端進行的運算。
(二)常用手游安全測試方法
了解了游戲分類,下面從游戲邏輯內容的角度,說明常規的一些測試方法。
例如天天富翁和全民小鎮等手機游戲,就是屬于強校驗的手游。玩家在天天富翁游戲內的每個基本操作,都有與服務器端通信處理。例如投擲骰子。
針對這些類型的游戲,并沒有太多可以本地修改的內容。因為本地修改的內容,都會通過每個封包去與服務器端交互。
因此,只需要對游戲內的每個封包進行安全測試,那么這個游戲的安全問題,就比較有保證。封包測試時,可以從兩個角度進行測試。
A、針對每個封包的字段內容,進行邊界測試;
B、每個封包也可以在不同的場景下,嘗試進行狀態測試。
可以根據游戲的內容,對測試內容交互封包進行羅列,循序漸進,完成測試。
天天富翁的強制拍賣問題
(在天天富翁的前期版本,可以通過修改發送封包實現強制拍賣對方地標建筑的問題。該BUG為通過修改封包實現。)
而針對弱校驗類型的游戲,其在本地有部分的計算替代了服務器端的計算邏輯。目前,更多的做法是在游戲結束時,將計算操作的數據保留發送向服務器端。由服務器端確認計算邏輯的有效性。
例如天天酷跑內角色在游戲內的跳躍等動作。
這種類型的游戲,測試重點則放在了內存數據修改和代碼修改上。因為計算的數據存放在本地,雖然服務器端最終有校驗處理,但不能夠完全的保證校驗處理的全面性。
常用的安卓內存修改器
對于手游來說,內存數據修改測試也是目前門檻最低的測試方法。但是測試的覆蓋度,相對協議測試來說,沒法準備的保證。但是可以根據單局游戲結束時,客戶端向服務器端發送的封包、以及游戲界面上的顯示數據等來確認可能可以修改的數據內容。
繼續弱校驗類游戲,當通過修改內存數據不能實現部分測試功能時,亦可通過修改代碼實現。如下圖。
針對于2dx類型的游戲,可以通過IDA分析so中的函數名稱,定位關鍵函數,修改實現安全測試的功能。
而針對與unity類型的游戲,其主要邏輯代碼均存放與C#的dll中。可以通過反編譯獲取源碼后,修改IL代碼實現測試功能。
針對于有些游戲,可以通過調整游戲的運行速度來實現測試功能。
希望的測試結果是,首先,游戲本身的防護可以阻止加速插件的加載;其次,如果可以加速效果,那么希望加速后可以不影響到游戲的功能和平衡性。
如果使用加速后,可以降低游戲難度,或者增加游戲得分,那這就屬于安全的問題。
(三)Wetest手游安全測試
Wetest手游安全測試,主要側重于Apk層面的權限、策略風險等問題。其主要功能包含有:
敏感權限檢測、本地數據安全、網絡數據安全、應用的C#源代碼上的邏輯錯誤語法錯誤等問題。
目前市面上的其他保護,更多的是安全加固,提供保護方案。而Wetest的安全測試則側重于安全掃描的功能,能夠自動的發現一些Apk層面的問題,并且無需上傳工程源代碼。
三、結語
游戲安全領域的攻防向來是道高一尺魔高一丈,攻防雙方都處于不斷的演變和進化過程中,因此游戲安全防護需要長期持續的研究與投入,是場持久戰。
個人認為,手游的安全問題,不是就單靠技術就能完全解決的問題。技術手段只是提高了門檻,并沒有從根本上解決手游的安全問題。
這是需要從多方面多管齊下,例如技術防護提高門檻,用戶反饋提供渠道信息,法律角度增強威懾。需要提供從多個維度來保護才能達到比較理想的效果。