這篇文章跟大家分析一下“如何進(jìn)行Ghostscript SAFER沙箱繞過漏洞的分析”。內(nèi)容詳細(xì)易懂,對(duì)“如何進(jìn)行Ghostscript SAFER沙箱繞過漏洞的分析”感興趣的朋友可以跟著小編的思路慢慢深入來閱讀一下,希望閱讀后能夠?qū)Υ蠹矣兴鶐椭O旅娓【幰黄鹕钊雽W(xué)習(xí)“如何進(jìn)行Ghostscript SAFER沙箱繞過漏洞的分析”的知識(shí)吧。
Ghostscript是一款A(yù)dobe PostScript語言的解釋器軟件??蓪?duì)PostScript語言進(jìn)行繪圖,支持PS與PDF互相轉(zhuǎn)換。目前大多數(shù)Linux發(fā)行版中都默認(rèn)安裝,并移植到了Unix、MacOS、Windows等平臺(tái),且Ghostscript還被ImagineMagic、Python PIL和各種PDF閱讀器等程序所使用。
8月21日,Google安全研究員Tavis Ormandy披露了多個(gè)GhostScript的漏洞,通過在圖片中構(gòu)造惡意PostScript腳本,可以繞過SAFER安全沙箱,從而造成命令執(zhí)行、文件讀取、文件刪除等漏洞,其根本原因是GhostScript解析restore命令時(shí),會(huì)暫時(shí)將參數(shù)LockSafetyParams設(shè)置為False,從而關(guān)閉SAFER模式。
Ghostscript <= 9.23(全版本、全平臺(tái)),目前官方暫未發(fā)布更新。
Ghostscript包含一個(gè)可選的-dSAFER選項(xiàng),設(shè)置該選項(xiàng)啟動(dòng)安全沙箱模式后,與文件相關(guān)的操作符將被禁止,具體作用有如下:
(1)禁用deletefile和renamefile操作符,能夠打開管道命令(%pipe%cmd),同時(shí)只能打開stdout和stderr進(jìn)行寫入
(2)禁用讀取stdin以外的文件
(3)設(shè)置設(shè)備的LockSafetyParams參數(shù)為True,從而防止使用OutputFile參數(shù)寫入文件
(4)阻止/GenericResourceDir、/FontResourceDir、/SystemParamsPassword或/StartJobPassword被更改
下面是關(guān)于該選項(xiàng)的一個(gè)簡單演示。
未加上-dSAFER參數(shù)時(shí),成功讀取了/etc/passwd文件:
加上-dSAFER參數(shù)后,出現(xiàn)invalidfileaccess錯(cuò)誤:
多個(gè)PostScript操作可以繞過-dSAFER提供的保護(hù),這可以允許攻擊者使用任意參數(shù)執(zhí)行命令。
首先對(duì)PoC進(jìn)行測試,在開啟了安全沙箱的情況下(-dSAFER),可以成功執(zhí)行任意shell命令:
使用ImageMagick工具中的convert命令測試PoC,可以看到ImageMagick同樣受到影響:
在源碼目錄下使用命令“grep -r dSAFER”找到和該選項(xiàng)相關(guān)的操作,看到下面這段注釋中說明了該選項(xiàng)具體功能——將LockSafetyParams設(shè)置為True。
再使用grep查看和LockSafetyParams相關(guān)操作,通過注釋可知,這個(gè)布爾類型變的量值為True時(shí),可以防止某些不安全的操作。同時(shí)在文件psi/zdevice2.c的第269行,該變量被設(shè)置為了False,且僅有此處修改了LockSafetyParams的值為False,因此可以猜測:PoC中某條PostScript語句解析時(shí)導(dǎo)致了這個(gè)改變。
接下來使用GDB進(jìn)行驗(yàn)證,首先設(shè)置好程序參數(shù):
set args -q -sDEVICE=ppmraw -dSAFER -sOutputFile=/dev/null
根據(jù)前面grep的輸出,找到“dev_old->LockSafetyParams = false; ”語句在函數(shù)restore_page_device()中,并在此處下斷,運(yùn)行程序輸入PoC:
設(shè)置成像區(qū)域——legal(a4、b5、letter等也可以):
接著輸入{null restore} stopped {pop} if,程序中斷在此處:
再對(duì)dev_old->LockSafetyParams變量設(shè)置觀察點(diǎn),繼續(xù)運(yùn)行程序,和預(yù)想的一樣,LockSafetyParams的值在這里被改變了。
查看?;厮?,發(fā)現(xiàn)當(dāng)前函數(shù)在一系列帶有“interpret”的函數(shù)中被調(diào)用,從名稱推斷這些函數(shù)用于解析PostScript語句。
這里我們?cè)?2處下斷,觀察到了解釋器處理stopped、null、restore等關(guān)鍵字的過程,至此繞過SAFER沙箱過程就逐漸清晰了。
現(xiàn)在讓我們來看看{null restore} stopped {pop} if這條語句是如何繞過SAFER沙箱的。
PostScript是一種“逆波蘭式”(Reverse Polish Notation,也稱為后綴表達(dá)式)的語言。簡單來說就是操作數(shù)在前,操作符在后。PoC中這條語句是一條典型的PostScript異常處理語句,stopped操作符用于PostScript的異常處理,也就是說stopped執(zhí)行前面的{}中給出的過程,如果解釋器在執(zhí)行該過程期間出現(xiàn)錯(cuò)誤,它將終止該過程并執(zhí)行stopped操作符之后{}中的過程。
null restore會(huì)引起類型檢查錯(cuò)誤(/typecheck error),同時(shí)restore的執(zhí)行導(dǎo)致LockSafetyParams設(shè)置為False,stopped捕獲到異常,彈出棧頂元素null,GS繼續(xù)運(yùn)行,但此時(shí)LockSafetyParams的值還沒恢復(fù)為True。
值得一提的是,GhostScript的官方文檔中提到了restore操作符存在導(dǎo)致繞過SAFER模式的風(fēng)險(xiǎn)。
OutputFile參數(shù)用于設(shè)置輸出文件名,另外在Linux/Unix上,還可以通過設(shè)備%pipe%將輸出發(fā)送到管道(Windows中也可以,需要使用兩個(gè)%)。例如,要將輸出通過管道傳輸?shù)絣pr可以使用:/OutputFile (%pipe%lpr)
查閱官方文檔可知,%pipe%功能由popen函數(shù)支持,在調(diào)試中也能確認(rèn)這一點(diǎn):
popen()函數(shù)通過創(chuàng)建管道的方式,調(diào)用fork()啟動(dòng)一個(gè)子進(jìn)程,并將傳入popen()的命令送到/bin/sh以-c參數(shù)執(zhí)行。可以通過在此處注入命令實(shí)現(xiàn)漏洞利用,如下圖中演示的那樣,另外將PostScript編碼到圖像中,可以在使用GhostScript的Web服務(wù)器上執(zhí)行任意指令(例如服務(wù)器使用ImageMagick處理上傳的圖像時(shí))。
截至筆者分析該漏洞時(shí),官方還沒修復(fù)該漏洞。Artifex Software,ImageMagick,Redhat,Ubuntu等廠商已聲明受到此漏洞影響,其他平臺(tái)暫時(shí)未對(duì)此漏洞進(jìn)行說明,目前臨時(shí)解決方案如下:
1. 卸載GhostScript;
2. 可在/etc/ImageMagick/policy.xml文件中添加如下代碼來禁用PostScript、EPS、PDF以及XPS解碼器:
<policy domain =“coder”rights =“none”pattern =“PS”/> <policy domain =“coder”rights =“none”pattern =“EPS”/> <policy domain =“coder”rights =“none”pattern =“PDF”/> <policy domain =“coder”rights =“none”pattern =“XPS”/>
關(guān)于如何進(jìn)行Ghostscript SAFER沙箱繞過漏洞的分析就分享到這里啦,希望上述內(nèi)容能夠讓大家有所提升。如果想要學(xué)習(xí)更多知識(shí),請(qǐng)大家多多留意小編的更新。謝謝大家關(guān)注一下創(chuàng)新互聯(lián)網(wǎng)站!
本文題目:如何進(jìn)行GhostscriptSAFER沙箱繞過漏洞的分析-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://chinadenli.net/article8/dioiop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、服務(wù)器托管、自適應(yīng)網(wǎng)站、響應(yīng)式網(wǎng)站、商城網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容