ë$$$$$$$$$$$$$$$$$$$$$ë ø ø ø Le sniffing TCP ø ø ø ë$$$$$$$$$$$$$$$$$$$$$ë par Fedaikin Ce petit texte va tenter d'expliquer succintement le format des trames TCP et UDP de fa‡on a comprendre les techniques de sniffing et aussi des programmes tels que les syn floods. Je ne pretend pas vous expliquer totalement le sniffing, mais je vous apporte les bases. Disclaimer : Je ne vous incite pas du tout à utiliser ces renseignements pour pirater un systŠme informatique quel qu'il soit. Ces informations sont donn‚es a titre purement informatif, je veux juste partager avec vous mes connaissances sur les reseaux informatiques. Autre point tres important, l'utilisation de la commande tcpdump est totalement illegale et je ne vous incite pas a l'utiliser. Si vous piratez a l'aide du contenu de ce texte sachez que je ne m'en tient pas responsable. I)A quoi peut bien servir le sniffing? Le sniffing permet de recuperer plein d'infos tres interessantes sans se fatiguer. Atention, tout ce qui suit ne concerne que les reseaux locaux a diffusion du type Ethernet. De plus, cela ne marchera pas lors d'une connection windows(95/nt) car les pass sont cryptes dans ce cas (Et oui on ne peut l'utiliser que sous Linux et des connections Linux).Et bien c'est tout simple, on ecoute ce qui se dit sur le reseau et on s'en sert ;) Je m'explique, dans un reseau les postes discutent(vous suivez ?) et echangent certains trucs tres interressants; notament les PASSWORDS ;) Vous me direz que c'est bien beau mais les pass seront cryptes...Et bien magie des reseaux, NON! NON et RE-NON!!!Et c'est la que c'est marrant, mˆme tres marrant :)) Pour les recuperer, il y a plusieurs methodes: utiliser un sniffer chope sur le ouaibe (lamer), faire son sniffer(plus chaud,mais si bon),ou utiliser un bon tcpdump(on peut l'utiliser pour le prog aussi) Perso j'utilise tcpdump, c'est assez sympa et en plus ca oblige a comprendre. C'est pourquoi je vais vous expliquer le fonctionnement des trames TCP et UDP en detail meme si on ne se servira pas de tout. II)Le format des trames Avant tout, il me faut vous expliquer … quoi ressemblent les trames TCP et les trames UDP. Selon la connection demand‚e, on utilise le protocole de transport TCP ou UDP. Certains utilisent un seul protocole et d'autres melangent les deux. Ainsi un talk se connecte a l'aide de UDP puis transmet les donnees par TCP. Comme on m'a souvent dit un bon schema vaut mieux qu'un long discourt. Je vais donc faire le schema de l'en-tete TCP: ___________________________________________________________________________ /\ | port source (16 bits) | port destination (16 bits) | | |-------------------------------------------------------------------------| | | numero de sequence (32 bits) | | |-------------------------------------------------------------------------| | | numero de d'accuse de reception (32 bits) | 20 | |-------------------------------------------------------------------------| octets| |long d'en-tete | reserve |URG|ACK|PSH|RST|SYN|FIN| taille de la fenetre | | | (4 bits) |(6 bits) | | | | | | | (16 bits) | | |-------------------------------------------------------------------------| | | somme de controle TCP | pointeur urgent | | | (16 bits) | (16 bits) | \/ --------------------------------------------------------------------------- <------------------------------------------------------------------------> 32 bits On a donc une trame de ce type: _________________________ | En-tete TCP| Donn‚es | | 20 octets | 6 … 1460 | ------------------------ N'ayez pas peur je vais vous expliquer tout de suite tous les champs. port source : c'est le port TCP de l'emetteur (pour la reponse). port destination : c'est le port du destinataire. numero de sequence: permet d'identifier le segment TCP. Il est egal au nombre d'octets envoyes. Ils sont aleatoires au debut, puis sont remis … 0 d‚s le 2øechange. num d'accuse de reception : Il indique le numero de sequence de la trame suivante. longueur d'en-tete: donne la longueur de l'en-tete en mots de 32 bits (ici 5).Vous comprenez mieux mon schema hein ;) reserv‚ : aucun interet flag URG (1 bit) : … 1 si le pointeur urgence est en cours d'utilisation. flag ACK " : … 1 si le numero d'accuse de reception est bon. flag PSH " : (PuSHed en english) on ne passe pas par un buffer si … 1 (bof) flag RST " : stoppe la connexion immediatement si … 1. flag SYN " : ahh + interessant.SYN=1 et ACK=0 =>demande de connection SYN=1 et ACK=1 =>confirmation de connection flag FIN " : sert a dire qu'on romp la connexion. taille de la fenetre : donne le nombre d'octets qu'on peut mettre apres l'octet aquitte. somme de controle : controle d'erreur de l'en-tete. pointeur urgence : decalage en octets … partir du numero de sequence courant pointant sur des donn‚es urgentes. Voila, mais ceci dit n'ayez pas peur car la plupart de ces informations ne nous serviront pas a grand chose. Les bits a retenir sont surtout les flags SYN et ACK et la longueur totale de l'entete. Les adresses pourront egalement etre tres utiles ;) En-tete UDP: ___________________________________________________________________________ /\ | port source (16 bits) | port destination (16 bits) | 8 | |-------------------------------------------------------------------------| octets| | longueur | cheksum | \/ |-------------------------------------------------------------------------| <------------------------------------------------------------------------> 32 bits On a donc une trame de ce type: _________________________ | En-tete TCP| Donn‚es | | 8 octets | 0 … 1472 | ------------------------ logueur : longueur en octets du segment UDP(en-tete+donnees). cheksum : code de controle de l'en-tete III)Deroulement de la connection Maintenant passons a la connexion en elle meme. Il y a donc deux protocoles a surveiller: TCP et UDP. Vous allez me dire lequel regarder? Et bien malheureusement on ne peut pas le savoir a l'avance car chaque application a un deroulement specifique. Par exemple un talk se connecte d'abord en UDP puis passe en TCP. Donc la il faudra capter les deux au debut et par la suite ... Connection TCP: Il y a tout d'abord trois trames qui servent a la connexion a proprement parler. La premiere est envoyee par le client au serveur. Dans cette trame(et c'est la qu'on voit ceux qui on suivi jusqu'ici :)) le flag SYN a 1 et tous les autres a 0; on a ici une demande de connexion. La deuxieme (serveur => client) a les flags SYN et ACK a 1; ce qui correspond … une confirmation de connection. La troisieme (client => serveur) a le bit ACK a 1 et les autres a 0. On est connecte. C'est la que s'expliquent les syn flood. On envoi plein de trames avec une demande de connection d'une machine dont on a spoofe l'adresse et la machine destinataire renverra un tas de trame de confirmation, jusqu'a ce que la machine qui lui a envoye la demande lui reponde (ce qui ne se passera jamais mouahahahahah). La machine cible se trouve donc fortement ralentie ;) Connection UDP: Elle se passe en quatres etapes. La premiere trame est envoyee par le client au server pour faire la demande de connection. La deuxieme est la reponse du server au client pour la demande de connection. La troisieme (client => server) est pour une sorte de deuxieme demande de connection. La quatrieme (server => client) est pour la confirmation de connection finale. La communication est etablie, et les infos interressantes commencent :) IV)La commande TCPDUMP Donc maintenant que vous savez comment fonctionnent les trames TCP et UDP, il vous faut savoir comment les chopper. La encore il y a plusieurs solutions (comme je l'ai dit au debut): utiliser un sniffer choppe sur le ouaibe se faire le sniffer ou utiliser la commande tcpdump La commande tcpdump est une commande linux qui capture les trames d'un type precis (TCP/UDP...). Je vais donc vous expliquer les options de cette commande. Pour ecouter une connection TCP par exemple entre la machine neuneu et son server, on tapera la commande suivante: tcpdump -i eth0 host neuneu and host server and tcp Je commante : le -i eth0 est une option qui capture les trames sur l'interface eth0(ethernet) host donne les deux machines entre lequelles on ecoute tcp pour preciser qu'on veut les trames TCP (on peut remplacer par UDP) on peut ajouter un port precis en tapant "and port numero" ou "and port ftp" Options de tcpdump: -e : affiche l'en-tete de la couche liaison de donn‚es -t : evite d'afficher l'heure d'arriv‚e des trames -i bla : capture les trames sur l'interface bla -s nbr : affiche les nbr premiers octets -vv : affiche beaucoups d'informations sur la trame (trop pour nous) -x : affiche la trame en hexadecimal(sauf l'en-tete de la couche liaison de donn‚es) Filtres : Ils faut preciser le protocole a ecouter : arp, icmp, tcp, udp, ip Si vous voulez ecouter plusieurs machines tapez : host neuneu1, host neuneu2 and host server Vous pouvez egalement placer les adresses ip des machines au lieu de leur noms. Vous pouvez encore restreindre l'ecoute a un(ou plusieurs) port special:port 23, port ftp and port www. Voila, pour realiser votre sniffer, vous pouvez ecrire un script shell qui execute la commande tcpdump avec une redirection et qui sera lance par le .profile (un conseil cachez le prog). Ou sinon vous pouvez lancer la commande comme ca depuis votre propre PC en esperant qu'il y ait une connection au moment ou vous ecoutez. Il est vrai qu'il existe des methodes pour faire des programmes en C ou autre; mais ceci donnera lieu a un autre texte(et oui vous entendrez encore parler de moi ;)) V)Annexe Il y a tout de mˆme un remede a cette ecoute clandestine(et mˆme deux). On peut utiliser des bridges au lieu d'utiliser des hubs; on ne sera plus en mode diffusion(il y a une connection directe physique entre les machines) mais on fait croire qu'on diffuse encore a tout le monde. On ne peut plus sniffer. On peut aussi utiliser SSH au lieu d'utiliser telnet. SSh est beaucoup plus securise car il crypte les pass. J'ai fini, et si vous avez des questions (ou des commantaires) vous pouvez me mailer a cette adresse: fedaikin@altern.org Ou vous pouvez me retrouver sur les servers irc undernet. Je tient a dire un grand merci a BuBle (a qui je doit beaucoups et qui est un bon pote),un grand a KthuLu aussi. Je remercie aussi toute l'equipe de frhack et je passe un enorme bonjour a tous mes potes de #hack.fr fedaikin@altern.org