¦þ¹ ¼³¾Šł
¦þ¹ ¼³¾Šł
¦þ¹ ¼³¾Šł
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Þíèêñîèä<br />
ÕÀÊÅÐ\¹52\Ìàé\2003<br />
ÇÀÏÀÄËÎ Â LINUX<br />
Forb (forb@real.xakep.ru)<br />
Íà÷àòü ýòó ñòàòüþ õîòåëîñü<br />
áû ñ áàíàëüíîé,<br />
âñåì èçâåñòíîé ïîñëîâèöû:<br />
"Äåëó - âðåìÿ, ïîòåõå<br />
- ÷àñ". Âåäü ñîãëàñèñü,<br />
òåáå âðåìåíàìè õî÷åòñÿ<br />
ñäåëàòü ÷òî-òî íåõîðîøåå,<br />
äðóãèìè ñëîâàìè,<br />
óñòðîèòü êîìó-íèáóäü<br />
ïîäëÿíêó :). Åñëè òàê, òî<br />
ýòà ñòàòüÿ äëÿ òåáÿ. Èñïîëüçóÿ<br />
ôè÷è òâîåé ëþáèìîé<br />
Îñè (ÿ íàäåþñü, òû<br />
ïîíèìàåøü, î ÷åì èäåò<br />
ðå÷ü) òû ìîæåøü ðåàëüíî<br />
ïðèêîëîòüñÿ íàä òîâàðèùåì<br />
è äàæå â êàêîé-òî<br />
ñòåïåíè óäèâèòü åãî.<br />
Òîëüêî ïîìíè, ÷òî çëîé<br />
àäìèíèñòðàòîð õóæå òàòàðèíà<br />
:), ïîýòîìó îñòåðåãàéñÿ<br />
ëåòÿùèõ â òåáÿ õàáîâ<br />
èëè êëàâèàòóð.<br />
Çàïàäëî<br />
â Linux<br />
Èçó÷àåì íîâûå ïîäëÿíêè!<br />
Èòàê, ðàññìîòðèì äâå çàïîäëÿíñêèå øòó÷êè, êîòîðûå<br />
òîëüêî è æäóò ñâîþ æåðòâó. Ñ ïîìîùüþ ïåðâîé ìîæíî<br />
äîâåñòè ñâîåãî àäìèíà äî ïîëíîé àïàòèè è ìûñëè î òîì,<br />
÷òî íå ñóùåñòâóåò çàùèùåííîé ñèñòåìû, à âòîðàÿ ïðè<br />
îïðåäåëåííûõ îáñòîÿòåëüñòâàõ ìîæåò óâåñòè root-ïàðîëü.<br />
Íî îáî âñåì ïî ïîðÿäêó.<br />
Bug â LD_PRELOAD<br />
Íàçûâàòü ýòó îòëè÷èòåëüíóþ îñîáåííîñòü áàãîì óæå íå<br />
ñîâñåì ïðàâèëüíî. Áàãòðàê çíàåò î íåì, è âñå ñèñòåìû<br />
òîæå :). Íî ïîñëåäñòâèÿ, êîòîðûå îí âûçûâàåò, ìîãóò ðåàëüíî<br />
äîâåñòè òâîåãî àäìèíà äî èíôàðêòà (èëè çàïîÿ,<br />
çàâèñèò îò åãî õàðàêòåðà). Ñìûñë â òîì, ÷òî ïèøåòñÿ<br />
áèáëèîòåêà ñî ñëåäóþùèìè ôóíêöèÿìè: getuid, getgid,<br />
geteuid è getegid, âîçâðàùàþùèå 0. Ïðè óìåëîì èõ ïîäãðóæåíèè<br />
ñèñòåìà îïîçíàåò ïîëüçîâàòåëÿ êàê root. Íî ýòî<br />
òîëüêî íà ïåðâûé âçãëÿä. Íà ñàìîì äåëå, çàìåùåíèå<br />
ñèñòåìíûõ ôóíêöèé èäåò òîëüêî äëÿ íåSUIDíûõ ïðîãðàìì,<br />
òî åñòü áåç çàêðåïëåííîãî íà íèõ ôëàãà +s, ïîçâîëÿþùèõ<br />
âûïîëíÿòü áèíàðíèê c ïðàâàìè owner’à. Íî àäìèíû<br />
îáû÷íî íàðîä ëåíèâûé, áàãòðàêè ÷èòàþò ðåäêî, è<br />
ýòà ôèøêà ìîæåò âûçâàòü ó íèõ íåêîòîðîå óäèâëåíèå =).<br />
Èòàê, áëèæå ê òåëó. Äëÿ îñóùåñòâëåíèÿ ñòîëü ãðÿçíîé<br />
ìàõèíàöèè ñîçäàäèì ïðîãðàììó íà C, ïðèìåðíî ñëåäóþùåãî<br />
ñîäåðæàíèÿ:<br />
int getuid() { return (0); }<br />
int getgid() { return (0); }<br />
int geteuid() { return (0); }<br />
int getegid() { return (0); }<br />
Íå óäèâëÿéñÿ îòñóòñòâèþ â ñèøíèêå ôóíêöèè main() - åå<br />
íåò, òàê êàê ôàéë áóäåì êîìïèëèòü ñ ôëàãîì "shared",<br />
÷òî ïîçâîëèò åìó ïîäêëþ÷àòüñÿ ê äðóãèì áèíàðíèêàì.<br />
Êîìïèëèì:<br />
gcc -shared fake.c -o fake.so,<br />
ïîëó÷àÿ òåì ñàìûì ïîëíîöåííóþ áèáëèîòåêó fake.so (åñòåñòâåííî,<br />
÷òî èìÿ ñèøíèêà äîëæíî áûòü fake.c).<br />
Çàòåì âûïîëíèì íåïîñðåäñòâåííîå ïîäêëþ÷åíèå áèáëèîòåêè.<br />
Íàáåðåì ñëåäóþùóþ ñòðîêó:<br />
LD_PRELOAD=./fake.so /bin/bash<br />
È ÷òî æå ìû òåïåðü âèäèì Çàâåòíûé r00tîâûé prompt,<br />
òèïà [root@server user]#. Íè÷åãî óäèâèòåëüíîãî, ïðè îáðàáîòêå<br />
/etc/profile ñêðèïò óñïåøíî ñêóøàë ïåðåìåííóþ<br />
UID, êîòîðàÿ ñòàëà ðàâíîé íóëþ, ÷òî äàëî ïðàâî âûñòàâëÿòü<br />
prompt äëÿ ðóòà. Íî ôåéê åñòü ôåéê, ïîýòîìó ðàäîâàòüñÿ<br />
ðàíî. Ïðè âûïîëíåíèè êàêîé-ëèáî ïðèâèëåãèðîâàííîé<br />
îïåðàöèè òåáå ñêàæóò, ÷òî ó òåáÿ íåò ïðàâ. Íî<br />
âíåøíèé âèä î÷åíü âïå÷àòëÿåò, è ÿ ñïåðâà ïîäóìàë, ÷òî íà<br />
õàëÿâó ïîëó÷èë ðóòà, çàïóñòèâ îäèí åäèíñòâåííûé ôàéë :).<br />
Åñòåñòâåííî, â íåì âñå áûëî àâòîìàòèçèðîâàíî: êîìïèëÿöèÿ<br />
ïîääåëüíûõ ôóíêöèÿ+çàïóñê bash ñ áèáëèîòåêîé.<br />
Ñàìîå èíòåðåñíîå, îáðàùåíèå ê çàãðóæàåìûì ôóíêöèÿì<br />
ðàáîòàåò äëÿ âñåõ áèíàðíèêîâ áåç +s, â òîì ÷èñëå è id,<br />
ïîýòîìó æåðòâà ìîæåò ÷àñàìè ëþáîâàòüñÿ íà ñâîè ïðàâà<br />
=). Ïðè îáðàùåíèè æå ê áîëåå ñåðüåçíûì ôàéëàì, òàêèì<br />
êàê su, passwd è ò.ä. òåáÿ æäåò îáëîì-c. Äëÿ íèõ èñïîëüçóþòñÿ<br />
òîëüêî ñòàíäàðòíûå ôóíêöèè, äåëàÿ òåì ñàìûì<br />
ñèñòåìó áåçîïàñíîé. Ïîëüçû îò ýòîé øóòêè íèêàêîé, íî<br />
îíà ìîæåò áûòü óìåñòíà â êðèâûõ ñêðèïòàõ, êîòîðûå ïðîâåðÿþò<br />
ïåðåìåííóþ $UID íà íóëåâîå çíà÷åíèå :). Åñëè ýòî<br />
òàê, òî, âîçìîæíî, ñêðèïò ïîçâîëèò òåáå ñîâåðøèòü êàêèåëèáî<br />
ðóòîâûå äåéñòâèÿ. Ïîýòîìó õî÷ó äàòü íàïóòñòâèå<br />
ïðîãðàììèñòàì: íèêîãäà íå äåëàéòå ïðîñòóþ ïðîâåðêó<br />
ïðàâ ïîëüçîâàòåëÿ - âçëîìùèêè òîëüêî ýòîãî è æäóò.<br />
Õî÷åòñÿ îòìåòèòü, ÷òî ýòà ôèøêà ðàáîòàåò íå òîëüêî â<br />
Linux’å, íî è â SunOS è FreeBSD. Âîçìîæíî, â äðóãèõ<br />
ñèñòåìàõ òîæå, íî çà âûøåïåðå÷èñëåííûå ðó÷àþñü, òàê<br />
êàê ñîáñòâåííîðó÷íî òåñòèðîâàë íà íèõ.<br />
Ïèøåì ñâîé /bin/su<br />
Íà ýòîò ðàç çàéìåìñÿ áîëåå ñåðüåçíûìè âåùàìè, à òî÷íåå<br />
ïîïðîáóåì óâåñòè ïàðîëü àäìèíèñòðàòîðà ñèñòåìû,<br />
èìåÿ ïðè ýòîì ïðàâà îáû÷íîãî þçåðà (ðàçóìååòñÿ, ýòîò<br />
ãîòîâèì ëîâóøêó äëÿ þçåðà<br />
1 2 3 4<br />
82 Íüþñû Ôåððóì Inside PC_Zone Âçëîì