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

Page 74

ÂÇËÎÌ ///// ISSUE

ïðèíöèï äåéñòâèÿ òèïè÷íîãî WMF-ýêñïëîéòà

òàê ÷åðâü àòàêóåò óÿçâèìóþ ñèñòåìó

ìåñòèìûì êîìïèëÿòîðîì è çàïóñòèòü ïîëó÷åííûé wmfdata.exe íà âûïîëíåíèå. Íà äèñêå îáðàçóåòñÿ ìåòàôàéë exploit.wmf. Îòêðîåì åãî ñ ïîìîùüþ Infan Viewr’à èëè ëþáîãî äðóãîãî ïðîñìîòðùèêà WMF-ôàéëîâ, è åñëè íàøà ñèñòåìà óÿçâèìà, òî íà ýêðàí âûñêî÷èò ñèìïàòè÷íîå äèàëîãîâîå îêîøêî. Ïîïðîáóåì äèçàññåìáëèðîâàòü WMF-ôàéë. Äëÿ ýòîãî íàì ïîíàäîáèòñÿ IDA Pro ëþáîé âåðñèè (ìîæíî îãðàíè÷èòüñÿ è hiew) è ñïåöèôèêàöèÿ WMF-ôîðìàòà, êîòîðóþ ìîæíî íàðûòü íà íàøåì äèñêå. Ìåòàôàéë ñîñòîèò èç çàãîëîâêà (standard metafile header) è ïðîèçâîëüíîãî êîëè÷åñòâà ôðåéìîâûõ çàïèñåé (standard metafile record). Ðàñøèðåííûé ìåòàôàéë óñòðîåí ÷óòü-÷óòü ñëîæíåå, íî ìû íå áóäåì â íåãî óãëóáëÿòüñÿ. Çàãîëîâîê ïðåäñòàâëÿåò ñîáîé ñòðóêòóðó ñëåäóþùåãî òèïà:

ñòðóêòóðà çàãîëîâêà ìåòàôàéëà typedef struct _WindowsMetaHeader { WORD FileType; //òèï ìåòàôàéëà (0 == ïàìÿòü, 1 == äèñê) WORD HeaderSize; //ðàçìåð çàãîëîâêà â ñëîâàõ (âñåãäà 9) WORD Version; //òðåáóåìàÿ âåðñèÿ Windows DWORDFileSize;//ïîëíûé ðàçìåð ìåòàôàéëà â ñëîâàõ WORD NumOfObjects;//êîëè÷åñòâî îáúåêòîâ â ôàéëå DWORDMaxRecordSize;//max ðàçìåð çàïèñè â ñëîâàõ WORD NumOfParams;//íå èñïîëüçóåòñÿ (== 0) } WMFHEAD; À êàæäàÿ ôðåéìîâàÿ çàïèñü óñòðîåíà òàê:

ñòðóêòóðà ôðåéìîâûõ çàïèñåé typedef struct _StandardMetaRecord { DWORDSize;//ïîëíûé ðàçìåð çàïèñè â ñëîâàõ WORD Function;//íîìåð ôóíêöèè è êîëè÷åñòâî ïàðàìåòðîâ WORD Parameters[];//çíà÷åíèÿ ïåðåäàâàåìûõ ïàðàìåòðîâ } WMFRECORD; ÄÈÇÀÑÝÌÁËÈÐÓÅÌ ÑÏËÎÈÒ Ïîñëåäíÿÿ çàïèñü âñåãäà èìååò âèä 0003h 0000h 0000h (ðàçìåð çàãîëîâêà — 03h ñëîâà, ôóíêöèÿ — NULL, ïàðàìåòðîâ íåò), ÷òî èíòåðïðåòèðóåòñÿ êàê «êîíåö ìåòàôàéëà». Òåïåðü ïîêóðèì è íà÷íåì äèçàññåìáëèðîâàòü exploit.wmf.  íà÷àëå èäåò ñòàíäàðòíûé WMF-çàãîëîâîê, áîëüøèíñòâî ïîëåé êîòîðîãî èãíîðèðóþòñÿ è ïîòîìó ìîãóò ïðèíèìàòü ëþáûå çíà÷åíèÿ. Ãëàâíîå, ÷òîáû FileType == 1, HeaderSize == 9, Version áûëî 100h èëè 300h, à FileSize ñîäåðæàëî äîñòîâåðíûé ðàçìåð ôàéëà, â ïðîòèâíîì ñëó÷àå IrfanViewr è äðóãèå ãðàôè÷åñêèå ïðîãðàììû îáëîìàþòñÿ ñ îòêðûòèåì ìåòàôàéëà. Ýòî îáñòîÿòåëüñòâî ìîæíî èñïîëüçîâàòü äëÿ ñîçäàíèÿ ïîëèìîðôíûõ ÷åðâåé è ïðî÷åé æèâíîñòè. Êñòàòè ãîâîðÿ, ôóíêöèÿ PlayMetaFile äîïóñêàåò áîëüøóþ âîëüíîñòü, íå ïðîâåðÿÿ ïîëÿ FileType è FileSize. Ê çàãîëîâêó ïðèìûêàåò ïåðâàÿ ôðåéìîâàÿ çàïèñü, ñîäåðæàùàÿ âûçîâ ôóíêöèè META_ESCAPE (êîä 626h) ñ ïîäôóíêöèåé SETABORTPROC (êîä 0009h), ïðèíèìàþùåé äâà ïàðàìåòðà: äåñêðèïòîð êîíòåêñòà óñòðîéñòâà (â äàííîì ñëó÷àå ðàâåí 16h, íî ìîæåò áûòü ëþáûì) è ìàøèííûé êîä, êîòîðîìó áóäåò ïåðå-

072

íåîôèöèàëüíûé hotfix îòñåêàåò âñåõ èçâåñòíûõ ÷åðâåé, ëîìÿùèõñÿ â META_ESCAPE

äàíî óïðàâëåíèå, òî åñòü shell-êîä. Êîäû âñåõ äîêóìåíòèðîâàííûõ ôóíêöèé îïèñàíû â WINGDI.H (ñì. «/* Metafile Functions */»), òàì æå ìîæíî íàéòè è Escape-ïîñëåäîâàòåëüíîñòè. Äèçàññåìáëèðîâàíèå GDI32.DLL ïîêàçûâàåò, ÷òî Windows ñ÷èòûâàåò òîëüêî ìëàäøèé áàéò ôóíêöèè (äëÿ Escape ýòî 26h), à â ñòàðøåì ïåðåäàåò êîëè÷åñòâî ïàðàìåòðîâ, êîòîðîå íèêòî íå ïðîâåðÿåò! Òàêèì îáðàçîì, ÷òîáû ðàñïîçíàòü çëîâðåäíûé WMF-ôàéë, íåîáõîäèìî ïðîàíàëèçèðîâàòü âñå ôðåéìîâûå çàïèñè â ïîèñêàõ ôóíêöèè 26h, ïîäôóíêöèè 9h. Ðàçìåð ôðåéìîâîé çàïèñè íåîáÿçàòåëüíî äîëæåí ñîîòâåòñòâîâàòü äåéñòâèòåëüíîñòè, à òàêæå ñîâåðøåííî íåîáÿçàòåëüíî âñòàâëÿòü çàìûêàþùóþ ôðåéìîâóþ çàïèñü, êàê òîãî òðåáóåò WMF-ñïåöèôèêàöèÿ, ïîñêîëüêó, êîãäà shell-êîä ïîëó÷èò óïðàâëåíèå, âñå ñïåöèôèêàöèè èäóò ëåñîì. ×òî æå êàñàåòñÿ ñàìîãî shell-êîäà, òî îí âïîëíå ñòàíäàðòåí. Èëüôàê îïðåäåëÿåò áàçîâûé àäðåñ KERNEL32.DLL ÷åðåç PEB, (÷òî íå ðàáîòàåò íà 9x), ðàçáèðàåò òàáëèöó ýêñïîðòà, íàõîäèò àäðåñ API-ôóíêöèè LoadLibraryA, çàãðóæàåò USER32.DLL è âûâîäèò «ðóãàòåëüñòâî» ÷åðåç MessageBoxA. ×òîáû shell-êîä ðàáîòàë, ïîä 9x íåîáõîäèìî ïåðåïèñàòü ôóíêöèþ GetKrnl32addr, íàó÷èâ åå íàõîäèòü KERNEL32.DLL ïðÿìûì ïîèñêîì â ïàìÿòè. Ìû óæå ïèñàëè îá ýòîì â ñòàòüå «Òåõíèêà íàïèñàíèÿ ïåðåíîñèìîãî shell-êîäà», òàê ÷òî íå áóäåì ïîâòîðÿòüñÿ, à ëó÷øå ðàçáåðåì äðóãîé ýêñïëîéò, êîòîðûé áóäåò ïîñëîæíåå. Ïóñòü ýòî áóäåò Metasploit Framework (åãî ìîæíî ñêà÷àòü ñ www.metasploit.com èëè âçÿòü íà íàøåì äèñêå). Ýòî ïîëèìîðôíûé ýêñïëîéò, ñ äâèæêîì öåëèêîì íàïèñàííûì íà Ïåðëå, ñïîñîáíûé íåñòè ëþáóþ áîåâóþ íà÷èíêó â ïåðåìåííîé PayLoad. Ãåíåðàöèÿ WMF-ôàéëà ïðîèñõîäèò òàê æå, êàê è ïðîøëûé ðàç, òîëüêî òåïåðü íåêðèòè÷íûå ïîëÿ âûáèðàþòñÿ ñëó÷àéíî, à ñàì shell-êîä âíåäðÿåòñÿ â ïðîèçâîëüíîå ìåñòî ìåæäó «ìóñîðíûìè» ôðåéìàìè, ÷òî îñëåïëÿåò ïðèìèòèâíûå ñêàíåðû è áðàíäìàóýðû. Ïîñëåäîâàòåëüíîñòü 26h ?? 09h 00h îñòàåòñÿ ïîñòîÿííîé, íî îíà ñëèøêîì êîðîòêà äëÿ îáíàðóæåíèÿ, à ðàçáèðàòü âñå ôðåéìû âðó÷íóþ ñìîæåò òîëüêî ñïåöèàëüíûì îáðàçîì íàïèñàííûé ñêàíåð. Ìàëåíüêèé íþàíñ: ó Èëüôàêà shell-êîä ðàñïîëàãàåòñÿ çà íåçíà÷àùèì ñëîâîì hDC, à â Metasploit’å îí ñëåäóåò ñðàçó æå çà ïîäôóíêöèåé SETABORTPROC, âî âñÿêîì ñëó÷àå òàê êàæåòñÿ ïðè áåãëîì àíàëèçå ëèñòèíãà. Ïåðåìåííàÿ $shellcode ñîñòîèò èç äâóõ ÷àñòåé: ôèêòèâíîãî ïîëÿ Space è áîåâîé íà÷èíêè, ðàñïîëîæåííîé íèæå. ×òîáû íàïèñàòü ñâîé ýêñïëîéò, íåîáõîäèìî ñãåíåðèðîâàòü WMF-çàãîëîâîê, äîïèñàòü ôðåéìîâóþ çàïèñü META_ESCAPE/ SETABORTPROC è ïðèöåïèòü shell-êîä.  èñõîäíûõ òåêñòàõ WMF-checker’à ñîäåðæèòñÿ ôàéë wmfhdr.wmf, â êîòîðîì óæå åñòü çàãîëîâîê è ãîòîâûé ôðåéì. Íå õâàòàåò òîëüêî áîåâîé íà÷èíêè, íî ýòî ëåãêî èñïðàâèòü êîìàíäîé copy /b wmfhdr.wmf + shell-code.bin exploit.wmf, ãäå shell-code.bin — ëþáîé shell-êîä, âûäåðíóòûé èç ÷åðâÿ èëè ðàçðàáîòàííûé ñàìîñòîÿòåëüíî. ÊÀÊ ÇÀÙÈÙÀÒÜÑß Ïðåæäå ÷åì çàùèùàòüñÿ, íåïëîõî áû âûÿñíèòü: óÿçâèìà ëè òâîÿ ñèñòåìà? Ìîæíî, êîíå÷íî, èñïîëüçîâàòü WMF-checker îò Èëüôàêà, íî îí ðàáîòàåò òîëüêî íà NT-ïîäîáíûõ ñèñòåìàõ. Ïîïðîáóåì åãî äîðàáîòàòü: áåðåì wmfhdr.wmf, äîïèñûâàåì ê íåìó CCh è ñêàðìëèâàåì åãî ðàçëè÷íûì ãðàôè÷åñêèì ïðîãðàì-

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.