31.12.2014 Views

Скачать - Xakep Online

Скачать - Xakep Online

Скачать - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

VIRTUAL ADRESS ALLOCATION<br />

êàðòà ïàìÿòè<br />

çàãðóæåííîãî<br />

îáðàçà<br />

èñïîëíÿåìîãî<br />

ôàéëà<br />

0õ0<br />

[XÀÊÅÐ 11 [83] 05 > UNIXOID 108]<br />

Ñåãìåíòû è ñåêöèè - ÷òî ýòî<br />

òàêîå Ñåãìåíò — ýòî íåïðåðûâíàÿ<br />

îáëàñòü àäðåñíîãî<br />

ïðîñòðàíñòâà ñî ñâîèìè àòðèáóòàìè<br />

äîñòóïà.  ÷àñòíîñòè,<br />

ñåãìåíò êîäà èìååò<br />

àòðèáóò èñïîëíåíèÿ, à ñåãìåíò<br />

äàííûõ — àòðèáóòû<br />

÷òåíèÿ è çàïèñè. Íå ñòîèò<br />

ïóòàòü ELF-ñåãìåíòû ñ ñåãìåíòàìè<br />

x86 ïðîöåññîðà! Â<br />

çàùèùåííîì ðåæèìå 386+<br />

íèêàêèõ «ñåãìåíòîâ» â èçíà-<br />

÷àëüíîì ñìûñëå ýòîãî ñëîâà<br />

óæå íåò, à åñòü òîëüêî ñåëåêòîðû,<br />

è âñå ñåãìåíòû ELFôàéëà<br />

çàãðóæàþòñÿ â åäèíûé<br />

4-õ Ãáàéòîâûé x86-ñåã-<br />

3 GB<br />

ìåíò! Â çàâèñèìîñòè îò òèïà<br />

ñåãìåíòà âåëè÷èíà âûðàâíèâàíèÿ<br />

â ïàìÿòè ìîæåò âàðüèðîâàòüñÿ<br />

îò 4h äî 1000h áàéò<br />

(ðàçìåð ñòðàíèöû íà x86).<br />

 ñàìîì ELF-ôàéëå îíè õðàíÿòñÿ<br />

â íåâûðîâíåííîì âèäå,<br />

ïëîòíî ïðèæàòûå äðóã<br />

ê äðóãó. Òàê ÷òî ñî ñâîáîäíûì<br />

ïðîñòðàíñòâîì äëÿ âíåäðåíèÿ<br />

— ñïëîøíûå íàïðÿãè. 4 GB<br />

Áëèæàéøèé àíàëîã ELF-ñåãìåíòîâ<br />

— PE-ñåêöèè, íî â<br />

PE-ôàéëàõ ñåêöèÿ — ýòî íàèìåíüøàÿ ñòðóêòóðíàÿ<br />

åäèíèöà, à âîò â ELF-ôàéëàõ ñåãìåíò<br />

ìîæåò áûòü ðàçáèò íà îäèí èëè íåñêîëüêî<br />

ôðàãìåíòîâ — ñåêöèé.  ÷àñòíîñòè, òèïè÷íûé<br />

êîäîâûé ñåãìåíò ñîñòîèò èç ñåêöèé .init (ïðîöåäóðû<br />

èíèöèàëèçàöèè), .plt (ñåêöèÿ ñâÿçîê),<br />

.text (îñíîâîé êîä ïðîãðàììû) è .finit (ïðîöåäóðû<br />

ôèíàëèçàöèè). Ñåêöèè íóæíû ëèíêåðó<br />

äëÿ êîìáèíèðîâàíèÿ, ÷òîáû îí ìîã îòîáðàòü<br />

ñåêöèè ñ ïîõîæèìè àòðèáóòàìè è îïòèìàëüíûì<br />

îáðàçîì ðàñòàñîâàòü èõ ïî ñåãìåíòàì<br />

ïðè ñáîðêå ôàéëà, òî åñòü «ñêîìáèíèðîâàòü».<br />

Íåñìîòðÿ íà òî, ÷òî ñèñòåìíûé çàãðóç÷èê èãíîðèðóåò<br />

òàáëèöó ñåêöèé, ëèíêåð âñå-òàêè ïîìåùàåò<br />

åå êîïèþ â èñïîëíÿåìûé ôàéë. Ìåñòî<br />

òðàòèòñÿ ñîâñåì íåìíîãî, çàòî îòëàä÷èêàì è<br />

äèçàññåìáëåðàì òàê ïðèÿòíåå. Ïî íå ñîâñåì<br />

ïîíÿòíûì ïðè÷èíàì gdb è ìíîãèå äðóãèå ïðîãðàììû<br />

îòêàçûâàþòñÿ çàãðóæàòü ôàéë ñ ïîâðåæäåííîé<br />

èëè îòñóòñòâóþùåé òàáëèöåé ñåêöèé,<br />

÷åì ÷àñòî ïîëüçóþòñÿ äëÿ çàùèòû ïðîãðàìì<br />

îò ïîñòîðîííåãî âìåøàòåëüñòâà.<br />

Ñòðóêòóðó è íàçíà÷åíèå ïîëåé ñëóæåáíûõ çàãîëîâêîâ<br />

çäåñü ðàçáèðàòü íå áóäåì. Ýòèì çàéìåòñÿ<br />

hex-ðåäàêòîð, è íàì ýòè ïîäðîáíîñòè íå ïîíàäîáÿòñÿ.<br />

Èíòåðåñóþùèåñÿ ìîãóò îáðàòèòüñÿ ê ôàéëó<br />

/usr/include/elf.h — òàì âñå ïîäðîáíî ðàñïèñàíî.<br />

THREAD STACK<br />

EXECUTABLE<br />

SHARED LIB STACK<br />

KERNEL CODE AND DATA<br />

×ÒÎ ÍÀÌ ÏÎÍÀÄÎÁÈÒÑß<br />

Äëÿ ïðàâêè èñïîëíÿåìûõ ôàéëîâ Ëèíóõ íåîáÿçàòåëåí. Äîñòàòî÷íî<br />

èìåòü HIEW, çàïóùåííûé èç-ïîä Windows, èëè äàæå MS-<br />

DOS îäíàêî â ýòîì ñëó÷àå ïðèäåòñÿ ñèëüíî ïîïûõòåòü è ê òîìó<br />

æå - êàê ïîòîì ýòî îòëàæèâàòü Òàê ÷òî Ëèíóõ âñå-òàêè æåëàòåëåí,<br />

õîòÿ áû â âèäå ýìóëÿòîðà - VMWare, BOCHS èëè QEMU.<br />

Ìû îñòàíîâèìñÿ íà hex-ðåäàêòîðå HTE, ãîòîâóþ ñáîðêó êîòîðîãî<br />

0õ08048000<br />

0õ40000000<br />

0õñ0000000<br />

0õffffffff<br />

Ëó÷øå ñîñðåäîòî÷èìñÿ íà çàãðóçêå ôàéëà â ïàìÿòü.<br />

Ïî óìîë÷àíèþ ELF-çàãîëîâîê íàõîäèòñÿ<br />

ïî àäðåñó 8048000h. Ýòî è åñòü áàçîâûé àäðåñ<br />

çàãðóçêè. Íà ñòàäèè ëèíêîâêè îí ìîæåò áûòü<br />

ñâîáîäíî èçìåíåí íà äðóãîé, íî áîëüøèíñòâî<br />

ïðîãðàììèñòîâ îñòàâëÿþò åãî «êàê åñòü». Âñå<br />

ñåãìåíòû ïðîåöèðóþòñÿ â ïàìÿòü â ñîîòâåòñòâèè<br />

ñ âèðòóàëüíûìè àäðåñàìè, ïðîïèñàííûìè<br />

â òàáëèöå ñåãìåíòîâ, ïðè÷åì âèðòóàëüíàÿ ïðîåêöèÿ<br />

îáðàçà âñåãäà íåïðåðûâíà, è ìåæäó ñåãìåíòàìè<br />

íå äîëæíî áûòü íåçàïîëíåííûõ «äûð».<br />

Íà÷èíàÿ ñ àäðåñà 40000000h, ðàñïîëàãàþòñÿ ñîâìåñòíî<br />

èñïîëüçóåìûå áèáëèîòåêè ld-linix.so,<br />

libm.so, libc.so è äðóãèå, êîòîðûå ñâÿçûâàþò îïåðàöèîííóþ<br />

ñèñòåìó ñ ïðèêëàäíîé ïðîãðàììîé.<br />

Áëèæàéøèé àíàëîã èç ìèðà Windows — KER-<br />

NEL32.DLL, ðåàëèçóþùàÿ win32 API, íî ïðè æåëàíèè<br />

ïðîãðàììà ìîæåò âûçûâàòü ôóíêöèè îïåðàöèîííîé<br />

ñèñòåìû è íàïðÿìóþ.  NT çà ýòî îòâå÷àåò<br />

ïðåðûâàíèå INT 2Eh, â Linux, êàê ïðàâèëî, INT<br />

80h (ïîäðîáíåå î ðàçëè÷èè â ðåàëèçàöèè ñèñòåìíûõ<br />

âûçîâîâ ìîæíî ïðî÷èòàòü â äîêóìåíòå UNIX<br />

Assembly Codes Development for Vulnerabilities<br />

Illustration Purposes èëè êíèãå Çóáêîâà «Àññåìáëåð<br />

— ÿçûê íåîãðàíè÷åííûõ âîçìîæíîñòåé»).<br />

Äëÿ âûçîâà ôóíêöèé òèïà îòêðûòèÿ ôàéëà ìîæíî<br />

îáðàòèòüñÿ ëèáî ê áèáëèîòåêå libc, ëèáî íåïîñ-<br />

Text<br />

ðåäñòâåííî ê ñàìîé îïåðàöèîííîé<br />

ñèñòåìå. Ïåðâûé âàðèàíò —<br />

Data ñàìûé ãðîìîçäêèé, ñàìûé ïåðåíîñèìûé<br />

è íàèìåíåå ïðèìåòíûé.<br />

... Ïîñëåäíèé — ïðîñò â ðåàëèçàöèè,<br />

íî ïðè ïåðâîì æå âçãëÿäå<br />

íà äèçàññåìáëåðíûé ëèñòèíã òóò<br />

æå áðîñàåòñÿ â ãëàçà (ïðàâèëüíûå<br />

ïðîãðàììû INT 80h íå âûçûâàþò!),<br />

ê òîìó æå îí èñïûòûâàåò<br />

ïðîáëåìû ñîâìåñòèìîñòè ñ ðàçëè÷íûìè<br />

âåðñèÿìè Linux. Âîò<br />

ld-linux.so<br />

îíà — ðàñïëàòà çà ïðîñòîòó!<br />

libm.so<br />

Ïîñëåäíèé ãèãàáàéò àäðåñíîãî<br />

libc.so<br />

ïðîñòðàíñòâà (îò àäðåñà<br />

....<br />

C0000000h è âûøå) çàíèìàþò<br />

êîä è äàííûå îïåðàöèîííîé ñèñòåìû,<br />

ê êîòîðûì ìû áóäåì îáðàùàòüñÿ<br />

òîëüêî ïîñðåäñòâîì ïðåðûâàíèÿ<br />

INT 80h èëè ÷åðåç ðàçäåëÿåìûå<br />

áèáëèîòåêè.<br />

Ñòåê íàõîäèòñÿ â íèæíèõ àäðåñàõ.<br />

Îí íà÷èíàåòñÿ ñ áàçîâîãî<br />

àäðåñà çàãðóçêè è «ðàñòåò<br />

ââåðõ» ïî íàïðàâëåíèþ ê íóëåâûì<br />

àäðåñàì. Â áîëüøèíñòâå<br />

ëèíóêñîâ ñòåê èñïîëíÿåì (òî<br />

åñòü ñþäà ìîæíî ñêîïèðîâàòü<br />

ìàøèííûé êîä è ïåðåäàòü íà<br />

íåãî óïðàâëåíèå), îäíàêî íåêîòîðûå<br />

ïàðàíîèäàëüíûå àäìèíèñòðàòîðû<br />

óñòàíàâëèâàþò çàïëàòêè, îòíèìàþùèå<br />

ó ñòåêà àòðèáóò èñïîëíÿåìîñòè, íî áîëüøîé<br />

ðàñïðîñòðàíåííîñòè îíè íå ïîëó÷èëè, è<br />

èìè ìîæíî ïðåíåáðå÷ü.<br />

[èìïëàíòàöèÿ ÷óæåðîäíîãî êîäà â ELFôàéë]<br />

Äëÿ ýêñïåðèìåíòîâ ïî èìïëàíòàöèè íàì<br />

ïîòðåáóåòñÿ æèâîé èñïîëíÿåìûé ôàéë, êîòîðûé<br />

ïðè ïîìîùè êîìïèëÿòîðà è òåêñòîâîãî ðåäàêòîðà<br />

ìû ñìîæåì èçãîòîâèòü è ñàìîñòîÿòåëüíî.<br />

Íàæìåì â Midnight Commander'å, íàáåðåì<br />

ïðîãðàììó ñëåäóþùåãî ñîäåðæàíèÿ (ñì.<br />

ëèñòèíã), çàòåì /"èìÿ-ôàéëà.c" è îòêîìïèëèðóåì<br />

åå ñâîèì ëþáèìûì gcc ñ íàñòðîéêàìè<br />

ïî óìîë÷àíèþ (gcc èìÿ-ôàéëà.c -o èìÿ-ôàéëà).<br />

[äåìîíñòðàöèîííàÿ ïðîãðàììà,<br />

â êîòîðóþ ìû áóäåì âíåäðÿòü ïîñòîðîííèé êîä]<br />

#include <br />

main()<br />

{<br />

printf("LORDI - the best group in the world!\n"\<br />

"(www.lordi.org)\nmonsters, bondage and<br />

sado-maso\n");<br />

}<br />

ìîæíî áåñïëàòíî ñêà÷àòü ñ hte.sf.net. Îí «ïåðåâàðèâàåò»<br />

ELF-ôîðìàò, â íåì åñòü ìîùíûé àññåìáëåð è ïðî-<br />

÷èå âêóñíîñòè. Êàê âàðèàíò, ìîæíî âîñïîëüçîâàòüñÿ<br />

ðåäàêòîðîì BIEW (biew.sf.net), íî îí íàìíîãî ñëàáåå.<br />

Æåëàòåëüíî èìåòü ÈÄÓ. Ëèíóõîâûé ïîðò ñîäåðæèò<br />

óäîáíûé èíòåðàêòèâíûé îòëàä÷èê â ñòèëå Turbo-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!