Sniffing pakietów sieciowych
Sniffing lub sniffowanie pakietów sieciowych to proces monitorowania i przechwytywania wszystkich pakietów przechodzących przez daną sieć za pomocą narzędzi do wykrywania. To forma, w której możemy „podpiąć przewody telefoniczne” i zapoznać się z rozmową. Nazywa się to równieżwiretapping i mogą być stosowane w sieciach komputerowych.
Jest tak duże prawdopodobieństwo, że jeśli zestaw portów przełączników korporacyjnych jest otwarty, jeden z ich pracowników może podsłuchiwać cały ruch w sieci. Każdy w tej samej fizycznej lokalizacji może podłączyć się do sieci za pomocą kabla Ethernet lub połączyć się bezprzewodowo z tą siecią i węszyć cały ruch.
Innymi słowy, Sniffing pozwala zobaczyć wszelkiego rodzaju ruch, zarówno chroniony, jak i niechroniony. W odpowiednich warunkach i przy właściwych protokołach strona atakująca może być w stanie zebrać informacje, które można wykorzystać do dalszych ataków lub spowodować inne problemy dla właściciela sieci lub systemu.
Co można wąchać?
Można wykryć następujące poufne informacje z sieci -
- Ruch e-mailowy
- Hasła FTP
- Ruch sieciowy
- Hasła Telnet
- Konfiguracja routera
- Sesje czatu
- Ruch DNS
Jak działa wąchanie?
Sniffer zwykle przełącza kartę sieciową systemu w tryb swobodny, aby nasłuchiwała wszystkich danych przesyłanych w jego segmencie.
Tryb swobodny odnosi się do unikalnego sposobu sprzętu Ethernet, w szczególności kart interfejsu sieciowego (NIC), który umożliwia karcie sieciowej odbieranie całego ruchu w sieci, nawet jeśli nie jest on adresowany do tej karty sieciowej. Domyślnie karta sieciowa ignoruje cały ruch, który nie jest do niej adresowany, co odbywa się poprzez porównanie adresu docelowego pakietu Ethernet z adresem sprzętowym (MAC) urządzenia. Chociaż ma to sens w przypadku sieci, tryb nierozłączny utrudnia korzystanie z oprogramowania do monitorowania i analizy sieci w celu diagnozowania problemów z łącznością lub rozliczania ruchu.
Sniffer może w sposób ciągły monitorować cały ruch do komputera przez kartę sieciową, dekodując informacje zawarte w pakietach danych.
Rodzaje wąchania
Wąchanie może mieć charakter Aktywny lub Pasywny. Teraz dowiemy się o różnych typach wąchania.
Wąchanie pasywne
W pasywnym wąchaniu ruch jest zablokowany, ale nie jest w żaden sposób zmieniany. Wąchanie pasywne pozwala tylko na słuchanie. Działa z urządzeniami Hub. Na urządzeniu koncentratora ruch jest przesyłany do wszystkich portów. W sieci wykorzystującej koncentratory do łączenia systemów wszystkie hosty w sieci mogą widzieć ruch. Dlatego osoba atakująca może łatwo przechwycić przechodzący ruch.
Dobra wiadomość jest taka, że w ostatnim czasie huby niemal stały się przestarzałe. Większość nowoczesnych sieci używa przełączników. Dlatego bierne wąchanie nie jest bardziej skuteczne.
Aktywne wąchanie
W przypadku aktywnego podsłuchiwania ruch jest nie tylko blokowany i monitorowany, ale może również zostać w jakiś sposób zmieniony zgodnie z atakiem. Aktywne podsłuchiwanie służy do podsłuchiwania sieci opartej na przełączniku. Obejmuje wstrzykiwanie pakietów rozwiązywania adresów (ARP) do sieci docelowej, aby zalać tabelę pamięci adresowalnej zawartości przełącznika (CAM). CAM śledzi, który host jest podłączony do którego portu.
Oto techniki aktywnego wąchania -
- Zalanie MAC
- Ataki DHCP
- Zatrucie DNS
- Spoofing Attacks
- Zatrucie ARP
Skutki wykrywania w protokołach
Protokoły, takie jak tried and true TCP/IPnigdy nie zostały zaprojektowane z myślą o bezpieczeństwie. Takie protokoły nie zapewniają dużej odporności na potencjalne intruzów. Poniżej przedstawiono różne protokoły, które umożliwiają łatwe węszenie -
HTTP
Służy do wysyłania informacji w postaci zwykłego tekstu bez szyfrowania, a tym samym do rzeczywistego celu.
SMTP (Simple Mail Transfer Protocol)
SMTP jest używany do przesyłania wiadomości e-mail. Ten protokół jest wydajny, ale nie obejmuje żadnej ochrony przed węszeniem.
NNTP (Network News Transfer Protocol)
Służy do wszystkich rodzajów komunikacji. Główną wadą tego rozwiązania jest to, że dane, a nawet hasła są przesyłane przez sieć jako zwykły tekst.
POP (protokół pocztowy)
POP jest ściśle używany do odbierania wiadomości e-mail z serwerów. Ten protokół nie obejmuje ochrony przed wąchaniem, ponieważ może zostać złapany.
FTP (protokół przesyłania plików)
FTP służy do wysyłania i odbierania plików, ale nie oferuje żadnych funkcji bezpieczeństwa. Wszystkie dane są wysyłane jako czysty tekst, który można łatwo przeszukać.
IMAP (Internet Message Access Protocol)
Protokół IMAP jest taki sam jak SMTP w swoich funkcjach, ale jest bardzo podatny na podsłuchiwanie.
Telnet
Telnet wysyła wszystko (nazwy użytkowników, hasła, naciśnięcia klawiszy) przez sieć w postaci zwykłego tekstu, dzięki czemu można je łatwo wykryć.
Sniffery nie są głupimi narzędziami, które pozwalają oglądać tylko ruch na żywo. Jeśli naprawdę chcesz przeanalizować każdy pakiet, zapisz przechwycony obraz i przejrzyj go, kiedy tylko pozwoli na to czas.
Implementacja w Pythonie
Przed zaimplementowaniem sniffera surowych gniazd, zrozummy, jak działa struct metoda opisana poniżej -
struct.pack (fmt, a1, a2,…)
Jak sama nazwa wskazuje, metoda ta służy do zwracania łańcucha, który jest pakowany zgodnie z podanym formatem. Ciąg zawiera wartości a1, a2 i tak dalej.
struct.unpack (fmt, string)
Jak sama nazwa wskazuje, metoda ta rozpakowuje napis zgodnie z podanym formatem.
W poniższym przykładzie surowego nagłówka IP sniffera gniazda, czyli następnych 20 bajtów w pakiecie, a spośród tych 20 bajtów interesuje nas ostatnie 8 bajtów. Te ostatnie bajty pokazują, czy źródłowy i docelowy adres IP analizuje -
Teraz musimy zaimportować kilka podstawowych modułów w następujący sposób -
import socket
import struct
import binascii
Teraz utworzymy gniazdo, które będzie miało trzy parametry. Pierwszy parametr mówi nam o interfejsie pakietowym - PF_PACKET dla Linuksa i AF_INET dla Windows; drugi parametr mówi nam, że jest to surowe gniazdo, a trzeci parametr mówi nam o protokole, który nas interesuje - 0x0800 używanym do protokołu IP.
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))
Teraz musimy zadzwonić do recvfrom() metoda odbioru pakietu.
while True:
packet = s.recvfrom(2048)
W poniższym wierszu kodu zgrywamy nagłówek Ethernet -
ethernet_header = packet[0][0:14]
W poniższym wierszu kodu analizujemy i rozpakowujemy nagłówek z rozszerzeniem struct metoda -
eth_header = struct.unpack("!6s6s2s", ethernet_header)
Poniższy wiersz kodu zwróci krotkę z trzema wartościami szesnastkowymi, przekonwertowanymi przez hexify w binascii moduł -
print "Destination MAC:" + binascii.hexlify(eth_header[0]) + " Source MAC:" + binascii.hexlify(eth_header[1]) + " Type:" + binascii.hexlify(eth_header[2])
Możemy teraz uzyskać nagłówek IP, wykonując następujący wiersz kodu -
ipheader = pkt[0][14:34]
ip_header = struct.unpack("!12s4s4s", ipheader)
print "Source IP:" + socket.inet_ntoa(ip_header[1]) + " Destination IP:" + socket.inet_ntoa(ip_header[2])
Podobnie możemy również przeanalizować nagłówek TCP.