網站首頁 > 熱門病毒專題 > 威脅預警:2018年的首個Office 0day漏洞
 
標題:威脅預警:2018年的首個Office 0day漏洞
分類:熱門病毒專題 日期:2018/1/15 上午 09:23:24
【文章摘要】江民病毒監測中心研究證實該漏洞確實存在,並發布預警公告,提醒用戶採取應對措施。
2018年1月,首個office 0day漏洞(CVE-2018-0802)來襲,該漏洞的技術原理類似於潛伏了17年的漏洞(CVE-2017-11882),是由於office公式編輯器組件EQNEDT32. EXE,對字體名的長度沒有進行長度檢驗,導致攻擊者可以通過構造畸形的字體名,執行任意代碼。
江民病毒監測中心研究發現,該漏洞確實存在,該漏洞與2017年11月微軟發布修復的CVE-2017-11882漏洞密切相關,安裝過CVE-2017-11882漏洞補丁的用戶將受到CVE-2018- 0802漏洞的威脅,  受攻擊用戶打開惡意的Office 文檔時,無需交互,就可能執行惡意代碼從而導致電腦被控制。

1漏洞介紹

威脅類型:任意代碼執行
威脅等級:高
漏洞名稱:CVE-2018-0802 
受影響系統及應用版本:
Microsoft Office 2007 Service Pack 3 
Microsoft Office 2010 Service Pack 2 (32-bit editions) 
Microsoft Office 2010 Service Pack 2 ( 64-bit editions) 
Microsoft Office 2013 Service Pack 1 (32-bit editions) 
Microsoft Office 2013 Service Pack 1 (64-bit editions) 
Microsoft Office 2016 (32-bit edition) 
Microsoft Office 2016 (64-bit edition)
1 補丁下載地址:
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2018-0802

2漏洞分析

CVE-2018-0802為CVE-2017-11882的補丁繞過漏洞,類型為棧溢出,根本原因為微軟在CVE-2017-11882的補丁中沒有修復另一處拷貝字體FaceName時的棧溢出。本次漏洞在未打補丁的版本上只會造成crash,但在打補丁的版本上可以被完美利用。下面我們通過poc樣本來分析CVE-2018-0802漏洞。
https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhEmwxM0L8CguUibEGy77KzT7A7uSUhkBDwoFZswicrKwJwHibDVBef9zrbA/0?wx_fmt=png
圖1漏洞程序版本信息
與CVE-2017-11882一樣,本次漏洞的觸發數據位於所提取OLE對象的“Equation Native”流內。
https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhEVvEEReRT1PaVyiaw3r9jF0kDaRjbWvEUUHJoiaAcKttwnVyDEU6bvtvw/0?wx_fmt=png
圖2樣本構造的數據
據網絡公開的資料,整個“EquationNative”的數據構成為:
EquationNative Stream Data = EQNOLEFILEHDR + MTEFData
https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhEGN5S1Lc6NxNazpM9uoTVLAlFdicbyHMN9w0O3Auq6mAIhSbVJjqmLfQ/0?wx_fmt=png
圖3Equation Native數據結構
在漏洞利用文檔中,該結構如下所示:
https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhEUEnueaggyZ2wOGWmUlGleFGCQTwDEmIXGErg1rWVgrFgvnYmhx8eic​​Q/0?wx_fmt=png
圖4 EQNLEFILEHDR頭結構數據
https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhEXOlg3NvqeDjedMWGmwyV5GJUzWGXCw9YxXORSOgkFBN4RC5CDam6ww/0?wx_fmt=png
https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhEvicJJqLMTF2pt84icdhA4GPXBnpEmS1UeT8xcaF1x9sicR5h5Y51JiaBicA/0?wx_fmt=png
圖5 MTEFData結構
https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhEZ8llQicY4hH8ccibwasZFp00Z3OAib5eFRsLlx2NYj4USRibUKY9OTyP5g/0?wx_fmt=png
圖6 MTEFData數據
程序在初始化一個LOGFONT結構體時,未對用戶輸入的字體名進行長度校驗,直接進行copy發生溢出,漏洞函數: 
https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhEu9ictVEmBF082YO6dMhFA1mEEouYIGlicYOG0hiaotCGF1U1libxMPcHvA/0?wx_fmt=png
圖7漏洞觸發的函數
LOGFONT結構體指針由調用sub_421E39的sub_421774函數傳入,結構體存在於sub_421774的函數棧上,所以可以導致棧溢出,覆蓋返回地址,劫持執行流
https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhEJMMvpiahciabVDXdhAgwZVY77gCibf9wq9YXBV1Cc4c90fG8gtoZpSgmQ/0?wx_fmt=png
圖8溢出函數
分析過程中在sub_421774函數發現一處疑似遞歸的地方,sub_421774先是調用了漏洞函數sub_421E39去初始化一個LOGFONT結構體,然後調用相關API,傳入這個結構體,從系統獲取到一個字體名稱保存到Name。隨後,它將獲取到的Name和用戶提供的lpLogFont作對比,如果不一致則調用sub_4115A7函數,這個函數間接調用CVE-2017-11882的漏洞函數,如果沒有安裝CVE-2017-11882這個補丁程序將在這裡崩潰,之後會再根據a3指定的條件來繼續調用或者不調用自身,而a3為sub_421E39函數的第3個參數,這裡調用自身時傳入的第三個參數為0,並且傳入的lpLogFont為從系統的獲取的Name所以不會發生二次溢出且不會繼續遞歸。所以函數可以正常返回。
https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhEL0qSPES1NUFkUoOA16LgTqiaOpxhvkxIaFU1VOkKwVia5fiaXHuJ4qEnQ/0?wx_fmt=png
圖9函數調用流程

3漏洞利用

通過分析我們發現,在sub_421774函數中發生溢出,溢出原因是因為在初始化LOGFONT結構體的lfFaceName字段時發生溢出,通過漏洞分析中的圖2可以看出該結構體存在於函數棧距離返回地址(0xAC +0x4)的位置,而lfFaceName的字段在LOGFONT結構體的偏移為0x1c,如下圖,所以要覆蓋返回地址需要填充(0xAC+0x4-0x1c)的數據。
https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhE3K0QvxUVDHbds2dyYibhzwNgWiaAkPP2cBasvIqSfNoxptZS8QsPBZSw/0?wx_fmt=png
圖10 LOGFONT結構體
通過查看程序的保護屬性,發現程序開啟了alsr保護,單並未開啟數據執行保護,值得一提的是,字體名的源緩衝區指針作為溢出函數的第一個參數傳入,並且函數使用stdcall調用協議,也就是說當函數返回後,字體名的源緩衝區的地址將保存在棧頂,此時我們只要能執行一個ret指令就可以跳轉到字體名的源緩衝區的內存上執行。此時我們只需要繞過alsr找到一個地址可靠的ret指令即可。有必要說一下alsr並不是完全的地址隨機化, alsr只會以0x10000為單位,進行隨機,假設我們返回地址為0xc014e2,那麼如果在0xc00000到0xc0ffff的內存地址內找到一個ret指令,並且能做到只覆蓋返回地址的低地址的2個字節,因為是字符串copy所以範圍縮小到0xc00000到0xc000ff
https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhElfSkbQ8Q2s6rDXlibJtrUSooTfo6Jpr0ibH6icd8UraYEk4Rw3Ff8jTNg/0?wx_fmt=png

通過查找找到0xc00025這個地址

https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhErDuTCmfdbnDYvQYKFxtkbjQv8ibWicFZAXFgKEvyceUia4icDKXDAia6ic6A/0?wx_fmt=png

根據之前的結論在覆蓋返回值之前有(0xAC+0x4-0x1c = 0x94)大小的空間, shellcode的大小必須小於等於0x94, 這也足夠了, shellcode佈局:

https://mmbiz.qlogo.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhEBVibCBvOOQ1yOwzmBd7e12eiaEkusiba91Rk6ibnhXuibW1nHRwLolU3qEA/0?wx_fmt=png
圖11 shellcode佈局

函數兩次返回,返回到字體名的源緩衝區執行代碼, 元緩衝區為我們構造的shellcode , shellcode 被執行, 漏洞被觸發

https://mmbiz.qpic.cn/mmbiz_png/hglVF2zA7QicYKEeUmAc9thJApMLIwxhEGKpUo1aYXg2QK08rEzMTicbkQAbwicsJRJibpHrQyNswTPVxRYOiceFyfw/0?wx_fmt=png
圖12 漏洞觸發後的場景

4處理方案:

一、及時更新補丁
補丁下載地址:
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2018-0802 
二、通過註冊表禁用此模塊,可通過修改註冊表,禁用以下COM控件的方式進行緩解,其中XX.X為版本號:
在運行中輸入:
reg add "HKLM\SOFTWARE\Microsoft\Office\XX.X\Common\COM Compatibility\{0002CE02-0000- 0000- C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x400 
reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\XX.X\Common\COM Compatibility\{0002CE02-0000-0000-C000-000000000046} " /v "Compatibility Flags" /t REG_DWORD /d 0x400 
三、部署江民網絡版防病毒的用戶,建議用戶盡升級至最新版本並開啟防禦,江民防病毒軟件補丁庫已加入了(CVE-2018 -0802)漏洞。網關防護方面,江民防病毒網關及江民病毒威脅預警系統,已及時更新特徵庫,可以對該漏洞進行防護。
 
 
 
CopyRight  © 江民科技 1996 - 2021 版權所有 All Rights Reserved
總代理:六合國際實業有限公司 E-mail: jiangmin@jiangmin.com.tw