成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hacking Team攻擊代碼分析Part 3 : 字體0day漏洞

安全 黑客攻防 漏洞
為了在IE和Chrome上繞過其沙盒機(jī)制完全控制用戶系統(tǒng),Hacking Team還利用了一個Windows中的內(nèi)核驅(qū)動: Adobe Font Driver(atmfd.dll)中存在的一處字體0day漏洞,實現(xiàn)權(quán)限提升并繞過沙盒機(jī)制。

前言

為了在IE和Chrome上繞過其沙盒機(jī)制完全控制用戶系統(tǒng),Hacking Team還利用了一個Windows中的內(nèi)核驅(qū)動: Adobe Font Driver(atmfd.dll)中存在的一處字體0day漏洞,實現(xiàn)權(quán)限提升并繞過沙盒機(jī)制。

該0day漏洞可以用于WindowsXP~Windows 8.1系統(tǒng),X86和X64平臺都受影響,在Hacking Team泄露的源碼中我們發(fā)現(xiàn)了該漏洞的詳細(xì)利用代碼。在利用Flash漏洞獲得遠(yuǎn)程代碼執(zhí)行權(quán)限后,Hacking Team經(jīng)過復(fù)雜的內(nèi)核堆操作準(zhǔn)備后,加載一個畸形的OTF字體文件,再調(diào)用Atmfd中的相關(guān)接口觸發(fā)處理字體文件過程的漏洞,最后獲得任意次數(shù)的任意內(nèi)核地址讀寫權(quán)限,接著復(fù)制Explorer.exe的token到當(dāng)前進(jìn)程,并清除本進(jìn)程的Job來實現(xiàn)沙盒逃逸。

Chrome 43版本以上默認(rèn)對沙盒內(nèi)進(jìn)程使用DisallowWin32k機(jī)制關(guān)閉了所有win32k相關(guān)調(diào)用,因此不受這個漏洞的影響。

下面是該漏洞的具體分析,本文分析來自360Vulcan Team的pgboy:

1. 漏洞分析

通過分析漏洞利用的源碼我們看到,該漏洞在加載字體完成后利用NamedEscape函數(shù)的0x2514命令來觸發(fā)關(guān)鍵操作

通過跟蹤NamedEscape我們可以找到存在于atmfd.dll里面漏洞點:

以下是筆者測試機(jī)器上atmfd的版本(win7 32bit):

相關(guān)觸發(fā)漏洞的callback代碼如下:

F5之后的callback代碼

這個Callback被外層函數(shù)循環(huán)調(diào)用寫入緩存:

我們可以看到,這里參數(shù)a3是一個有符號的16位數(shù),當(dāng)a3>0x8000的時候,movsx會將其擴(kuò)展成0xffff8xxx,因此下面的寫操作就變成了堆上溢,會往給出的緩存地址的前面寫入。這是一個典型的由于符號溢出引發(fā)的堆上溢漏洞。

了解了漏洞的原理后,我們來繼續(xù)分析OTF文件是如何觸發(fā)該問題的,通過調(diào)試結(jié)合Adobe的文檔我們可以知道,是在處理OTF文件中CFF表的Charset過程引發(fā)的問題。

我們可以通過T2F Analyzer來觀察這個被加載的OTF字體文件的格式。見下圖:

 

1

 

顯而易見,樣本OTF文件中構(gòu)造了超長的Charset,然后通過NamedEscape函數(shù)的0x2514命令來獲取Charset的時候,就會觸發(fā)到上面描述的觸發(fā)點,引發(fā)符號溢出。

2.漏洞利用

我們從頭再看一下漏洞利用的流程,整個流程主要分這么幾個部分:

1. 找到內(nèi)核字體對象的地址

由于內(nèi)核字體內(nèi)存的布局無法直接被Ring3代碼探知,利用代碼中使用了一個特殊的技巧來實現(xiàn)獲得內(nèi)核字體對象的地址,在利用代碼中,先加載字體,然后立刻創(chuàng)建一個Bitmap對象,再連續(xù)多次加載這個字體,由于win32k和atmfd中共用了內(nèi)存堆處理函數(shù),因此會導(dǎo)致Bitmap對象和字體對象是正好相鄰的。

由于Bitmap這類user/gdi對象的實際內(nèi)核地址可以通過映射到Ring3的GdiSharedHandleTable獲得,因此這樣也就可以間接獲得攻擊代碼加載到內(nèi)核的字體對象的范圍。

最后,由于NamedEscape函數(shù)調(diào)用atmfd設(shè)備的0x250A號命令可以指定對象的地址,并校驗字體對象的有效性同時將字體對象讀出來,因此攻擊代碼結(jié)合Bitmap定位和NamedEscape的0x250a指令,就可以準(zhǔn)確獲取字體對象的地址,相關(guān)的代碼如下:

2. 觸發(fā)漏洞,實現(xiàn)寫入Bitmap對象

攻擊代碼首先會分配多個0xb000大小的對象,然后找到9個相鄰的Bitmap對象并釋放中間的3個,這樣就在內(nèi)核win32k堆內(nèi)存中留下了0xb000*3= 0x21000大小的空洞,接著攻擊代碼調(diào)用NameDEscape-atmfd的0x2514號命令來讀取超長的Charset,觸發(fā)漏洞。

在這個NamedEscape調(diào)用到atmfd過程中,會分配內(nèi)核對象來復(fù)制一份輸入的緩存,這里攻擊代碼將輸入的緩存大小設(shè)置為0x20005,由于頁對齊的原因,這里正好可以占住上面我們說到的0x21000大小的空洞內(nèi)存。

這樣在最終符號溢出時,就會寫入到這塊Buffer上面未被釋放的Bitmap對象中,這就通過精確地堆操作完成了將這個符號溢出導(dǎo)致的緩存上溢轉(zhuǎn)換到對已控制的Bitmap對象的寫入。

這個轉(zhuǎn)化的流程如下圖所示:

 

2

 

3. 將Bitmap寫入轉(zhuǎn)換為內(nèi)核任意地址讀寫

在第2步我們講到這里可以通過操作字體接口,將OTF文件的Charset處理的符號溢出漏洞轉(zhuǎn)換為覆蓋Bitmap對象內(nèi)存的操作,這里我們來看看Bitmap對象在win32k中是如何組織的:它實際是一個 SURFACE對象,結(jié)構(gòu)如下:

其中,Address0其實是指向Bitmap中BitsBuffer的指針,我們可以通過SetBitmapBits函數(shù)來操作BitsBuffer指向的內(nèi)存,可以寫入bitmap對象的SURFACE內(nèi)核結(jié)構(gòu)后,攻擊代碼就可以通過控制Address0來實現(xiàn)任意地址讀寫。

在攻擊代碼中,使用了兩個Bitmap對象,一個Bitmap用來控制讀寫地址,另一個Bitmap2用來進(jìn)行實際讀寫,我們將Bitmap2作為讀寫地址控制器,將其pBitsBuffer指向?qū)崿F(xiàn)實際讀寫的Bitmap的pBitsBuffer的地址,這樣就可以實現(xiàn)多次穩(wěn)定的任意地址讀寫。

也就是說,我們通過對Bitmap2進(jìn)行 SetBitmapBits,設(shè)置實際讀寫的 Bitmap的pBitsBuffer為我們想要讀寫的地址,然后就可以通過進(jìn)行實際讀寫的Bitmap的GetBitmapBits和SetBitmapBits來實現(xiàn)對指定地址的讀寫了,如圖所示:

 

3

 

我們看到,在攻擊代碼中,首先創(chuàng)建了一個假的Bitmap對象,然后將這個對象寫到字體的Charset中:

上面的攻擊代碼中,則將這個假的Bitmap對象的address0,也就是pBitsBuffer設(shè)置成了進(jìn)行實際讀寫的bitmap的pBitsBuffer的地址。所以這個假的Bitmap對象就是我們上面提到的控制讀寫地址的Bitmap2。

最后下面就是完整的利用這個方式實現(xiàn)的任意內(nèi)核地址的讀(arbread)和寫(arbwrite)代碼:

3.修復(fù)內(nèi)核堆

由于漏洞是在上溢過程中進(jìn)行的對前一個對象寫入,必然會對內(nèi)核堆造成破壞,所以必須要修復(fù)內(nèi)核堆的結(jié)構(gòu),這樣才能實現(xiàn)在進(jìn)程退出,對象被釋放時不會造成系統(tǒng)藍(lán)屏崩潰,詳細(xì)的修復(fù)代碼可以參考源碼中觸發(fā)利用點之后的操作,篇幅關(guān)系就不在這里完全列出了。

4.實現(xiàn)權(quán)限提升

在實現(xiàn)了內(nèi)核任意地址寫入功能后,權(quán)限提升過程就比較簡單了,攻擊代碼通過遍歷內(nèi)核進(jìn)程表找到explore.exe的進(jìn)程token,直接將explore的token對象的地址寫入到當(dāng)前進(jìn)程的token中,并清除進(jìn)程的Job對象,來實現(xiàn)最終完全繞過各類沙盒的保護(hù)功能。

由于權(quán)限提升過程中完全使用了DKOM的方式,沒有進(jìn)行內(nèi)核代碼執(zhí)行,因此也繞過了Windows8以上系統(tǒng)中的SMEP內(nèi)核保護(hù)功能。

我們在分析這個漏洞的過程中,發(fā)現(xiàn)目前Hacking Team版本的漏洞利用代碼還是存在一些問題的,由于最終的提權(quán)代碼直接從Explore復(fù)制的token對象,會導(dǎo)致該token對象的引用計數(shù)出現(xiàn)問題,當(dāng)系統(tǒng)關(guān)機(jī)、注銷,或者Explore.exe異常結(jié)束,最終導(dǎo)致Explore.exe進(jìn)程退出時,可能會導(dǎo)致引用錯誤的token對象,引發(fā)系統(tǒng)藍(lán)屏崩潰,這是這個利用不夠優(yōu)美的地方。

責(zé)任編輯:藍(lán)雨淚 來源: 奇虎360公司技術(shù)博客
相關(guān)推薦

2015-07-08 10:35:17

2015-07-14 10:53:19

Hacking Tea0Day漏洞

2015-07-08 13:36:24

2015-07-15 12:50:27

微軟IE11

2015-07-14 11:00:16

2022-03-25 13:41:55

漏洞網(wǎng)絡(luò)攻擊Quantum(量子

2011-02-28 09:34:55

2011-08-26 11:44:01

2009-07-06 13:15:07

2013-12-02 14:50:25

2013-05-23 10:48:14

EPATHOBJ 0d0day漏洞

2015-09-23 13:38:42

2021-10-06 13:48:50

0day漏洞攻擊

2015-07-14 10:33:19

2015-05-20 16:34:14

2021-04-26 10:09:11

0Day漏洞Google Chro

2021-04-13 16:40:18

0Day漏洞遠(yuǎn)程代碼

2021-07-27 11:01:02

Windows

2014-10-14 19:57:08

2012-07-31 09:43:53

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美激情a∨在线视频播放 成人免费共享视频 | 一区二区三区免费 | 欧美久久一区二区 | 婷婷亚洲综合 | 色婷婷av99xx | 精品一区二区三区在线观看 | 亚洲一区二区三区四区五区中文 | 欧美一区二区三区久久精品视 | 黄色片视频免费 | 中文字幕一区二区三区乱码在线 | 免费黄色a级毛片 | 91短视频网址 | 成年人精品视频 | 久久综合狠狠综合久久 | 亚州精品天堂中文字幕 | 久久久久久久久毛片 | 密室大逃脱第六季大神版在线观看 | 国产片侵犯亲女视频播放 | 欧美a√ | 福利网站导航 | 一级中国毛片 | 人人干人人艹 | 二区中文| 日皮视频免费 | 在线播放第一页 | 一区二区三区国产精品 | 日韩av成人在线 | 国产精品国产成人国产三级 | 请别相信他免费喜剧电影在线观看 | 免费看的黄网站 | 国产一区二区 | 99re在线视频观看 | 日韩一区二区久久 | 亚洲国产自产 | 亚洲视频免费观看 | 婷婷综合色 | 91偷拍精品一区二区三区 | 久久久久久久久国产 | 久久艹免费视频 | 国产精品爱久久久久久久 | 婷婷综合激情 |