Strażnik sieci

Pod takim nieco przewrotnym tytułem anonsuję nowy pakiet do NND,którego zadanie jest niewątpliwie ważne – ochrona przed nieautoryzowanym dostępem do LAN czy WLAN. Program nazywa sie ip-sentinel i choć nie jest nowy (źródła pochodzą z 2005 roku), to dość skutecznie spełnia swoje zadanie.

Instalacja
Program instalujemy poleceniem pacman -U http://nnd-linux-router.one.pl/pkg/ip-sentinel/ip-sentinel-0.12-1emti.pkg.tar.gz i uruchamiamy poleceniem /etc/rc.d/ipsentinel start (W przyszłości znajdzie się w oficjalnym repozytorium i będzie go można instalować przez pacman -S)
Program domyślnie rozpoczyna działanie na pierwszym interfejsie wewnętrznym (INTIF1 w rc.conf), jeśli więc ma pracować na innym, to przed uruchomieniem trzeba zamiast zmiennej $INTIF1 w pliku /etc/rc.d/ipsentinel podstawić odpowiednią dla własnej sieci.
Konfiguracja
Przed uruchomieniem należy jeszcze przygotować sobie wszystkie dozwolone w naszej sieci IP oraz MAC kart sieciowych i wpisać je do pliku /var/lib/ip-sentinel/ips.cfg.
Przykładowy plik konfiguracyjny wygląda następująco:
192.168.1.2@!00:07:95:50:97:C0
192.168.1.{3-4}
192.168.1.5@!00:D0:59:12:AF:15
192.168.1.6@!00:30:BD:66:EC:77
192.168.1.{7-254}

Pierwszy wpis to IP pierwszego komputera w mojej sieci oraz jego mac. Następny dotyczy dwóch nieużywanych IP, które w razie potrzeby będą blokowane, trzeci i czwarty to numery IP i MAC laptopa oraz Access Pointa. Ostatni wpis powoduje, że wszelkie pozostałe numery będa blokowane. Należy zauważyć, że w konfiguracji nie ma numeru 192.168.1.1 (numer serwera). Powtórzę, że każdy IP i MAC, kóry ma być „zostawiony w spokoju” przez ip-sentinel musi miec postać NR_IP@!ADRES_MAC – spowoduje to, że ten sam numer IP z innym MAC będzie blokowany.
Działanie
Program nie korzysta z iptables, nie musi być zatem uruchomiony na prawach superużytkownika (w pakiecie pracuje jako nobody). Jest to bezpieczniejsze. Działania programu polegają na tym, że jeśli odkryje nowy MAC, którego nie ma w pliku ips.cfg, podejmuje działanie zmierzające do zakłócenia tcp/ip tego komputera. Program mozna uruchamiac także z opcją –action /sciezka/program (uruchomi się wywołany przez administratora program lub skrypt po wykryciu „lewego” MAC w sieci).
Przykład praktyczny
Program został uruchomiony na serwerze NND, do którego podłączony jest komputer stacjonarny, laptop i AP (wszystkie wpisane w konfiguracji). Następnie odłączyłem laptopa i uruchomiłem na nim kartę radiową symulując działania włamującego się do sieci.
Pierwszym zaskoczeniem było to, że komputer otrzymał IP nadany przez dhcp.

ath0   Link encap:Ethernet  HWaddr 00:0A:EB:A7:2A:0D
          inet addr:192.168.1.4  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::207:95ff:fe50:97c0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1177 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1445 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:237981 (232.4 KiB)  TX bytes:152554 (148.9 KiB)

Zdziwiłem się, ale szybko zauważyłem, że MAC karty jest zupełnie różny od prawdziwego. Włamywacz mający tak łatwy dostęp spróbowałby zapewne komendy ping, aby pomacać trochę komputery w sieci albo nmap, aby się dowiedzieć więcej, a na koniec użyłby arp -n, aby sprawdzić i zanotować IP oraz MAC. Nie zastosowałem programu Kismet, bo miałem tylko jeden komputer podłączony radiowo, więc nic bym „nie wyłapał”. Jednak efekty działania programu Kismet byłyby podobne.

[maciek@laptop~]# ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.082 ms
[maciek@laptop~] arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.2              ether   01:80:C2::00:00:01   C                       ath0
192.168.1.1              ether   01:80:C2::00:00:01   C                       ath0

Zastanawiające jest, że dwa komputery podają ten sam MAC. Jeśli przebadalibyśmy sto, byłoby identycznie, kismet również podałby te same wartości. Próbowałem zmienić MAC swojej karty radiowej w locie, ale nie pomógł nawet macchanger, sterownik karty nie wspiera takich operacji.
Kolejnym krokiem było uruchomienie Windows na laptopie. Efekt był taki sam. Otrzymałem numer IP, możliwość pingowania do komputerów w sieci też, ale brak dostępu do internetu, nie mozna sie też było zdalnie zalogować do serwera, ani do drugiego komputera. Poza pingiem nie działało nic. Sterownik windowsowy również nie wspierał zmiany MAC w locie, ale udało się to zrobić po wyjęciu karty, gdy ją włożyłem zaczęła pracę normalnie – było pełny dostęp do wszystkiego.
Jednak włamywacze nie mają się z czego cieszyć. Po pierwsze wardiver nasłuchujący sieć radiową nie dostanie najprawdopodobniej ani jednego prawidłowego MAC, aby mógł go zmienić, a jeśli nawet uda mu się i zmieni MAC „on the fly” to ip-sentinel natychmiast to wychwyci. Pomoże tylko wyłączenie karty, zmiana MAC i ponowne włączenie karty. O ile wiadomo taka operacja nie bardzo się uda w linuksie (nie da się tam ustawiać właściwości nieistniejących urządzeń). Jest to możliwe w Windows, ale po pierwsze trzeba na to wpaść, a po drugie trzeba mieć jakiś MAC do wpisania. No chyba żeby potencjalny zły haker zaczął wzorem Kevina Mitnicka uprawiać manipulację psychologiczną i chodziłby po osiedlu pytając kolejnych lokatorów o MAC ich karty (większość zapewne w ogóle nie wiedziałaby, co to jest). Zresztą dodatkowym elementem zaskakującym włamywacza będzie to, że Windows ddość szybko głupieje atakowany przez ip-sentinela. W moim przypadku po kilkunastu minutach prób doszło do tego, że IP laptopa zmieniał się np. na 0.0.0.0 lub na zwyczajowy z puli 169.xxx.xxx.xxx, aż wreszcie się zawiesił. Wniosek oczywisty, że do dłuższego „macania” tak zabezpieczonej sieci nadaje się tylko linux. Znacząco to ograniczy liczbę potencjalnych chętnych na darmowe łącze w naszej sieci.
Uwagi końcowe
Test jaki przeprowadziłem, trwał tylko parę godzin i był ograniczony z powodów sprzętowych, na pewno nie mogłem zasymulowac wszystkich możliwych konfiguracji. Jednak skuteczność ip-sentinela jest na tyle duża, że z całą pewnością sprawdzi się w małych (pracujących w klasie C) sieci.
Chciałbym też podziękować Orionowi (Andrzejowi Boreczko), który wskazał mi ten program, podał prawidłową konfigurację i opisał jego działanie we własnej sieci. Bez jego pomocy nie powstałby ani pakiet ani ten opis.
Na koniec jeszcze fragment wpisów z /var/log/ip-sentinel.out (znakiem # poprzedzone są moje komentarze).

# Program rozpoczyna pracę
@400000004635cdc80b1668d0: (Re)reading blacklist
# Po wykryciu IP zostaje mu nadany fake-MAC i podany fake-MAC serwera
@400000004635cec63686e490: 192.168.1.4/0:a:eb:a7:2a:d >- 192.168.1.1/0:0:0:0:0:0 [1:80:c2:0:0:1]
# Podczas próbypingowania „dobrego” komputera ip-sentinel przechwytuje dobry MAC podając zamiast niego fake-MAC
@400000004635cf981abdc788: 192.168.1.2/0:7:95:50:97:c0 -> 192.168.1.4/0:0:0:0:0:0 [1:80:c2:0:0:1]
# O, a tu już jakiś inny IP (ktos już zauważył widać nieszyfrowaną sieć z rozgłaszającym się SSID)
@400000004635d08b22d0df50: 192.168.1.3/0:b:ec:a7:2a:d >- 192.168.1.1/0:0:0:0:0:0 [1:80:c2:0:0:1]

Dużą zaletą programu ip-sentinel jest brak konieczności jakichkolwiek działań po stronie użytkownika końcowego, żadnego logowania, żadnych wirtualnych interfejsów. Ewentualną wadą, niepotwierdzoną doświadczalnie, mogą być problemy z kiepskiej jakości switchami, taka informacja pojawiła się na jednej ze stron.

autor: W. Trąmpczyński (Maciek)


Dodaj komentarz