Buffer Overflow (Débordement de tampon) • un tampon est une zone d'emplacements de mémoire adjacents alloués à un programme ou à une application pour gérer ses données d'exécution • le débordement ou le dépassement de la mémoire tampon est une vulnérabilité courante dans une application ou un programme qui accepte plus de données que la mémoire tampon allouée • cette vulnérabilité permet à l'application de dépasser le tampon lors de l'écriture de données dans le tampon et d'écraser les emplacements mémoire voisins • l'attaquant exploite cette vulnérabilité pour injecter du code malveillant dans le tampon afin d’endommager les fichiers, modifier les données du programme, accéder à des informations critiques, élever les privilèges, accéder au shell, etc. Pourquoi les applications et les programmes sont vulnérables ? • manque de vérification des • ne pas définir les principes limites de filtrage et de validation • utiliser les anciennes appropriés versions du langage de • exécuter le code présent programmation dans le segment de pile • utiliser des fonctions • allocation de mémoire dangereuses et vulnérables incorrecte • manque de bonnes • assainissement insuffisant pratiques de des entrées programmation Buffer overflow basé sur la pile • une pile est utilisée pour l'allocation de mémoire statique et stocke les éléments vulnérables dans l'ordre « dernier entré, premier sorti » (LIFO) • Il existe deux types d’opérations dans la pile – PUSH enregistre la donnée dans la pile – POP retire la donnée de la pile Buffer overflow basé pile
lorsqu'une fonction démarre l'exécution, une
trame de pile est empilée sur la pile dans le registre ESP Lors du function return, la trame de pile est dépilée et l'exécution reprend à partir de l'adresse de retour stockée dans le registre EIP si une application est vulnérable au débordement de tampon basé sur la pile, les attaquants prennent le contrôle du registre EIP pour remplacer l'adresse de retour de la fonction par le code malveillant qui leur permet d'accéder au shell du système cible Buffer overflow basé pile Heap based overflow • Le heap memory est allouée dynamiquement au moment de l'exécution pendant l'exécution du programme et stocke les données du programme • Heap based overflow se produit lorsqu'un bloc de mémoire est alloué à un heap et que les données sont écrites sans aucune vérification des limites • cette vulnérabilité conduit à l'écrasement des pointeurs d'objets dynamiques, des en-têtes de heap, des données basées sur les heap, des tables de fonctions virtuelles, etc. • Les attaquants, exploitent le heap based buffer overflow pour prendre le contrôle de l'exécution du programme. contrairement aux stack based overflow. les heap based buffer overflow sont incohérents et ont des techniques d'exploitation différentes Buffer overflow
EXPLOITATION DU BUFFER OVERFLOW
Étapes d’exploitation 1. Faire du spiking 5. Identifier les bad 2. Faire du fuzzing characters 3. Identifier l’offset 6. Identifier les droits des 4. Écraser le registre EIP modules 7. Générer les shellcode 8. Obtenir l’acces root Exploitation – spiking • le spiking permet aux attaquants d'envoyer des paquets TCP ou UDP spécialement conçus au serveur vulnérable afin de le faire planter • le spiking aide les attaquants à identifier les vulnérabilités dans les applications cibles Exploitation - Fuzzing • L’attaquant utilise le fuzzing pour envoyer une grande quantité d’informations vers le serveur cible afin de réaliser le buffer overflow et l’écrasement du registre EIP • Le fuzzing aide à identifier le nombre d’octets nécessaires au crash du serveur cible • Cette information aide à identifier l’emplacement exacte du registre EIP, ce qui aide à l’injection du code malicieux Exploitation – identification de l’offset • On peut utiliser les outils ruby pattern_create et patterne_offset de metasploit pour identifier l’offset et la position exacte à partir de laquelle commence l’ecrasement d’EIP Ecrasement du registre EIP • L’ecrasement du registre EIP permet à l’attaquant de savoir si le registre EIP peut être contrôlé et écrasé par un shellcode malicieux Exploitation – identification des Bad Char • Avant l’injection du Shellcode dans le registre EIP l’attaquant doit identifier les bad char qui peuvent poser des problèmes dans le Shellcode • Exp « \x00 » Exploitation – identification des droits des modules • Lors de cette phase l’attaquant identifie les droit des modules du serveurs vulnérable qui manquent de protection mémoire • Sur immunity debugger on peut utiliser des des scripts tel que mona.py pour identifier les modules vulnérables • Les phases de génération de shell code et son injection seront vues en détail en TP Les outils de détection • OllyDbg – Debugger analyseur niveau assembleur. Il trace dynamiquement les trames de pile et l'exécution du programme, et il enregistre les arguments des fonctions connues • Veracode, Flawfinder, Kiuwan, Splint, BOVSTT Se défendre contre le buffer overflow • Développer des programmes en respectant les guides et bonnes pratique de développement sécurisé • Utilise la technique ASLR (adress space layout randomization) • Valider les arguments et minimiser les codes nécessitant des privilèges root • Faire des révisions de code via des analyses statiques et dynamiques du code source • Permettre aux compilateurs de borner les buffers • Implémenter des contrôleurs de bornes automatiques Se défendre contre le buffer overflow • Toujours protéger le pointeur de retours dans la pile • Interdire l’execution du code en dehors de l’espace alloué au code • Patcher régulièrement l’OS et les applications • Faire des inspections de code manuellement en utilisant des checklistes afin de s’assurer que le code respecte certains critères • Utiliser des DEP (Data execution prevention) pour marquer certaines zones mémoires comme etant non executables • implémenter la vérification de l'intégrité de l'exécution des données pour détecter si un pointeur de code a été corrompu avant qu'il ne soit déréférencé Les types de buffer overflow • Stack overflow – Il s'agit du type d'attaque le plus courant. Il implique le débordement d'un tampon sur la pile d'appels • Heap overflow – Ce type d'attaque cible les données dans le pool de mémoire ouvert connu sous le nom de heap • Integer overflow – Dans un débordement d'entier, une opération arithmétique aboutit à un entier (nombre entier) trop grand pour le type entier censé le stocker • Unicode overflow – il crée un débordement de tampon en insérant des caractères Unicode dans une entrée qui attend des caractères ASCII. Tout ça c’est de la théorie mais qu’en est il des faits ? Plateformes Techniques d’exploitation Windows XP –SP1, SP2,… Buffer overflow simple Windows Vista –SP…. SEH, SafeSEH Windows 7, 8, 10 NX, DEP Windows server 2003, 2008,… ASLR Linux Stack Cookies Mac OSX ….. Et plus récemment les OS mobiles avec leurs …… chipset ARM
Secrets du Marketing des Médias Sociaux 2021: Conseils et Stratégies Extrêmement Efficaces votre Facebook (Stimulez votre Engagement et Gagnez des Clients Fidèles)
L'analyse fondamentale facile à apprendre: Le guide d'introduction aux techniques et stratégies d'analyse fondamentale pour anticiper les événements qui font bouger les marchés
La communication professionnelle facile à apprendre: Le guide pratique de la communication professionnelle et des meilleures stratégies de communication d'entreprise
La psychologie du travail facile à apprendre: Le guide d'introduction à l'utilisation des connaissances psychologiques dans le domaine du travail et des organisations
Forex Trading facile à apprendre: Le guide d'introduction au marché des changes et aux stratégies de négociation les plus efficaces dans l'industrie des devises.