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