SMB漏洞分析 去年的漏洞新年終于修復(fù)
原創(chuàng)【51CTO.com 獨家翻譯】2009年1月13日,這又是一個黑色的星期二,(微軟發(fā)布補丁都通常為星期二)微軟發(fā)布了2009年的首個補丁,該補丁主要是修復(fù)了在CVE上曾經(jīng)發(fā)表的微軟操作系統(tǒng)中的srv系統(tǒng)驅(qū)動文件中的三個攻擊地址漏洞。這個Srv系統(tǒng)驅(qū)動文件主要功能是提供SMB網(wǎng)絡(luò)服務(wù),包含了139端口和445端口。
去年該補丁于2008年9月14日發(fā)表在CVE,發(fā)表號為CVE-2008-4114。該漏洞可使得遠(yuǎn)程用戶通過管道發(fā)送畸形包,來獲得Windows底層信息。這個漏洞是非常有趣的,它可以觸發(fā)內(nèi)存拷貝,但是不能溢出,這是源程序中的一個漏洞。
當(dāng)目標(biāo)主機接收到了這個寫請求,它會嘗試從本地內(nèi)存中讀取信息,導(dǎo)致操作系統(tǒng)整個掛掉,只有重新啟動操作系統(tǒng)。通常微軟都會等到將bug漏洞的有效代碼補丁編寫完畢,而將該補丁文件在下一個打包補丁中發(fā)布,例如放在的XP操作系統(tǒng)的SP4補丁包中。
另外的兩個漏洞分別發(fā)表在CVE-2008-4834 and CVE-2008-4835,這兩個有一點點不同。這兩個bug都可導(dǎo)致內(nèi)存緩沖區(qū)溢出。攻擊者發(fā)送一個比0要小些的,小于緩沖區(qū)的變量的信息請求,就會達(dá)到用空字節(jié)來覆蓋并填寫原有的內(nèi)存緩沖區(qū)。
我們通過驅(qū)動代碼和緩沖區(qū)來分配核心池,我們通常都用一串空字節(jié)來腐化下一個序列的核心池的池頭。這將變得更加有意思起來。微軟的公示里重述了這個危害,在這次發(fā)布的補丁中,針對上述嚴(yán)重的代碼執(zhí)行漏洞做了修復(fù)。但是還需要一個針對小的控制變量的輸入來覆蓋和重寫核心池的解決方法。
還有一些代碼的控制變量工作在這個區(qū)域,這是問題的焦點。我也知道,用代碼來解決這個空字節(jié)覆蓋下一序列的核心池頭不是那么容易。
我同意隨著這些漏洞的報告的發(fā)布,他們應(yīng)更快更好的推出相應(yīng)的系統(tǒng)補丁。來有效的防止類似dos攻擊的發(fā)生,或者其它的惡意攻擊。但是我相信他們通過一些代碼來運行,不會有什么好的結(jié)果。以下是成功的exploit輸出
Successful exploitation of the NULL byte overwrite bugs will result in an exception like the following:
BAD_POOL_HEADER (19)
Arg1: 00000020, a pool block header size is corrupt.
Arg2: e2008540, The pool entry we were looking for within the page.
Arg3: e20089f0, The next pool entry. <-- OVERWRITTEN HEADER (覆蓋頭)
Arg4: 0c96020e, (reserved) (保留)
BUGCHECK_STR: 0x19_20
f61bac30 80543e86 00000019 00000020 e2008540 nt!KeBugCheckEx+0x1b
f61bac80 f694fad1 e2008548 00000000 f695d2b9 nt!ExFreePoolWithTag+0x2a0
f61bac8c f695d2b9 00000021 e2008550 821e5bd0 srv!SrvFreePagedPool+0x2a
f61baca0 f695771c 820d1610 e2008550 821f1038 srv!SrvFreeTransaction+0x68
f61bacb4 f6958349 00000000 821f1038 e2008550 srv!SrvDereferenceTransaction+0x6b
f61bacec f695786b 00000000 0000001e 821f1038 srv!SrvCompleteExecuteTransaction+0xd0
f61bad04 f6958115 f694be34 821f1038 821f2058 srv!ExecuteTransaction+0x333
f61bad7c f693f836 821f1040 821f2020 f694fa98 srv!SrvSmbTransaction+0x7ac
f61bad88 f694fa98 00000000 8202e200 00000000 srv!SrvProcessSmb+0xb7
SYMBOL_NAME: srv!SrvFreePagedPool+2a
MODULE_NAME: srv
IMAGE_NAME: srv.sys
kd> dd e2008540 (current entry)(當(dāng)前入口)
e2008540 0c96020e 7274534c 000004a0 00000000
e2008550 04a0030c 00000000 820d1610 821e5bd0
kd> dd e20089f0 (overwritten entry header)(覆蓋入口)
e20089f0 00000000 00000000 00000000 00000000
e2008a00 00000000 00000000 00000000 82270000
引用地址為:http://www.breakingpointsystems.com/community/blog/2009_microsoft_tuesday_coverage
【51CTO.COM 獨家翻譯,轉(zhuǎn)載請注明出處及譯者!】
【編輯推薦】