Systemy wykrywania i zapobiegania włamaniom
Rafał Mielniczuk i Marcin Niemiec
Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie
Ćwiczenie dla przedmiotu:
Bezpieczeństwo Systemów Informatycznych
Spis treści
1
Wstęp
1
2
Instalacja
2
3
Ważne pliki Snort
2
4
Reguły - wprowadzenie
2
5
Ćwiczenia
3
5.1
Reguły nagłówka i pól podstawowych protokołów . . . . . . . . . . . . . . . . .
4
5.2
Sprawdzanie zawartości pakietów . . . . . . . . . . . . . . . . . . . . . . . . . .
4
5.3
Wyrażenia regularne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
5.4
Opcje depth, distance i offset . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
5.5
Opcje flow bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
5.6
Przetwarzanie zdarzeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1
Wstęp
Sieciowy system wykrywania włamań (ang. Intrusion Detection System - IDS) jest urządze-
niem lub programem komputerowym, który monitoruje aktywności w sieci w celu wykrycia
podejrzanych aktywności lub naruszeń polityk bezpieczeństwa. Jeśli takowe wystąpią zostanie
podjęta wcześniej zdefiniowana akcja, jak np. wysłanie wiadomości do administratora, zapi-
sanie podejrzanych pakietów do pliku, lub nawet zmiana reguł firewalla aby zablokować ruch
z podejrzanego adresu IP. Ostatnia funkcjonalność jest obecna w systemach wykrywania i
zapobiegania włamaniom (ang. Intrusion Detection and Prevention System - IDPS).
Obecnie spotykane są dwa typy systemów wykrywania włamań. W pierwszym ruch sie-
ciowy jest monitorowany w poszukiwaniu charakterystycznych binarnych wzorców, które są
podobne do znanych ataków. Są to systemy wykrywania włamań w oparciu o sygnatury (ang.
signature-based intrusion detection system). Drugi typ, wykorzystuje historię lub statystykę
ruchu w sieci. Jeśli przechwycony zostanie pakiet lub ruch który odbiega od normalnego wzor-
ca, zostanie zgłoszony alarm. Są to systemy wykrywania włamań wykrywające anomalie (ang.
anomaly-based intrusion detection system).
Snort jest popularnym i otwarto-źródłowym systemem wykrywania i zapobiegania włama-
niom. Obecna wersja Snort (2.9) integruje analizę sygnatur, protokołów i anomalii.
1
2
Instalacja
$ sudo apt-get update
$ sudo apt-get install snort
Instalacja i konfiguracja programów niezbędnych do wykonania tego ćwiczenia jest za-
prezentowana na przykładzie dystrybucji Ubuntu 12.04 i Snort w wersji 2.9.2 (dostępny w
Ubuntu 12.04). Jeśli wymagane programy są na twoim stanowisku zainstalowane i popraw-
nie skonfigurowane możesz opuścić tą sekcję i kontynuować wykonywanie ćwiczenia (Sekcja
4). Procedura instalacji Snort może wymagać podania adresu sieci lokalnej w notacji CIDR ,
np. 192.168.1.0/24. Jeśli Snort będzie używany na interfejsie lokalnym wystarczy w notacji
CIDR podać 127.0.0.0/8.
3
Ważne pliki Snort
/var/log/snort Zawiera pliki z logami i alarmami. Pliki alarmów są plikami tekstowymi, pli-
ków logów są w formacie pcap i możesz otworzyć je np. używając programów Wireshark
lub tcpdump.
/etc/snort/snort.conf Domyślny plik konfiguracyjny. Ustawia opcje pracy Snort i włącza
pliki z sygnaturami reguł.
/etc/snort/rules - Katalog z sygnaturami reguł.
4
Reguły - wprowadzenie
Jednym z zadań Snort jest wykonanie pewnej akcji jeśli jakaś reguła pasuje do otrzymanego
pakietu. Reguły są zdefiniowane przeważnie w jednej linii, np:
Listing 1: Przykładowa reguła #1
drop icmp any any -> any any
Jednokierunkowy operator -> ustala adres po lewej jako adres źródłowy i adres po pra-
wej jako docelowy. Dwukierunkowy operator <> nie różnicuje kierunków. Powyższa reguła
sprawi, że Snort zablokuje każdy przechwycony pakiet ICMP
1
. Ogólny format reguł wygląda
następująco:
nagłówek reguły (opcje reguły)
gdzie nagłówek reguły określa podstawowe informacje jak protokół, adres i port:
akcja protokół adres port kierunek adres port (opcje reguły)
Analizując listing 1 zgodnie z formatem mamy: Snort zablokuje pakiet (drop) jeśli jest
pakietem ICMP (icmp) z arbitralnymi adresami źródłowymi (any) i docelowymi (any). Opcje
reguły nie zostały użyte. Opcje numeru portu mają sens tylko dla protokołów TCP i UDP.
Dla protokołów IP i ICMP należy użyć any. Adresy mogą być podane w notacji CIDR a porty
mogą zostać podane w postaci przedziału lub z operatorem negacji !, np.
1
Aby Snort rzeczywiście zablokował pakiet wymagana jest odpowiednia konfiguracja i uruchomienie progra-
mu.
2
Listing 2: Przykładowa reguła #2
alert udp any any -> 192.168.2.0/24 !1:1024 \
(msg: "UDP packet on port > 1024 detected"; sid:1000000;)
Zgodnie z listingiem 2 Snort zgłosi alarm dla każdego pakietu UDP wysłanego na adres
192.168.2.0/24 i numer portu docelowego > 1024. Dodatkowo alarm będzie opatrzony ko-
munikatem “UDP packet on port > 1024 detected” i numerem sygnatury (sid) równym
1000000.
Numery sid < 100 zarezerwowane są na przyszłe użycie, numery 100 <= sid < 1000000
przeznaczone są na reguły dostarczone ze Snort. Dla użytkowników na lokalne reguły pozostają
numery sid >= 10000000.
Opcje reguły zapisywane w nawiasie definiują zadanie do wykonania jeśli nagłówek reguły
pasuje do przechwyconego pakietu. Na listingu 2 było to wyświetlenie komunikatu
2
. Mogą się
składać się z kilku pozycji zawsze zakończonych średnikiem:
nagłówek reguły (pozycja1;pozycja2;pozycja3;pozycja4;)
W przypadku skomplikowanych reguł dla przejrzystości można zapisać je w wielu liniach
używając znaku nowej linii lub backslash i nowej linii (Patrz listing 2). Więcej informacji na
temat reguł i użycia Snort można znaleźć w [2, 3, 4].
5
Ćwiczenia
Ćwiczenia zostaną przeprowadzone z minimalną konfiguracją Snort. W tym celu stwórz poniż-
sze pliki (pliki /tmp/snort.conf i /tmp/exercises exemplary.rules mogą być skopiowane
ze strony internetowej):
$ touch /tmp/snort.conf /tmp/exercises_exemplary.rules /tmp/exercises.rules
Lising 3 przedstawia minimalną i zalecaną zawartość pliku konfiguracyjnego Snort potrzeb-
ną do wykonania tego ćwiczenia. Konfiguracja ta włącza preprocesor strumienia, zarówno dla
protokołu TCP jak i UDP, oraz załącza dwa pozostałe poprzednio stworzone pliki. Preprocesor
strumienia umożliwia analizowanie sesji pakietów zamiast pojedyńczej analizy pakietów, np.
połączenie TCP.
Listing 3: Zawartość pliku konfiguracyjnego Snort
preprocessor stream5_global: \
track_tcp yes, \
track_udp yes, \
track_icmp no
preprocessor stream5_tcp: timeout 60
preprocessor stream5_udp: timeout 60
include /tmp/exercises.rules
include /tmp/exercises_exemplary.rules
Przed przystąpieniem do wykonywania ćwiczeń zatrzymaj domyślną instancję Snort:
2
W opisywanej wersji Snort nadanie identyfikatora sygnatury wydaje się obligatoryjne dla wyświetlania
komunikatu.
3
$ sudo service snort stop
Następnie uruchom Snort poniższym poleceniem. Użyte opcje oznaczają odpowiednio: -q
nie wyświetla informacji o inicjalizacji; -A console alarmy zostaną wyświetlone na konsoli;
-K none wyłączenie logowania pakietów; -k none wyłączenie sprawdzania sum kontrolnych w
pakietach; -c /tmp/snort.conf użycie minimalnego pliku konfiguracyjnego; -i eth0 interfejs
sieciowy do nasłuchiwania.
$ sudo su -
$ snort -q -A console -K none -k none -c /tmp/snort.conf -i eth0
Przeznacz plik /tmp/exercises exemplary.rules na przykładowe reguły zawarte w tej
instrukcji. Przeznacz plik /tmp/exercises.rules na reguły z zadań do wykonania. Plik ten
możesz później wykorzystać do przygotowania sprawozdania. Miej na uwadze, że w Ubuntu
zawartość katalogu /tmp/ zostaje utracona po restarcie. Aby Snort wczytał pliki reguł od
nowa, musisz go zatrzymać przez naciśnięcie CTRL+C na konsoli i uruchomić ponownie jak
na listingu powyżej.
W każdym ćwiczeniu jesteś zobligowany wykorzystać opcje reguł wymienione
w nazwie ćwiczenia.
Dla każdego ćwiczenia zwróć uwagę na to czy twoje reguły nie powodują fałszywych alar-
mów. Przeanalizuj co można zrobić aby zmniejszyć ich liczbę.
Ponieważ ruch do analizy został przygotowany w różnych konfiguracjach sieciowych dla
źródłowego i docelowego adresu IP użyj any i any. Gdzie możliwe, użyj domyślnego portu
usługi.
5.1
Reguły nagłówka i pól podstawowych protokołów
Przykładowe zadanie
Identyczny adres źródłowy i docelowy w pakiecie ICMP.
Opis
Takie pakiety są kompletnie błędne jeśli zostały odebrane przez sieć.
Przykładowe rozwiązanie
alert icmp any any -> any any (msg:"Destination and source are same"; ←-
sameip; sid:1000000)
Zadanie do wykonania
Wykrycie prób traceroute.
Opis
Jaka jest najmniejsza wartość TTL nagłówka IP dla której pakiet jest odbierany?
5.2
Sprawdzanie zawartości pakietów
Przykładowe zadanie
Wykrycie prób wylistowania dostępnych baz danych na serwerze MySQL.
4
Opis
Polecenie “show databases” nie jest używane często przez działające usługi.
Przykładowe rozwiązanie
alert tcp any any -> any 3306 (msg:"MySQL show databases attempt"; flow:←-
to_server,established; content:"show databases"; nocase; sid:1000001)
Zadanie do wykonania
Wykryj pakietu RTP[5] na porcie 45802 i numerze sekwencji 16950.
Opis
Za pozostałe wartości pój nagłówka RTP przyjmij: ver:2, padding:0, ext:0, csic:0,
marker:1, pt:96
5.3
Wyrażenia regularne
Przykładowe zadanie
Użycie karty kredytowej Visa o numerze XXXX-XXXX-XXXX-4448 w formularzu na stronie
Internetowej.
Opis
Wszelkie transakcje przy użyciu numerów kart kredytowych powinny być dokonywane z wy-
korzystaniem szyfrowania. W ten sposób można wykryć nierozważnych użytkowników.
Przykładowe rozwiązanie
alert tcp any any <> any 80 (msg:"VISA card number in clear text"; pcre←-
:"/4\d{3}(\s|-)?\d{4}(\s|-)?\d{4}(\s|-)?4448/"; flow:to_server,←-
established; sid:1000002;)
Zadanie do wykonania
Nawiązanie połączenia VoIP przy użyciu klienta Linphone w wersji 3.2.X.
Opis
Taka reguła mogła by być pomocna w wyszukiwaniu użytkowników, którzy nie uaktualnili by
klienta VoIP i wersja ta zawierałaby luki bezpieczeństwa.
5.4
Opcje depth, distance i offset
Przykładowe zadanie
Wykrycie wyłączonego programu serwera NTP.
Opis
Na pakiet UDP przychodzący na zamknięty port system operacyjny prześle odpowiedni pakiet
ICMP zawierający oryginalny pakiet UDP.
5
Przykładowe rozwiązanie
alert icmp any any -> any any (msg:"NTP server offline"; content:"|00 7b|";←-
offset:22; sid:1000003)
Zadanie do wykonania
Wykrycie prób łączenia się do thepiratebay.sx
Opis
Połączenia do danej domeny poprzedzone są zapytaniami DNS.
5.5
Opcje flow bit
Przykładowe zadanie
Użytkownik rozpoczną odtwarzanie zasobu video01 na przy użyciu protokołu RTSP z serwera
na porcie 5544.
Opis
Akcja pass w początkowych regułach sprawia, że reguła nie powoduje alarmu. Dyrektywy
flowbits mogą być użyte więcej niż raz w opcjach reguły.
Przykładowe rozwiązanie
pass tcp any any -> any 5544 (msg:"RTSP SETUP"; content:"SETUP rtsp"; ←-
content:"RTSP"; distance:0; flow:from_client,established; flowbits:set,←-
rtsp.setup; sid:1000004;)
pass tcp any 5544 -> any any (msg:"RTSP SETUP OK"; content:"RTSP/1.0 200 OK←-
"; flow:from_server,established; flowbits:isset,rtsp.setup; flowbits:←-
unset,rtsp.setup; flowbits:set,rtsp.setupok; sid:1000005;)
pass tcp any any -> any 5544 (msg:"RTSP PLAY"; content:"PLAY rtsp"; flow:←-
from_client,established; flowbits:isset,rtsp.setupok; flowbits:unset,←-
rtsp.setupok; flowbits:set,rtsp.play; sid:1000006;)
alert tcp any 5544 -> any any (msg:"RTSP somebody watches video01"; content←-
:"RTSP/1.0 200 OK"; flow:from_server,established; flowbits:isset,rtsp.←-
play; flowbits:unset,rtsp.play; sid:1000007;)
Zadanie do wykonania
Użytkownik po zalogowaniu się na serwer Gadu-Gadu[6] wysyła wiadomość z słowem haslo.
Opis
Reguła ta może pomóc wytropić nierozważnych użytkowników wymieniających informację o
hasłach nieszyfrowanym protokołem Gadu-Gadu.
5.6
Przetwarzanie zdarzeń
Przykładowe zadanie
Wykrycie prób TCP Syn Flood na usługę SSH i zablokowanie ataku na 10 sekund. Za atak
TCP Syn Flood uznaj więcej niż 30 prób na sekundę,
6
Opis
Dla celów tego ćwiczenia, zamiast zablokować atak używając new action drop, zostanie wy-
świetlona wiadomość (new action alert).
Przykładowe rozwiązanie
pass tcp any any -> any 22 (msg:"TCP Syn Flood on SSH, packet dropped"; ←-
flags:S; sid:1000008;)
rate_filter gen_id 1, sig_id 1000008, track by_src, count 30, seconds 1, ←-
new_action alert, timeout 10
Zadanie do wykonania
Wykryj próby ataku siłowego na usługę SMTP.
Opis
Nie używaj przestarzałej opcji threshold. Alarm o ataku ma się pojawić nie częściej niż co 1
minutę. Wykorzystaj event filter.
Literatura
[1] Rule Search. http://www.snort.org/search. [Online; Accessed 11 September 2013].
[2] The Snort Project. SNORT
R
Users Manual 2.9.5, 2013. [Online; Accessed 11 September
2013].
[3] The Snort Project. SNORT
R
Users Manual 2.9.5, May 2013. [Online; Accessed 11 Sep-
tember 2013].
[4] Snort FAQ/Wiki. https://github.com/vrtadmin/snort-faq/blob/master/README.md.
[Online; Accessed 11 September 2013].
[5] H. Schulzrinne, S. Casner, R. Frederick, and V. Jacobson. RTP: A Transport Protocol for
Real-Time Applications. RFC 3550 (Standard), July 2003. Updated by RFCs 5506, 5761,
6051.
[6] Protokol Gadu-Gadu. http://www.ggsender.ovh.org/protocol.html. [Online; Acces-
sed 11 September 2013].
7