Microsoft圖標顯示錯誤,攻擊者可任意隱藏惡意PE文件
Windows中的圖標顯示錯誤允許攻擊者使用特殊圖標偽裝PE文件,從本地設備自動「借用」其他常用圖標,從而誘惑用戶點擊它們。這個漏洞目前已經根植在Windows的圖像處理代碼中了,根據我的分析,至少從Windows 7開始,該漏洞就已經出現,並且仍然存在於Windows 10的最新版本中。
我已經將該錯誤於2017年6月向微軟正式報告了,而且本文對漏洞的分析也經過了微軟的許可。
漏洞的發現
我在研究最近一批惡意PE文件時發現了這個漏洞,將文件從一個目錄複製到另一個目錄後,我注意到一個奇怪的行為,某些文件的圖標已更改。為了排除是漏鬥引起的錯誤,我將文件複製到另一個目錄,結果還是和上次一樣,這些文件的圖標再次被更改為不同的常用圖標且和本身的圖標完全無關。這引起了我的興趣,並促成了對這一奇怪現象的調查。
要了解此現象,請查看此視頻觀看全部過程:
windows icon_騰訊視頻 https://v.qq.com/x/cover/k05358ej81n/k05358ej81n.html2017年4月份的一批惡意軟體包含了幾十個cerber 勒索病毒的樣品,所有這些樣品都顯示了這種異常現象。
以下是從這些示例中提取的圖標,如Windows資源管理器中所示:
乍一看,人們可能會認為這些只是一堆惡意軟體偽裝使用了一些常用圖標(不過,左上角的Cybereason圖標有點奇怪),但是將這些圖標轉換為不同的內部圖像格式(internal image format),圖標就顯示了其真實形式:
可以看出,這些文件幾乎都經過了輕微的隨機像素修改,表明它們是自動生成的,以避免基於圖標的簽名。原來的圖標似乎有點奇怪,但是,它絕對是基於Adobe商標,且都是黑白的,但除此之外它是一個有效的圖標文件。
以下就是原始的Adobe商標:
然而,雖然許多惡意程序使用被盜的資源來隱藏自己的安全應用程序以防止被人發現,但是出於這種目的的圖標並不會是實際顯示在屏幕上的圖標。除了模仿Adobe圖標之外,他們都有一個共同點,就是他們都是真正的單色圖標(true monochrome icon TMI)。
TMI是具有兩個特定特點的圖標,它們只有兩種顏色,即它們的像素比特數為1,這兩種顏色是完全黑色(0x000000)和白色(0xFFFFFF)。應當注意,圖標可以是具有其他顏色的單色,以及黑白但不是單色(即,bpp高於1)。但是,這種現象只發生在真正的單色圖標上。
關於圖標文件格式的完整文檔可以在以下兩個連接中找到:
https://msdn.microsoft.com/en-us/library/ms997538.aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/dd183376%28v=vs.85%29.aspx
這是一個從Cerber示例中提取的一個這樣的文件:
實驗表明,任何TMI都發生了圖標切換異常,且都是在不需要特別處理的情況下發生的。為了證明這一點,我使用了十六進位編輯器製作了我自己的空TMI:
然後,我將該圖標作為唯一的「hello world」應用程序的圖標。而不是單像素單色圖標,Windows資源管理器顯示如下:
將其重命名在同一目錄中後,顯示的圖標更改為:
http://www.4hou.com/uploads/20170809/1502253276622365.gif (還有個這個gif圖,知乎沒法上傳)
發生什麼了?
圖標偽裝過程分析
看起來,問題始於渲染圖標的緩存方式,特殊處理TMI接收,這使得它們不會覆蓋現有的圖標。
Windows資源管理器以及其他應用程序中的任何其他基於資源管理器的框架,使用comctl32.dll(用戶體驗控制庫)中的CImageList類實現圖標緩存:
https://msdn.microsoft.com/en-us/library/9xc4z2c7.aspx
緩存是通過將文件的路徑映射到CImageList中的索引來實現的(有幾個這樣的緩存,每個圖標都會顯示大小)。因此,當查看過去已經呈現其圖標的文件時,將從緩存中取出。進程中尚未遇到的路徑將需要根據文件類型從頭開始渲染,並添加到緩存中。這就是為什麼當使用多個圖標文件或具有嵌入圖標的PE文件查看新目錄時,文件會逐漸顯示出來。當文件被複制或重命名時,它們的圖標將被再次渲染,因為它們將被視為新路徑。
然而,這些緩存都很有限且相對較小。當一個新的圖標被添加到圖像列表中,如果它還不是空的,則使用的索引將為-1,並且將附加新的圖標。但是,一旦列表已滿,新圖標將覆蓋之前創建的圖標,將其替換為其索引(假定以LRU為基礎)。
該邏輯在CImageList :: _ ReplaceIcon函數中實現:
根據給定的索引添加或替換:
經過以上一系列操作後,該函數將檢查該索引處的當前圖像是否具有Alpha通道,如果有(幾乎總是有),則設置一個往後用於決定如何調用DrawIconEx的標誌。
如果設置了這個標誌,該函數稍後將使用標誌DI_MASK而不是DI_NORMAL調用DrawIconEx來實際繪製列表中預先存在的圖標。
在內部,圖標和圖像一般可能包含兩個不同的像素圖——「顏色」和「蒙版」,它們可以被應用於顏色的調製,如ICONINFO的文檔所示:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms648052.aspx
本質上,只有圖標的「掩碼」部分被繪製並覆蓋了掩碼([esi + 7ch])的DC(設備上下文)而不是顏色的DC([esi + 78h])) 。當圖標是TMI時,這實際上會導致沒有新的像素被覆蓋,並且圖標的渲染還是借用在該索引處的CImageList。
這要求緩存是滿的,且取決於這些函數的調用者。但是,對於類似瀏覽器的組件(例如「文件打開」對話框),大小通常非常小。
以下舉個例子,顯示這可能發生在使用這些組件的任何進程中。該例子是從Outlook 2016的「添加附件」窗口中截取的截圖,可以查看完整的TMI的目錄:
當然,這個漏洞不僅會觸發圖標文件,也會觸發嵌入它們的任何PE文件。條件是這些是文件中唯一的圖標類型,因為選擇「最佳擬合」圖標的Windows的演算法往往會根據大小和顏色深度由高到低的順序排列嵌入圖標。
既然如此,我決定在其資源部分搜索我的惡意軟體資料庫,其中只包含真正的TMI,並且可以從2013年開始(資料庫中最早的樣本)找到數百個樣本。所有這些都無一例外地觸發了這個漏洞,而在良性樣本資料庫中進行的類似搜索沒有得到任何結果。
我根據使用的圖標變化將這些樣本分成幾組:
如上所述,第一次檢測是4月17日對Cerber 勒索病毒樣本濫用了Adobe圖標。以下是五個這樣的樣品:
https://www.virustotal.com/en/file/10b2fd1e06c3ac73d23e67bb59c4294cef8485bdc1b116005c56bfb950f21e44/analysis/
https://www.virustotal.com/en/file/4559b52596deb7a8181df722bebcf08921b97451d944840cf6bdf0c04c1bc364/analysis/
https://www.virustotal.com/en/file/bf66c5ccfa0319fe695d8fe5afcb5492c909aff70748b550259ac20974a18f80/analysis/
https://www.virustotal.com/en/file/f2bf40f15b44a28be2d9ff5c1572a84c6ba5a8942d6c1a01aa44db51aa2d1ccb/analysis/
https://www.virustotal.com/en/file/f7c15cb91ddaebf03f523e4eed412377217b511ee8f37ba99a8d8b7832f227df/analysis/
這些樣本可能只是一小部分自動生成的PE文件,附帶偽隨機資源來掩蓋它們,不過很難確定該漏洞從未被Cerber故意利用。
這個漏洞雖然不是一個重大的安全漏洞,但很可能出現網路釣魚活動。對於網路釣魚,大家可能習慣性的認為只有可疑的電子郵件和附件才能進行,讀了今天的這篇文章,想必你的思路又拓寬了不少。
本文翻譯自:https://www.cybereason.com/labs-a-zebra-in-sheeps-clothing-how-a-microsoft-icon-display-bug-in-windows-allows-attackers-to-masquerade-pe-files-with-special-icons/ ,如若轉載,請註明來源於嘶吼: http://www.4hou.com/system/7076.html 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※想報考信息安全專業與留在沿海地區上大學的計劃有衝突該怎麼選擇?
※Linux 防火牆技術
※創建AD蜜罐賬號居然有防禦的功效?
※黑客辭典:什麼是「網路殺傷鏈」?為什麼並非適用於所有的網路攻擊?
※PSAmsi:四兩撥千斤實現PowerShell代碼混淆隱藏
TAG:信息安全 |