Surowe gniazda
Na wcześniejszych zajęciach poznaliśmy metodę wykorzystywania funkcji systemowych do tworzenia nagłówków IP oraz warstwy TCP i UDP.
Dzięki wykorzystanym funkcjom system automatycznie tworzył nagłówki warstw IP i TCP/UDP.
Nie jest to jednak jedyna metoda tworzenia komunikatów. Gniazda surowe (raw sockets) pozwalają na preparowanie nagłówków według naszych potrzeb. Umożliwia to np. wysłanie dużej liczby
Przydatne struktury:
- iphdr (zdefiniowana w /usr/include/linux/ip.h zawiera kolejne pola nagłówka ip, które można wypełnić ręcznie) lub ip (/usr/include/netinet/ip.h).
- icmphdr
- tcphdr
- udphdr
- ifreq
Przydatne funkcje:
- ioctl (sd, SIOCGIFINDEX, &ifr)
- sd = socket (AF_INET, SOCK_RAW, IPPROTO_RAW)
- setsockopt (sd, IPPROTO_IP, IP_HDRINCL, &on, sizeof (on))
- setsockopt (sd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof (ifr)) < 0)
- sendto (sd, packet, IP4_HDRLEN + ICMP_HDRLEN + datalen, 0, (struct sockaddr *) &sin, sizeof (struct sockaddr))
Uwaga:
Gniazda surowe wymagają posiadania praw administratora w systemie operacyjnym. W tym celu należy uruchomić np. testową maszynę wirtualną (na zajęciach DSIK WMI UAM – można ją pobrać z contact.dir prowadzącego ćwiczenia).
Zadanie:
1. Ściągnij ze strony http://www.pdbuchan.com/rawsock/rawsock.html program icmp4.c, skompiluj i sprawdź czy działa (w linux polecenie tcpdump -i lo -X -n) powoduje podsłuch na interfejsie lo z wypisaniem szesnastkowym zawartości pakietów z opisem adresów IP nadawcy i odbiorcy bez dokonywania odwzorowania ich na domeny. Opisz wynik.
2. Zmodyfikuj plik icmp4.c tak by działał jak pingflood (prowadzący ćwiczenia powinien wprowadzić temat ataku pingflood)
3. Dla chętnych – zmodyfikuj program tcp4.c tak by powodował atak DoS typu synflood.
Dodatkowy link z innymi przykładami: http://www.tenouk.com/Module43a.html