網絡游戲安全小議(端游/頁游/手游)
一、網絡游戲安全
一直很想知道魔獸的游戲安全工程師是如何做游戲安全的,毫無疑問,魔獸是目前最流行的網絡游戲,有著眾多經驗豐富的黑客在利潤驅動的情況下以這款游戲的外掛作弊技術謀生,游戲黑客的作弊技能在《網絡游戲安全解密》這本書里有提到(這是目前為止唯一的質量較高的游戲安全專門書籍),但游戲安全工程師是如何防御的就比較神秘了。咨詢過一些做游戲安全的,都傾向于將防御手段隱藏起來,因此在游戲安全研究上基本靠游戲黑客提供資料。
網絡游戲安全很有意思,首先網絡游戲安全代表了最高的軟件技術(想想MMO可是數以十萬計的用戶在實時交互,多大的挑戰),其次網絡游戲的虛擬經濟和現實經濟之間存在直接的聯系(想想淘寶上游戲點卡,游戲道具,游戲代練交易,多大的利益誘惑),再次網絡游戲安全的重要經驗可以直接適用于其他軟件(通用性對安全工作者很有幫助),最后游戲安全不僅是技術問題也是法律問題,例如對游戲破壞者的法律制裁,如何平衡玩家隱私權利以及如何保護游戲不被破解(例如使用rooktkit技術檢測玩家電腦是否有游戲破壞程序運行的方法涉及個人電腦隱私問題,當然這點也是殺毒軟件面臨的問題)。
網絡游戲安全將信息安全的大多數方面的串聯起來了。例如網絡帳號的安全(游戲拖庫),網絡充值的安全,網絡服務器的安全這些屬于網絡安全的領域;例如客戶端的安全,反調試,反逆向,反Hook屬于軟件安全的領域;還有其他的,例如游戲欺詐(冒充工作內容騙取帳號密碼,釣魚網站,帳號糾紛),內部員工(GM的事件爆的最多)非法交易,游戲分級(兒童游戲保護,防沉迷系統)。游戲外掛的逆向分析以及外掛檢測與防御就與殺毒行業非常像(想想惡意軟件樣本分析,游戲外掛對游戲而言就是病毒)。簡單的說優秀的游戲安全工作者要既是hacker也是cracker,既要懂技術也要懂偵查。
二、游戲攻擊手段
博客中有介紹過手游與頁游的攻擊方法及相應的工具,但沒有端游的(我沒有端游的安全工作經歷,這也是沒法說自己是個游戲安全工作者的原因,我覺得沒做過端游安全的不是真正的游戲安全工程師),從游戲的共性來說,網絡游戲的本質就是客戶端與服務端的數據通信,攻擊的對象就是一系列的數據,游戲安裝生成的客戶端數據(可執行文件,動態鏈接庫,存檔文件,資源文件),游戲運行時在進程中的數據、界面數據、時鐘數據,游戲通信時從網絡接口流出的數據,
我們知道游戲的攻擊手段(外掛)總的來說為以下幾種:
1. 自動化游戲 端游和頁游中廣泛存在,例如精靈對戰類游戲的自動打怪外掛,手游暫未出現該類型外掛
2. 內存修改 端游、頁游,手游都存在,對端游和頁游在單機和弱聯網時代比較流行,但隨著網游的大方向,這種作弊手段的有效性逐漸弱化,對手游目前為主流作弊手段
3.存檔修改 同內存修改,端游、頁游,手游都存在,對端游和頁游在單機和弱聯網時代比較流行,但隨著網游的大方向,這種作弊手段的有效性逐漸弱化,對手游目前為主流作弊手段
4.封包修改 網絡游戲的核心作弊手段,分為脫機掛(不依賴于官方發布的客戶端程序,由外掛完全模擬客戶端去與服務器進行通信)、內掛(以游戲客戶端程序為載體,依靠客戶端程序來完成與游戲服務器的通訊),私服(與脫機掛相反,是完全模擬了官方服務器)。這種類型外掛一般都先通過逆向客戶端得到協議(封包)生成算法,然后hook ws2_32.dll(windows sockets的應用程序接口)的send(),receive()函數來重寫封包.
5.加速器 常見與對戰類游戲,例如頁游通過加速動畫播放速度來快速對戰
6.安裝包Patch 常見于端游與手游這種富客戶端的,例如修改App store下載的IPA包,去除掉版權保護還原加密部分,例如重打包Android的APK包,使試用版變成完整版(verycd上一堆的破解端游)
7.runtime 攻擊(API Hook) 常見于端游與手游這種富客戶端的,API hook 運行中游戲進程,替換原始的動態鏈接庫(windows上的dll,iOS上的dylib,Android上的so),例如iOS上的免費內購外掛。
8.服務端配置漏洞 例如未上線商品配置為可購買,例如過期運營活動未及時下線
9.游戲邏輯漏洞 例如游戲經濟系統設計的漏洞(經濟系統失衡),比如說可以通過創建多個小號將系統贈送的初始物品轉移到大號上;例如游戲中個人私密數值可以被其他玩家查看甚至修改;例如超級火爆的寵物精靈對戰游戲(魔獸都出了寵物對戰,可見有多火了)就會出現新捕捉的初始精靈未初始化而在某些操作中大量獲得物品
10.游戲運行平臺的安全問題 例如越獄iOS設備與root后的Android設備就破壞了原本的安全機制,使得設備上運行的游戲需要考慮額外的威脅
11.帳號安全 屬于web常見漏洞
12.充值安全 屬于web常見漏洞
13.游戲欺詐 帳號歸屬糾紛,冒充游戲充值網站的釣魚網站,冒充游戲外掛(特別是號稱可以刷游戲幣的)的惡意軟件,冒充官方工作人員騙取帳號,在游戲中發送惡意中獎信息
14.游戲服務器的拒絕服務攻擊 大并發的請求拖垮服務器
其中 4.封包修改最廣泛,6.安裝包Patch 和7.runtime 攻擊最據技術含量(其實游戲外掛的最終形態還是從內核操縱客戶端)
三、游戲攻擊產業
依靠游戲攻擊盈利是一條很成熟的產業鏈,有專門做游戲外掛制作培訓的,有專業做外掛制作人員招聘的,有專業做游戲代練或游戲虛擬物品交易的(現階段的游戲黑客們都比較聰明的選擇販賣外掛服務而不是外掛本身,理由一,賣外掛的方式會讓游戲公司的安全人員通過外掛分析快速定位游戲漏洞并給予修復及相應的加固防御。理由二,賣外掛的方式會給法律投訴留下明確的證據。理由三,賣服務的盈利次數明顯高于賣外掛),有專業做游戲私服的(游戲私服很大程度上需要拿到源碼,可以通過買通內部人員或社工入侵公司內外獲得源碼),有專業做游戲盜號與釣魚的,有以游戲外掛為噱頭做廣告流量的。
四、游戲外掛制作
正面的來說通過學習外掛制作也能提高it技能,例如要寫一款基本的外掛(以端游外掛為例),我們需要掌握以下技能
第一步:.學會一種語言,vc++最好,c#也不錯(c#適用于跨平臺),雖然現在很多外掛都是E語言寫的,不過最好還是學開發在用的語言;
第二步:會簡單的分析游戲,可以使用工具分析游戲窗口,控件,進程,線程,DLL模塊,內存;
第三步:熟悉windows API,可以編寫進程線程操作,內存讀寫,鼠標鍵盤模擬;
第四步:學會用cheat engine查找動態內存基址;
第五步:學會使用ollydbg來調試游戲找關鍵CALL 找到一些關鍵的功能函數入口地址,并分析出該函數的參數,就可以編寫CALL代碼,來直接調用游戲中的函數,讓其實現自動化.
第六步:學會編寫call代碼;
第七步:會加密解密封包。