Last update: 29/05/2007


CatégorieOverflow
Mise à jour07/07/2004

Dossier Buffer overflows
"Démonstrations pratiques de buffer overflows" est un dossier présentant de manière pratique les failles heap/stack overflow sous Linux et sous Windows.

Principe
Les buffer overflows sont le sujet de très nombreuses docs disponibles sur le net. Mais elles se focalisent généralement sur le concept de buffer overflow, décrivant le principe du débordement et du shellcode. Il est plus difficile de trouver des docs montrant réellement la mise en pratique de ces concepts.

L'idée de ce dossier est donc de traiter cette partie. Il est constitué de plusieurs exemples de buffer overflows avec le code complet du serveur vulnérable et des outils utilisés pour l'exploitation. L'objectif est de vous permettre de reproduire ces attaques chez vous relativement facilement, afin que vous puissiez étudier concrètement leur fonctionnement. Je ne ferais donc pas presque pas de rappels théoriques (mais vous trouverez des pointeurs vers des bonnes docs).
Cadre de l'étude
Les buffer overflows se feront sur des cas d'école: Ce sont des serveurs que j'ai développé pour cette étude et qui accomplissent un certain nombre d'opérations symboliques. Je n'ai pas choisi des cas réels car cela serait un peu trop compliqué pour une explication (et également pour éviter tout problème juridique...)
Par contre, tous les services exploités sont des serveurs. L'exploitation est donc distante. Elle consistera en l'ouverture d'un shell sur la machine distante:
  • Pour Linux, un xterm en export display
  • Pour Windows, un cmd.exe avec les pipes redirigés vers des sockets
En pratique...
Installation
  • Téléchargez l'archive ghorg0reBey_BUFFER_OVERFLOWS.zip ci-dessous et décompressez la
  • Ouvrez "ghorg0reBey Démonstrations pratiques de buffer overflows.pdf" et suivez l'étude: tout y est décrit
Contenu de l'archive
  • Un document pdf "ghorg0reBey Démonstrations pratiques de buffer overflows.pdf" qui présente de manière détaillée toute l'étude. INDISPENSABLE pour la compréhension.
  • Une présentation powerpoint "ghorg0reBey Démonstrations pratiques de buffer overflows.ppt" qui présente cette étude. Elle est difficile à comprendre sans la présentation
    orale, mais elle comporte quelques animations intéressantes.
  • Un ensemble de fichiers sources et executables pour réaliser les overflows.
Arborescence de l'archive
Voici la description de l'arborescence de l'archive :
  • DOCS = Contient le PDF et la présentation PowerPoint

  • INJECTER = Contient l'outil "injecter.pl" utilisé pour former les buffers envoyés au serveur et les fichiers de configurations

  • LINUX = Contient les codes pour les exemples sous Linux
    • SHELLCODE_BUILDER = Contient les codes des programmes pour générer les shellcodes pour Linux
    • STACK_OVERFLOW = Contient les codes des serveurs vulnérables pour les exemples de stack overflow
    • HEAP_OVERFLOW = Contient le code du serveur vulnérable pour l'exemple de heap overflow


  • WINDOWS = Contient les codes pour les exemples sous Windows
    • BACKDOOR = Contient le code de la backdoor (cmd distant)
    • SHELLCODE_BUILDER = Contient les codes des programmes pour générer les shellcodes pour Windows
    • SHELLCODE_SERVER = Contient le code du serveur de shellcode
    • VULN_SERVER_BUFFER_OVERFLOW_VC6 = Contient le projet Visual 6.0 du serveur vulnérable pour l'exemple de stack overflow
    • VULN_SERVER_BUFFER_OVERFLOW = Contient le projet Visual .net du serveur vulnérable pour l'exemple de stack overflow
    • VULN_SERVER_BUFFER_OVERFLOW_VTABLES = Contient le projet Visual .net du serveur vulnérable pour l'exemple de heap overflow
Plan de l'étude
Exploitation sous Linux
  • Exploitation de stack overflow
    • Exploitation par un buffer "shellcode after"
    • Exploitation par un buffer "shellcode before"
  • Exploitation de heap overflow
Exploitation sous Windows
  • Exploitation d’un stack overflow par écrasement de l’adresse de retour.
    • Cas d’une compilation avec Visual C++ 6.0 : Exploitation directe
    • Cas d’une compilation avec Visual .net : L’option /GS
  • Présentation d’une corruption de la VTABLES : Les limites de l’option /GS
Cas des équipements de filtrage
  • Le filtrage des flux sortants par un firewall personnel : l’illusion de sécurité
Ressources
Disclamer
Avant toute lecture de ce document et utilisation du code/des programmes fournis dans ce dossier, le lecteur doit accepter les conditions suivantes :
  • Il reconnaît connaître le sujet de ce dossier – L’exploitation de buffer overflows – et le lire en pleine connaissance de cause.
  • Il accepte être le seul et unique responsable des expérimentations menées à partir de ce dossier et dégage par conséquent l’auteur de toute responsabilité en cas de dégâts, même s’ils interviennent en suivant point par point les tests décrits dans cette documentation.
  • Utilisation dans le cadre privé (réseau privé du lecteur) :
    • Les codes fournis peuvent être modifiés, réutilisés ou adaptés.
    • Les documents restent la propriété de l’auteur.
  • Utilisation hors du cadre privé (hors du réseau privé du lecteur) :
    • Aucune partie de ce dossier (documents ou codes) ne doit être utilisée ou inspirer des actions illégales (piratage, intrusion,…).
    • Toute publication (ou action) citant (ou s’appuyant) sur des éléments de ce dossier devront faire l’objet d’une demande et d’un accord explicite de la part de l’auteur.
Accès aux ressources
Lien vers l'archive contenant l'ensemble des ressources (code, docs, présentation,...) ghorg0reBey_BUFFER_OVERFLOWS.zip

Liens vers différents fichiers de l'archive, pour un apperçu rapide :
Documentation
Partie Linux
Partie Windows
Une remarque/un bug ?
N'hésitez pas à me contacter pour me faire part de vos remarques/suggestions : Benjamin CAILLAT