Au-delà des antivirus, une approche holistique : Révélations sur les attaques basées sur la mémoire

Dans l’industrie classique, il est courant d’entendre parler de défauts de conception qui, avant même la naissance réelle d’un produit, le prédisposent déjà à des problèmes. En informatique, certains facteurs peuvent conduire à des effets analogues, c’est le cas des vulnérabilités basées sur la mémoire. Initialement le fait de certains langages de programmation, la portée des vulnérabilités sous-jacentes rend caduque toute approche antivirale traditionnelle. Et comme si cela ne suffisait pas, ces vulnérabilités nous transportent bien au-dela des logiciels pour nous drainer dans les profondeurs de l’électronique, de l’informatique ainsi que des micro-logiciels. Comment se manifestent-elles ? Quelles sont les principales causes de cette gangrène qui pourrait nous obliger à tout repenser concernant la sécurité des terminaux ? Comment les attaquants s’y prennent-ils et au-dela de toute leur ingéniosité, comment lutter ?
A. Le caractère critique des attaques basées sur la mémoire
Dans une enquête menée par Splunk, éditeur de logiciels de sécurité, il a été relevé qu’environ 70 % des vulnérabilités des produits Microsoft sont liées à des problèmes de sécurité de la mémoire. Elles peuvent peuvent être menées de plusieurs manières suivant la proximité physique ou distante avec l’ordinateur ciblé.
Lorsqu’une attaque basée sur la mémoire se fait avec un accès physique à la cible, cela veut dire que l’attaquant a la possibilité d’être en possession des machines ciblées ou tout au moins, d’en être à proximité. Si l’accès physique à une machine lui donne accès à une pléthore d’options, la simple proximité elle, pourrait amener cet attaquant à s’intéresser aux données qu’il pourrait lire sans forcément la toucher, du fait des vulnérabilités matérielles se rapportant à la mémoire, ou carrément, à monter des attaques exploitant celles-ci.
A distance, l’exploitation de la mémoire dans le cadre d’une attaque met en exergue l’usage des logiciels malveillants sans fichiers. Ceux-ci, contrairement à leurs homologues conventionnels dont la charge utile repose sur des fichiers enregistrés sur le disque dur, se rendent difficilement détectables par les solutions de sécurité traditionnelles. En s’exécutant directement en mémoire, les logiciels malveillants sans fichiers nécessitent une surveillance et des mécanismes de défense plus évolués. Et même dans une certaine mesure, une refonte complète du code informatique de certaines applications vulnérables, susceptibles d’ouvrir des failles résultantes d’une mauvaise gestion de la mémoire.
Quelle que soit la distance séparant un attaquant de l’ordinateur cible, les conséquences liées à l’exploitation de vulnérabilités basées sur la mémoire sont houleuses. Nous pouvons citer :
- Une panne système caractérisée par une indisponibilité de celui-ci (il ne répond plus) ;
- La corruption des données ;
- L’exposition à un plus grand nombre de problèmes de sécurité : parce qu’en provoquant l’exécution de code arbitraire, un attaquant peut exploiter d’autres vulnérabilités et corrompre d’autres services de sécurité.
B. Origines des attaques basées sur la mémoire
B1. Origines premières : des langages de programmation dépassés quant à la gestion de la mémoire
Des langages de programmation comme le C et le C++ sont très adulés dans le monde informatique pour avoir permis l’édition de grands logiciels systèmes et applicatifs. Qu’il s’agisse des systèmes d’exploitation MacOS, Windows ou Linux, ces différents langages y ont été formtement utilisés contribuant à leur succès mais aussi, à d’importants déboires relevés sur le plan sécuritaire, du fait d’une mauvaise gestion de la mémoire.
La National Security Agency (NSA) et la Cybersecurity and Infrastructure Security Agency (CISA), des figures de poids incontestables dans l’univers sécuritaire international, n’ont pas manqué de le souligner avec emphase afin de défendre les infrastructures critiques et de stopper des acteurs malveillants.
Leurs recommandations mettent en évidence les risques associés à ces langages traditionnels non sécurisés en mémoire, sujets à des problèmes tels que les dépassements de tampon et les erreurs d’utilisation de mémoire après libération. Ce type de vulnérabilités de sécurité de la mémoire surviennent lorsqu’un programme effectue des opérations involontaires ou erronées en mémoire, avec des conséquences dangereuses comme la corruption des données, un comportement applicatif inattendu, voire une compromission totale du système.
Leurs dommages potentiels sont si graves qu’elles sont identifiées par certains organismes spécialisés de sécurité informatique, comme parmi les plus graves faiblesses logicielles actuelles. Bien qu’apparaissant souvent en tête de liste lorsqu’on parle de vulnérabilité mémoire, les dépassements de tampons, ne sont qu’un type de vulnérabilité se rapportant à la mémoire.
Un dépassement de tampon se produit lorsque le volume de données dépasse la capacité de stockage de la mémoire tampon. Il vaut voir ici la mémoire comme un ensemble de cases que l’on pourrait comparer aux compartiments d’une étagère. Pour stocker les programmes en cours d’exécution et les données manipulées, un certain nombre de compartiments sont sollicités en fonction de la taille du programme ou de la donnée à mettre en mémoire. Le dépassement de tampon surviendra donc, lorsqu’un programme essaiera d’utiliser des compartiments au-dela du nombre de compartiments maximal qui lui a été alloué par le système d’exploitation.
Par conséquent, des compartiments connexes peuvent être empiétés ouvrant ainsi la voie à divers types de comportements indésirables allant de la corruption de données, au plantage du système s’il n’y a par exemple plus de compartiments disponibles, ou dans des cas problématiques, à l’exécution de programmes malveillants dans un espace mémoire à priori « non contrôlé ».
Par exemple, un attaquant peut tirer parti d’un dépassement de tampon, en écrasant un pointeur (variable en programmation qui stocke l’adresse mémoire d’une autre variable), afin qu’il pointe vers une charge utile d’exploitation, pour prendre le contrôle du programme. Ceci aura pour effet de modifier le chemin d’exécution du programme, pour ouvrir la voie à l’exécution du programme malveillant ainsi pointé, avec les conséquences dommageables habituelles dont le vol de données ou leur altération.
Les dépassements de tampon peuvent être le résultats de bugs résultants eux – même d’insuffisances du langage de programmation utilisé, d’erreurs de programmation, ou des deux. Ils peuvent également être provoqués. Dans ces cas, diverses techniques peuvent être utilisées pour mettre le code informatique à rude épreuve, dont l’injection de code rendue possible par une mauvaise validation des données d’entrée dans un programme par exemple.
Comme autre exemple, des attaquants peuvent utiliser un débordement de tampon pour corrompre la pile d’exécution d’une application web, en exécutant du code arbitraire pour prendre le contrôle du serveur. Les dépassements de tampon ne concernent donc pas un type de machine en particulier.
Des ordinateurs personnels aux serveurs, toutes peuvent être sujettes à des dépassements de tampon. On en distingue 03 types à savoir:
- Les dépassements de tampons basés sur la pile (Stack-based buffer overflows): exploitent la mémoire de la pile qui n’existe que pendant l’exécution d’une fonction, en inondant l’espace mémoire d’un programme pour aller au-dela de l’espace qu’il utilise pour les opérations d’exécution en cours.
- Les dépassements de tampons basés sur le tas (Heap-based attacks): suit le même principe de saturation que le dépassement de tampon basé sur la pile, à la différence qu’ici, la structure de données utilisée en mémoire repose sur le tas. La différence entre une pile et un tas dans le cadre d’une gestion de la mémoire étant que, la pile suit le principe LIFO (Last In, First Out), pour dire que le dernier élément ajouté est le premier à être retiré, alors qu’avec le tas, aucun ordre n’est défini, l’allocation des espaces mémoire se fait de façon beaucoup plus dynamique.
- Les dépassements de tampon basés sur une chaîne de format (Format string attack ) : surviennent lorsqu’une application traite les données d’entrée comme une commande, ou ne les valide pas efficacement. En d’autres termes, ce type de dépassement peut survenir lorsque l’application informatique ciblée exécute un code malveillant externe dû à mauvais contrôle, ou un mauvais nettoyage des données en entrée, le but idoine étant de vérifier et/ou de désamorcer du code malveillant ou des données entrantes anormales.
B2. Causes secondaires : les erreurs logicielles
Une erreur logicielle est la conséquence d’un code de mauvaise qualité. Dans les cas concernant la gestion de la mémoire, il est aisé de constater que cela est le fait d’un code pas assez robuste. En général, les jeunes programmeurs ou qui ne sont pas avertis sur les questions de sécurité, se contentent souvent de gérer de manière quasi-exclusive la logique métier, fonctionnelle, ou applicative qui se rapporte aux missions principales de l’application. Cette façon de faire est susceptible de provoquer des erreurs logicielles se rapportant à la mémoire à l’instar des:
- Erreurs d’utilisation après libération (Use-After-Free Errors) et les écritures hors limites (Out-of-Bounds Write) : surviennent lorsqu’un programme continue à utiliser un pointeur qui est la variable contenant l’adresse d’un autre espace mémoire, après que la mémoire vers laquelle il pointe a été désallouée. En d’autres termes, un pointeur dans cette situation fait référence à un espace mémoire désormais libre ou alloué à un autre logiciel, vu du système d’exploitation.
- Ecritures hors limites : se produisent lorsqu’un programme écrit des données en dehors de la mémoire tampon allouée.
- Validations d’entrées incorrectes (improper input validation): se produit lorsque le logiciel ou l’application ne parvient pas à vérifier ou à nettoyer correctement les entrées avant leur traitement. C’est le moyen le plus couramment utilisé pour injecter du code au point de provoquer des dépassements de tampon ou des accès non autorisés. Les problèmes de validation d’entrée sont particulièrement fréquents dans les applications web et les systèmes embarqués, où les données externes sont fortement sollicitées.
- Dépassements de capacité ou bouclage d’entier (Integer Overflow or Wraparound): avec des langages à typage statique comme le C et C++, la taille d’une variable est définie à l’avance. C’est notamment le cas des entiers dont pour une raison ou une autre, un calcul ayant généré une valeur au dessus de la valeur maximale est possible, provoquant un dépassement de tampon avec comme conséquence notable la corruption des données adjacentes. Toutefois, la limite maximale n’est pas la seule qui pourrait être mise en cause. Le fait de dépasser la limite minimale est également sujet à provoquer un comportement inattendu.
B3. Causes tertiaires : les erreurs systèmes et les techniques Living-off-the-land (LotL)
B3.1. Les erreurs systèmes
Contrairement aux logiciels applicatifs conçus pour permettre à un utilisateur d’accomplir des tâches spécifiques qui lui sont propres, les logiciels systèmes eux, sont conçus dant l’optique de faire fonctionner l’ordinateur ou d’en assurer l’administation. Ils bénéficient le plus souvent à cet effet, d’une légitimité sans limite quant à leur exécution. Dès lors, les cibler pour commettre des dégâts représente une aubaine pour tout attaquant et un cauchemar pour la cible.
L’usage de logiciels légitimes dont les plus dangereux relèvent directement du système d’exploitation en lui-même, constituent le camouflage par excellence des logiciels malveillants sans fichiers. On parlera alors des techniques Living-off-the-land (LotL) qui en d’autres mots, consistent pour un attaquant à utiliser des outils, des applications et des scripts déjà présents et légitimes sur un système cible pour mener une attaque.
Au premier abord, qui oserait soupçonner une instance du logiciel système Windows Powershell, ou Windows Management Instrumentation (WMI), pour ne citer que ces deux là, en cours d’exécution ? Pourtant ils ont déjà, et continuent à servir de vecteurs pour la propagation de logiciels malveillants sans fichiers, ciblant la mémoire.
Pour en tirer parti, les hackers exploitent leurs vulnérabilités, via des techniques d’injection de code, donnant ainsi une apparence saine à leurs applications malveillantes, qui passeront alors à l’oeuvre sans éveiller le moindre soupçon. Ce caractère furtif est renforcé par le fait que, comme le nom l’indique, un logiciel malveillant sans fichier ne se lance pas à partir du disque dur, il ne s’y installe pas, et ses moyens de persistance ne relèvent pas de l’enregistrement de fichiers classique en mémoire de stockage. C’est en ce sens que quelque fois, le registre Windows, pourra aussi être exploité.
B3.2. Les techniques Living-off-the-land (LotL)
Dans le cas de Windows PowerShell, il peut être exploité suivant plusieurs phases au cours desquelles le malware sans fichier va se déguiser comme un script normal. Cela pourra se faire de la manière suivante :
- Téléchargement et exécution de code malveillant : en ouvrant des documents Office (Word, Excel, Access ou autre), contenant des scripts sensés faciliter le traitement automatique de certaines données (macros), un attaquant pourrait en profiter pour vous faire télécharger à votre insu bien-sûr, un script malveillant depuis un serveur distant directement en mémoire. Cela évite d’écrire un fichier sur le disque, rendant l’attaque difficile à détecter par les antivirus traditionnels basés sur les signatures de fichiers.
- Vol d’identifiants : avec des outils comme Mimikatz, souvent exécuté via PowerShell. Ils peuvent être utilisés pour récupérer des mots de passe en texte clair, des hachages de mots de passe et des tickets d’authentification à partir de la mémoire du système, bypassant ainsi le processus de gestion et de mise en œuvre de la politique de sécurité du système (LSASS).
- Obfuscation : consiste à brouiller, masquer ou créer de la confusion afin de rendre un bout de code indétectable ou illisisble, et des scripts PowerShell malveillants peuvent user de techniques y relatives afin d’échapper aux moteurs de détection. Les techniques d’obfuscation incluent l’encodage en Base64, l’utilisation de guillemets inversés, et d’autres manipulations de la syntaxe.
Exemples concrets de logiciels malveillants : De nombreux ransomwares et logiciels de cryptojacking (comme Purple Fox ou Lemon Duck) ont utilisé Windows PowerShell pour se propager. Le malware Emotet a également utilisé des scripts PowerShell pour télécharger ses charges utiles.
Concernant Windows Management Instrumentation (WMI) qui est une interface puissante pour la gestion à distance des systèmes Windows, un attaquant pourra en abuser pour la persistance, l’exécution à distance et le mouvement latéral, ainsi qu’il suit :
- Persistance : Les cybercriminels peuvent créer des abonnements d’événements WMI pour exécuter du code malveillant de manière persistante. Par exemple, ils peuvent configurer un abonnement pour qu’un script s’exécute chaque fois que le système démarre ou à un intervalle de temps défini. Cela permet au malware de se réexécuter même après un redémarrage, sans avoir de fichier sur le disque.
- Mouvement latéral : WMI permet d’exécuter des commandes sur des machines distantes. Les attaquants utilisent cette fonctionnalité pour se propager à travers un réseau en exécutant des scripts PowerShell, ou d’autres commandes sur d’autres systèmes, leur permettant de s’étendre sur l’ensemble du réseau de la victime.
Exemples concrets de logiciels malveillants ayant tiré parti de WMI : des groupes de menaces avancées persistantes (APT29, APT41) ont utilisé WMI pour voler des informations d’identification, déployer des backdoors et exécuter des commandes. Le backdoor POSHSPY est un exemple notable qui abuse à la fois de Windows PowerShell et de WMI pour une furtivité maximale.
Pour s’assurer que leur code malveillant s’exécute à chaque démarrage, tout en évitant d’écrire des fichiers malveillants sur le disque (persistance et furtivité), des attaquants pourraient se servir du registre Windows de la manière suivante :
- Garantie de la persistance via les clés « Run »: ces clés du registre sont conçues pour lancer automatiquement des programmes au démarrage du système. Au lieu d’inscrire le chemin d’un fichier exécutable, les attaquants eux y placent une commande qui exécute directement un script malveillant via un outil système légitime comme PowerShell, qui à chaque redémarrage, permettra de télécharger et d’exécuter un script malveillant directement à partir d’une URL, sans jamais le sauvegarder sur le disque dur.
- Stockage de la charge utile directement dans le registre: le code malveillant est souvent encodé ou chiffré et réparti sur plusieurs entrées du registre pour éviter d’être facilement détecté. Exemple concret : un malware pourrait écrire des segments de son code sous forme de chaînes de caractères dans une nouvelle clé de registre, par exemple HKCU\Software\MalwarePayload. Une fois au démarrage, la commande inscrite dans une clé « Run » (comme expliqué dans le premier point) peut exécuter un script PowerShell qui lit, déchiffre, et assemble ces fragments de code pour ensuite les exécuter en mémoire. Le logiciel malveillant Duqu est un exemple historique de malware qui a utilisé le registre de cette manière.
- Utilisation des classes WMI via le registre: les attaquants peuvent utiliser le registre pour enregistrer des abonnements à des événements WMI qui déclenchent l’exécution d’un script malveillant. Exemple concret : une clé de registre peut être modifiée pour créer un « filtre d’événement » WMI qui s’active à chaque démarrage de l’ordinateur. Ce filtre est ensuite associé à un « consommateur d’événement » (event consumer) qui exécute une commande PowerShell. Cela permet au malware d’être relancé de manière persistante et sans laisser de traces sur le disque. Le malware Adylkuzz a été un exemple qui utilisait cette technique pour installer un mineur de crypto-monnaie.
Bien que les cas d’utilisation ci-dessus soient déjà très efficaces, les attaques sans fichier modernes peuvent cibler une surface d’attaque plus large, et combiner un ensemble complexe de techniques utilisant en plus des techniques de type Living-off-the-land (LotL), d’injection de code et de manipulation de registre sus-évoqués. On peut citer :
- Injection de DLL réflective : permet aux acteurs malveillants de charger des bibliothèques de liens dynamiques directement depuis le disque dans une zone mémoire d’un processus sans les enregistrer. Cette approche a notamment été utilisée dans des attaques contre des institutions financières, où des chevaux de Troie bancaires résidant en mémoire ont été propagés. Ce type d’attaque contourne les mécanismes de chargement de bibliothèques conventionnels, échappant ainsi aux contrôles de sécurité.
- Exploitation des tâches planifiées : en outrepassant leur usage initial qui permet la planification des tâches de Windows, des attaquants peuvent s’en servir pour établir la persistance de leurs malwares sans avoir à les enregistrer sur le disque dur. Au lieu de créer un fichier, ils créent une tâche planifiée chargée d’exécuter une commande ou un script qui à son tour télécharge et exécute la charge utile malveillante à des intervalles réguliers. Exemple : un attaquant crée une tâche planifiée qui exécute une commande PowerShell à chaque connexion de l’utilisateur. Cette commande récupère un script malveillant à partir d’un serveur distant et l’exécute en mémoire. La tâche elle-même, bien que malveillante, est une fonctionnalité standard du système.
- Exploitation du BIOS/UEFI : intervient avant le chargement du système d’exploitation puisque le micro-programme BIOS ou sa version évoluée UEFI est celui-la qui permet d’amorcer le système. Pour le compromettre, dans le cadre d’attaques plus avancées, un logiciel malveillant peut s’y injecter pour survivre même si le disque dur est formaté ou remplacé. On appelle ce genre de programme malveillant des rootkits. Ils sont de ce fait extrêmement difficiles à détecter et à supprimer, car se trouvant en dehors du système d’exploitation et du disque dur. D’ailleurs, le logiciel malveillant LoJax est connu pour modifier l’UEFI d’un système en installant sa charge utile de manière persistante dans le firmware de la carte mère. Ainsi, à chaque démarrage, il peut réinfecter le système d’exploitation même après une réinstallation complète. D’autres exemples ont également fait parler d’eux à l’instar de Scranos, qui ne date que de 2019 et s’attaque à l’UEFI de manière spectaculaire prenant le contrôle de l’ensemble du système avec des objectifs variés allant du vol de données à l’abonnement à des chaîne YouTube en passant par l’injection de publicités dans les navigateurs, l’installation d’extensions malveillantes, et bien d’autres. Il faudra noter que ce rootkit parvient à infecter les systèmes par le biais de logiciels piratés (« crackés »).
B4. Causes quaternaires: les vulnérabilités matérielles
B4.1. Des failles émanent du processeur
Perçu à juste titre comme le coeur de l’ordinateur, savoir que le processeur lui aussi pourrait présenter des failles, a de quoi faire paniquer. Mais avant il faut en comprendre l’essence, car bien que graves, la mise en oeuvre de cette découverte datant de 2018, n’est pas donnée au premier venu comme l’ont relevé les constructeurs, tout en tirant une sonnette d’alarme sur le fait que tout est à surveiller, logiciel comme matériel, des mises à jour pouvant combler les failles et atténuer les vulnérabilités sous-jacentes de l’une ou l’autre composante.
Spectre et Meltdown, sont des failles emblématiques divulguées par l’équipe d’experts en sécurité informatique du Project Zero de Google, en collaboration avec des chercheurs dans plusieurs pays, jadis en 2018.
Meltdown, affecte les puces Intel et permet aux pirates informatiques de contourner la barrière matérielle entre les applications exécutées par les utilisateurs et la mémoire de l’ordinateur. Pour ce faire, Meltdown exploite la fonction d’exécution out-of-order des processeurs, ou exécution dans le désordre, ce qui a pour effet de briser la stricte séparation des processus entre les applications et la mémoire système. En d’autres termes, Meltdown outrepasse la limite qui devrait exister entre les zones mémoires réservées au système ou plus spécifiquement au noyau du système d’exploitation, et celles réservées aux actions d’un utilisateur. Conséquences ? La possibilité pour un attaquant d’accéder à des données stratégiques compte tenu de la logique de fonctionnement d’un système d’exploitation. On peut par exemple citer, des mots de passe.
Spectre quant à lui, rompt la séparation entre les applications en exploitant les mécanismes de prédiction de branchement et d’exécution spéculative. Dans un souci d’optimisation du fonctionnement du processeur, une exécution dite « spéculative » permet à celui-ci de gagner du temps, sur la base de prédictions liées aux prochaines commandes à exécuter. Cela amène donc le processeur à se brancher à l’avance, et d’une certaine manière de pré-charger et pré-exécuter, des instructions qu’il a pensé être les prochaines. Sauf que, celles-ci peuvent bien représenter un danger si jamais, la prédiction tombe sur un programme malveillant, qui pourrait de ce fait être exécuté s’il est bien préparé par un acteur malveillant, et ce, sans que le système ne réagisse.
B4.2. Une mémoire de travail faillible (DRAM)
Lorsque nous parlons d’attaques basées sur la mémoire, nous parlons spécifiquement de la mémoire de travail, communément appelée RAM pour Random Access Memory. Contrairement à la mémoire de stockage que représente le disque dur quelle que soit la technologie (SDD ou HDD), elle permet de stocker de façon temporaire les applications en cours d’exécution et les données qu’elles sont sensées traiter. Mais dans son fonctionnement, certains éléments électroniques peuvent la rendre vulnérable, plus particulièrement lorsqu’il s’agit des mémoires de type DRAM (Direct Access Memory).
«Un problème sous-jacent bien connu des DRAM s’appelle Rowhammer et est connu depuis plusieurs années», dixit Kaveh Razavi alors à la tête d’une équipe de recherche de l’ETH Zurich, en collaboration avec des collègues de la Vrije Universiteit Amsterdam et de Qualcomm Technologies.
Les DRAM ont besoin de courant électrique pour assurer la permanence des données qu’elles contiennent. Elles offrent cependant des vitesses de lectures / écritures plus élevées par rapport aux autres technologies permettant leur conservation hors tension. Ce stockage volatile est rendu possible par l’usage d’une paire de condensateur-transistor, permettant de stocker un bit d’information. Pour pouvoir maintenir ce dernier dans la durée tout en conservant son intégrité, un rafraichissement régulier est nécessaire. Mais le défi ne s’arrête pas là. RowHammer désigne une vulnérabilité matérielle où l’accès répété à une ligne de mémoire d’une puce DRAM peut déclencher des inversions de bits dans les lignes adjacentes, entraînant une corruption des données. La raison de cette anomalie provient des condensateurs sus-évoqués.
En effet, les condensateurs perdent de la charge au fil du temps, et lorsqu’ils en perdent trop, l’ordinateur ne sait plus si la valeur du bit stocké était «1» ou «0», selon que la charge de courant est forte ou faible. L’intérêt pour un attaquant serait donc d’amener l’ordinateur à se meler les pinceaux en provoquant des fuites rapides de courant dans les lignes voisines à celles sollicitées, surpassant le temps de rafraichissement. En faisant cela, il amène l’ordinateur à « perdre la tête » quant à ce qui était stocké dans ces lignes adjacentes également appelées « lignes victimes », si bien qu’il pourrait se retrouver en train de créer des accès à des zones restreintes du système informatique, sans avoir recours à une quelconque vulnérabilité logicielle. Le résultat final peut alors être un exploit d’élévation de privilèges permettant d’obtenir l’accès root sur un système DDR5 avec les paramètres par défaut en seulement 109 secondes.
La gravité potentielle de cette vulnérabilité est telle, qu’elle a reçu le score de 7,1 sur 10 suivant le système CVSS et a été répertoriée avec l’identifiant CVE-2025-6202 sur le site de la CVE, où elle y est d’ailleurs décrite en ces termes: « Une vulnérabilité dans la mémoire DDR5 SK Hynix sur x86 permet à un attaquant local de déclencher des inversions de bits Rowhammer, affectant l’intégrité matérielle et la sécurité du système. Ce problème affecte les modules DIMM DDR5 produits entre 2021-01 et 2024-12« .
C. Techniques de défense envisageables
En fonction du contexte et de l’environnement ou du périmètre à protéger, diverses techniques de défense peuvent être mises en place pour empêcher, atténuer ou mitiger la mise en œuvre et l’impact d’une potentielle attaque basée sur la mémoire. Bien que certains scénarios à l’instar de ceux ciblant les processeurs pourraient laisser croire qu’ils relèvent uniquement du champs de la CIA, du Mossad, MI6, ou que sais-je encore, il serait supputatif de minimiser l’existance de menaces aguerries, près de chez soi. Ainsi, en entreprise, les mesures prises par les administrateurs systèmes devraient vous interpeller ; celles déployées et prises en compte dès la conception de votre future application devraient vous captiver ; et d’une manière générale, le commun des mortels ne saurait mourir résigné en appliquant les recommandations non exhaustives qui suivent.
C1. Techniques de défense côté développeur
- Utiliser des langages de programmation alternatifs au C, C++, Fortran ou autres, en suivant l’exemple de Microsoft qui a adopté Rust en grande partie grâce à sa sécurité de la mémoire native. Contrairement à C et C++, qui exigent une gestion manuelle de la mémoire, Rust intègre un « ownership system » et un « borrow checker » au niveau du compilateur. Ces mécanismes garantissent qu’il n’y a pas de pointeurs nuls, de « data races » ou de dépassements de tampon, ce qui élimine une grande partie des vulnérabilités de sécurité liées à la mémoire dès la compilation. De plus, Rust est un langage compilé qui offre des performances comparables à C et C++.
- Etablir des minima acceptables quant aux pré-requis nécessaires pour le fonctionnement de l’application à développer, en ciblant des systèmes d’exploitation modernes qui déploient désormais une protection à l’exécution, et qui renforcent la sécurité contre les dépassements de tampon.
- Ecrire du code robuste intégrant des mécanismes de tests sécuritaires à chaque étape ou cycle de développement.
C2. Techniques de défense côté administrateur système
- Analyse de la mémoire : à la recherche de tendances dangereuses et d’actions inhabituelles, via des systèmes avancés d’analyse de la mémoire dans l’optique de détecter des risques.
- Formation des utilisateurs : il s’agira à terme d’installer au sein de ses équipes une culture de sécurité. Les formations en question devront donc être régulières afin d’aider le personnel à identifier les sources courantes d’attaques sans fichiers, permettant ainsi d’éviter toute compromission précoce.
- Analyse comportementale : via des outils d’analyse comportementale qui surveillent en temps réel le comportement des utilisateurs et des processus. Quelques outils adaptés à ce type tâche sont : Mixpanel, Amplitude ou encore FullStory.
- Renforcement du système : l’idée étant de réduire la surface d’attaque concomitamment avec le respect du principe des moindres privilèges. Au gré de la suppression d’outils superflus, il s’agira de limiter les droits des utilisateurs et logiciels au strict nécessaire. Il faut dire que l’approche des moindres privilèges se marie aussi bien avec une séparation intelligente des rôles. Le fonctionnement de logiciels systèmes tels que PowerShell se doit aussi d’être fortement encadré, et au besoin, une liste blanche d’applications ainsi que l’utilisation réglementée des fonctions d’administration doivent être mis en place.
- Segmentation du réseau : pour limiter le déplacement latéral et maîtriser la propagation d’une infection par un malware, en l’occurence un qui ciblerait la mémoire.
- Migration vers des systèmes d’exploitation modernes: car disposant d’une protection à l’exécution dont la randomisation de l’espace d’adressage (ASLR), qui consiste en un déplacement aléatoire des emplacements de l’espace d’adressage des régions de données ; la prévention de l’exécution des données via un marquage de certaines zones de mémoire comme exécutables ou non exécutables, empêchant ainsi l’exécution de code dans une région non exécutable ; la protection contre l’écrasement du gestionnaire d’exceptions structuré (SEHOP) qui empêche le code malveillant d’attaquer le gestionnaire d’exceptions structuré (SEH), un système intégré de gestion des exceptions matérielles et logicielles.
C5. Techniques de défense pour tous
- Détection et réponse aux points d’extrémité (EDR) : ils suivent l’activité du système et documentent les comportements suspects en temps réel, y compris en mémoire de travail. Leurs aptitudes couvrent aussi bien les comportements suspects en mémoire, les liens de processus étranges, que l’utilisation d’utilitaires systèmes. Certains spécialistes s’accordent même à dire que les EDR représentent une évolution sine qua non des antivirus traditionnels. Parmi les solutions faisant pignon sur rue en la matière, les EDR suivants ressortent comme des solutions complètes : CrowdStrike Falcon Insight XDR ; SentinelOne Singularity Platform ; Microsoft Defender for Endpoint. Cybereason Endpoint Detection and Response et Carbon Black Cloud Endpoint Standard font également figure de favoris mais sont davantage orientés vers l’analyse.
- Limitation des privilèges utilisateurs et application du principe des moindres privilèges : question d’atténuer l’impact des attaques ciblant la mémoire. Pourquoi ? Parce que les processus en cours d’exécution le sont avec les privilèges de l’utilisateur actif. Bien que cette méthode puisse trouver des limites en ce qui concerne les rootkits, elle permettra déjà de maîtriser l’exécution de scripts essayant d’accéder aux ressources critiques, réduisant ainsi la surface d’attaque. Il faudra tout de même noter que quelques fois, l’usage de privilèges réduits peut entraîner des appels à saisir un mot de passe administrateur pour autoriser un programme à s’exécuter. Autoriser sans lire, ou vérifier, exécuter avec empressement ou exécuter pour exécuter, nous ramènera à la case de départ.
- Mises à jour régulières du système : permettent de maintenir les systèmes à jour et avec les derniers correctifs de sécurité.
- Mise à jour « matérielles »: pensez aussi à faire évoluer le matériel car, nous l’avons évoqué, le matériel peut également être sujet à des vulnérabilités. Et non, tout n’est pas question d’obsolescence programmée, il y a aussi la science et les enjeux sécuritaires sans cesse grandissants.
- Elaboration d’un plans de réponse aux incidents : en un mot, soyez prêts ! En cas d’attaque, plus vous réagissez vite, moins une attaque peut causer des dégâts.
Avec les attaques basées sur la mémoire, nous convenons tous ensemble que le mot hacker prend une autre dimension, sa vraie dimension. De plus en plus réduit à des attaques « bas de gamme », l’on se rend compte ici que nul ne s’y prête s’il ne connaît le système. Des semi-conducteurs aux structures de données, à la programmation en passant par d’autres composantes matérielles, les différents systèmes d’exploitation, et tout ce qui jonche les profondeurs d’un ordinateur, les attaques basées sur la mémoire, revêtent un caractère hautement nocif. Même les mesures palliatives sont évoquées avec prudence. Toutefois, rigueur aidant avec l’usage des technologies modernes à l’instar des EDR évoqués, ainsi que l’intelligence artificielle qui se créé un chemin ici et là, la bataille contre les attaques utilisant ces procédés peut être gagnée, mais ce sera sans compter sur la sensibilisation des uns et des autres. Alors, partagez !
G.T. Nlo
Références:
- https://www.imperva.com/learn/application-security/buffer-overflow/
- https://cybersecuritynews.com/memory-based-attacks/
- https://www.linkedin.com/pulse/memory-based-attacks-silent-assassin-cybersecurity-marc-degli-ark8c
- https://runsafesecurity.com/blog/memory-safety-vulnerabilities/
- https://www.fortinet.com/resources/cyberglossary/buffer-overflow
- https://semiengineering.com/memory-based-cyberattacks-become-more-complex-difficult-to-detect/
- https://www.spiceworks.com/it-security/vulnerability-management/articles/rising-memory-based-attacks/
- https://www.solutions-numeriques.com/dossiers/vulnerabilites-materielles-le-hardware-a-aussi-ses-failles/
- https://fr.finance.yahoo.com/actualites/des-failles-curit-menacent-tous-105348352.html
- https://www.sciena.ch/fr/research/serious-security-vulnerabilities-in-computer-memories.html
- https://thehackernews.com/2025/09/phoenix-rowhammer-attack-bypasses.html
- https://www.cve.org/CVERecord?id=CVE-2025-6202

