W kolejnych dwóch artykułach przyjrzymy się temu, w jaki sposób działa nowoczesny Next-Generation IPS. Artykuły te po to by były przystępne dla szerokiego grona czytelników, będą zawierały pewnego rodzaju uproszczenia czy pominięcia. Celowo pominę też niuanse implementacji funkcjonalności na platformach poszczególnych producentów, dzięki czemu przedstawiony opis będzie możliwie generyczny i niezależny od platformy. Zależy mi na tym, aby każdy czytelnik niezależnie od swojego zaawansowania znajomości różnych technologii IT i wiedzy z obszaru bezpieczeństwa był w stanie zrozumieć, jak działają urządzenia NGIPS i dlaczego potencjalnie nie są one w 100-procentach skuteczne.

Pamiętajmy też o bardzo ważnym rozróżnieniu: IDS (ang. Intrusion Detection System) działa w trybie pasywnym, poza głównym strumieniem ruchu. Kopia całego ruchu sieciowego jest przekazywana do IDS poprzez technologie SPAN (Switched Port Analyzer) lub RSPAN (Remote SPAN). Gdy IDS wykryje podejrzaną aktywność, wysyła alert do administratorów sieci. Administrator decyduje, jakie działania podjąć – może to być zgłoszenie do zespołu bezpieczeństwa, przegląd logów lub ręczne zablokowanie atakującego adresu IP w firewallu. IPS (ang. Intrusion Prevention System) umieszczony jest inline, bezpośrednio w ścieżce ruchu między siecią wewnętrzną a Internetem. Każdy pakiet przepływający przez sieć musi przejść przez IPS. Pozycja inline umożliwia IPS natychmiastowe działanie – jeśli system wykryje zagrożenie, może wstrzymać przesyłanie złośliwych pakietów zanim dotrą do celu.

Proces przetwarzania pakietu w IPS

Gdy pakiet przychodzi do IPS, przechodzi przez kolejne etapy przetwarzania. Każdy etap jest krytyczny dla dokładności wykrywania.

Etap 1: Dekodowanie pakietu

Pakiet przychodzący trafia do modułu dekodowania, który wyodrębnia nagłówki warstw 2-4 oraz dane aplikacji. System rozpoznaje typ protokołu (TCP, UDP, ICMP), port źródłowy i docelowy oraz adresy IP. Następnie IPS inicjuje śledzenie sesji – jeśli to pierwszy pakiet z danego źródła lub kierunku, system tworzy nowy wpis w tabeli stanu sesji.

Etap 2: Preprocessing i normalizacja

  • Ruch sieciowy przychodzący do IPS może być obfuskowany przez atakujących. Obfuskacja to celowe ukrywanie prawdziwej natury połączeń. Chodzi o utrudnienie inspekcji, cenzury i detekcji przez IPS. Najpopularniejsze techniki obfuskacji to padding i morphing rozmiarów. szum tła i cover-traffic, losowanie timingów i opóźnień, segmentacja i fragmentacja, manipulacja nagłówkami, udawanie innych protokołów czy steganografia w payloadzie. Aby wyeliminować część z nich już na wstępnym etapie analizy IPS musi zmienić pakiety do formy kanonicznej, którą będzie mógł analizować. Różne metody obfuskacji adresowane są na poszczególnych etapach analizy. Co do zasady proces normalizacji obejmuje kilka działań:
    • Defragmentacja pakietów IP. Jeśli atakujący rozbił atak na wiele małych fragmentów IP, IPS zmontuje je z powrotem przed poddaniem analizie.
    • Reassemblacja strumieni TCP. IPS czeka na wszystkie pakiety tworzące daną sesję TCP i komponuje je w prawidłowej kolejności, uwzględniając numery sekwencyjne.
    • Dekodowanie zbiorów danych. Niektóre dane mogą być kodowane – np. URL zawierając %63%67%69%2d%62%69%6e zamiast cgi-bin. IPS odkodowuje takie dane, aby znormalizować je do postaci, którą będzie mógł porównać z sygnaturami.
    • Usuwanie opcji TCP i IP anomalii. Pakiety zawierające anomalne flagi protokołu mogą być zmieniające, aby uniemożliwić odpowiednie działanie detektora.

Te i inne zabiegi mogą być przez IPS wykonywane bardziej lub mniej optymalne, czyli w obciążający procesor urządzenia sposób. Poszczególni producenci wprowadzają różne metody optymalizacji tego procesu, aby zaoszczędzić czas jak i zasoby urządzenia.

Etap 3: Wykrywanie zagrożeń

Po przetworzeniu pakietu IPS aplikuje kilka sposobów detekcji zagrożeń. Zazwyczaj, aby zoptymalizować proces dzieje się to równolegle.

Sygnatury

Sygnatury to reguły definiujące znane ataki. Baza sygnatur w nowoczesnych systemach IPS zawiera dziesiątki tysięcy wpisów. Każda sygnatura zawiera wzorzec do dopasowania, na przykład ciąg znaków charakterystyczny dla konkretnego exploitu. Spójrzmy na poniższy przykład:

UNION SELECT to metoda pozwalająca atakującemu na dołączenie wyników dodatkowych zapytań SQL do oryginalnego zapytania. Przykładowo. Gdy aplikacja wykonuje kwerendę:

SELECT product_id, product_name, price FROM products WHERE category = 'Electronics’;

A atakujący chce wykraść dane z tabeli users. Jeśli zna liczbę kolumn w oryginalnym zapytaniu (3), to wstrzykuje drugą kwerendę:

SELECT username, password, email FROM users WHERE '1’=’1′;

Korzysta do połączenia dwóch kwerend operator UNION. Finalna kwerenda ma zatem postać:

SELECT product_id, product_name, price FROM products WHERE category = 'Electronics’ UNION SELECT username, password, email FROM users WHERE '1’=’1′;

Atakujący wykonując takie zapytanie ma nadzieję, że baza danych zwróci zarówno produkty jak i dane użytkowników, co atakujący zobaczy na stronie.

Systemy IPS aby wykryć zagrożenie będą szukać ciągów regularnych w przetwarzanych pakietach. Konkretna sygnatura (reguła) jaka może być stosowana w systemie IPS do wykrywania tego ataku może mieć następującą postać:

/(\%27)|(\’)\s*UNION\s+SELECT/ix

Nie ma w tym żadnej magii, to zwykły regex 😉 Ta sygnatura szuka ciągu: apostrof, opcjonalnie białe znaki, UNION, białe znaki, SELECT. Jest to charakterystyczny wzorzec UNION-based SQL Injection. Jeżeli chcesz dowiedzieć się więcej o budowie tego regex-a, to poproś ChatGPT o jego rozbicie na części. Wykonanie tego regex-pa na kwerendzie atakującego zwróci ciąg:

’ UNION SELECT

A to samo w sobie powoduje już wyzwolenie sygnatury i podjęcie akcji dla niej przewidzianej.

Na koniec dodam, dla osób z zaawansowaną wiedzą z zakresu bezpieczeństwa i baz danych – przytoczona kwerenda nie jest oczywiście w pełni poprawna. Może być co prawda uznana za składniowo poprawną w języku SQL. Formalnie parser SQL ją przyjmie, jeśli liczba i typ kolumn w obu SELECT-ach się zgadzają. Nazwy nie muszą się zgadzać, ale typy danych muszą. W typowej bazie (np. MySQL, PostgreSQL) te kolumny mają różne typy, więc zapytanie spowoduje błąd typu „operand type mismatch” lub „incompatible types in UNION” i nie zwróci ona oczekiwanej przez atakującego wartości.

Operowanie sygnaturami to tylko jeden z poziomów bezpieczeństwa, jakie oferują nam IPS-y. O kolejnych w następnym wpisie.