Reguły sygnaturowe w Snort i Suricata
Pisanie i odczytywanie reguł sieciowych
Reguły sygnaturowe w Snort i Suricata to bezpłatna lekcja Cyber Security Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cyber Security Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.
Snort i Suricata
Snort i Suricata to dwa najważniejsze silniki IDS/IPS o otwartym kodzie źródłowym. Korzystają w dużej mierze z kompatybilnego języka reguł, dlatego reguła napisana dla jednego z nich zwykle działa również w drugim.
Suricata oferuje wielowątkowość, wbudowane parsery protokołów, ekstrakcję plików i rozbudowane logowanie (EVE JSON); Snort 3 podobnie unowocześnił własny silnik. Jednorazowa nauka składni reguł pozwala sprawnie pracować z oboma rozwiązaniami.
Anatomia reguły
Każda reguła składa się z dwóch części: nagłówka i ujętego w nawiasy ciała zawierającego opcje. Nagłówek określa działanie, protokół i kierunek ruchu, a ciało definiuje, co należy dopasować i jak zgłosić wynik.
alert tcp $EXTERNAL_NET any -> $HOME_NET 80 ( \
msg:"WEB suspicious request"; \
content:"/admin.php"; http_uri; \
sid:1000001; rev:1; )Pola nagłówka
Nagłówek jest odczytywany od lewej do prawej:
- action — alert, drop, reject, pass
- protocol — tcp, udp, icmp, ip (lub protokoły aplikacyjne w Suricata: http, dns, tls)
- source IP/port i destination IP/port
- direction —
->jednokierunkowy lub<>dwukierunkowy
Zmienne takie jak $HOME_NET i $EXTERNAL_NET pochodzą z konfiguracji, dzięki czemu reguły pozostają przenośne między lokalizacjami.
drop tcp any any -> $HOME_NET 22 ( msg:"SSH blocked"; sid:1000002; rev:1; )Akcje: Alert a Drop
Akcja określa sposób działania IDS lub IPS dla danej reguły:
alert— rejestruje zdarzenie i wysyła powiadomienie, ale nie zatrzymuje ruchu (IDS)drop— po cichu odrzuca pakiet (IPS, tylko w trybie inline)reject— odrzuca pakiet i wysyła reset TCP lub komunikat ICMP o nieosiągalnościpass— jawnie zezwala na ruch, pomijając późniejsze reguły
Ten sam silnik działa jako IDS lub IPS w zależności od tego, czy został wdrożony w trybie inline oraz jakich akcji Państwo używają.
Dopasowywanie treści
Słowo kluczowe content dopasowuje wzorzec bajtów w ładunku. Tekst umieszcza się w cudzysłowie, a dane binarne zapisuje w potokach w postaci szesnastkowej.
Słowa kluczowe kotwiczące dopasowanie zwiększają jego precyzję: offset, depth, distance i within ograniczają miejsce, w którym może pojawić się wzorzec, co poprawia zarówno dokładność, jak i wydajność.
alert tcp any any -> $HOME_NET any ( \
msg:"Malware magic bytes"; \
content:"|4D 5A|"; offset:0; depth:2; \
sid:1000003; rev:1; )Bufory sticky
Nowoczesne reguły dopasowują wzorce do buforów uwzględniających protokół, a nie do surowego strumienia. Po użyciu słowa kluczowego bufora kolejne dopasowania content dotyczą tej części przeanalizowanego protokołu.
http_uri— URI żądaniahttp_header— nagłówki żądania lub odpowiedzihttp_user_agent— User-Agenttls_sni/dns_query— nazwa serwera TLS / zapytanie DNS
Jest to znacznie bardziej niezawodne niż wyszukiwanie podciągu w całym pakiecie.
alert http any any -> any any ( \
msg:"Suspicious user agent"; \
http.user_agent; content:"sqlmap"; nocase; \
sid:1000004; rev:1; )PCRE i nocase
Gdy stałe ciągi znaków nie wystarczają, pcre udostępnia wyrażenia regularne zgodne z Perlem. Warto połączyć tani obliczeniowo filtr wstępny content z pcre, aby wyrażenie regularne było uruchamiane wyłącznie dla pakietów spełniających wstępne kryteria, co pozwala zachować wydajność.
Modyfikator nocase sprawia, że dopasowanie content nie uwzględnia wielkości liter. Jest to ważne w przypadku nagłówków i pól kontrolowanych przez użytkownika, których wartości napastnicy mogą dowolnie zmieniać.
alert http any any -> $HOME_NET any ( \
msg:"SQLi attempt in URI"; \
http.uri; content:"select"; nocase; \
pcre:"/union\s+select/i"; \
sid:1000005; rev:1; )Słowa kluczowe flow i stanu
Opcja flow ogranicza działanie reguły do określonego stanu i kierunku połączenia, zmniejszając liczbę fałszywych alarmów oraz koszt obliczeniowy.
established— tylko w ustanowionych sesjach TCPto_server/to_client— kierunek żądania lub odpowiedzi
Dopasowywanie odpowiedzi serwera wyłącznie dla ustanowionych połączeń i w kierunku to_client zapobiega reagowaniu na przypadkowe lub sfałszowane pakiety.
alert tcp $HOME_NET any -> $EXTERNAL_NET any ( \
msg:"Beacon response"; \
flow:established,to_client; \
content:"|00 01 02 03|"; \
sid:1000006; rev:1; )Metadane: sid, rev, msg, reference
Opcje porządkowe ułatwiają utrzymanie zestawu reguł:
sid— unikalny identyfikator sygnatury (dla reguł lokalnych należy używać wartości 1000000+)rev— numer wersji, zwiększany przy każdej edycjimsg— treść alertu wyświetlana analitykomclasstype— kategoria wpływająca na priorytetreference— odnośnik do CVE lub biuletynu bezpieczeństwa
Stałe wartości sid i zwiększane numery rev pozwalają śledzić reguły i je aktualizować bez zakłócania działania pulpitów nawigacyjnych oraz wyciszeń.
alert tcp any any -> $HOME_NET 445 ( \
msg:"EternalBlue exploit attempt"; \
flow:to_server,established; content:"|FF|SMB"; \
classtype:attempted-admin; \
reference:cve,2017-0144; sid:1000007; rev:2; )Różnice między Snort i Suricata
Choć reguły są ze sobą kompatybilne, silniki różnią się możliwościami:
- Suricata jest wielowątkowa, natywnie analizuje protokoły aplikacyjne, wyodrębnia pliki, oblicza JA3 i generuje dane EVE JSON
- Snort 3 ma przepisany silnik zoptymalizowany pod kątem wydajności oraz modularnego systemu wtyczek
Niektóre słowa kluczowe są specyficzne dla danego silnika. Suricata dodaje słowa kluczowe warstwy aplikacji (tls.sni, dns.query, http.method) oraz funkcje dataset/flowbits. Udostępniając reguły między silnikami, należy kierować się ich najniższym wspólnym mianownikiem albo utrzymywać osobne zestawy reguł dla każdego silnika.
Filtrowanie według częstotliwości i progi
Aby reguła nie zalewała konsoli alertami, należy zastosować progi. detection_filter zadziała dopiero po wystąpieniu N zdarzeń w określonym oknie czasowym, a threshold z opcją limit ogranicza liczbę alertów.
Jest to niezbędne przy wykrywaniu ataków brute-force i skanowania, gdy pojedyncze zdarzenie nic nie znaczy, lecz seria zdarzeń stanowi sygnał.
alert tcp any any -> $HOME_NET 22 ( \
msg:"SSH brute force"; flow:to_server; \
detection_filter:track by_src, count 5, seconds 60; \
sid:1000008; rev:1; )Szybkie sprawdzenie
Proszę przeczytać regułę i przewidzieć jej działanie.
Podsumowanie
Potrafią już Państwo odczytywać i tworzyć sygnatury Snort/Suricata:
- Reguła składa się z nagłówka (akcja, protokół, źródło/cel, kierunek) oraz opcji treści
- Akcja określa działanie IDS lub IPS:
alert,drop,reject,pass contentwraz z offset/depth oraz dopasowaniem szesnastkowym wyszukuje bajty w ładunku- Bufory sticky (http.uri, tls.sni, dns.query) dopasowują pola przeanalizowanego protokołu
pcreinocaseobsługują zmienne wzorceflowogranicza regułę do określonego stanu i kierunkusid/rev/msg/referenceułatwiają utrzymanie reguł- Progi ograniczają szum powodowany przez ataki brute-force i skanowanie
Następnie: wykrywanie zagrożeń bez żadnej sygnatury.
Często zadawane pytania
Czy lekcja „Reguły sygnaturowe w Snort i Suricata” jest bezpłatna?
Tak — pełny tekst „Reguły sygnaturowe w Snort i Suricata” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cyber Security Academy, przejdź na CoddyKit PRO. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Reguły sygnaturowe w Snort i Suricata”?
Pisanie i odczytywanie reguł sieciowych Ćwiczysz Cyber Security Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cyber Security Academy?
Nie wymagamy żadnego doświadczenia. Cyber Security Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Reguły sygnaturowe w Snort i Suricata”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cyber Security Academy?
Tak. Każda lekcja Cyber Security Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Koncepcje IDS i IPS
- Reguły sygnaturowe w Snort i Suricata
- Wykrywanie anomalii i zachowań
- Dostrajanie i wdrażanie