..:: grsecurity i libsafe - z czym to sie je? ::..


wstep:

Wsrod uzytkownikow nie posiadajacych doswiadczenia w kwestii zabezpieczania systemu panuje opinia, iz firewall stanowi swietna ochrone przed, jak to ladnie mawiaja "specjalisci" z firmy M, "hakerami"; w istocie jesli nie mamy u siebie serwera, poprawnie skonfigurowany firewall moze uczynic nasz komputer "niewidzialnym" (stealth) w sieci (brak odpowiedzi na zadanie echa, wszystkie porty zamkniete, brak raportowania stanu portow); schody zaczynaja sie jednak, gdy chcemy u siebie zrobic serwer; taka maszyna nie tylko musi odpowiadac na zadanie echa ale musi ona takze posiadac przynajmniej jeden otwarty port; otwarty, czyli taki, na ktorym np. demon ftp prowadzi nasluch; samo zbindowanie przez program portu nie oznacza jeszcze, ze usluga bedzie juz dostepna z zewnatrz - jesli netfiltr nie wpuszcza na bindowany port pakietow (-j DROP lub REJECT), nikomu nie uda sie polaczyc z demonem; musimy zatem utworzyc regule, ktora bedzie wpuszczac pakiety (-j ACCEPT) tak, by dotarly one do demona; tutaj konczy sie nasze "bezpieczenstwo", stajemy sie jawnie podatni na wlam; od tego momentu firewall nie decyduje juz praktycznie w ogole o naszym bezpieczenstwie; oczywiscie mozna dzieki niemu, w mniejszym lub wiekszym stopniu, zabezpieczyc sie przed pewnymi typami atakow, jednak ja zajme sie opisaniem metod zapobiegania skutkom atakow majacych na celu penetracje zasobow systemu, docelowo - uzyskanie praw jego administratora.


Reklama


emaksem przez sendmejl, czyli jak oni to robia:

Typowy atak polega najczesciej na "wstrzyknieciu" w dzialajacy juz program tzw. shellcode'u, czyli kodu wygenerowanego w wyniku kompilacji programu napisanego w asemblerze a majacego najczesciej na celu uruchomienie interpretera polecen powloki; w praktyce wyglada to tak, ze nadpisuje sie adres powrotu z funkcji, takim, ktory wskazuje na obszar pamieci, w ktorym znajduje sie podstawiony "obcy" kod; efektem wykonania "wstrzyknietego" kodu jest uruchomienie np. /bin/sh; po odkryciu bledu w aplikacji pisze sie tzw. exploita, czyli program, ktory znaleziona dziure wykorzysta; pol biedy jesli wyexploitowany program dziala z prawami zwyklego usera, gorzej gdy jest to program uruchomiony z prawami root'a (!) lub ktorego wlascicielem jest root a program ma ustawiony SUID i uruchomil go zwykly user; wtedy wlamywacz od razu uzyskuje uprawnienia administratora i moze zrobic wszystko, na co ma ochote.

grsecurity:

domyslnie obszar pamieci oznaczony jako do odczytu/zapisu jest takze wykonalny, czyli jesli np. w wyniku ataku buffer overflow podstawimy kod w taki obszar pamieci, to zostanie on wykonany - exploit zadziala; z pomoca przychodzi nam lata na kernel grsecurity a konkretnie stanowiacy jej integralna czesc PaX; implementuje ona m.in. niewykonywalny stos/sterte dzieki temu skutecznie zapobiega wykonaniu "wstrzyknietego" przez intruza kodu;

  • 1. late pobieramy ze strony projektu grsecurity
  • 2. jesli jest taka potrzeba, to pobieramy pelne zrodlo najnowszego kernela np. linux-2.6.13.tar.bz2
  • 3. pobieramy late na kernel, tak by update'owac go do obslugiwanej wersji np. patch-2.6.13.4.bz2 dla grsec 2.1.7
  • 4. paczujemy: bzip2 -dc patch-2.6.13.4.bz2 | patch -p1 && gzip -dc grsecurity-2.1.7-dokladnawersja.gz | patch -p1
  • 5. wykonujemy make xconfig lub make menuconfig
  • 6. w sekcji "Security" pojawily sie nowe podkategorie: "Grsecurity" i "PaX"
  • 7. konfigurujemy ...
  • 8. $ make
  • 9. # make modules_install && make install

przy konfigurowaniu grsec zalecam wybranie domyslnego poziomu "Low" co zablokuje podstawowe funcje ochronne jako wlaczone i powlaczanie kolejnych opcji zgodnie z uznaniem - nalezy pamietac, ze zle skonfigurowane grsec moze m.in. uniemozliwic wlaczenie srodowiska graficznego Xorg; nie bede tutaj opisywac kazdej funkcji poniewaz nie zamierzam kopiowac opisow znajdujacych sie w sieci;

jesli chodzi o opcje PaX, to nalezy wybrac jeden ze sposobow markowania binariow; po skompilowaniu jadra chronione beda tylko aplikacje wskazane explicite przy uzyciu narzedzia paxctl (ew. chpax); pliki markuje sie konkretnymi atrybutami; obowiazkowo markujemy wszyskie pliki z ustawionym SUID - mozna je wyszukac wpisujac `find / -perm +4000 -print`; np. `/sbin/paxctl -PMRXS /bin/ping`; -M wywali Xorg wiec piszemy wtedy -PmRXS; oprocz plikow suid'owych markujemy takze wszystkie binaria, ktore prowadza nasluch na portach, np.: kadu, amule, vsftpd.


wlaczanie PaX'a


wybor sposobow markowania


najwazniejsze funkcje PaX'a


dodatowe "bajery"

libsafe:

Libsafe dzieki preloadzie niejako przeslania "niebezpieczne" funkcje z libc ich "bezpiecznymi" wariantami i jest w stanie w wiekszosci przypadkow wykryc probe naduzycia, chroni zatem (przynajmniej w teorii) przed wiekszoscia atakow typu buffer overflow i format string; "bezpieczna biblioteka" nie jest w stanie chronic binariow statycznie zlinkowanych z biblioteka libc; instalacja biblioteki jest bardzo prosta; po pobraniu i rozpakowaniu libsafe wydajemy polecenia:

  • 1. $ make
  • 2. # make install
zakonczenie:

Hybryda grsecurity+libsafe stanowi niezle zabezpieczenie systemu; chociaz nigdy nie mozemy czuc sie w 100% bezpieczni, to mamy dzieki niej znacznie wiekszy poziom bezpieczenstwa niz ten, prezentowany przez system zaraz po jego zainstalowaniu; na sam koniec zamieszczam wyniki dzialania exploitow dostarczonych z libsafe (w systemie dziala PaX i libsafe):

Kod:
[user@localhost exploits]$ ./t1 
This program tries to use strcpy() to overflow the buffer. 
If you get a /bin/sh prompt, then the exploit has worked. 
Press any key to continue... 
Libsafe version 2.0.16 
Detected an attempt to write across stack boundary. 
Terminating /home/amdfanatyk/src/libsafe-2.0-16/exploits/t1. 
    uid=500  euid=500  pid=18893 
Call stack: 
    0x51251973  /lib/libsafe.so.2.0.16 
    0x51251ab6  /lib/libsafe.so.2.0.16 
    0x804858b   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t1 
    0x80485b1   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t1 
    0x51119de1  /lib/libc-2.3.5.so 
Overflow caused by strcpy() 
Unicestwiony 
[user@localhost exploits]$ 
Kod:
[user@localhost exploits]$ ./t1w 
This program tries to use strcpy() to overflow the buffer. 
If you get a /bin/sh prompt, then the exploit has worked. 
Press any key to continue... 
Libsafe version 2.0.16 
Detected an attempt to write across stack boundary. 
Terminating /home/amdfanatyk/src/libsafe-2.0-16/exploits/t1w. 
    uid=500  euid=500  pid=19328 
Call stack: 
    0x55637973  /lib/libsafe.so.2.0.16 
    0x55637ccd  /lib/libsafe.so.2.0.16 
    0x804858d   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t1w 
    0x80485b3   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t1w 
    0x554ffde1  /lib/libc-2.3.5.so 
Overflow caused by wcscpy() 
Unicestwiony 
[user@localhost exploits]$ 
Kod:
[user@localhost exploits]$ ./t3 
This program will exec() a new program.  The new program will 
overflow the buffer using strcpy(). 
If you get a /bin/sh prompt, then the exploit has worked. 
Press any key to continue... 
Libsafe version 2.0.16 
Detected an attempt to write across stack boundary. 
Terminating /home/amdfanatyk/src/libsafe-2.0-16/exploits/t3. 
    uid=500  euid=500  pid=7679 
Call stack: 
    0x5661a973  /lib/libsafe.so.2.0.16 
    0x5661aab6  /lib/libsafe.so.2.0.16 
    0x80485be   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t3 
    0x80486bc   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t3 
    0x564e2de1  /lib/libc-2.3.5.so 
Overflow caused by strcpy() 
Unicestwiony 
[user@localhost exploits]$ 
Kod:
[user@localhost exploits]$ ./t3w 
This program will exec() a new program.  The new program will 
overflow the buffer using strcpy(). 
If you get a /bin/sh prompt, then the exploit has worked. 
Press any key to continue... 
Libsafe version 2.0.16 
Detected an attempt to write across stack boundary. 
Terminating /home/amdfanatyk/src/libsafe-2.0-16/exploits/t3w. 
    uid=500  euid=500  pid=25982 
Call stack: 
    0x54701973  /lib/libsafe.so.2.0.16 
    0x54701ab6  /lib/libsafe.so.2.0.16 
    0x80485f2   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t3w 
    0x8048705   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t3w 
    0x545c9de1  /lib/libc-2.3.5.so 
Overflow caused by strcpy() 
Unicestwiony 
[user@localhost exploits]$ 
Kod:
[user@localhost exploits]$ ./t4 
This program will fork() child process, and the child 
will overflow the buffer using strcpy(). 
If you get a /bin/sh prompt, then the exploit has worked. 
Press any key to continue... 
Libsafe version 2.0.16 
Detected an attempt to write across stack boundary. 
Terminating /home/amdfanatyk/src/libsafe-2.0-16/exploits/t4. 
    uid=500  euid=500  pid=23167 
Call stack: 
    0x56e2a973  /lib/libsafe.so.2.0.16 
    0x56e2aab6  /lib/libsafe.so.2.0.16 
    0x80485ee   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t4 
    0x804868a   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t4 
    0x56cf2de1  /lib/libc-2.3.5.so 
Overflow caused by strcpy() 
parent process terminating 
[user@localhost exploits]$ 
Kod:
[user@localhost exploits]$ ./t4w 
This program will fork() child process, and the child 
will overflow the buffer using strcpy(). 
If you get a /bin/sh prompt, then the exploit has worked. 
Press any key to continue... 
Libsafe version 2.0.16 
Detected an attempt to write across stack boundary. 
Terminating /home/amdfanatyk/src/libsafe-2.0-16/exploits/t4w. 
    uid=500  euid=500  pid=4405 
Call stack: 
    0x50f43973  /lib/libsafe.so.2.0.16 
    0x50f43ab6  /lib/libsafe.so.2.0.16 
    0x8048626   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t4w 
    0x80486d7   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t4w 
    0x50e0bde1  /lib/libc-2.3.5.so 
Overflow caused by strcpy() 
parent process terminating 
[user@localhost exploits]$ 
Kod:
[user@localhost exploits]$ ./t5 
This program tries to use strcat() to overflow the buffer. 
If you get a /bin/sh prompt, then the exploit has worked. 
Press any key to continue... 
Libsafe version 2.0.16 
Detected an attempt to write across stack boundary. 
Terminating /home/amdfanatyk/src/libsafe-2.0-16/exploits/t5. 
    uid=500  euid=500  pid=2527 
Call stack: 
    0x51162973  /lib/libsafe.so.2.0.16 
    0x51162fa1  /lib/libsafe.so.2.0.16 
    0x80485ac   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t5 
    0x80485d5   /home/amdfanatyk/src/libsafe-2.0-16/exploits/t5 
    0x5102ade1  /lib/libc-2.3.5.so 
Overflow caused by strncat() 
Unicestwiony 
[user@localhost exploits]$ 
Kod:
[user@localhost exploits]$ ./t6 
This program tries to use scanf() to overflow the buffer. 
If you get a /bin/sh prompt, then the exploit has worked. 
Press any key to continue... 
Unicestwiony 
[user@localhost exploits]$ 
Kod:
[user@localhost exploits]$ ./canary-exploit 
This program tries to use printf("%n") to overwrite the 
return address on the stack. 
If you get a /bin/sh prompt, then the exploit has worked. 
Press any key to continue... 
Unicestwiony 
[user@localhost exploits]$ 
Kod:
[user@localhost exploits]$ ./exploit-non-exec-stack 
This program demonstrates how a (stack) buffer overflow 
can attack linux kernels with *non-executable* stacks. 
This is variation on return-int-libc attack. 
If you get a /bin/sh prompt, then the exploit has worked. 
Press any key to continue... 
Unicestwiony 
[user@localhost exploits]$ 

Jak widac w przypadku exploitow: t6, canary-exploit, exploit-non-exec-stack nie zadzialalo libsafe; programy zostaly zabite dzieki ochronie PaX'a.



Autorem artykulu jest
amdfanatyk
amdfanatyk [malpka] o2 [kropa] pl
gg: 5111550
FALF Player
Strona domowa

Uwa¿asz, ¿e prezentowane przez nas informacje s± u¿yteczne? Pomó¿ nam je wypromowaæ!

  • dodaj do flakera
  • blipnij o tym
Kana³ RSS
Co na forum?
Jak odzyskaæ...
Pêtla foreach
poszukuje po...
Problem z fu...
poszukuje do...
ServerShell status: dzia³a
[zaló¿ konto]
Koszulki z nadrukiem
Subskrypcja
Je¶li chcesz byæ powiadamiany o nowo¶ciach na stronie, wpisz tu swój e-mail

RSS

Dodaj do Google