Source引擎的遠程代碼執行漏洞,可能影響千萬遊戲玩家
目前多款主流遊戲,如CS、絕地要塞等都在使用Source引擎,Source引擎由Valve軟體公司開發,這個引擎提供關於渲染、聲效、動畫、消鋸齒、界面、美工創意和物理模擬方面的支持。
其實Source引擎存在漏洞已經不是什麼秘密了,早在去年的GeekPwn2016黑客大賽中,就有參賽隊員在不接觸對方設備,不知道對方賬號信息的情況下,侵入了正在遊戲的電腦,還通過電腦攝像頭監控了遊戲者的實時活動。
最近曝出的漏洞是Source SDK中出現了一個緩衝區溢出漏洞,會導致攻擊者在客戶端和伺服器上能執行任意代碼。該漏洞可以導致載入特定的躲避攻擊(Ragdoll Avalanche) (比如一個玩家被射殺),目前包括CS、絕地要塞等遊戲已經修復了這個漏洞。
缺少Bounds Check
BoundsChecker是一個運行時錯誤檢測工具,它主要定位程序運行時期發生的各種錯誤。當函數nexttoken用於Token的一個字元串時,可以看到,只要找不到NULL字元或者分隔符sep,就會導致str這個buffer被複制到token的buffer中,壓根就沒有邊界檢查。
const char *nexttoken(char *token, const char *str, char sep)
{
...
while ((*str != sep) && (*str != ))
{
*token++ = *str++;
}
...
}
漏洞介紹
當以Ragdoll Avalanche處理數據時,像ParseKeyValue就會被調用。這個方法調用nexttoken來Token那些待處理的規則。通過創建一個大於256字元的collisionpair規則,緩衝區szToken就會溢出。因為szToken存儲在棧上,所以ParseKeyValue的返回地址就會被覆蓋。
class CRagdollCollisionRulesParse : public IVPhysicsKeyHandler
{
virtual void ParseKeyValue( void *pData, const char *pKey, const char *pValue )
{
...
else if ( !strcmpi( pKey, "collisionpair" ) )
...
char szToken[256];
const char *pStr = nexttoken(szToken, pValue, , );
...
}
}
漏洞預防
ASLR會將可執行文件載入到內存中的地址隨機化,並且一個進程內所有載入到內存的可執行文件都必須開啟這個功能才能起到漏洞預防的作用。
由於動態庫steamclient.dll並沒有開啟ASLR。這意味著steamclient.dll載入到內存中的地址是可預測的,攻擊者可以很方便地定位並使用可執行文件內存中的Token。
ROPgadget的使用
一個更有效的方法就是使用特定的識別gadgets的工具。舉個例子,ROPgadget就是個很棒的工具,它可以被用於識別所有的gadgets。如果你能找到一系列retn指令結尾的指令,就能把ROP鏈的第一條指令的地址插入到棧,當函數返回地址被pop到指令寄存器時,Token就開始執行。由於x86和x64的Token不需要在內存對齊的情況下執行,所以任何地址都能作為Token。我可以把Token指針指向其中一條指令,這樣就可以得到更多的指令。
Immunity Debugger插件Mona提供了查找gadget的工具。但是這個插件無法找到所有有用的gadget,如rep movs。Immunity Debugger軟體專門用於加速漏洞利用程序的開發,輔助漏洞挖掘以及惡意軟體分析。
啟動cmd.exe
由於有效載荷的處理方式不同,NULL字元不能被使用,並且大寫字元需要轉化為小寫字元。這意味著我的ROP gadget地址資源及有效載荷的處理方式都很有限。為了解決這個問題,我用一個gadget鏈來引導shellcode,以定位內存中未修改的原始緩衝區,然後將未修改的有效載荷通過rep movs gadget複製到棧。
這樣,Steamclient.dll就導入了LoadLibraryA和GetProcAddressA。現在,我就能往內存中載入任意DLL了,並得到其他的導出函數。比如,導入shell32.dll以獲得ShellExecuteA函數,這個函數能啟動其他程序。
有效載荷的獲取
Source引擎允許將自定義內容打包到地圖文件中,因為這樣可以在地圖中添加一些額外的內容,比如聲音或者文字。於是我將Ragdoll Avalanche模型文件打包到一個地圖文件中,而且使用與Ragdoll Avalanche模型文件一樣的路徑。
總結
視頻遊戲很容易成為黑客進行漏洞利用的目標, 因為視頻遊戲通常會在用戶的家中或者工作中進行,攻擊者就是通過漏洞利用進入到組織的公共網路或家中的私人網路。另外,在流行的視頻遊戲中發現的這個遠程代碼執行漏洞可以用來創建殭屍網路或者傳播勒索軟體。
所以建議各位玩家,不要在工作中玩遊戲或在不受信任的網路環境中進行遊戲。
對那些Source的玩家而言,需要禁用第三方內容的下載以減少攻擊。通過cl_allowdownload 0 和 cl_downloadfilter all Token就可以實現禁用第三方內容下載。
由於是在Source SDK中發現的漏洞,可以推測,在其他的第三方模塊也很可能存在漏洞。但如果玩家在所有模塊下都啟用了ASLR,就只有泄漏的內存漏洞才能利用了,從而加大了攻擊者漏洞利用的難度。
所以為了防止緩衝區溢出發生,請不要在緩衝區中存儲過多的數據。nexttoken函數應該有一個token長度來作為參考,這個參數用來進行Bounds Check。
對於Source遊戲的開發者來說,可以使用補丁進行修復,也可以使用chromium團隊開發的checkbins.py工具來完成。
除此以外,Source遊戲應該可以進行沙箱設置以限制訪問並阻止新進程的啟動。比如,當利用web瀏覽器的內存破環漏洞時經常會要用到內核利用,如果進行沙箱設置,則訪問用戶層的瀏覽器進程就要受限。
點擊展開全文
※看我如何黑掉PayPal:從任意文件上傳到遠程代碼執行
※2017網路安全生態峰會
※出售帶漏洞的設備違法嗎?德國消協擬起訴一家地方零售商
※保護內網域安全之掃描Active Directory特權和特權帳戶(一)
※一個天貓賣家的「空手套白狼」騙局:濫用中移動免流活動,加價轉賣騙錢
TAG:嘶吼RoarTalk |
※PokectStar 開啟眾籌:這可能是你能買到的最小的遊戲機了
※Bose SoundSport:可能是能買到的最好的無線藍牙
※Windows手機系統被進一步放棄,Surface Phone可能再跳票!
※下一代 iPhone可能要改造型,vivo新機諜照曝光
※這可能是大家都想要的 Air Jordan 13,但入手難度極大!
※Red Hat:Meltdown和Spectre漏洞可能會影響性能
※航天員做超重耐力訓練照片曝光,這可能是史上最驚人的before&after!
※iOS 9系統iBoot源代碼泄露 有可能被黑客利用發現漏洞
※iBoot代碼泄漏到GitHub可能有助於iPhone的破壞者
※孩子輕鬆「智」造,Makeblock神經元智造家讓想像成為可能!
※Samsung承認Android Oreo更新後可能存在隨機重新啟動問題
※可能是你玩過最燒腦的戰棋!FTL製作者帶來的Into the Breach
※沒有這個男人,Gary Oldman可能拿不到奧斯卡影帝
※又出大漏洞!你可能買了一個假的iPhoneX!
※蘋果可能還沒有放棄Macbook Air,唯一的特點就是……便宜!
※暴風Real 6,打造你的私人家庭影院,可能是最懂你的智能無屏電視
※線上遊戲的老婆不可能是女生 cosplay
※請照鏡子看看自己的ear,有這個表現可能有trouble!
※Nokia 8S可能賣不動,前後蔡司認證鏡頭Nokia 7 Plus更有看頭
※下一代 Android 系統可能會擁抱 iPhone X 的「劉海」