- Menu g³ówne
- Newsy
- Forum
- Hackme 1.0
- Hackme 2.0
- Hackme 3.0
- Audiobooki
- Videoarty
- B³edy w PHP
- Linux
- Kurs PHP
- Kurs MySQL
- Kurs Smarty

- JavaScript
- ReverseCraft
- Assembler
- Delphi
- Pozostale
- Materia³y
- Artyku³y
- Security
- Linux
- Software
- Protoko³y
- Poka¿ wszystkie
..:: 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.
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
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æ!
- Subskrypcja
- Je¶li chcesz byæ powiadamiany o nowo¶ciach na stronie, wpisz tu swój e-mail




Shell status: 

