_____:::::=====[Le Reseau Tcp/Ip]=====:::::_____ P A R B L U E B I R D 1/ Le TCP/IP c'est quoi ? ~~~~~~~~~~~~~~~~~~~~~~~~~ Cui cui les carottes volent bas.... hihihi je suis déjà en train de lui fouttre le souk alors qu'il a même pas commencé son article... c pas permis ça... :o) moi je le respecte bluebird rien que son pseudo si tu traduis ca veut dire oiseau bleu :o))) ah bon ? putain je suis sur le cul là, on me dit jamais rien à moi... j'ai du passer pour le roi des andouilles ;) Le TCP IP est un protocole reseau securise. Comprendre securise, car les problemes de transmission de donnees (morceau de donnee manquant, etc...) sont theoriquement impossible. Theoriquement, car nous allons le voir tout a l'heure. 2/ Ca marche comment le TCP/IP ? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Une connexion TCP/IP se fait en trois temps: La machine 1 envoie un paquet SYN (SYNchronisation) a la machine 2. La machine 2 repond par un paquet SYN (toujours la meme chose) et un paquet ACK (ACKnowledgement = agrement, c-a-d que la machine 2 accepte la connexion). La machine 1 envoie apres la reception des paquets SYN & ACK de la machine 2 une paquet ACK a la machine 2. La machine 1 indique ainsi a la machine 2 qu'elle est prete. A QUOI SERT UN PAQUET DE SYNCHRONISATION ? C'est simple a comprendre: lors d'une connexion avec tcp-ip, pour eviter les pertes de donnees, chaque "morceau" de donnee (tcp/ip fragmente les informations envoyees a travers le reseau) a son numero propre. Le premier paquet est en general le paquet nø 0, meme pour si des raisons de securite il devrait etre aleatoire. Ainsi, si la machine 2 ne recoit que 674 paquets sur les 675 que lui envoyait la machine 1, elle va automatiquement aller regarder quel paquet il lui manque (par exemple le paquet 675), et va demander a la machine 1 de lui reenvoyer le paquet numero 675. TCP/IP utilise aussi les nø de paquets pour reconstituer les fichiers, pour remettre les fragments dans l'ordre. Formatage des fragments TCP: ------------------------------------------------------------------------ | PORT SOURCE | PORT DESTINATION | |----------------------------------------------------------------------| | NUMERO DE SEQUENCE | |----------------------------------------------------------------------| | NUMERO D'ACQUITTEMENT | |----------------------------------------------------------------------| |DEPLACEMENT|RESERVE |FLAGS | FENETRE | |----------------------------------------------------------------------| | SOMME DE CONTROLE | POINTEUR NECESSAIRE | |----------------------------------------------------------------------| | OPTIONS | Bourrage | |----------------------------------------------------------------------| |D E B U T D E L A Z O N E D E D O N N E E S | |......................................................................| |......................................................................| |......................................................................| |F I N D E L A Z O N E D E D O N N E E S | |______________________________________________________________________| TCP utilise des numeros d'acquittement. Si la machine Y ne recoit pas le paquet 675 comme je l'expliqueais plus haut, elle se rend compte qu'il manque un paquet, de plus, n'ayant pas recu le 675ieme paquet, elle n'a pas pu envoyer d'acquittement, c-a-d qu'elle n'a pas dit a la machine X qu'elle avait bien recu le paquet 675. La machine X reenvoye alors automatiquement le paquet numero 675. Explications des termes inconnus trouves dans le schema de formattage: Numero d'acquittement: voir le paragraphe juste au dessous du schema. Flags: Ce sont les diferrentes commandes que l'on peut trouver dans un paquet TCP. Il existe differents flags (fanions, drapeaux) SYN (deja vu) ACK (deja vu) RST (reset, pour recommencer la connexion) FIN (indique le début de la fin de la connexion, après avoir reçu un paquet FIN le receveur envoie un ACK et s'attend à ne plus recevoir de données) Je n'ai cite ici que les plus courants. Fenetre: Taille maximale du prochain segment envoye. Disons qu'un ordinateur ait une vitesse de connexion de 14 400 bauds, et qu'il dialogue avec un ordinateur qui a une vitesse de connexion de 56 000 bauds, tcp calculera automatiquement la taille d'un paquet recevable entierement avant le depassement du time-out (L'ordinateur recepteur a un certain temps pour envoyer un acquittement a l'ordinateur expediteur. Une fois ce temps depasse, soit la connexion s'acheve automatiquement, dans notre cas le paquet sera tout simplement reenvoye.) Donc si le paquet est trop gros, le time-out sera depasse et le paquet en question sera reenvoye infiniment. Grace a la Fenetre TCP/IP evit ce genre de desagrement. Imaginez-vous en train de telecharger un fichier de 60 Mo, et d'un seul coup a 5 minutes de la fin du telechargement un des paquets est trop grand et la connexion se "reboote". Vous etes repartis pour 5 ou 6 heures de telechargement :o) Le timeout est utilisé en programmation pour libérer les connexions gelées sans tenir compte du type d'évènement ayant généré cette coupure (fin subite de la connexion à une des extrémités, ralentissement de la connexion...). En java les timeouts sont employés en créant un socket et en appelant la méthode setSoTimeout(int) de ce socket, où int est un entier défini sur 32 bits. Les timeouts sont pratiques pour les applications clientes mais vitaux pour les applications serveurs à threads multiples, en effet si un accident interrompt la connexion entre le client et le serveur et que le serveur croit que le client est tjs connecté, la connexion risque d'être définitivement bloquée sur le serveur qui se retrouvera finalement avec des dizaines de connexions gaspillées, avec du gaspillage de la mémoire et de l'overload en vue pour les grosses applications ou tout simplement de rendre le serveur obsolète dans les cas de petits proxys n'aceptant que 2 ou 3 connexions simultanées. L'option timeout permet au serveur de savoir quand libérer la connexion en cas d'accident et ainsi de libérer ses ressources beaucoup plus efficacement. C'est ce qui se passe par exemple lorsque vous vous connectez avec telnet sur un serveur et qu'au bout de 60 secondes d'inactivité en générale la connexion se termine. Je vous renvoie à l'article "Handling network timeouts" de David Reilly pour un exemple d'implémentation des timeouts en java. Somme de controle: Une sorte de numero d'acquittement. Pointeur: C'est la passerelle par laquelle devra passer le prochain paquet envoye. Voir l'article sur les reseaux de MadDany. Options: Les differentes options. Ah ok ! On aurait pas dit hein vu le titre. C'est vrai que "Options" c pas évident... ;) Ben oui je sais que c'etait dur, surtout pour toi qui est atteint par le syndrome de Down ... Le syndrome de qui ? Putain je suis sur qu'il m'insulte là... #"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"# Maintenant, passons a la pratique. ---------------------------------- Pour illustrer les failles du protocole TCP/IP, je vais expliquer la derniere attaque du Condor (eh oui, Kevin Mitnick), celle qui lui couta la liberte... Le 24 decembre 1994, en a peine 10 minutes, Kevin Mitnick s'introduit dans le serveur de Tsutomu Shimomura. Utilisation du IP Spoofing et la prediction de sequences TCP, sans reniflage. SEQUENCE ONE (premiere approche) ------------ 14h09, Kevin commence a interroger une machine du reseau de Tsutomu afin de savoir qui est connecte dessus. Il trouve en quelques secondes l'adresse du serveur, ainsi qu'un terminal X. SEQUENCE TWO (preparation de l'attaque) ------------ Neuf minutes plus tard, K. sature la file d'attente d'un port du serveur avec des SYN, de facon a ne laisser que des connexions a moitie ouverte, ainsi le serveur ignorera les paquets SYN/ACK SEQUENCE THREE (2de partie) -------------- Il enchaine immediatement en lancant une vingtaine de tentatives de connexion sur le terminal, afin de tester le comportement de sa pile TCP/IP, et ainsi pouvoir predire les numeros de sequence suivants. SEQUENCE FOUR (3eme partie) ------------- K. forge un faux paquet SYN, sense venir du serveur et ayant pour destination le terminal X. K pense, avec raison, que le terminal fait confiance au serveur, et qu'il ne requiert pas de mot de passe en provenance de celui-ci. SEQUENCE FIVE (4eme partie) ------------- Le terminal repond a la demande de connexion par un paquet SYN/ACK, que le serveur, paralyse, ne peut qu'ignorer. SEQUENCE SIX (5eme partie) ------------ Mitnick, qui agit alors en aveugle ("the attacker is sitting off in some dark corner of the Internet...", description de cette technique par daemon9 dans phrack), ne recoit pas ce paquet, car l'adresse de retour est celle du serveur, mais il a prepare un faux paquet de reponse (ACK) contenant le numero de sequence qu'il est en mesure de calculer. SEQUENCE SEVEN (6eme partie) -------------- La connexion etant etablie, il introduit une commande qui autorise les connexions de ce terminal de partout. Puis il met "proprement" fin a cette connexion. SEQUENCE EIGHT (7eme et derniere partie youpy) -------------- En quelques instants, il libere la file d'attente du serveur grace a une serie de paquets RST. Une vingtaines de secondes se sont ecoules depuis la "sequence two". Apres cela, Kevin Mitnick n'a plus eu qu'a se connecter sur le terminal X, celui ci pensant avoir recu du serveur l'ordre de s'ouvrir a toutes les connections. Sources: -TCP IP, administration de reseau, editions 0'REILLY®©, ecrit par Craig HUNT et traduit par Eric DUMAS. -Pirat'mag Pourquoi ca a marche ????????????? Explications: Kevin Mitnick a FORGE un paquet. C'est a dire qu'il en a modifie l'entete, que je remets ici : ------------------------------------------------------------------------ | PORT SOURCE | PORT DESTINATION | |----------------------------------------------------------------------| | NUMERO DE SEQUENCE | |----------------------------------------------------------------------| | NUMERO D'ACQUITTEMENT | |----------------------------------------------------------------------| |DEPLACEMENT|RESERVE |FLAGS | FENETRE | |----------------------------------------------------------------------| | SOMME DE CONTROLE | POINTEUR NECESSAIRE | |----------------------------------------------------------------------| | OPTIONS | Bourrage | |----------------------------------------------------------------------| |D E B U T D E L A Z O N E D E D O N N E E S | |......................................................................| |......................................................................| |......................................................................| |F I N D E L A Z O N E D E D O N N E E S | |______________________________________________________________________| Donc, il a modifie l'entete, pour faire apparaitre, dans port source, l'adresse du serveur. Le terminal repond donc au serveur. Mais le serveur recoit le paquet de reponse mais n'en tient pas compte, etant surcharge de connexions a moitie ouvertes a gerer. Mais le terminal ne sait pas que le serveur ne tient pas compte de sa reponse Kevin Mitnick reforge alors un autre paquet et se fait passer pour le serveur. Le terminal X repond, le serveur recoit la reponse mais ne l'utilise pas, pour les memes raisons, ainsi de suite. Les informations contenues dans ce dossier et dans celui sur les réseaux permettront d'écrire un dossier détaillé sur cette technique certainement au prochain numéro de SW, il faut en effet connaître le fonctionnement de tcp/ip et des réseaux pour pouvoir la mettre en oeuvre, donc on a une parfaite introduction sans le vouloir :o) #"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#" ################IP SPOOF###################### #"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#"#" Ou comment cacher son ip ?????? Pour eviter de se faire logger ou simplement par amusement, on peut vouloir cacher son ip. Voici comment faire. Il y a plusieurs solutions: I/ LES WINGATES --------------- Les WinGates sont des programmes permettant de splitter (partager) les connexions. Ils n'ont pas pour but original de faire du spoofing mais utilises par des petits malins ils sont tout de suite beaucoup plus rigolos... :o) Schema d'une connexion sans WinGate ________ _______ | | src:vous,dst:serveur | | |V O U S |----------------------->|SERVEUR| |________| |_______| La le serveur a logge votre adresse IP, il sait qui vous etes. Schema d'une connexion avec un WINGATE : ________ _______ _______ | | src:vous,dst:wingate | | src:wingate,dst:serveur | | |V O U S |----------------------->|WINGATE|------------------------>|SERVEUR| |________| |_______| |_______| Cette fois ci c'est le WinGate qui a votre adresse IP, et le serveur a l'adresse IP du WinGate. En cas d'actions "illicites" sur le serveur, c'est l'ip du wingate qui est loggee et pas la votre. Mais vous n'etes pas intouchable pour autant, il suffit que le serveur et les responsables du WinGate travaillent ensemble et ils retrouveront votre adresse IP. Les Wingates sont utilises pour des connexions en FTP, Telnet, et tout ce qui est en mode console (meme pour IRC) Lors d'une utilisation sur IRC, il est possible que l'on essaye de vous nuker ... Avec l'utilisation d'une Wingate, un /DNS votrenick ne donnera que l'adresse IP de la WinGate. Pour utiliser une wingate sur IRC, faites, dans la fenetre "status": /server le_wingate PORT /quote le-nom-du-serveur-irc PORT /quote user nimportequoi nimportequoi nimportequoi@nimportequoi nimportequoi /quote nick le-nick-que-vous-voulez /quote join la-salle-a-joindre Et voila. Pour taper du texte allez simplement dans la fenetre de la salle de chat, et tapez: /quote le-texte-que-vous-voulez Et voila. (pour plus de détails sur les wingates vous pouvez vous referrer a l'article de MadDany sur les wingates -comme c'est original- paru dans tua003) Une liste de Wingates est dispo sur le site de Sleazy WInd, dans la rubrique telechergement. II/Les proxys ------------- Les proxys fonctionnent comme les wingates, sauf que ceux ci sont utilises pour le HTTP, le SMTP, etc... (voir la section sur les proxys de MadDany) III/Les petites astuces ----------------------- Sur ICQ, il y a des malins qui installent un crack sur leur version d'ICQ afin de pouvoir connaitre votre adresse IP. Mais vous ouvez camoufler votre ip sur ICQ, mais la ce n'est pas du vrai spoofing: Allez dans ICQ>Preferences>Onglet Connections>cocher "I'm using a permanent internet connection" puis "I am behind a Firewall or a Proxy"> "Firewall Settings" >cocher "I am usinf a SOCKS4 proxy server">cliquer sur suite> Dans socks Host, l'ip que vous mettrez sera celle qui s'affichera lorsque quelqu'un demandera votre IP au serveur ICQ. ATTENTION: en procedant comme ceci vous empechez toute connexion tcp directe entre vos correspondants et vous, c-a-d que les messages que vous enverrez et que vous recevrez passeront par le serveur ICQ, et qu'il n'y aura pas de possibilité d'envoi de fichiers ni de sessions de chat LLL EEEEEEEEEEEE LLL EEEEEEEEEEEE LLL EEE LLL EEEEEEEEE LLL EEEEEEEEE LLLLLLLLL EEE LLLLLLLLL EEEEEEEEEEEE M O T D E L A F I N "RAH PUTAIN CA FAIT CHIER LES ASCII !!!! ET PUIS ON DIRAIT PAS MAIS ECRIRE UN DOSSIER SUR LE TCP IP CA CHIE !!!!! :o)" ©®Bluebird bluebirdfr@hotmail.com, for SleazyWind nø2, Januar 2000 All Rights Reserveds