Określanie konfiguracji TCP/IP Marek Kozłowski Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska Warszawa, 2014/2015
Internet Control Message Protocol Protokół IP nie jest wyposażony w żadne mechanizmy kontrolujące poprawne przekazanie pakietu do odbiorcy. Lukę tę w znacznym stopniu wypełnia protokół ICMP zdefiniowany w RFC 792. Każdy nagłówek ICMP składa się z nagłówka IP, pól: Type (8 bitów), Code (8 bitów) i Checksum (16 bitów), oraz ewentualnie dodatkowych innych pól zależnie od typu. Nagłówek IP jest integralną częścią nagłówka ICMP. Dzieje się tak, ponieważ ICMP nie wykorzystuje protokołu IP tak, jak TCP czy UDP, tj. jako protokół wyższej warstwy, lecz jest integralną częścią IP i musi być zaimplementowany w każdej implementacji IP.
Parametry nagłówka ICMP Pole typu (Type) określa rodzaj pakietu ICMP. Wybrane wartości tego pola: 8 i 0 Echo Request/Reply, 3 Destination Unreachable, 4 Source Quench, 5 Redirect Message, 11 Time Exceeded, 12 Parameter Problem. Pole kodu (Code) doprecyzowuje rodzaj powiadomienia; wartości kodów są definiowane osobno dla poszczególnych typów. Pole sumy kontrolnej (Checksum) działa analogicznie jak w innych omówionych dotychczas nagłówkach. Do obliczania sumy kontrolnej brane są 16-bitowe słowa nagłówka ICMP, poczynając od pola Type.
ICMP Echo Request/Reply 0-3 4-7 8-11 12-15 16-19 20-23 24-27 28-31 Type Code Checksum Identifier Sequence Number Data Typ: dla pakietu Request 8, dla Reply 0. Wartość pola kodu w pakietach Echo jest zawsze równa 0. Identyfikator i numer sekwencyjny pozwalają połączyć w pary żądania i odpowiedzi. Sposób ich ustalania nie jest zdefiniowany w RFC 792. Standard nie określa także zawartości pola danych, żąda jednak, by dane w pakietach Request i odpowiadających im Reply były identyczne.
ICMP Destination Unreachable 0-3 4-7 8-11 12-15 16-19 20-23 24-27 28-31 Type Code Checksum Unused IP header + first 64 bits of original datagram Przypomnijmy, że numery portów w TCP i UDP mieszczą się na pierwszych 32 bitach za nagłówkiem IP. Pole typ ma wartość 3. Pole kodu określa przyczynę niedostarczenia pakietu. RFC 792 definiuje 6 wartości: 0 Network unreachable, 1 Host unreachable, 2 Protocol unreachable, 3 Port unreachable, 4 Fragmentation needed and DF set, 5 Source route failed error.
ICMP Destination Unreachable Późniejsze RFC (1122 i 1812) dodają kody 6-15: 6 Destination network unknown, 7 Destination host unknown, 8 Source host isolated (nieużywane), 9 Destination network administratively prohibited, 10 Destination host administratively prohibited, 11 Destination network unreachable for ToS, 12 Destination host unreachable for ToS, 13 Communication administratively prohibited by filtering, 14 Host precedence violation, 15 Precedence cutoff in effect.
ICMP Source Quench 0-3 4-7 8-11 12-15 16-19 20-23 24-27 28-31 Type Code Checksum Unused IP header + first 64 bits of original datagram Wartości pól: typ 4, kod 0. Prośba o zmniejszenie tempa transmisji (np. ze względu na przepełnione bufory routera).
ICMP Redirect Message 0-3 4-7 8-11 12-15 16-19 20-23 24-27 28-31 Type Code Checksum Address IP header + first 64 bits of original datagram ICMP typu 5 powiadamia hosta o wyborze niewłaściwej bramki, zazwyczaj przekazaniu pakietu do domyślnej bramki w sytuacji, gdy sieć nadawcy ma inną, bliższą sieci docelowej bramkę. Dopuszczalne wartości kodu są następujące: kod 0 Redirect for network, kod 1 Redirect for host, kod 2 Redirect for ToS and network, kod 3 Redirect for ToS and host. Pole adresu zawiera adres IP właściwej bramki
ICMP Time Exceeded 0-3 4-7 8-11 12-15 16-19 20-23 24-27 28-31 Type Code Checksum Unused IP header + first 64 bits of original datagram ICMP typu 11 informuje o przekroczeniu czasu życia pakietu; wykorzystywane jest np. przez program traceroute do badania trasy pakietów. Dopuszczalne są dwie wartości pola kodu: kod 0 TTL osiągnęło wartość 0 w czasie przechodzenia przez router, kod 1 TTL osiągnęło wartość 0 w czasie defragmentacji pakietu.
ICMP Parameter Problem 0-3 4-7 8-11 12-15 16-19 20-23 24-27 28-31 Type Code Checksum Pointer Unused IP header + first 64 bits of original datagram Pakiety ICMP sygnalizujące błąd nagłówka IP. Pole Pointer to numer oktetu w nagłówku IP, który spowodował problem. Wartość pola typu wynosi 12, wartość pola kodu 0. Dopuszczalny jest także kod 1 (RFC?) sygnalizujący brak wymaganej opcji. W takim przypadku pole Pointer nie jest wykorzystywane.
Wybrane polecenia arp Polecenie arp służy do zarządzania tablicą ARP cache. Dostępne jest w większości systemów uniksopodobnych i systemach Windows. Umożliwia m.in. podgląd i modyfikację tablicy ARP, stwierdzenie ataku ARP poisoning (choć lepiej używać w tym celu arpwatch lub systemów IDS, np. snort), jak również ochronę przed nim poprzez użycie mapowań statycznych (plik /etc/ethers).
Wybrane polecenia ifconfig Polecenie ifconfig służy do wyświetlania i modyfikowania konfiguracji interfejsów sieciowych w systemach Linux/Unix. W innych systemach do podglądu ustawień dostępne są narzędzia: winipcfg (Windows 95/98), ipconfig (Windows 2000/XP), config (NetWare). W systemach Windows zmiany parametrów interfejsu dokonuje się poprzez Właściwości Sieci, a w systemie NetWare poprzez load tcpcon.nlm. Polecenie ifconfig umożliwia także zarządzanie wybranymi ustawieniami kart ethernet. Do zarządzania kartami wifi służą polecenia: iwconfig, iwlist, iwspy (Linux), ifconfig (BSD), wificonfig (Solaris).
Wybrane polecenia netstat Polecenie netstat dostępne jest w systemach Linux/Unix i Windows. W NetWare należy użyć load tcpcon.nlm. Polecenie netstat umożliwia: wyświetlanie szczegółów dotyczących protokołów i interfejsów, podgląd tablicy routingu (manipulowanie route), podgląd sesji TCP oraz ich stanu (ESTABLISHED, SYN SENT, SYN RECV, FIN WAIT1, FIN WAIT2, TIME WAIT, CLOSED, CLOSE WAIT, LAST ACK, LISTEN, CLOSING, UNKNOWN), podgląd otwartych portów UDP.
Narzędzia iproute2 Pakiet iproute2 dostępny jest tylko dla systemu Linux. Pakiet ten zastępuje szereg poleceń sieciowych takich jak ifconfig, arp, route i in. poleceniem (poleceniami) ip (ip link, ip address, ip neighbour, ip route i in.). Iproute2 wprowadza ujednoliconą składnię dla wszystkich wywołań. Polecenie ip pozwala na dowiązanie więcej niż jednego adresu IP do jednego interfejsu oraz oferuje szereg rozszerzeń.
Polecenia ip przykłady Podgląd tablicy ARP $ arp $ ip neighbour show Informacje o interfejsie $ ifconfig eth0 $ ip address show dev eth0 Podgląd tablicy routingu $ netstat -r $ route $ ip route show
Polecenia ip przykłady zaawansowane Kilka adresów IP na jednym interfejsie # ip address add 10.0.0.1/8 broadcast + dev eth0 # ip address add 172.16.1.1/16 broadcast + dev eth0 $ ip address show dev eth0 $ ifconfig NAT (szczegóły na najbliższym wykładzie) # ip route add nat 194.29.178.1 via 192.168.1.1 # ip rule add nat 194.29.178.1 from 192.168.1.1 # ip route flush cache $ ip route show $ ip rule show
Odwołanie do sieci loopback Komunikacja poprzez adresy loopbackowe (127.0.0.0/8) pomaga ustalić, czy stos TCP/IP funkcjonuje prawidłowo. Przypomnienie: host identyfikuje się z każdym adresem w obrębie sieci 127.0.0.0/8, w szczególności nazwa localhost powinna być kojarzona z adresem 127.0.0.1: /etc/hosts (*nix), c:\windows\hosts (Windows 95/98), c:\winnt\system32\drivers\etc\hosts (Windows 2000/XP).
Rozwiązywanie nazw DNS nslookup Polecenie nslookup pozwala uzyskać informacje z serwerów nazw domenowych: adres IP dla nazwy (rekordy A, CNAME) lub nazwę zarejestrowaną dla adresu IP (rekordy PTR). Alternatywne narzędzia: host i dig. Jeśli nie podamy explicite serwera DNS, który chcemy odpytywać, wówczas wykorzystywana jest konfiguracja domyślna (zob. plik /etc/resolv.conf).
Wybrane polecenia ping Polecenie ping dostępne jest we wszystkich systemach Linux/Unix, Windows i NetWare (load ping.nlm). Wysyła pakiety ICMP ECHO REQUEST do odbiorcy i oczekuje ECHO REPLY. Na podstawie uzyskanych odpowiedzi szacuje opóźnienia i packet loss. Należy pamiętać, że wielu administratorów odfiltrowuje pakiety ICMP, w tym także ICMP ECHO, na routerach brzegowych, zatem brak odpowiedzi na ping nie oznacza braku komunikacji przy wykorzystaniu innych protokołów.
Wybrane polecenia traceroute Linux/Unix: traceroute, Windows: tracert, NetWare: load iptrace.nlm. Działanie traceroute polega na wysyłaniu serii pakietów UDP na port 33434 odbiorcy (zazwyczaj można podać inny lub wybrać pakiety ICMP ECHO) o wartościach TTL kolejno 1, 2, 3,... i odbieraniu powiadomień ICMP TIME EXCEEDED od pośrednich routerów. Na podstawie adresów nadawców zwrotnych pakietów ICMP, jak i opóźnień ustalana jest trasa pakietów do odbiorcy i szacowane są opóźnienia na poszczególnych hopach. Zarówno pakiety UDP na port 33434, jak i ICMP mogą być odfiltrowane na routerach.
Wybrane polecenia arping Odpowiednik polecenia ping działający na 2. warstwie OSI. Uwaga: dostępne są dwie implementacje: przenośna, oparta na bibliotece libpcap stworzona przez Thomasa Habetsa oraz linuksowa, wchodząca w skład pakietu iputils. Wersje te różnią się funkcjonalnością oraz parametrami wywołania!
Narzędzia bazujące na PCAP API dla omawianych na wykładzie programów badających pakiety realizowane jest przez pcap. Implementacja dla systemów Linux/Unix nosi nazwę libpcap (Linux/Unix), a jej windowsowy port winpcap. Z pcap korzystają m.in.: wireshark, tcpdump (dla Windows windump, dla Solarisa snoop), nmap, arping (wersja Habetsa), system IDS (wykrywania intruzów): snort (omawiany na następnym wykładzie). Posługiwanie się pcap wiąże się z przestawieniem karty w tzw. promiscous mode, do czego wymagane jest posiadanie uprawnień roota (supervisora, administratora).
Analizator pakietów tcpdump przykłady Składnia wyrażeń filtrowania pcap-filter, tj. taka sama jak dla capture filter w analizatorze wireshark Zapisz pakiety ESMTP wymianiane między hostem a hostami spoza sieci lokalnej do pliku plik.pcap # tcpdump (not net 194.29.178.0/24 or host 194.29.178.1) and \ (port 25 or 465 or 587) -w plik.pcap Zapisz pakiety przychodzące TCP zawierające flagę SYN lub FIN... # tcpdump dst 194.29.178.1 and \ (tcp[tcpflags] & (tcp-syn tcp-fin)!= 0) -w plik.pcap... lub tylko wyświetlaj analizę pierwszych 64 bajtów # tcpdump dst 194.29.178.1 and \ (tcp[tcpflags] & (tcp-syn tcp-fin)!= 0) -n -vv -s64
Skaner nmap nmap umożliwia m.in. wykrywanie hostów (ping), identyfikację hostów oraz skanowanie portów. Skanowanie portów może być realizowane z wykorzystaniem różnorodnych technik, m.in. poprzez ustanowienie połączenia TCP (pełne), poprzez wymianę pakietów SYN i SYN-ACK (półpełne, przeważnie nie jest logowane), skanowania ACK, FIN, Null i Xmas Tree (FIN-URG-PUSH) wywołania odpowiedzi RST (skanowany system musi być zgodny z RFC 793), skanowania UDP i analizy zwrotnych pakietów ICMP, skanowanie z flagami ustawionymi przez użytkownika. nmap ma dość bogatą dokumentację na stronie domowej http://www.insecure.org/ (http://www.nmap.org/), z którą warto się zapoznać.
Packet injectors Programy takie pozwalają na bezpośrednie generowanie pakietów z pominięciem enkapsulacji dokonywnej przez protokoły stosu. Do najpopularniejszych należy nemesis (http://nemesis.sourceforge.net), który pozwala na tworzenie i wysyłanie dowolnych pakietów arp, dns, ethernet, icmp, igmp, ip, ospf, rip, tcp i udp. Innymi, często wykorzystywanymi programami są: hping (http://www.hping.org) oraz scapy (http://www.secdev.org/projects/scapy).