gorion's e-security thoughts
Wtorek, Styczeń 10, 2006, 21:50
Szczegółowe badanie i analiza pakietów TCP.
Większość z nas, pracujących w świecie e-security miała osobiście do czynienia z analizą wykazów zapory sieciowej (ang. Firewall), systemu IDS, czy też innego typu urządzenia zwiększającego bezpieczeństwo. Badanie pakietów może być trudnym zadaniem a przede wszystkim czasochłonnym. W związku z powyższym, wielu z nas preferuje automatyzację pracy sprawdzonymi narzędziami takimi jak na przykład Ethereal. Jest jednak pewien zauważalny problem przy tego typu podejściu.
PRZEDSTAWIENIE
Nawet jeśli praca z programem Ethereal dostarcza świetnych wyników analizy przy rozkładaniu pakietów oraz ich treści na fragmenty, to istnieje jedna rzecz której nigdy nie zrobi za Ciebie - Nie pomoże Ci zrozumieć pewnych kluczowych zależności, zawartych w metryce pakietów, takich jak na przykład sekwencyjność TCP. Ethereal nie zakomunikuje czy w przechwytywanym przez niego strumieniu danych brakuje pewnych pakietów. Jedyną możliwością dojścia do tego czy brakuje jest ręczna analiza każdego pojedynczego pakietu odnosząc się do wspomnianej wcześniej metryki pakietów TCP. Jeżeli wydaje Ci się to na pierwszy rzut oka mało istotne, to jesteś w błędzie. Konsultanci do spraw bezpieczeństwa audytując sieć klienta posiadać muszą kompletne rozeznanie tego co się w niej dzieje. Muszą mieć możliwość zliczenia każdego jednego pakietu przesłanego podczas ataku. Czasami przy pewnych założeniach dochodzi do porzucenia niektórych pakietów przez tcpdump czy choćby windump, szczególnie jeśli badana sieć dysponuje szybkimi łączami. Kruczek polega na tym, iż nie wiedziałbyś o tym gdyby nie świadomość opcji przeprowadzenia szczegółowej analizy pakietów. Aby mieć taką możliwość wymagana jest dogłębna wiedza na temat szczegółów dotyczących komunikacji poszczególnych protokołów, w tym przypadku protokołu TCP.
Celem tego artykułu jest uzbrojenie Cię w wiedzę, która pomoże Ci przy przeprowadzaniu testów na strumieniach oraz prawidłowe determinowanie czy w przesyle brakuje jakichkolwiek pakietów. Jest to wysoce konieczne w przypadkach, kiedy w strumieniu danych brakuje pakietów mogących zawierać kluczowe wskazania, dowódy włamania lub wrażliwe dane. Jedyny aspekt, który nie zostanie poruszony w niniejszym artykule to analiza warstwy aplikacji. Skupmy się tylko na wiedzy potrzebnej do szczegółowej analizy pakietów.
WPROWADZENIE
Artykuł ten wyjaśnia w pełni zależności pomiędzy numerami sekwencyjnymi TCP a numerami potwierdzeń. Numery te pełnią główną rolę przy transmisji pakietów. Po udanej 3-stopniowej procedurze powitalnej (handshake) zostanie wysłany pakiet z numerem sekwencyjności TCP. Będzie on pierwszym oczekiwanym przez adres docelowy numerem sekwencyjności. Aby dokładniej to zrozumieć możemy przyjąć że adres IP będący źródłem wysyła numer potwierdzenia, który jest kolejnym oczekiwanym numerem sekwencyjności TCP adresu docelowego.

Liczba podkreślona na powyższym rysunku nazywana jest "
Initial Sequence Number" -
ISN. Zawarta jest zawsze w pakiecie
SYN, przy pierwszym kroku
handshake. Sekwencja ta rozpoczyna się wysłaniem
SYN do (
192.168.0.1). "mss 1460" odnosi się do maksymalnej wielkości segmentu. Wartość 1460 mierzona jest w bajtach czyli po prostu
1460 bajtów. "mss 1460" oznacza że (
10.10.10.10) chce otrzymać nie więcej niż 1460 bajtów w każdym zadanym pakiecie z adresu (
192.168.0.1).
Następny w kolejności "
nop" jest prostą instrukcją (pad), która właściwie nic nie robi, używana jest czasami do opóźniania operacji. "
sackOK" odwołuje się do wybranych potwierdzeń informując, iż może być użyty dla danej sesji. Obie wartości "
sackOK" i "
mss" powinny być widoczne tylko i wyłącznie podczas porcji
SYN,
SYN/ACK wymiany
TCP/IP handshake, nie powinny się pojawić w porcji danych całej sesji. Ostatnią metryką jest "
win 8760" związany z ilością miejsca pamięci
bufora (w bajtach), którą dysponuje adres źródłowy (
10.10.10.10). Wartość ta nazywana jest czasami buforem odbioru (ang. Receive buffer). Możemy stwierdzić, iż powyższy pakiet jest pakietem
SYN, gdyż widzimy na wykazie "S," lecz bardziej definitywnie dopatrujemy się klasy pakietu po jego
wartości hex wynoszącej
02. Hex jako
0x.... wskazuje że następujące po nim liczby przedstawione są w formacie szesnastkowym. Przyjrzyjmy się teraz dokładniej pakietowi
SYN i
offsetom w których się znalazł (nagłówek TCP).
OBJAŚNIENIE FLAG TCP
Czterema bazowymi protokołami omawianej tematyki są
IP,
TCP,
UDP i
ICMP. Jeśli chcemy zliczyć bajty w rdzeniu nagłówka pakietu musimy zacząć od
0 nie od
1, jak ma to czasami miejsce. Flagi
FIN,
SYS,
RST,
PSH,
ACK,
URG znajdują się w
13-stym bajcie
offsetu licząc od
0 w nagłówku pakietu
TCP. Każda z tej flagi posiada przydzieloną dla siebie wartość, niezależnie od systemu liczbowego w którym jest przez Ciebie przedstawiana zawsze wynosi tyle samo. To z kolei daje nam możliwość zapisania maski bitów do pliku binarnego (loga), lub bezpośredniego zrzutu z
tcpdump.

Diagram przedstawiony powyżej obrazuje decymalne wartości dla poszczególnych flag w
13-stym bajcie offsetu nagłówka
TCP. Z takimi informacjami możemy bez problemu zaplanować filtr
BPF zawierający maskę bitów i wyciągnąć wszystkie pakiety wraz z odpowiadającymi im flagami. Na przykład (korzystając z powyższego diagramu) jeśli chcielibyśmy zapisać wykaz z filtrem
BPF i bitmaską tak, aby wyświetlała nam tylko pakiety
PSH/ACK wykorzystalibyśmy poniższą metodę:

Podnosząc wartości obu flag
ACK i
PSH doszliśmy do wartości decymalnej równej
24, . Dlaczego łącznie akurat
24? - Gdyż nakazaliśmy
tcpdump aby spojrzał w nagłówek
TCP do
13-stego bajtu offsetu licząc od
0, sprawdził czy bajt ten posiada dziesiętną wartość równą
24 i w rezultacie wyświetlił ją nam. Pamiętajmy o tym że pracę filtru wykonuje się na pliku binarnym, który został uprzednio całkowicie zalogowany (obrazek poniżej). Filtru przedstawionego powyżej użylibyśmy celem nakazania
tcpdump zapisywania tylko pakietów z powyższego
IP włączając kombinację flag równą
24. Natomiast filtrem przedstawionym poniżej podziałamy na istniejący już plik binarny (
log) który nazwaliśmy "
bleh".

Zakładamy że plik "
bleh" jest zalogowanym uprzednio zapisem sesji pomiędzy dwoma przyjętymi adresami
IP. Posiadając taki plik binarny mamy możliwość dodania przeciwko niemu interaktywnie filtra
bpf/bitmaski. Wykonując powyższą komendę, nakazujemy
tcpdump aby przyjrzał się przyjętym warunkom, zapisując ostatecznie całą zawartość w formacie
ASCII do pliku "
bleh2". Pamiętajmy że zawsze lepiej jest logować bezpośrednio do pliku binarnego, który daje nam potem możliwość zrzucenia zawartości do formatu
ASCII. Pliku binarnego z formatu
ASCII już nie odtworzymy, a więc wniosek jest oczywisty. Wiele narzędzi takich jak
Snort czy
Tcpdump będzie pracowało tylko z plikami binarnymi i definitywnie odrzucą parsowanie plików w formacie
ASCII.
WRACAJĄC DO BADAŃ PAKIETÓW
Przyjrzyjmy się drugiemu pakietowi:

Drugim krokiem w procedurze
handshake jest
SYN/ACK. Zauważyć możemy
ISN +1 (podkreślone na ilustracji). Posiadamy dodatkowo numer sekwencyjności TCP -
727167800:727167800.
Przejdźmy do kroku trzeciego:

Pakiet ten jest ostatnim krokiem całości 3-stopniowej procedury.
ACK oznaczony jest jako "
." (zaraz za portem docelowym
25 adresu
IP).
ACK, następuje w formie numerów nie wskazując jako iż jest
13-stym bajtem offsetu nagłówka TCP licząc od zera, więc w rzeczywistości jest to numer
potwierdzenia + 1, następują po nim kolejne numery. To jest ważny punkt do zapamiętania.

Mamy teraz nasz adres (
192.168.1.1) wysyłający dane, na co wskazuje nam "P" z powyższego obrazka a także wartość
13-stego bajtu dla flagi
ACK. Zauważmy że
13-sty bajt w nagłówku TCP to tam gdzie znajdują się wszystkie flagi:
SYN,
ACK,
RST,
FIN,
URG,
PSH. Zdajemy sobie sprawę również z tego że nie mamy możliwości wizualizacji reprezentacji flagi
ACK w nagłówku pakietu na powyższym obrazku, ale widać go w bajcie
5018. Dokładniej, "
18" w
hex, który reprezentuje
24 w
dec. Liczba ta odwołująca się do
PSH i
ACK jest sumowana i wynosi
24.

W pakiecie tym widzimy adres (
10.10.10.10) uzyskujący odpowiedź, potwierdzając jednocześnie przyjęcie porcji danych, czyli pakietu przedstawionego powyżej. Pole z numerami zapytania zostały podkreślone na obrazku. Spoglądając na numer potwierdzenia
727167830 wiemy jednocześnie że adres (
192.168.1.1) otrzymał kompletną zawartość pakietu.

Kluczowym do zapamiętania tutaj jest fakt że numer "
ACK" zadanego pakietu jest kolejną oczekiwaną sekwencją numerów
TCP, które pasują numerom "
ACK" pakietu przedstawionego dwa obrazki wyżej. Jest właśnie tak jak powinno być. Pakiet przedstawiony na powyższym obrazku to ten który odpowiada, przyjmując zapytanie pakietu a nie ten, który wysyła dane (gdyż brak numerów sekwencyjnych). Jeśli dochodzi do wysyłania danych automatycznie warunkuje to załączenie numerów sekwencyjnych. Jeśli pakiet wysyła dane posiada on oba numery,
sekwencyjny i numer "
ACK". Także możemy oczekiwać że adres (
192.168.1.1) wykorzysta numery "
ACK" jako przyjęte numery sekwencyjne
TCP.

W tym pakiecie adres (
192.168.1.1) przyjmuje od pakietu z poprzedniego obrazka tylko potwierdzenie. Dlatego nie zawiera numeru sekwencyjnego
TCP. Upewnijmy się, przyglądając się numerowi sekwencyjnemu z poprzedniego obrazka i żauważmy że numer ten znajduje się po prawej, czyli potwierdzenie numeru "
ACK" naszego pakietu. Innymi słowy, pakiet mówi 'odebrałem Twoje dane i przetworzyłem je.'.

Na obrazku przedstawionym powyżej widać że posiadamy dwa numery,
sekwencyjny i "
ACK". Dlatego wiemy że używany jest do potwierdzenia danych jak również do wysyłania odpowiedzi. W tym przypadku nasz numer sekwencyjny TCP składa się z numeru "
ACK" widzianego dwa obrazki wyżej. Sytuacja jest również taka jak powinna być. Zapamiętajmy że numer "
ACK" pakietu jest kolejną oczekiwaną sekwencją numerów TCP przez pakiet innego adresu
IP. Mamy więc ten sam numer "
ACK" i jest to prawidłowe zachowanie.

Pakiet ten jest tylko potwierdzeniem na co wskazuje "
ACK". Nie zawiera numerów sekwencyjnych TCP gdyż nie było wysyłanych żadnych danych. Innymi słowy, (
10.10.10.10) mówi 'dzięki 192.168.1.1, otrzymałem Twoje dane.".

W tym pakiecie widzimy oba numery, sekwencyjny
TCP i numer "
ACK". Dla jasności, numer sekwencyjny oparty jest na numerze "
ACK". Ma to sens bo wcześniejszy pakiet był tylko potwierdzeniem odebranych danych, więc taki sam numer "
ACK" widziany jest także tutaj. Mając wgląd w sytuację nie trudno wywnioskować jakim wyzwaniem musi być dla intruza chęć wtargnięcia na sesję korzystając z metody przewidywania numerów sekwencyjnych
TCP.

Powyższy obrazek przedstawia kolejny pakiet potwierdzenia otrzymania danych. Oznaczenie pakietu "S" klasyfikuje go jako
SYN, a oznaczenie pakiet "P" to
PSH. W tym przypadku pakiet "
ACK" znajduje się na diagramie jako "
." (widoczny za portem adresu docelowego).
KONKLUZJA
Jest to przewodnik, którego celem jest przybliżenie szczegółów komunikacji oraz zależności pomiędzy numerami sekwencyjności
TCP a numerami
potwierdzeń. Pełne zrozumienie tego artykułu pomoże Ci w przypadku, w którym wymagane będą od Ciebie szczegółowe badania poszczególnych pakietów. Nawet jeśli nie, to napewno wpływnie pozytywnie na Twoją ogólną wiedzę o
TCP/IP.
AUTOR
Paweł Jabłoński
http://www.gorion.org/
Dokładny adres do "
Szczegółowe badanie i analiza pakietów TCP."
Artykuł jest ogólnodostępny. Przełożony z oryginału autorstwa
Dona Parkera i
Mike Suesa dostępnego
tutaj. Obowiązują jednakże prawa własności intelektualnej. Prawo do publikacji całości, lub chociaż jego części możliwe jest tylko wtedy, gdy zawierać będzie informacje o autorze przełożenia oraz link do bazowego adresu, czyli
gorion's e-security thoughts. Jeżeli poruszona tematyka jest Ci bliska, wyrażasz chęć wzbogacenia jej o swoje doświadczenia, przemyślenia oraz materiały, proszę o kontakt.
Sobota, Styczeń 07, 2006, 04:24
Metody obchodzenia systemów IDS na przykładzie Snort NIDS.
W pierwszej kolejności przyjrzyjmy się atakom opartym na fragmentacji, bazującym na problematyce różnego czasu przekroczenia limitu (ang. Timeout) reasemblacji względem poszczególnych systemów operacyjnych. Kolejnym krokiem będzie analiza zależności czasu reasemblacji w tych systemach, oraz pokazanie w jaki sposób może być pomocna przy obchodzeniu IDS. Istnieje także kilka znanych technik opartych na nakładaniu się fragmentów. Artykuł ten nawiązuje do ataków odwołujących się bezpośrednio do pól TTL (ang. Time to Live). Na przykładzie Snort NIDS dowiemy się jak radzić sobie z atakami tego typu, jakie parametry konfiguracji wymaga aby skutecznie zapobiec wymienionym atakom, itd.
PRZEDSTAWIENIE
Próby obchodzenia systemów wykrywania włamań IDS zaobserwować można praktycznie od zawsze, czyli momentu w którym się pojawiły. Generalnie większość tych systemów posiada wsparcie dla reasemblacji TCP i ogólną zdolność monitoringu sesji. Niektóre z ataków DoS wykorzystują techniki przepełniania buforów strumieni pamięci podręcznej systemu IDS, tak aby monitorowany strumień danych został uszkodzony. Tzw. 'Insersion Attack' wysyła pakiet do systemu końcowego czyli ofiary, który zostaje automatycznie odrzucony. IDS uważa strumień za prawidłowy, gdyż dostaje on różne potoki i adresy docelowe. Podsumowując, w metodzie tej następuje wysyłanie pakietów, które IDS odrzuca, lecz adres końcowy akceptuje dając ponownie różne potoki do IDS'a i ofiary. Aby ataki tego typu były efektywne, atakujący posługuje się fragmentacją pakietu, gdzie potok zostaje podzielony na mniejsze części składowe (fragmenty). Poniżej opisane zostaną niektóre z tych ataków.
REASEMBLACJA FRAGMENTACJI
Zacznijmy od wyjaśnienia kilku pojęć.
- FRAGMENTACJA. Jeśli pakiet jest za duży dla zasadniczego dowiązania warstwy, może on zostać podzielony przez każdy router (dopóki takie zachowanie nie jest wyłączone) na wielokrotne fragmenty. Taką sytuację nazywamy fragmentacją. System musi trzymać fragmenty w pobliżu, czekać na ich dalsze części składowe i w rezultacie złożyć w całość (czyt. reasemblacja). Pakiet/fragment powinien mieć wartość TTL większą od 1 aby przejść poprawnie przez router. W momencie kiedy router otrzyma pakiet/fragment z TTL równym 1, zmniejsza jego wartość o 1. W rezultacie wartość TTL = 0 i efektem tego jest odrzucenie pakietu/fragmentu z ICMP o treści 'Time Exceeded In Transit' (ICMP type=11, code=0).
- PRZEKROCZENIE LIMITU CZASU REASEMBLACJI FRAGMENTU IP. Maksymalny okres czasu, w którym nie-zreasemblowany pakiet zostanie przytrzymany zanim zostanie porzucony (flushowany) zależy od systemu operacyjnego. Zauważmy że technika ta używana jest również przy 'OS fingerprinting'. Tutaj polecić mogę program p0f, autorstwa Michała Zalewskiego. IDS, który reasembluje fragmenty TCP posiada timer. Na przykład, Snort domyślnie za przekroczenie limitu czasu przeznaczonego na reasemblację fragmentów pakietu uważa 60 sekund, po których początkowy fragment zostanie odrzucony i cały potok porzucony. Wykorzystuje się do tego preprocesor Frag2 lub Frag3. Parametr upływu limitu czasu na reasemblację możliwy jest do skonfigurowania w pliku konfiguracyjnym "snort.conf".
- BŁĄD ICMP PRZY PRZEKROCZENIU LIMITU CZASU NA REASEMBLACJĘ FRAGMENTÓW. Zgodnie z treścią RFC-792 jeśli adres składa pakiet i nie może ukończyć całkowitej jego reasemblacji z powodu brakujących fragmentów w określonym limicie czasu; odrzuca datagram wysyłając 'Time Exceeded Message' (ICMP type=11, code=1). Jeżeli fragment zero jest niedostępny, wtedy 'Time Exceeded Message' musi zostać rozesłany do wszystkich.
Przedyskutujmy różne schematy ataków, celem obejścia systemów wczesnego wykrywania. Wszystkie przedstawione scenariusze zostały przeprowadzone przez specjalistów i developerów
NIDS. Pierwsze dwa przypadki ataków które opiszę, wykryte zostały przez
Dan Kaminsky i są najbardziej znanymi jeśli chodzi o metody obchodzenia
Snort.
PRZYPADEK 1. PRZEKROCZENIE LIMITU CZASU REASEMBLACJI IDS JEST MNIEJSZE NIŻ TIMEOUT OFIARY
SCENARIUSZ ATAKU:
Przyjmijmy że przekroczenie limitu czasu reasemblacji pakietu systemu
IDS wynosi
15 sekund a monitorowanymi przez niego maszynami są systemy
Linux, na których domyślne przekroczenie tego samego limitu wynosi
30 sekund. Jak widać na obrazku przedstawionym poniżej, już po wysłaniu pierwszego fragmentu atakujący może wysłać drugi fragment z opóźnieniem
15 sekund, jednakże ciągle w granicach
30 sekund.

Podczas trwania tego ataku ofiara próbuje złożyć fragmenty, które
IDS podczas przekroczenia limitu czasu fragmentacji wyrzucił. Pamiętać musimy że już przy drugim otrzymanym przez
IDS fragmencie zostanie on odrzucony, jako że system uprzednio stracił pierwszy fragment (Timeout). Dlatego ofiara w dalszym ciągu kompletuje reasemblację fragmentów odbierając udany atak, przy którym
IDS o niczym nie wie.
PRZYPADEK 2. PRZEKROCZENIE LIMITU CZASU REASEMBLACJI IDS JEST WIĘKSZE NIŻ TIMEOUT OFIARY
SCENARIUSZ ATAKU:
Snort za przekroczenie limitu czasu na reasemblację fragmentów
pakietu domyślnie przyjmuje
60 sekund. Porównajmy do
Linux/FreeBSD gdzie jest
30 sekund. W tej sytuacji także możliwe jest obejście
IDS'a. Jak przedstawia poniższy obrazek, zakładamy że atakujący fragmentuje pakiet celem ataku na cztery segmenty:
1,2,3,4.

Atakujący wysyła
Frag2 i
Frag4 z podrobioną zawartością, która zostaje odebrana przez system
IDS i ofiarę.
IDS czeka do momentu w którym nastąpi przekroczenie limitu czasu reasemblacji fragmentów u ofiary odrzucając początkowe fragmenty, zamykając całość w
30 sekundach.
Piękno tego ataku polega na tym że ofiara nie otrzymała jeszcze fragmentu
1 a odrzuca 'po cichu' fragmenty i nie zgłosi błądu
ICMP. Następnie atakujący wysyła pakiet (1,3) jako legalną zawartość (payload). Na tym etapie ofiara posiada tylko fragmenty (
1,3) gdzie system
IDS posiada fragmenty (
1,2,3,4). Pamiętajmy o tym że fragmenty (2,4) wysłane przez atakującego miały podrobioną
zawartość. Jako że
IDS dysponuje już kompletem czterech fragmentów (
1,2,3,4) dokona on reasemblacji
TCP. Fragmenty
2 i
4 są podrobione, także ich wyliczona
suma kontrolna będzie błędna i oznacza odrzucenie przez
IDS. W tym momencie ofiara posiada tylko fragmenty (
1,3). Jeśli atakujący wyśle teraz ponownie fragmenty (
2,4) już z prawidłową zawartością, jaką uzyskał przy poprzedniej reasemblacji odrzuconych fragmentów,
IDS będzie posiadał te dwa fragmenty (
2,4 z prawidłową zawartością). Ofiara natomiast posiadać będzie wszystkie cztery fragmenty (
1,2,3,4) z prawidłową zawartością, co w rezultacie pozwoli na ukończenie reasemblacji, odczytanie pakietu - czyli udany atak.
ATAKI OPARTE NA TTL
Ataki tego typu wymagają od atakującego rozległej wiedzy na temat topologii sieci ofiary. Informacje takie możemy uzyskać używając takich narzędzi jak
traceroute, który udzieli nam informacji o ilości
routerów pomiędzy atakującym a ofiarą. Obrazek przedstawiony poniżej przedstawia schemat ataku opartego o tematykę
TTL.

Jak widać na powyższym obrazku pomiędzy
IDS a ofiarą znajduje się router, daje to możliwość uzyskania wystarczających informacji. Atakujący w tym przypadku przeprowadza atak dzieląc go na trzy fragmenty. Wysyła fragment
1 z dużą wartością
TTL, który odebrany zostaje przez
IDS oraz ofiarę. Jednakże, fragment
2' wysłany przez atakującego posiada
TTL równy
1 jak również podrobioną
zawartość. Fragment
2' zostaje odebrany przez
IDS lecz odrzucony z wartością
TTL zredukowaną do
0 przez router (sytuowany pomiędzy
IDS a ofiarą).
Atakujący wysyła następnie fragment
3 z poprawną wartością
TTL. To zmusza system
IDS do przeprowadzenia przez
IDS reasemblacji
TCP z wykorzystaniem fragmentów (
1,2',3), gdzie ofiara w dalszym ciągu oczekuje trzeciego fragmentu. Atakujący ostatecznie wysyła trzeci fragment już z prawidłową zawartością a ofiara reasembluje całość trzech fragmentów (
1,2,3) padając celem udanego ataku. Na tym etapie
IDS posiada tylko fragment
3 i ma już etap reasemblacji i flushowania strumienia za sobą.
METODA ZACHODZĄCYCH NA SIEBIE FRAGMENTÓW (NAKŁADANIE)
Istnieje jeszcze jedna ciekawa klasa ataków bazująca na przekroczeniu limitu czasu reasemblacji z wykorzystaniem
nakładania na siebie fragmentów. Oczywistym jest, iż reasemblacja fragmentów wygląda inaczej dla poszczególnych systemów operacyjnych. Opierając się na tym założeniu możemy wyodrębnić
pięć różnych polityk reasemblacji, których szczegółówy opis wyczytać możemy w artykule nazwanym '
Active mapping: resisting NIDS Evanion without alerting traffic' autorstwa
Paxsona &
Shankara. Przyjrzyjmy się w tym artykule tylko dwóm z pięciu znanych polityk reasemblacji. A dokładniej: 'pierwszej' i 'ostatniej'.
Pierwsza. To tam gdzie system operacyjny podaje oryginalny fragment z określonym
offsetem. Na przykład: Windows 95/98/NT4/W2K/XP/2003.
Ostatnia. Gdzie system operacyjny podaje wynikający z
następstwa fragment z określonym
offsetem. Na przykład:
Cisco IOS.
'Pierwszą' i 'ostatnią' politykę fragmentacji przedstawia poniższy obrazek.

Atakujący przeprowadza atak rozkładając go na
4 fragmenty. Najpierw wysyła fragment
1, fragment
2, fragment
3, które oba systemy operacyjne akceptują. Następnie atakujący wysyła fragment
2', fragment
3' i fragment
4. Tutaj zawartość
2' i
3' jest różna od
2 i
3.
Offset, jego długość w połączeniu z innymi polami nagłówka pakietu
IP pozostają takie same. Przy takim założeniu, system operacyjny przeprowadzający reasemblację fragmentów opartą na polityce
pierwszej dokona reasemblacji fragmentów
1,2,3,4. System operacyjny przeprowadzający reasemblację fragmentów opartą na polityce
ostatniej zreasembluje pakiety
1,2',3',4.
Odwzorowanie polityk fragmentacji dla poszczególnych systemów operacyjnych przedstawia poniższy obrazek.

Bardziej szczegółowe opisy dotyczące polityk reasemblacji fragmentów można znaleźć w
dokumentacji Snort.
PRZECIWDZIAŁANIE WYMIENIONYM TYPOM ATAKÓW UŻYWAJĄC SNORT
Snort jest niewątpliwie najbardziej znanym i powszechnie używanym systemem
IDS. Dostarcza rozwiązań, które radzą sobie z metodami obchodzenia systemów wykrywania włamań odnosząc się także do ataków przedstawionych w tym artykule. Preprocesor
Frag3 jest docelowym
modułem defragmentującym
IP w
Snort. Nawiązując do wzmianki umieszczonej na oficjalnej stronie Snort.org, "Frag3 ma na celu zastąpienie
modułu defragmentującego
Frag2, został zaprojektowany tak aby umożliwił:
- Szybszą pracę modułu, optymalniejsze rozwiązania przetwarzania danych.
- Model technik anty-evasion (obchodzenie) oparty na docelowej maszynie.
Preprocesor Frag3 z implementacją polityki fragmentacji celu, która daje użytkownikowi możliwość identyfikacji metod reasemblacji fragmentów, oraz właściwą wartość przekroczenia limitu czasu dla fragmentu, który pojawił się w poszczególnym docelowym adresie
IP lub
podsieci. To sprawia że
IDS dostarcza reasemblacji fragmentów w taki sam sposób jak zrobiłyby to na przykład różne adresy
IP sieci domowej. Załóżmy że posiadamy całą sieć (
192.168.0.X) która składa się tylko i wyłącznie z maszyn na
OpenBSD i chcemy skonfigurować
Snort tak, aby korzystał z odpowiedniej dla tej sieci polityki reasemblacji. Musimy oczywiście włączyć obsługę preprocesora
Frag3 w pliku konfiguracyjnym i desygnować odpowiedni typ fragmentacji, jak poniżej:

Od tej chwili każde nakładane fragmenty, które
Snort zobaczy przeznaczone dla podsieci (
192.168.0.X) zostaną zreasemblowane używając polityki przeznaczonej dla '
BSD'. Pole fragmentacji przekroczenia limitu czasu zostanie automatycznie ustawione tak aby odpowiadać tej obowiązującej w systemach
BSD. Podobnie,
Snort zreasembluje wszystkie fragmenty przeznaczone dla podsieci (
10.1.30.X) używając polityki fragmentacji 'pierwszej'. Preprocesor
Frag3 daje także możliwość precyzowania pola min_ttl, w którym możemy ustawić minimalną akceptowaną wartość
TTL dla fragmentu. Jeśli istnieje router pomiędzy
IDS a podsiecią (
192.168.0.X), wtedy określając minimalną akceptowaną wartość
TTL dla fragmentu przeznaczonego dla tej podsieci jako
2, możemy zapobiec atakom opartym na obchodzeniu z wykorzystaniem technik
TTL.
KONKLUZJA
Pozdrowienia dla Sumit Siddharth, Network Intelligence India (
NII) za inspirację, bez niego nie byłoby tego artykułu. Reasumując, przyjrzeliśmy się w nim kilku typom ataków skierowanym w
IDS, różnych metodologii zawartych w poszczególnych technikach. Powaga sytuacji oraz obowiązkowa wiedza na temat różnorodności przeprowadzania reasemblacji fragmentów w różnych systemach operacyjnych jest oczywista. Dowiedzieliśmy się również, iż atakom tego typu zapobiec można wykorzystując silnik preprocesora
Frag3 w programie
Snort, oraz poprawnej jego konfiguracji. Scenariusze różnych ataków zaprezentowanych w artykule są rezultatem analiz w oparciu o różne metody obchodzenia systemów
IDS. Ukazana została również istota i powaga mechanizmu reasemblacji opartej na nakładaniu fragmentów, oraz przekroczenia limitu czasu przy reasemblacji w różnych systemach.
AUTOR
Paweł Jabłoński
http://www.gorion.org/
Dokładny adres do "
Metody obchodzenia systemów IDS na przykładzie Snort NIDS."
Artykuł jest ogólnodostępny. Przełożony z oryginału autorstwa wspomnianego już
Sumita Siddharta dostępnego
tutaj. Obowiązują jednakże prawa własności intelektualnej. Prawo do publikacji w obecnej formie całości artykułu, lub chociaż jego części możliwe jest tylko wtedy, gdy zawierać będzie informacje o autorze przełożenia oraz link do bazowego adresu, czyli
gorion's e-security thoughts. Techniki obchodzenia
IDS będą przeze mnie w dalszym ciągu rozbudowywane, jeżeli jesteś zainteresowany współpracą na tej płaszczyźnie, proszę o kontakt.
REFERENCJE
- Autor oryginału, Sumit Siddharth, Network Intelligence India (NII)
- Insertion, Evasion and Denial Of Service: Eluding Network Intrusion detection System
- RFC-792, Narzędzie traceroute, Snort Frag3
- p0f - OS fingerprinting tool, Michał Zalewski
- Active Mapping: Resisting NIDS Evasion Without Altering Traffic
1 2 » XML
Administrator
Paweł Jabłoński
Wizyt od 05.01.2006: 10724
Powered by XHTML 1.0 Strict