Hacking Team Flash New 0Day 利用代碼分析
周末大清早起來,就看到知道創宇在微博上說,Hacking Team又泄露新的Flash 0Day,在當前最新實測可用。于是筆者下載了一份利用代碼,經測試確實在最新版上可利用,目前Adobe官方未發布補丁。此次泄露的0day并沒有在泄 露的工具庫里面,而是在郵件附件中被發現的。
【利用代碼分析】
1、這次的漏洞主要出現在AS3 "opaqueBackground” 屬性上,它主要用于設置背景顏色。首先創建_ar Array數組,然后用vector.<uint>對象填充。
2、接著創建TextLine對象,然后設置它的opaqueBackground屬性,再自定義valueOf函數,這個函數是觸發漏洞的關鍵,跟前幾個flash漏洞類似。
3、設置opaqueBackground屬性,將_mc(MyClass類型)賦予opaqueBackground,由于數據類型不同,AVM會進行類型轉換,此時自定義的valueOf2就會被調用。
4、調用recreateTextLine函數重建TextLine,導致原分配的TextLine對象內存被釋放,但程序依然保留著對它的引 用,所以漏洞也是個UAF漏洞。接著重新設置_ar[i].length的長度值(_vLen 大于原始長度值 ),會導致重新分配內存,從而占用已釋放的內存,此時里面都是vector.<uint>對象。最后返回_vLen+8的值給 _ar[_cnt].opaqueBackground,如果利用成功,它剛好會去篡改某個vector.<uint>對象的長度值。
5、找到被篡改了長度的vector對象,由于其長度值被更改,允許讀取到更大內存空間的數據,從而獲取需要調用的函數地址,繞過ASLR保護。根據不同的系統平臺,選擇不同的shellcode代碼執行,這些跟前2個flash 漏洞的利用模板基本一致。
6、內存搜索的方式也是采用搜索“MZ”PE頭這種暴力方式,再去解析PE文件格式,從導入表中的找到kernel32.dll庫,再從其函數名列表里找到VirtualProtect函數,進而找到對應的函數地址進行調用。
7、看下ShellWin32.Exec函數,通過內存搜索找到VirtualProtect函數地址,將包含執行calc的shellcode 設置為可執行權限,以此繞過DEP保護,并用指向shellcode的指針替換payload對應的JIT函數指針,當調用Payload.call 時則執行的正是shellcode。

【總結】
此次漏洞主要是AS3 opaqueBackground 屬性導致的UAF漏洞,依然是valueOf導致的漏洞,此次Hacking Team 曝光的3個漏洞均是valueOf問題,用的基本是同一套利用模板,并且支持多個平臺環境,都是采用vector exploit技術去實現信息泄露,從而繞過ASLR,再調用virtualProtect去賦予shellcode可執行權限,以此繞過DEP保護。可 以預見未來將會有很多flash exploit 采用類似技術,甚至可能在一些惡意樣本中找到Hacking Team的Flash利用模板,未來的利用代碼將會更加工程化,通用化。