Sandworm Attack小結

 

     這個漏洞剛出來時就分析過,當時大體弄明白了原理,但對不少細節和原理仍是隻知其一;不知其二。後來開始找工做……今天終於有時間來把欠的這部分功課補上。 html

     這個漏洞網上的各類中英文分析已經不少了,所以這裏我只根據本身的狀況作一個小的整理和總結,並將參考的各類相關資料貼上來供本身溫故知新。python

 

1. CVE-2014-4114

     首先,CVE-2014-4114這個邏輯漏洞的核心在於當PPT調用IPersistStorage接口的Load方法來加載storage對象(OLE複合文檔)對應的OLE複合文檔對象時,未對全部類型的複合文檔進行MOTW(Mark On The Web)處理致使的。從而使得攻擊者能夠經過僞造OLE複合文檔的CLSID來繞過MOTW保護。其執行過程以下圖所示:安全

 

 

圖1 執行路徑[1]ide

 

    CVE-2014-4114攻擊樣本中複合文檔對應的CLSID [2]如圖所示:工具


 圖2 CLSID學習

 

    經過查詢註冊表,{00022602-0000-0000-C000-000000000046} 對應的是Video Clip。由圖1可見,CPackage::Load調用了ReadClassStg來獲取複合文檔的文件類型,並根據CLSID分兩類處理。spa

    而樣本中兩個文檔的類型都爲0x22602(對應_CLSID_AVIFile),所以CPackage::Load調用LoadMMSStorage進一步處理。LoadMMSStorage內部根據具體類型,調用CPackage::OLE2SoundRecReadFromStream --> CPackage::CreateTempFileName --> CopyStreamToFile最終將文件寫入臨時目錄。調試

    由圖1可見,CopyFileW和CopyStreamToFile以後,未將讀取到文件進行MOTW處理,即未調用MarkFileUnsafe。orm

 


圖3 MarkFileUnsafexml

 

---------------------------------------------------------------------------------------------------

MarkFileUnsafe

    MarkFileUnsafe的做用是經過調用IZoneIdentifier::SetId來設置文件的Security Zone。此處設置的URLZONE值爲3,即URLZONE_INTERNET類型(圖4),從而標明此文件來自於其餘計算機(圖5)。

 

圖4 URLZONE

 


 圖5 Security Zone

 

    注意,Security Zone是經過NTFS文件系統的Alternate Data Streams (ADS)特性實現的,而不屬於Windows的ACL機制。它經過給文件建立一個名爲Zone.Identifier:$DATA的Alternate Streams來保存Zone信息。如圖6所示。

 

圖6 Zone.Identifier:$DATA

 

    隨後,當用戶試圖運行、安裝此類文件時,Windows會檢測文件的Zone信息,阻塞執行並彈出一個警告提示,提示用戶將有不可信的文件執行。

 

圖7 安全警告

 

---------------------------------------------------------------------------------------------------

    最終,寫入臨時目錄的slides.inf和slide1.gif未經MOTW處理,如圖8所示。


 圖8 樣本釋放的文件

 

    隨後,PPT經過OLE複合文檔對象IOleObject接口的DoVerb方法來響應終端用戶的動做。這裏PPT根據幻燈片xml的定義,調用DoVerb方法(iVerb == 3)。以下圖所示

 

 

圖9 slide1.xml

 

    IOleObject::DoVerb()內部根據iVerb的值進行不一樣的處理。當iVerb大於等於3時,執行流程來到圖10所示的位置。其功能與「右鍵單擊文件,在Popup菜單中選擇第2個(3-2=1)選項來運行文件」一致,而對於inf文件,其Popup菜單第二個選項恰好爲「安裝」(如圖11所示),所以最終經過InfDefaultInstall.exe安裝了inf。

 

 

圖10 IOleObject::DoVerb() with iVerb=3 [3]

 

 

圖11 Popup菜單

 

2. CVE-2014-6352

    MS14-060發佈3天后,就爆出補丁依舊能夠被繞過,並在野外發現了相應的樣本。隨後微軟發佈了臨時解決方案Fix it (Security Advisory 3010060)在MS14-064發佈前緩解漏洞利用。

    首先,看一下MS14-060補丁的修補方案,經過二進制對比工具能夠發現MS14-060只完善了全部類型複合文檔的MOTW處理,以下圖所示。

 

圖12 添加MOTW保護 [1]

 

    然而,本次漏洞的問題不止這一處,前面的分析已經指出攻擊者能夠同時經過操控「OLE複合文檔的CLSID」和「xml中的OLE Verb」來改變執行流程。

    但問題在於並非全部被「MOTW保護」標記的文件在打開時都會彈出警告窗口。例如從網上下載的docx、pdf、zip等等文件,打開它們時並不會被提示安全警告(注:docx等office文件會在保護視圖模式下打開)。

 

 

圖13 「MOTW保護」標記的文件

 

    當安裝相關的軟件後,會在右鍵Popup菜單中註冊快捷方式方便用戶操做,如圖14所示,當安裝python後,針對*.py文件的Popup菜單第二項便爲Edit with IDLE。當攻擊者操控「xml中的OLE Verb」爲3來使用「edit with IDLE」編輯打開*.py時,並不會獲得安全警告。Mcafee的研究人員經過這種方法實現了漏洞利用,詳情請參考[4],這裏再也不重複。

 

 

圖14 針對*.py文件的Popup菜單

 

    另外,在野外捕獲到的攻擊樣本中,也有攻擊者直接將exe嵌入ppt,並經過操控「xml中的OLE Verb」爲3來使用「管理員權限」運行exe,如圖15所示。此時,若受害者使用了管理員帳戶登陸系統或關閉了UAC,也將得不到任何安全警告。若受害者使用標準用戶帳戶登陸系統或未關閉UAC,則將獲得UAC警告對話框。

 


 圖15 以管理員身份運行

 

3. 其餘

    能夠經過Jon Erickson在BlackHat 2014 Asia上的報告《Persist It Using and Abusing Microsoft’s Fix It Patches》來學習、分析微軟在本次Sandworm Attack中發佈的fix it。

    在CVE-2014-4114曝出後不久就出現了直接嵌入文件(而非最先的UNC下載)的利用樣本[5],我經過CVE-2014-4114生成器源代碼修改了一份嵌入方式的生成器,但在保證複合文檔類型爲0x22602的狀況下,inf並未按照預期安裝(MS14-060補丁前),精力有限就沒再去跟蹤調試緣由了。

4. 參考文獻

[1] Timeline of Sandworm Attacks

http://blog.trendmicro.com/trendlabs-security-intelligence/timeline-of-sandworm-attacks/

[2] Microsoft Compound Document File Format.

http://www.openoffice.org/sc/compdocfileformat.pdf

[3] Bypassing Microsoft’s Patch for the Sandworm Zero Day: a Detailed Look at the Root Cause

http://blogs.mcafee.com/mcafee-labs/bypassing-microsofts-patch-sandworm-zero-day-root-cause

[4] Bypassing Microsoft’s Patch for the Sandworm Zero Day: Even ‘Editing’ Can Cause Harm

http://blogs.mcafee.com/mcafee-labs/bypassing-microsofts-patch-for-the-sandworm-zero-day-even-editing-can-cause-harm

[5] Xecure lab discovers new variant of CVE-2014-4114 in Taiwan APT attacks

http://blog.xecure-lab.com/2014/10/cve-2014-4114-pptx-apt-xecure-lab.html

相關文章
相關標籤/搜索