Хакер Февраль 02(76) 2006

Page 72

ÂÇËÎÌ ///// ISSUE

ðåàêöèÿ áðàóçåðà Opera íà WMF-ýêñïëîéò — ïðåäëîæåíèå îòêðûòü ìåòàôàéë àññîöèèðîâàííûì ñ íèì ïðèëîæåíèåì (â äàííîì ñëó÷àå íèêàêîå ïðèëîæåíèå íå àññîöèèðîâàíî)

ìåòàôàéëû â äåéñòâèè!

ðåàêöèÿ IE — WMF-ôàéë ñ ýêñïëîéòîì íå îòîáðàæàåòñÿ, è shell-êîä íå ïîëó÷àåò óïðàâëåíèå; ÷åñòíûé WMF-ôàéë ñ «ëåâûì» ðàñøèðåíèåì gif òàêæå íå îòîáðàæàåòñÿ

öèàëüíî ñîçäàííîãî ìåòàôàéëà, êàê íà ýêðàí âûïðûãèâàåò äèàëîãîâîå îêíî, âûçûâàåìîå shell-êîäîì:

DC = CreateEnhMetaFile(0, 0, 0, «demo»); // ïðîèãðûâàåì ìåòàôàéë â äðóãîé ìåòàôàéë h_meta = GetMetaFile(«exploit.wmf»); PlayMetaFile(DC, h_meta); Ïîä Widows 98 exploit.wmf íàãëóõî âåøàåò ñèñòåìó, íåçàâèñÿùóþ îò âûáðàííîãî êîíòåêñòà. Òàê æå ïîñòóïàþò è äðóãèå ýêñïëîéòû, âûëîâëåííûå â Ñåòè. Òàê ÷òî êîëè÷åñòâî óÿçâèìûõ ïëàòôîðì ðåàëüíî îãðàíè÷èâàåòñÿ îäíîé ëèøü NT, ïðè÷åì âåðñèÿ ïîä Intanium òðåáóåò ñïåöèàëüíî ñïðîåêòèðîâàííîãî shell-êîäà. Âîò òóò íåêîòîðûå çàäàþò âîïðîñ: çàùèùàåò ëè DEP îò àòàêè èëè íåò? Àïïàðàòíûé DEP ïðåäîòâðàùàåò íåïðåäóìûøëåííîå âûïîëíåíèå ìàøèííîãî êîäà â îáëàñòè äàííûõ, íî íå ïðåïÿòñòâóåò ÿâíîìó íàçíà÷åíèþ íóæíûõ àòðèáóòîâ ôóíêöèåé VirtualAlloc/VirtualProtect. Ïîýòîìó âåñü âîïðîñ â òîì, â êàêîé ðåãèîí ïàìÿòè çàãðóæàåò ìåòàôàéë òî èëè èíîå ïðèëîæåíèå.

SETABORTPROC, êîòîðàÿ, â ñâîþ î÷åðåäü, ðåãèñòðèðóåò ïîëüçîâàòåëüñêóþ callback-ôóíêöèþ, èçíà÷àëüíî ïðåäíàçíà÷åííóþ äëÿ îòìåíû çàäàíèé, óæå íàõîäÿùèõñÿ â î÷åðåäè íà ïå÷àòü. Ýòî íå åäèíñòâåííàÿ GDI-ôóíêöèÿ, ïðèíèìàþùàÿ callback’è, åñòü è äðóãèå (êàê äîêóìåíòèðîâàííûå, òàê è íå ñîâñåì, íàïðèìåð, LineDDA, SetICMMode), íî, ïî-âèäèìîìó, òîëüêî META_ESCAPE/SETABORTPROC ìîæåò áûòü âíåäðåíà â ìåòàôàéë. Èëè âñå-òàêè íåò? Äèçàññåìáëèðîâàíèå GDI32.DLL ïîêàçûâàåò îãðîìíîå êîëè÷åñòâî ôóíêöèé òèïà call reg, ãäå reg — óêàçàòåëü, ïîëó÷åííûé èç WMF-ôàéëà, êàæäàÿ èç êîòîðûõ ìîæåò îêàçàòüñÿ íîâûì «ñâÿùåííûì ãðààëåì» è íîâîé äûðîé, íî íå áóäåì íà íèõ îñòàíàâëèâàòüñÿ, ÷òîáû íå îáëåã÷àòü ðàáîòó «ñïåöèàëèñòàì ïî áåçîïàñíîñòè», ïèòàþùèõñÿ ÷óæèìè èäåÿìè. Âïðî÷åì, õàêåðû ïîñòóïàþò òî÷íî òàê æå, è ïðåæäå, ÷åì ðàçðàáàòûâàòü ñîáñòâåííîãî ÷åðâÿ, ïðåïàðèðóþò óæå ñóùåñòâóþùèå. Ìû ïîñëåäóåì ýòîé òåíäåíöèè è ðàñêîâûðÿåì ñåé÷àñ êàêîé-íèáóäü ñïëîèò.

ÓÞ ßÙÓ ÂÈÑß ËÓÕÎ ÂÅØÀÅÒ ÑÈÑÒÅÌÓ, ÍÅÇÀ T.WMF ÍÀÃË ÏÎÄ WIDOWS 98 EXPLOIT ÒÀ.. Ò ÂÛÁÐÀÍÍÎÃÎ ÊÎÍÒÅÊÑÒ ÎÒ ÑÏÀÑÅÒ ËÈ DEP? Ïîïðîáóåì ýòî âûÿñíèòü ñ ïîìîùüþ ìåòàôàéëà exploit.wmf è îòëàä÷èêà OllyDbg. ×òîáû áåñòîëêó íå òðàññèðîâàòü êèëîìåòðû ïîñòîðîííåãî êîäà, äàâàé âíåäðèì â exploit.wmf òî÷êó îñòàíîâà, ïðåäâàðèòåëüíî ñêîïèðîâàâ åãî â wmf-int3.wmf, ÷òîáû íå èñïîðòèòü îðèãèíàë. Îòêðûâàåì ìåòàôàéë â hiew’å, äàâèì <F5> (goto) è ïåðåõîäèì ïî ñìåùåíèþ 1Ch, îòêóäà, ñîáñòâåííî ãîâîðÿ, è íà÷èíàåòñÿ àêòóàëüíûé shell-êîä. Ïåðåõîäèì â ðåæèì ðåäàêòèðîâàíèÿ ïî <F3> è ïèøåì CCh, ïîêà íå íàäîåñò. Ñîõðàíÿåì èçìåíåíèÿ ïî <F9> è âûõîäèì. Áåðåì ñ äèñêà óæå ãîòîâûé ôàéë PlayMetaFile.exe è çàãðóæàåì åãî â îòëàä÷èê, íàæèìàÿ <F9> äëÿ çàïóñêà ïðîãðàììû, êîòîðàÿ òóò æå ãðîõàåòñÿ, ïîñêîëüêó íàòûêàåòñÿ íà çàáîð èç CCh, êàæäûé èç êîòîðûõ ñîîòâåòñòâóåò ìàøèííîé èíñòðóêöèè INT 03h, âûçûâàåìîé îòëàä÷èêîì. Ñìîòðèì íà EIP. Îí óêàçûâàåò íà 8B001Dh (åñòåñòâåííî, íà äðóãèõ ñèñòåìàõ ýòî çíà÷åíèå ìîæåò áûòü èíûì). Êàðòà ïàìÿòè ïîêàçûâàåò, ÷òî ýòà îáëàñòü ïàìÿòè èìååò àòðèáóòû «Òîëüêî íà ÷òåíèå» è ïðè àêòèâíîì àïïàðàòíîì DEP íèêàêîé êîä çäåñü èñïîëíÿòüñÿ íå ìîæåò (ïðîãðàììíûé DEP îò ýòîãî íå çàùèùàåò). Îäíàêî ïî óìîë÷àíèþ DEP çàäåéñòâîâàí òîëüêî äëÿ íåêîòîðûõ ñèñòåìíûõ ñëóæá, à ïîëüçîâàòåëüñêèå ïðîãðàììû ìîãóò âûòâîðÿòü ÷òî óãîäíî… Òàêàÿ âîò, çíà÷èò, ñèòóàöèÿ. À êàê âåäåò ñåáÿ Irfan Viewer? Ïîñìîòðèì-ïîñìîòðèì. Ðåãèñòð EIP óêàçûâàåò íà 13D31Ch è, ñóäÿ ïî êàðòå ïàìÿòè, íàõîäèòñÿ ãëóáîêî â ñòåêå, äîñòóïíîì êàê íà ÷òåíèå, òàê è íà çàïèñü, íî òîëüêî íå íà èñïîëíåíèå. Çíà÷èò, åñëè çàäåéñòâîâàòü DEP äëÿ âñåõ ïðèëîæåíèé, WMF-ýêñïëîéòû îêàæóòñÿ íåðàáîòîñïîñîáíû, îäíàêî äàëåêî íå âñå ïðîöåññîðû ïîääåðæèâàþò DEP, òàê ÷òî óãðîçà àòàêè âïîëíå àêòóàëüíà, íî âñå-òàêè íå íàñòîëüêî âåëèêà, êàê ýòî ïûòàþòñÿ ïðåäñòàâèòü íåêîòîðûå àíòèâèðóñíûå êîìïàíèè. ÊÀÊ ÐÀÁÎÒÀÞÒ ÈÇÂÅÑÒÍÛÅ ÑÏËÎÈÒÛ Èçâåñòíûå ìíå ýêñïëîéòû âíåäðÿþò â WMF-ôàéë ecsape-ïîñëåäîâàòåëüíîñòü META_ESCAPE, âûçûâàþùóþ ôóíêöèþ

070

ÏÐÅÏÎÐÈÐÓÅÌ ÑÏËÎÈÒ Äëÿ àíàëèçà õîðîøî ïîäõîäèò WMF Exploit Checker îò Èëüôàêà Ãóèëüôàíîâà, èñõîäíûé êîä êîòîðîãî ìîæíî íàéòè íà íàøåì äèñêå; òàì æå ëåæèò îòêîìïèëèðîâàííûé áèíàðíèê. Çíàé, ÷òî ýòî íèêàêîé íå checker, à ñàìûé íàñòîÿùèé ýêñïëîéò, âíåäðÿþùèé â WMF-ôàéë ìàøèííûé êîä, ïûòàþùèéñÿ âûâåñòè íà ýêðàí Your system is vulnerable to WMF exploits!. Ðàñïàêîâàâ zip-àðõèâ ñ èñõîäíûìè òåêñòàìè, ìû íàéäåì ñåìü ôàéëîâ ñëåäóþùåãî ñîäåðæàíèÿ:

* tell.asm: shell-êîä, ïîäãîòîâëåííûé ê âíåäðåíèþ; * wmf_checker_hexblog.cpp: ñîçäàåò wmf-ôàéë, âíåäðÿåò òóäà shell-êîä è ïðîèãðûâàåò åãî; * wmfdata.cpp: îòêîìèëèðîâàííûé tell.asm ñ ãîòîâûì wmf-çàãîëîâêîì; * wmfhdr.wmf: wmf-çàãîëîâîê ñ escape-ïîñëåäîâàòåëüíîñòüþ è ôóíêöèé SetAbortProc; wmfdata.cpp ïðåäñòàâëÿåò ñîáîé ãîòîâûé WMF-ôàéë ñ shell-êîäîì, êîòîðûé ìîæíî ñêîðìèòü Internet Exporer’ó, IrfanView’ó èëè ëþáîé äðóãîé ïðîãðàììå ïîäîáíîãî òèïà, íî òîëüêî ïðåäâàðèòåëüíî íåîáõîäèìî ïðåîáðàçîâàòü cpp â bin, ïîñêîëüêó ó Èëüôàêà äâîè÷íûå äàííûå ïðåäñòàâëåíû â âèäå ìàññèâà uchar:

static uchar array[] = { 0x01,0x00,0x09,0x00,0x00,0x03,0xED,0x00,0x00,0x00,0x06,0x0 0,0x3D,0x00,0x00,0x00, Òåïåðü îñòàëîñü òîëüêî èçìåíèòü òèï ìàññèâà uchar íà char è äîáàâèòü â wmfdata.cpp ïàðó ñòðîê:

#include <stdio.h> main(){ FILE *f = fopen(«exploit.wmf»,»wb»); fwrite(array, sizeof(array), 1, f);} Ïîñëå ýòîãî îñòàëîñü òîëüêî ñîáðàòü áèíàðíèê ëþáûì ANSI-ñîâ-

XÀÊÅÐ 02 /86/ 06


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.