|
Qu'est ce qu'une faille de type overflow ?
Par Rédaction,
secuobs.com
Le 03/12/2003
Résumé : En 1996, AlephOne (modérateur de Bugtrack) a contribué avec l'article "Smashing the stack for fun and profit" paru dans "Phrack Magazine" à la propagation des attaques par débordement de tampon qui datent initialement de 1988 avec le fameux ver de Robert Morris. - Lire l'article
En 1996, AlephOne (modérateur de Bugtraq) a contribué avec l'article "Smashing the stack for fun and profit" paru dans "Phrack Magazine" à la propagation des attaques par débordement de tampon qui datent initialement de 1988 avec le fameux ver de Robert Morris. Les failles de type overflow sont implicitement liées au mode opératoire de la structure de la mémoire d'un processus (PMR). On y trouve trois ensembles, texte accessible en lecture seule et contenant les instructions liées à un processus, data qui contient les variables et la stack ou pile, accessible en écriture. La pile accessible en écriture nous intéresse plus particulièrement pour les débordements de tampons. La pile fonctionne sur l'algorithme LIFO (last in first out), ce qui signifie que les dernières données que l'on insère (instruction PUSH pour empiler) sont aussi les premières a en sortir (instruction POP pour dépiler). Dans une pile, l'adresse de la prochaine instruction à exécuter est appeler EIP (registre %eip, Intel) ou adresse de retour, le sommet de la pile étant quant à lui nommé ESP (registre %esp, Intel). Le principe d'un overflow est d'insérer plus de données (string) qu'une application ne peut en contenir afin de provoquer un débordement (Overflow) de la pile (stack). Les données supplémentaires sont alors réécrites de force dans cette pile à la place de la zone réservée à EIP et ESP. On utilise pour cela la vulnérabilité de certaines fonctions qui ne vérifient pas la longueur de la chaîne d'insertion par rapport à la chaîne de destination : Exemple, insérer 20 caractères de type "C" dans une chaîne variable ne pouvant en contenir que 15 : char string[15] ; scrcpy(string, "CCCCCCCCCCCCCCCCCCCC"); Les fonctions principalement incriminées dans le cas de faille de type overflow : gets(), sprintf(), strcpy(), strcat() ainsi que les fonctions de type scanf(). Ces fonctions n'effectuent aucune vérification de la longueur de la chaîne insérée, préférez leur donc des fonctions plus récentes (version "n" ou n est le nombre de caractère accepté) telles que fgets(), snprintf(), strncpy(), strncat() qui permettent elles de préciser cette longueur : strncpy(dest, src, taille) Lorsqu'une fonction est utilisée par un processus, il en résulte une adresse de retour, le but d'un overflow est d'écraser cette adresse de retour pour la rediriger vers un code pré défini que nous aurons nous même placé, pour placer ce code nous utilisons notre propre buffer qui est accessible en écriture car il est contenu dans la stack. Ce code en assembleur (langage machine) est appelé usuellement shellcode ou oeuf (egg) puisque le code d'un overflow commence par un shell exécuté avec les privilèges du processus en cours d'exécution. Le problème est alors de trouver une adresse de retour valide avec l'emplacement du tampon, pour contourner ce problème, on peut remplir le début du tampon avec des instructions inutiles (instruction nop x90), le retour se fait alors dans cet ensemble null et l'exécution ira jusqu'a notre shellcode. Vous avez aussi la possibilité de répéter le plus de fois possible à la fin de votre tampon l'adresse de retour pour augmenter les chances de réussite de votre overflow. Pour exécuter un overflow sur le processus d'un programme en setuid root, le shell doit obligatoirement être différent de bash ou tcsh qui refusent exécution de ce type de programme. Pour éviter les failles de types overflow (stack/buffer), il est recommandé aux développeurs d'utiliser des librairies de développement spécialisées, par exemple libsafe ( lien et de privilégier les fonctions en version "n" (# grep 'strcpy\|strcat\|sprintf\|gets\|scanf' *.c). Vous pouvez également obliger votre système à changer l'adresse de la pile à chaque exécution de votre programme, cela peut être rendu possible grâce au code suivant que vous ajouterez à votre programme. Pour les utilisateurs, nous vous recommandons de sécuriser votre système avec des outils de type GrSec ( lien pour vos noyau linux (cf. les noyaux wolk lien qui intègrent également GrSec au même titre que ACPI, cryptoapi & low latency) et de patcher le plus rapidement possible les programmes résidants sur votre machine des qu'une mise à jour est disponible pour lutter contre ce type de failles.
- Article suivant : Rapport virus Hebdomadaire du 27 octobre au 02 novembre 2003
- Article précédent : Quand le correctif a des failles
- Article suivant dans la catégorie Failles : Testez votre sécurité avec Symantec Security Check
- Article précédent dans la catégorie Failles : Quand le correctif a des failles
Mini-Tagwall des articles publiés sur SecuObs : | | | | sécurité, exploit, windows, attaque, outil, microsoft, réseau, audit, metasploit, vulnérabilité, système, virus, internet, usbsploit, données, source, linux, protocol, présentation, scanne, réseaux, scanner, bluetooth, conférence, reverse, shell, meterpreter, vista, rootkit, détection, mobile, security, malicieux, engineering, téléphone, paquet, trames, https, noyau, utilisant, intel, wishmaster, google, sysun, libre |
Mini-Tagwall de l'annuaire video : | | | | curit, security, biomet, metasploit, biometric, cking, password, windows, botnet, defcon, tutorial, crypt, xploit, exploit, lockpicking, linux, attack, wireshark, vmware, rootkit, conference, network, shmoocon, backtrack, virus, conficker, elcom, etter, elcomsoft, server, meterpreter, openvpn, ettercap, openbs, iphone, shell, openbsd, iptables, securitytube, deepsec, source, office, systm, openssh, radio |
Mini-Tagwall des articles de la revue de presse : | | | | security, microsoft, windows, hacker, attack, network, vulnerability, google, exploit, malware, internet, remote, iphone, server, inject, patch, apple, twitter, mobile, virus, ebook, facebook, vulnérabilité, crypt, source, linux, password, intel, research, virtual, phish, access, tutorial, trojan, social, privacy, firefox, adobe, overflow, office, cisco, conficker, botnet, pirate, sécurité |
Mini-Tagwall des Tweets de la revue Twitter : | | | | security, linux, botnet, attack, metasploit, cisco, defcon, phish, exploit, google, inject, server, firewall, network, twitter, vmware, windows, microsoft, compliance, vulnerability, python, engineering, source, kernel, crypt, social, overflow, nessus, crack, hacker, virus, iphone, patch, virtual, javascript, malware, conficker, pentest, research, email, password, adobe, apache, proxy, backtrack |
|
|
|
|
|