Le Heap Spraying est une technique utilisée par les pirates informatiques pour faciliter l'exécution de code arbitraire, généralement dans le cadre d'un exploit contre une vulnérabilité logicielle. Il fonctionne en allouant de nombreuses structures de données « tas » contenant des charges utiles malveillantes, augmentant ainsi la probabilité qu'une vulnérabilité de débordement de tampon, par exemple, entraîne l'exécution du code de l'attaquant.
La genèse du Heap Spray et sa première mention
Le Heap Spraying en tant que technique d'exploit trouve ses racines à la fin des années 1990 et au début des années 2000, lorsque Internet gagnait en popularité et que la cybersécurité n'était pas aussi solide qu'aujourd'hui. Sa première mention majeure réside dans le travail du hacker éthique et expert en cybersécurité SkyLined, qui a fourni des descriptions complètes et des exemples de la technique. Les connaissances de SkyLined ont permis d'illustrer la gravité de la pulvérisation en masse en tant que vecteur de menace, conduisant à des efforts accrus pour atténuer ses impacts.
Heap Spray : un examen approfondi
La pulvérisation de tas consiste à remplir le tas (une région de la mémoire d'un ordinateur utilisée pour l'allocation dynamique de mémoire) avec des morceaux de données contenant une séquence d'octets spécifique, souvent appelée « traîneau NOP » ou « diapositive NOP ». La charge utile réelle de l'exploit, généralement un shellcode, est placée à la fin de cette séquence. Cet agencement « guide » essentiellement le flux d’exécution vers la charge utile si une vulnérabilité permet le contrôle du pointeur d’instruction.
La pulvérisation de tas est principalement utilisée dans les attaques contre des programmes logiciels présentant un bug de mémoire, généralement un débordement de tampon ou une vulnérabilité d'utilisation après libération. Ces bogues peuvent permettre à un attaquant d'écraser une adresse mémoire qui, si elle est manipulée avec précision, peut être utilisée pour diriger l'exécution vers le tas. La pulvérisation du tas aide à « préparer » le tas à cela, ce qui rend plus probable qu'une exécution redirigée atterrisse sur la charge utile d'un attaquant.
Comment fonctionne la pulvérisation en tas : disséquer la technique
La pulvérisation de tas fonctionne en inondant l'espace du tas avec des copies d'une séquence d'octets souhaitée. Voici une séquence simplifiée de la procédure :
- Le heap spray est déclenché, souvent via JavaScript dans un environnement Web.
- Le heap spray remplit le tas avec plusieurs blocs de mémoire contenant les données de l'attaquant.
- Les données pulvérisées sont structurées avec un traîneau NOP menant à la charge utile de l'exploit.
- Si un bug exploitable est présent, l'exécution peut être redirigée vers une adresse mémoire arbitraire.
- Compte tenu de la présence généralisée des données pulvérisées, il y a de fortes chances que cette redirection conduise à la charge utile de l'attaquant.
- La charge utile est ensuite exécutée, fournissant à l’attaquant le résultat souhaité, souvent le contrôle à distance du système.
Principales caractéristiques du Heap Spray
La pulvérisation en tas se caractérise par plusieurs caractéristiques clés :
- Augmentation du taux de réussite des attaques : La pulvérisation de tas augmente les chances d’exploitation réussie d’une vulnérabilité de corruption de mémoire.
- Manipulation de la mémoire : Il manipule l'état de la mémoire du processus pour faciliter l'exécution de code arbitraire.
- Exploitable dans divers environnements : Le Heap Spraying peut être déployé dans de nombreux environnements, tels que les navigateurs Web ou les applications serveur.
- Souvent associé à d’autres exploits : La pulvérisation de tas est généralement utilisée en conjonction avec d’autres exploits de vulnérabilité pour atteindre l’objectif souhaité.
Types de pulvérisation en tas
Les techniques de pulvérisation en tas peuvent être classées en fonction de l'environnement d'exploitation et de la nature de la livraison de la charge utile.
Taper | Description |
---|---|
Spray de tas JavaScript | Utilisé dans les attaques basées sur le Web, JavaScript est utilisé pour remplir le tas de charges utiles malveillantes. |
Pulvérisation en tas flash | Utilise Adobe Flash pour effectuer la pulvérisation, généralement dans des environnements Web. |
Jet de tas Java | Utilise des applets Java pour le spray, une autre méthode pour les attaques basées sur le Web. |
Pulvérisation en tas de précision | Cible des objets spécifiques dans le tas, utile dans les exploits d'utilisation après libération. |
Applications, défis et solutions du Heap Spray
Le Heap Spraying est principalement utilisé par les attaquants du cybermonde pour exploiter les vulnérabilités des logiciels. Il a été largement utilisé pour créer des logiciels malveillants sophistiqués et exécuter des menaces persistantes avancées (APT).
Du point de vue de la sécurité, le principal défi de la pulvérisation en tas est sa détection et sa prévention. Les solutions de sécurité traditionnelles basées sur les signatures ont du mal à identifier les attaques par heap spray en raison de leur nature dynamique. En tant que telles, les solutions modernes s'appuient sur une détection basée sur le comportement et sur l'utilisation de techniques d'atténuation des exploits telles que la randomisation de la disposition de l'espace d'adressage (ASLR) et la prévention de l'exécution des données (DEP).
Comparaisons et caractéristiques
En comparant la pulvérisation en tas avec d'autres techniques similaires telles que le pivotement de pile et la programmation orientée retour (ROP), la pulvérisation en tas se distingue par sa simplicité et son taux de réussite élevé. Bien que chacune de ces techniques ait des caractéristiques et des cas d'utilisation uniques, ce sont toutes des techniques permettant d'exploiter les vulnérabilités de corruption de mémoire pour exécuter du code arbitraire.
Technique | Caractéristiques |
---|---|
Pulvérisation en tas | Simple, utilisé pour augmenter le taux de réussite des exploits de corruption de mémoire. |
Pivotement de la pile | Complexe, redirige les pointeurs de pile vers un autre emplacement, souvent utilisé dans les attaques par débordement de mémoire tampon. |
ROP | Complexe, exploite les extraits de code existants (« gadgets ») en mémoire, en contournant certaines atténuations d’exploits. |
Perspectives et technologies futures
L'efficacité de la pulvérisation de tas a diminué au fil du temps avec la mise en œuvre de techniques de randomisation de la mémoire et de prévention de l'exécution. Cependant, les attaquants continuent de faire évoluer leurs méthodes, en élaborant des techniques de pulvérisation en tas plus sophistiquées et plus précises pour contourner ces protections. Par exemple, la pulvérisation juste à temps (JIT) était une technique développée pour contourner la DEP en manipulant le code compilé JIT en mémoire.
Serveurs proxy et Heap Spray
Les serveurs proxy peuvent être exploités dans le contexte d’une attaque par pulvérisation de tas pour masquer l’origine de l’attaque, ce qui rend plus difficile pour les enquêteurs de retracer la source de l’attaque. D'un autre côté, les serveurs proxy sécurisés peuvent également agir comme une couche de défense, bloquant le trafic malveillant connu ou isolant les systèmes clients d'une exposition directe à un contenu potentiellement dangereux.