[原創]眾裡尋他千百度----檔案類漏洞ShellCode的查詢

仙果發表於2010-09-25
題目:眾裡尋他千百度----檔案類漏洞ShellCode的查詢

作者:仙果
主頁:http://hi.baidu.com/zhanglinguo11
題記:還是非常想把這個題目完成,放了這麼久,也修改了幾個版本,都不滿意,今天算是推倒重新來寫,儘可能把自己知道的東西寫出來,學習需
要不斷的總結積累,上週日騎車出去,看到一句話:學習是一種信仰,記錄下來,作為提醒自己去學習的警句。
目錄
0x_1.何為檔案類漏洞
0x_2.檔案類漏洞的分類
0x_3.查詢檔案類漏洞ShellCode的方法
0x_4.例子
0x_5.總結

0x_1.何為檔案類漏洞
     檔案類漏洞只是一個通俗的叫法,且並不準確,一般來說檔案類主要包含Office系列辦公軟體,Adobe Reader等PDF檢視處理軟體,KingSoft的
WPS系列等等的漏洞都屬於檔案類漏洞的範疇之內,網上討論最多的檔案類漏洞也是屬於此類漏洞,不 知道flash的漏洞是否可以歸為到此類漏洞當
中,個人認為播放器如Media Player等等播放軟體在處理如m3u格式的檔案觸發的漏洞也是屬於檔案類漏洞,這應該叫做檔案格式類漏洞。其觸發漏
洞的原因是其在處理某些特殊構造的 樣本時觸發異常,導致可以控制程式的執行流程並順利執行到指定的ShellCode。
以上純屬個人胡亂揣測,如有不對之處歡迎各位大牛小牛不大不小牛指正,仙果在此感激不盡。

0x_2.檔案類漏洞的分類
     其實不能叫做分類,只是以本篇文章來說,自己在查詢檔案類漏洞的ShellCode的過程中遇到的各種情況進行的分類,非常之不準確,僅供參考。

0x_2.1 已公開漏洞
    這裡主要是哪些已經被公開的漏洞,在網路上可以找到別人分析此漏洞的相關技術文件抑或漏洞說明文件,不管是英文的還是中文的,相應的
POC文件也已經公 開。此時分析漏洞中的ShellCode就會很簡單,當確定拿到的樣本存在既定的漏洞編號(CVE編號或者其他),應當在網上查詢是否
有相應的分析,若存 在則可以根據別人的分析,一步一步跟蹤除錯,最終找到ShellCode的廬山真面目。

0x_2.2 非公開漏洞
    如果你拿到這類漏洞的樣本,那就恭喜你,一個新鮮的0Day就到手了,別忘了發給我一份,求之不得啊,回到正題,當你不確定漏洞屬於哪一類
別時也可以歸為 此類。在虛擬機器中把相應環境搭建好,執行樣本,記錄樣本都做了哪些操作,檔案類漏洞一般都會捆綁木馬,那肯定有建立木馬並
執行木馬的操作,在相應的API 上斷點跟蹤,一般來說,只要ShellCode呼叫了相關的API就可以斷下,此時就可以利用WinDbg偵錯程式的Calls Stack
功能或者跳出當前執行的API函式流程,檢視到ShellCode,它就赤裸裸的在你面前,任你宰割,爽吧。常用到的API函式主要有
CreateFile,WriteFile,ReadFile,WinExec等等。

很多漏洞都可以歸為此類,再次強調這是自己的分類,沒有任何的參考價值,如果需要知道正確的分類請百度之,百度不行就換谷歌,不解釋。

0x_2.3.Office系列辦公處理軟體漏洞
    像Office等辦公處理軟體的漏洞,ShellCode會以十六進位制形式存在文件中,如果對於文件格式以及ShellCode格式分析較多的話,就可以 直接
在文件中把ShellCode揪出來,而不用去除錯跟蹤漏洞,這節省了一大筆精力和時間,當然現在我做不到這點,這是俺的目標。對於我等菜鳥來說,
認 認真真的去除錯跟蹤 漏洞的觸發過程,並在此過程中找到ShellCode才是正途,高人是用來仰望的,在此膜拜一下袁哥,
此外在漏洞利用過程中,會使用到一系列的跳轉地址,這些跳轉地址在多個系統環境下都是通用的,在編寫漏洞利用的時候,為了兼顧通用性就會使
用到這些地址, 如jmp esp在中文系統下的通用地址為0x7ffa4512(不包括Win7),如果樣本文件中出現了這個地址,在文件中應該形式如下:12 45
fa 7f ,在這個地址下斷點,斷下來後,離ShellCode 也就很近很近,有的情況下是直接跳轉到ShellCode 去執行。還有其他的通用地址,這裡就不
一一說明了,過程都是一樣的,當然在特定的漏洞環境下是不會使用到這些地址的,此時會有其他的地址進行替代,這就需 要在除錯狀態下進行分
析,多測試幾種系統和軟體環境就可以相應的結論。

0x_2.4.PDF檢視處理軟體漏洞。
    以Adobe Reader為主的PDF檢視軟體出現的漏洞,是最近幾年爆的最多的漏洞,Adobe也榮登漏洞之王,PDF的一個特性是可以內嵌JavaScript語
句,所以在IE裡使用的堆噴射(spray)技術在PDF中同樣可以使用,而PDF中的ShellCode 就跟在堆噴射的程式碼之後,在沒有經過免殺編碼的情況下
,ShellCode 的格式是"%u9090%feeb"形式的,如果經過編碼那就形式多樣了,自己也不知道該如何總結,如果對IE漏洞的ShellCode熟悉的話,解碼
的 工作還是非常容易,只是工程量的問題而已。PDF下很少有類似Office的漏洞,大多數都是需要使用JavaScript進行堆噴射執行 ShellCode,今年
年初的時候爆出的CVE-2010-0188Adobe Reader 的Tiff影像處理緩衝區溢位漏洞就屬於一個特例,ShellCode藏身於Tiff圖片檔案中,在除錯中找出
ShellCode是一個辦法,當然解碼出 Tiff圖片,直接把ShellCode複製出來也是一種辦法。
此上只是自己的學習中的總結,肯定有不正確之處,還請大家多多見諒。

0x_3.查詢檔案類漏洞ShellCode的方法
    其實在之前的敘述中,已經把如何查詢檔案類漏洞ShellCode 的辦法一一表述了,這裡再把這個過程總結下,其只是一般情形,特殊情況需要特
殊對待。
0x_3.1確定漏洞是否公開,是否有相關技術分析文件或者漏洞描述。如果存在就給我們一個提示作用,告訴我們該往那些地方尋找,如CVE-2010-
0188的漏洞描述如下:
    Adobe Reader和Acrobat都是非常流行的PDF檔案閱讀器。
Adobe Reader和Acrobat採用的開源TIFF影像解析庫libtiff實現上存在緩衝區溢位漏洞,
遠端攻擊者可能利用此漏洞透過誘使使用者開啟處理包含惡意TIFF影像的PDF文件在使用者系統上執行任意指令,從而控制使用者系統。
此安全問題其實是一個老漏洞(CVE-2006-3459)在Adobe產品中的重現。
在網上可以找到CVE-2006-3459的相關觸發利用文件和源程式,為查詢ShellCode打下基礎。

0x_3.2針對未公開漏洞,在測試環境中觀察漏洞樣本所執行的動作,根據執行的動作選擇相對應的API下斷點,第一次有可能不準確,多準備幾個斷
點就可以解決這個問題,

0x_3.3查詢漏洞樣本中是否有通用的跳轉地址,這些地址很有規律,當然這需要你去記住它,不算多也不算少,自己是沒有記住,此類地址在Office
系列的漏洞利用中比較廣泛(這裡只講檔案類漏洞,其他型別的漏洞的不涉及),一般會有jmp esp ,pop ret等等之類。

0x_3.4PDF中ShellCode的查詢,之所以單獨列出來是因為論壇裡的朋友向我詢問PDF中ShellCode改如何查詢,這裡重新說下,首先確認PDF樣本是否
存在JavaScript,若存在則ShellCode很可能就在JavaScript 之中,此時有2中辦法可以把ShellCode 提取出來,一是解碼PDF中的檔案流,二是使PDF
的JavaScript執行功能禁用(Adobe Reader -編輯-首選項-JavaScript-去掉啟用JavaScript的勾),用PDF編輯軟體檢視文件中包含的ShellCode,這其
中有可能PDF 的ShellCode沒有執行,但PDF編輯軟體同樣掛掉,此時就需要使漏洞不觸發,具體辦法大家去想,反正有很多種辦法,像不使用漏洞針
對版本的PDF 軟體啦之類,呵呵。相對應解碼PDF檔案流最簡單,但是首先要找到ShellCode 對應的檔案流(obj)才行,全部解碼也行,這需要花費時
間和精力。當然解碼出JavaScript並不一定包含ShellCode,它可能隱藏在漏洞觸發的檔案流中,JavaScript只是起到一個堆噴射的作用,此時就需
要把之前提到的兩種辦法結合起來了,不騙你,我還真遇到過這樣的情況存在,漏洞的具體編號我已經忘記了,誰如果曉得,還請告訴我一下。之前
提到的在除錯跟蹤過程中查詢ShellCode同樣也適用於PDF,這個看個人決定使用哪種辦法。

0x_4.例子
     本來想找Office-PPT的一個漏洞,編號是MS-09-017,CVE-2009-0556給大家做個演示,但是苦於手上是實在是沒有這個樣本,演示也無法繼續,
如果誰有這個樣本的話,請發給我一份,求之不得啊。若以後能拿到樣本,這部分會補上的。
只有拿一個PDF的樣本作為例子了,漏洞編號是CVE-2009-0027,PDF處理getIcon() JavaScript方式棧溢位漏洞。從網路上是可以找到此漏洞的分析文
檔,而且還是中文的,英語什麼的,最討厭了。連結為:http://bbs.kanxue.com/showthread.php?p=692925
如果想得到ShellCode,最簡單的辦法就是禁用JavaScript以後,AcroBat-高階-文件處理-編輯全部JavaScript,就可以檢視到文件中使用的
JavaScript,當然ShellCode 自然也就在其中。用其他方法同樣可以得到ShellCode,若觀察ShellCode的執行流程的話,還是需要在除錯環境中進行
跟蹤。具體的漏洞原理這裡就不解釋,大家可以自己去分析,我想肯定有很多人比我要了解的多。

0x_5.總結
      到這裡檔案類漏洞ShellCode的查詢就結束了,我寫的很囉嗦很細碎,也寫的很亂,看完以後可以自行組織,其實就一句話:除錯跟蹤自然可
以發現 ShellCode。個人認為在漏洞分析過程中,除非是練習寫ShellCode,其並不是重點,而是在漏洞是如何觸發,惡意資料是如何精心構造並使
正常的程式執行流程跳轉到ShellCode中執行的過程才是漏洞除錯的真正精彩之處,從中可以學習到很多知識,可以看到在漏洞分析利用方面很多意
想不到的技巧。比如說MS-09-017-ppt的這個漏洞300501cd這個地址就很通用,換成其他的地址就會很大的侷限性,為什麼是這個地址,寫EXP利用的
人又是如何找到的?很值得思考。
                                                                                          2010-09-25 凌晨1點於家中

相關文章