Définition du heap spraying
Qu'est-ce que le heap spraying ?
Le tas (heap) est l'un des emplacements mémoire où une application peut écrire des données. Une attaque de heap spraying injecte du code malveillant à de multiples emplacements du tas. En « aspergeant » le tas de multiples copies du code malveillant, l'attaquant augmente la probabilité que le code malveillant soit exécuté par le programme.
Comment fonctionne le heap spraying ?
Le heap spraying est une technique utilisée lors de l'exploitation de dépassements de tampon et de vulnérabilités similaires. Dans ces attaques, l'attaquant développe le code malveillant qu'il prévoit d'exécuter sur le système cible. Ce shellcode est écrit en code assembleur, ce qui le fait ressembler au reste du code de l'application.
Une fois son shellcode créé, l'attaquant mène une attaque de heap spraying selon les étapes suivantes :
- Aspersion : l'attaquant « asperge » le tas de multiples copies du shellcode. Puisque les adresses du tas sont imprévisibles, l'attaquant ne sait pas où les copies du maliciel seront placées dans le tas.
- Dépassement : l'attaquant exploite ensuite une vulnérabilité de dépassement de tampon pour modifier le flux d'exécution du programme. Cela s'accomplit en modifiant la cible d'un appel ou d'un saut pour qu'elle pointe quelque part dans le tas.
- Exécution : l'attaquant a placé de multiples copies du shellcode dans le tas. S'il a de la chance, l'exécution de code redirigée pointera vers une copie du shellcode, exécutant ainsi le code malveillant de l'attaquant.
Pourquoi utilise-t-on le heap spraying ?
Souvent, les attaques visant à obtenir l'exécution de code en exploitant une vulnérabilité de dépassement de tampon ciblent la pile. Les dépassements fondés sur la pile sont souvent plus faciles à réaliser que ceux fondés sur le tas. Cependant, il existe aussi souvent des défenses contre eux, comme les piles non exécutables et les canaris de pile.
Il est également possible d'obtenir l'exécution de code en ciblant le tas, mais ces attaques sont plus difficiles à réaliser. Les adresses mémoire du tas sont moins prévisibles, il est donc plus difficile pour un attaquant d'y déposer du shellcode puis de rediriger l'exécution de code vers ce point.
Les attaques de heap spraying visent à augmenter la probabilité de réussite d'une attaque par dépassement de tampon ciblant le tas. Plus il y a de copies du code malveillant en mémoire, plus la probabilité de succès est élevée.
Se protéger contre le heap spraying
Le heap spraying vise à contourner les défenses courantes contre les attaques par dépassement fondées sur la pile. Il existe toutefois des moyens de se défendre contre les attaques de heap spraying, notamment :
- Validation des entrées : le heap spraying repose sur la capacité d'exploiter des dépassements de tampon et d'injecter du code malveillant dans le tas. La validation des entrées aide à détecter et à bloquer les saisies utilisateur malformées ou malveillantes.
- Analyse comportementale : l'exécution de code fourni par un attaquant fera probablement se comporter le programme de façon anormale. L'analyse comportementale peut détecter une attaque de heap spraying réussie.
- Gestion des correctifs : le heap spraying repose sur l'exploitation d'une vulnérabilité de dépassement de tampon. L'analyse régulière des vulnérabilités et l'application de correctifs peuvent aider à repérer et à corriger les vulnérabilités avant qu'elles puissent être exploitées par un attaquant.
Conclusion
Le heap spraying est une technique conçue pour permettre à un attaquant d'obtenir l'exécution de code en exploitant des vulnérabilités de dépassement de tampon. En plaçant de multiples copies de shellcode malveillant dans le tas, l'attaquant augmente la probabilité que ses tentatives de redirection de l'exécution de code amènent le programme à tomber sur une copie de son code malveillant et à l'exécuter.
L'équipe KZero
Explorez d'autres contenus enrichissants de l'équipe compétente de KZero dans nos sections blogue et guides.