延續了最近使用Flash攻擊Internet Explorer漏洞的趨勢,據稱與CVE-2014-6332一起使用的SWF的樣本已經出現在多個地方。這種趨勢最著名的例子是CVE-2014-0322和CVE-2014-1776的開發。
我們還沒有遇到附加了原始利用漏洞的SWF示例,但是通過查看SWF,可以清楚地看到,它是針對幾種形式的記憶體損壞而構建的,這使得該漏洞本身不那麼有趣。這是一個很好的例子,說明了為什麼我們的高級端點保護方法(專注於攻擊中使用的核心技術)工作得很好。它將封锁使用這個SWF框架,而不管它與哪個漏洞一起使用。
這個漏洞中有趣的部分是Flash組件。乍一看這裡顯示的反編譯ActionScript,它看起來相當簡單,將其大部分程式碼與以前看到的漏洞共亯:
這篇文章不會詳細介紹噴霧機制,因為它們幾乎與以前的漏洞相同,但簡而言之:
- 噴射0x18180元素向量,每個向量大小為0x3FE位元組。
- 啟動計時器常式,通過對JavaScript/VBScript函數的外部介面調用觸發瀏覽器漏洞。
- 一旦定時常式通過掃描較長的向量檢測到損壞發生,它將停止並繼續到下一階段。
- 以下向量已損壞,無法跨越整個記憶體,並且已定義讀/寫摘要
- Flash*.ocx的指針洩漏,其底部由向後掃描確定。
之後,從導入錶解析VirtualAlloc和getprocadaddress的地址,以便以後在組裝ROP和shellcode時使用。
通過重寫先前創建的聲音對象的vtable並調用toString方法觸發ROP鏈,從而生成第一個ROP小工具。
在這一點上,值得一提的是一種特殊的行為。在外殼程式碼之前,在堆棧軸之後,原始堆棧地址(現在在eax中)保留在esi中,然後作為外殼程式碼序言的一部分放回esp中,使外殼程式碼能够在原始堆棧上運行。
外殼程式碼
有趣的部分從外殼程式碼開始,它似乎是為繞過微軟的EMET保護而定制的,可能還有其他的安全產品。
在shellcode設定其數據部分(主要包含稍後要解析的函數散列)時,可以看到對EMET的第一個引用:
然後,外殼程式碼通過調用GetProcAddress解析NtSetContextThread的地址開始,GetProcAddress的地址先前由ActionScript程式碼寫入堆噴射(由ecx指向)。
shellcode按照Piotr Bania在2012年演示的方法,設定上下文結構並調用NtSetContextThread,覆蓋調試寄存器並消除EMET的EAF功能。
一旦完成,外殼程式碼所面臨的挑戰將大大减少。然後,它將把先前輸入的散列解析為函數:
它在兩個獨立的迴圈中解析kernel32和ntdll中的以下函數:
- 裝載庫
- GetProcAddress地址
- 虛擬
- IsBadReadPtr
- 寫行程記憶體
- 獲取模塊handlea
- 睡覺
- 虛擬保護
- 創建新線程
- 獲取行程堆
- 創建檔案A
- 書面形式
- 把手
- 溫塞克
- GetTempPathA公司
- SetUnhandledExceptionFilter
- rtlallocatehap地址
- 記憶
- ZwGetContextThread
- ZwSetContextThread
解析完所有函數後,它將繼續讀取由Flash組件連接到外殼程式碼末尾的有效負載PE。有效負載PE本身通過名為“shadow.jpg”的檔案到達,並由魔術值0xdeadbeef414141和另一個包含其總大小的DWORD標記。
它被複製到記憶體中,然後寫入本地\Temp目錄中名為“windump.exe”的檔案(使用GetTempPathA檢索)。
在這一點上,引入了另一段規避程式碼:
外殼程式碼檢查行程中是否存在EMET.dll。
如果是這樣的話,它只會正常調用WinExec,然後運行有效負載。否則,它將重置UnhandledExceptionFilter,保存當前esp值,並調用包裝函數,該包裝函數首先控制最後一個SEH處理程式(由TEB指向)並跳轉到WinExec中。返回時,它將重置esp為其保留值並乾淨退出。
不管怎樣,在從損壞的聲音對象的toString方法返回之後,將恢復正常的執行。
結論
此漏洞很有意思,因為它是受EMET(特別是EMET4.1)保護的針對野外攻擊的機器的第一次顯示。
奇怪的是,繞過操作還沒有完成——這個漏洞將被EMET對virtualloc的堆棧透視檢查捕獲。
禁用或繞過此單一測試–利用此漏洞將成功繞過EMET4.1。
事實上,還可以進行相當小的一組自定義,以使此漏洞繞過EMET5.1。
儘管這一漏洞還不成熟,但它向繞過EMET的野生攻擊邁出了重要的一步,而在以前的此類攻擊中,攻擊者通過使用IE中修補後的資訊洩漏漏洞(CVE-2014-7331),積極避免運行EMET的機器。
值得注意的是:Palo Alto Networks Traps以幾層冗餘封锁了這一攻擊。我們將繼續檢查這些漏洞並酌情更新。
從帕洛阿爾托網絡獲取更新!
注册接收來自我們的最新消息、網絡威脅情報和研究