Według statystyk, wolumen ruchu sieciowego wzrasta o około 50% każdego roku. Prowadzi to do zwiększonego obciążenia sprzętu i tym samym zwiększa wymagania dotyczące wydajności IDS/IPS. Można kupić drogie, specjalistyczne urządzenia, ale jest tańsza opcja — wdrożenie jednego z systemów open source. Wielu początkujących administratorów uważa, że zainstalowanie i skonfigurowanie darmowego IPS jest dość trudne. W przypadku Suricata nie jest to do końca prawda — instalacja i rozpoczęcie odparcia typowych ataków z zestawem darmowych reguł można zrealizować w kilka minut.
Po co potrzebne jest kolejne otwarte IPS?
Przez długi czas standardowym systemem był Snort, który rozwijany jest od końca lat dziewięćdziesiątych, dlatego pierwotnie był jednowątkowy. Przez lata wprowadzono do niego wszystkie nowoczesne funkcje, takie jak wsparcie dla IPv6, możliwość analizy protokołów aplikacyjnych czy uniwersalny moduł dostępu do danych.
Podstawowy silnik Snort 2.X nauczył się współpracować z wieloma rdzeniami, ale pozostał jednowątkowy, co uniemożliwia optymalne wykorzystanie możliwości nowoczesnych platform sprzętowych.
Problem rozwiązano w trzeciej wersji systemu, ale jego przygotowanie zajęło tak dużo czasu, że na rynku pojawiła się napisana od podstaw Suricata. W 2009 roku zaczęto ją rozwijać jako wielowątkową alternatywę dla Snort z wbudowanymi funkcjami IPS. Kod rozpowszechniany jest na licencji GPLv2, ale partnerzy finansowi projektu mają dostęp do zamkniętej wersji silnika. Niektóre problemy ze skalowalnością w pierwszych wersjach systemu występowały, ale szybko je rozwiązano.
Dlaczego Suricata?
Suricata ma kilka modułów (jak i Snort): przechwytywania, zbierania, dekodowania, wykrywania i wyjścia. Domyślnie przechwycony ruch jest dekodowany jednym wątkiem, co bardziej obciąża system. W razie potrzeby wątki można podzielić w ustawieniach i rozłożyć na procesory — Suricata doskonale optymalizuje się pod konkretne urządzenia, choć to już nie jest poziom HOWTO dla początkujących. Warto również zwrócić uwagę na zaawansowane narzędzia inspekcji HTTP w Suricata oparte na bibliotece HTP. Mogą one być także wykorzystane do protokołowania ruchu bez wykrywania. System wspiera także dekodowanie IPv6, w tym tunele IPv4-in-IPv6, IPv6-in-IPv6 i inne.
Do przechwytywania ruchu można używać różnych interfejsów (NFQueue, IPFRing, LibPcap, IPFW, AF_PACKET, PF_RING), a w trybie Unix Socket można automatycznie analizować przechwycone przez inny sniffer pliki PCAP. Ponadto modułowa architektura Suricata ułatwia podłączanie nowych elementów do przechwytywania, dekodowania, analizy i przetwarzania pakietów sieciowych. Ważne jest również, że w Suricata blokowanie ruchu odbywa się za pomocą wbudowanego filtra systemu operacyjnego. W GNU/Linux dostępne są dwa tryby pracy IPS: przez kolejkę NFQUEUE (tryb NFQ) i przez zero copy (tryb AF_PACKET). W pierwszym przypadku pakiet wchodzący do iptables jest kierowany do kolejki NFQUEUE, gdzie może być przetwarzany na poziomie użytkownika. Suricata sprawdza go według swoich reguł i wydaje jeden z trzech werdyktów: NF_ACCEPT, NF_DROP i NF_REPEAT. Pierwsze dwa nie wymagają wyjaśnienia, a ostatni pozwala oznaczyć pakiety i wysłać je na początek bieżącej tabeli iptables. Tryb AF_PACKET różni się wyższą wydajnością, ale nakłada na system pewne ograniczenia: musi mieć dwa interfejsy sieciowe i działać jako brama. Zablokowany pakiet po prostu nie jest przesyłany na drugi interfejs.
Ważną cechą Suricaty jest możliwość korzystania z rozwiązań dla Snorta. Administrator ma dostęp do zbiorów reguł Sourcefire VRT oraz OpenSource Emerging Threats, a także do komercyjnych Emerging Threats Pro. Ujednolicony wynik można analizować za pomocą popularnych backendów, obsługiwane są także wyjścia w formacie PCAP i Syslog. Ustawienia systemu i reguły przechowywane są w plikach w formacie YAML, który jest łatwy do odczytania i może być przetwarzany automatycznie. Silnik Suricaty rozpoznaje wiele protokołów, dlatego w regułach nie ma potrzeby odnosić się do numeru portu. Ponadto w regułach Suricaty aktywnie stosuje się koncepcję flowbits. Do śledzenia aktywacji używane są zmienne sesji, które umożliwiają tworzenie i zastosowanie różnych liczników i znaczników. Wiele IDS traktuje różne połączenia TCP jako odrębne byt, przez co mogą nie zauważyć związków między nimi, które świadczą o rozpoczęciu ataku. Suricata stara się widzieć całość, dlatego w wielu przypadkach rozpoznaje złośliwy ruch rozproszony po różnych połączeniach. O jej zaletach można mówić długo, lepiej przejdźmy do instalacji i konfiguracji.
Jak zainstalować?
Będziemy instalować Suricatę na serwerze wirtualnym działającym pod kontrolą Ubuntu 18.04 LTS. Wszystkie polecenia należy wykonywać jako superużytkownik (root). Najbezpieczniejszym rozwiązaniem jest połączenie z serwerem za pomocą SSH jako zwykły użytkownik, a następnie zastosowanie narzędzia sudo w celu podniesienia uprawnień. Na początek należy zainstalować pakiety, które będą nam potrzebne:
sudo apt -y install libpcre3 libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libmagic-dev libcap-ng-dev libjansson-dev pkg-config libnetfilter-queue-dev geoip-bin geoip-database geoipupdate apt-transport-httpsPodłączamy zewnętrzne repozytorium:
sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt-get updateInstalujemy najnowszą stabilną wersję Suricaty:
sudo apt-get install suricataW razie potrzeby edytujemy pliki konfiguracyjne, zmieniając domyślną nazwę eth0 na rzeczywistą nazwę zewnętrznego interfejsu serwera. Ustawienia domyślne znajdują się w pliku /etc/default/suricata, a użytkownikowskie w /etc/suricata/suricata.yaml. Konfiguracja IDS w dużej mierze ogranicza się do edycji tego pliku konfiguracyjnego. Zawiera on wiele parametrów, których nazwy i przeznaczenie zgadzają się z odpowiednikami w Snort. Składnia jest jednak zupełnie inna, ale plik jest znacznie łatwiejszy do przeczytania niż konfiguracje Snort, a zresztą dobrze skomentowany.
sudo nano /etc/default/suricata 
i
sudo nano /etc/suricata/suricata.yaml 
Uwaga! Przed uruchomieniem warto sprawdzić wartości zmiennych w sekcji vars.
Aby zakończyć konfigurację, trzeba zainstalować suricata-update do aktualizacji i pobierania reguł. Zrobienie tego jest dość proste:
sudo apt install python-pip
sudo pip install pyyaml
sudo pip install <a href="https://github.com/OISF/suricata-update/archive/master.zip">https://github.com/OISF/suricata-update/archive/master.zip</a>
sudo pip install --pre --upgrade suricata-updateNastępnie musimy uruchomić polecenie suricata-update, aby zainstalować zestaw reguł Emerging Threats Open:
sudo suricata-update 
Aby wyświetlić listę źródeł reguł, wykonujemy następujące polecenie:
sudo suricata-update list-sources 
Aktualizujemy źródła reguł:
sudo suricata-update update-sources 
Ponownie przeglądamy zaktualizowane źródła:
sudo suricata-update list-sourcesW razie potrzeby można włączyć dostępne darmowe źródła:
sudo suricata-update enable-source ptresearch/attackdetection
sudo suricata-update enable-source oisf/trafficid
sudo suricata-update enable-source sslbl/ssl-fp-blacklistPo tym należy ponownie zaktualizować reguły:
sudo suricata-updateInstalację i wstępną konfigurację Suricata w Ubuntu 18.04 LTS można uznać za zakończoną. Następnie zaczyna się najciekawsza część: w następnym artykule połączymy serwer wirtualny z siecią biurową przez VPN i zaczniemy analizować cały przychodzący i wychodzący ruch. Szczególną uwagę poświęcimy blokowaniu ataków DDoS, aktywności złośliwego oprogramowania oraz prób exploitacji podatności w usługach dostępnych z publicznych sieci. Dla zobrazowania, przeprowadzone zostaną symulacje ataków najpopularniejszych typów.
Źródło: habr.com
