Annonce

Réduire
Aucune annonce.

Attaques par fragmentation

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Tutoriel Attaques par fragmentation

    Aujourd'hui nous allons étudier deux types spécifiques d'attaques utilisant la fragmentation des trames TCP: Dataless attack (ou Unnamed attack) et l'attaque par fragments recouvrants (ou Overlapping fragment attack, OFA).
    Ces deux attaques tirent partie du fait qu'une trame TCP est envoyée en plusieurs parties (paquets) contenant chacune des données distinctes et sont réassemblées dans la pile TCP qu'à la réception du dernier paquet.






    I) Pré-requis


    Quand une trame TCP est émise, elle se retrouve fragmentée en plusieurs paquets par la couche de transport (3ème niveau OSI). Ces différents paquets contiennent chacun un en-tête (header) indiquant leur numéro d'ordre, le type de données transportées, la longueur du message, le protocole utilisé (ici TCP), l'IP source...
    Ces paquets sont stockés dans la pile TCP en LIFO (last in first out), et restent fragmentés jusqu'à l'arrivée du dernier paquet (header avec le dernier numéro d'ordre et un flag de fin). Une fois le dernier paquet arrivé, le système dépile la pile TCP et assemble tous les paquets en un seul ; il a donc reconstitué la trame TCP qui peut de nouveau transiter entièrement vers sa destination.







    II) Attaques par fragmentation des trames TCP/IP


    A) Dataless Attack ou Unnamed Attack


    Cette attaque consiste à envoyer une trame TCP fragmentée à une machine distante, mais dans laquelle il manque une petite quantité de données dans un ou plusieurs paquets.
    Pour cela, nous pouvons construire une trame altérée et changer la valeur de décalage des offsets dans les champs ou la valeur du champ "Content-lenght". Prenons l'exemple du deuxième cas.
    Le premier paquet de la trame reçu par la machine cible définit souvent la taille de l'allocation mémoire à effectuer pour l'ensemble de la trame grâce au champ "Total Content-lenght" (taille totale de la trame entière). Ainsi, si ce champ a pour valeur "1245", la machine victime allouera un bloc mémoire de 1,245ko pour la trame entière.


    Imaginons maintenant que nous modifions volontairement la valeur de ce champ par une valeur moindre comparée à la taille réelle de la trame. Prenons une trame réelle de 1,7ko. Nous modifions le Total Content-lenght en y mettant une valeur de 800 octets ; bien inférieure à la taille réelle donc.
    A la réception du dernier paquet, la machine B va réassembler la trame entière qui sera beaucoup plus grande que la taille qu'elle avait réservé. Résultat, le bloc mémoire est corrompu entièrement par buffer overflow (dépassement mémoire), et la machine plantera ou sera isolée par incapacité à mobiliser ses ressources (c'est donc potentiellement un DoS).






    B ) Attaque par fragments recouvrants ou Overlapping Attack


    La faiblesse du protocole TCP/IP tient dans le fait que tout système d'analyse ou de détection ne contrôle que le premier paquet d'une trame fragmentée. Dans ce premier paquet, le header contient l'IP de destination ainsi que le port par lequel la trame doit transiter. Les paquets suivants, ne contenant pas ce genre d'informations, ne sont donc pas contrôlés par ces systèmes. Le protocole IP permet la réécriture des données d'un paquet à l'autre si deux paquets consécutifs contiennent les mêmes types d'informations.
    Prenons l'exemple d'une trame IP modifiée qui transite entre une machine A vers une machine B. Le premier paquet de la trame reçue par la pile IP de la machine B contient l'IP de destination (214.25.124.111) ainsi que le port (80). Cependant le deuxième paquet reçu contient aussi le port de destination avec une valeur différente, ici 21 (FTP). Quand ce deuxième paquet va arriver dans la pile IP de la machine B, il va réécrire le champ "port" du premier paquet en y mettant la valeur 21. Le port de destination est dont réécrit, on dit qu'il a été recouvert.


    Imaginons que nous voulons infiltrer une machine B qui possède un firewall bloquant systématiquement l'accès au port 21 mais qui autorise le port 80 (HTTP). Le problème, c'est que nous, nous voulons injecter un remote shell par le protocole FTP. On se documente donc, et on s'aperçoit que 99,3% des Firewall disponibles sur le marché ne contrôlent que le premier paquet des trames IP fragmentées.


    Nous avons notre moyen de contourner le firewall de la machine B.
    Construisons une trame IP dont l'en-tête du premier paquet indiquera le port 80. Construisons maintenant le deuxième paquet dont l'en-tête contiendra cette fois-ci le port 21. Puis laissons la génération automatique construire les paquets restants de la trame en prenant soin d'intégrer à notre deuxième paquet le remote shell adéquat.
    Envoyons maintenant la trame IP fragmentée à la machine B. Le premier paquet reçu sera contrôlé par le firewall et autorisé à passer car il vise le port 80 ; puis tous les autres paquets restants vont passer sans contrôle et s'empiler dans la pile IP de B. Quand le deuxième paquet va arriver, il va réécrire la valeur de son port dans le premier paquet ; le port de destination est maintenant le port FTP (21).
    La machine B va réassembler la trame IP et l'envoyer au port 21 alors que celui-ci était interdit.


    Note: les champs Total Content-Lenght et les champs de destination (ports cibles) sont modifiables manuellement avec des logiciels comme FrameIP.



    III) Protection


    Dans le cas de la Dataless Attack, un système de blocage/contrôle de la mémoire permet de s'en prémunir. En effet, le problème vient de l'incapacité de la machine à réallouer dynamiquement un espace mémoire suffisant pour traiter la trame, ce qui entraîne donc un buffer overflow sur des blocs mémoires réservés. Pour éviter cela, il faut que le système de contrôle refuse toutes les trames dont la taille réelle n'est pas conforme à la taille affichée dans le Total Content-Lenght.
    A savoir que dans la majorité des serveurs, même récents, ces systèmes de contrôle précis ne sont pas installés ou activés par défaut.

    Dans le cas de l'attaque par recouvrement, la seule façon de s'en prémunir et de s'assurer que le firewall installé contrôle bien l'ensemble des paquets de la trame, et non seulement le premier. La plupart des IDS contiennent ce système de contrôle des champs de destination, mais il ne faut pas oublier de l'activer.


    Dernière modification par MadHatter, 27 décembre 2011, 17h41.
    Ex-membre Hackademiciens.
Chargement...
X