ClickCease Guide des vulnérabilités de corruption de la mémoire dans le noyau Linux

Table des matières

Rejoignez notre populaire bulletin d'information

Rejoignez 4 500+ professionnels de Linux et de l'Open Source !

2 fois par mois. Pas de spam.

Guide des vulnérabilités de corruption de la mémoire dans le noyau Linux

Rohan Timalsina

22 mai 2023 - L'équipe d'experts de TuxCare

Les cyberattaques sont principalement motivées par le gain financier, ce qui conduit les attaquants à trouver de nouvelles techniques pour accéder en permanence aux données. Malgré l'augmentation constante de la fréquence et de la complexité de ces attaques, les vulnérabilités liées à la corruption de la mémoire restent le principal problème qui persiste depuis quatre décennies. 

Les administrateurs peuvent tirer parti de leur compréhension de la corruption de la mémoire pour protéger activement leur infrastructure contre les cyberattaquants. Ce guide vise à fournir aux administrateurs les connaissances nécessaires pour comprendre la corruption de la mémoire et ses conséquences en cas d'exploitation d'une vulnérabilité. 

 

Quelles sont les vulnérabilités du noyau Linux ?

Le noyau Linux est vulnérable à divers problèmes de mémoire. Les vulnérabilités suivantes, basées sur la mémoire, sont celles sur lesquelles les attaquants se concentrent et qui sont à la base de la plupart des correctifs de sécurité publiés chaque mois. Si vous vous êtes déjà demandé pourquoi une vulnérabilité spécifique nécessitait un correctif critique, sachez que ces problèmes peuvent entraîner de graves violations de données.

 

Dépassement de tampon

Un débordement de mémoire tampon se produit lorsque les développeurs ne parviennent pas à valider les variables avant de leur affecter des données. Lorsque les données dépassent la capacité définie de la variable, un "débordement" se produit, permettant à un pirate d'injecter son propre code dans l'espace mémoire adjacent. En l'absence d'une validation correcte des données, un débordement de mémoire tampon peut permettre à un pirate d'obtenir un accès à la racine ou d'exécuter un code à distance.

Linux étant écrit en C, il est vulnérable aux débordements de mémoire tampon, contrairement à d'autres langages de programmation tels que Python et Java, qui ne sont pas vulnérables aux attaques par débordement.

CVE-2023-0179 est un exemple de vulnérabilité par débordement de mémoire tampon. Ce problème pourrait permettre la fuite des adresses de la pile et du tas, et potentiellement permettre l'escalade des privilèges locaux à l'utilisateur root via l'exécution de code arbitraire.

 

Débordement d'un nombre entier

Les développeurs définissent la valeur maximale qui peut être stockée dans une variable entière en fonction du type de données utilisé. Par exemple, une variable entière non signée de 32 bits peut stocker des valeurs comprises entre 0 et 4 294 967 295, tandis qu'un entier signé peut stocker des valeurs comprises entre -2 147 483 648 et 2 147 483 647. Cependant, si le code ajoute une valeur qui dépasse la limite maximale de la variable, un "dépassement de capacité" se produit, entraînant des résultats inattendus. 

Par exemple, si une instruction tente d'ajouter 1 à une variable stockant la valeur 2,147,483,647, le résultat sera une valeur négative de -2,147,483,648. De même, si un entier négatif déborde, le résultat sera un nombre positif. Le comportement des entiers non signés dépend du langage de programmation utilisé, mais dans le cas du langage C, les résultats sont souvent imprévisibles.

CVE-2022-0998 est une vulnérabilité de type débordement d'entier trouvée dans le code du pilote de périphérique virtio du noyau Linux. Un utilisateur local peut utiliser cette faille pour planter le système ou potentiellement élever ses privilèges.

 

Corruption de la mémoire

Les développeurs et les administrateurs de serveurs considèrent souvent que la corruption de la mémoire dans le noyau Linux est un problème difficile. Cette corruption peut entraîner des comportements imprévisibles et, dans certains cas, aucune erreur n'est déclenchée. Ce problème survient lorsque les développeurs modifient involontairement des données en mémoire ou modifient des pointeurs qui pointent vers des emplacements spécifiques de la mémoire où des données sont stockées. 

CVE-2023-1073 est un exemple de vulnérabilité de corruption de mémoire découverte dans le sous-système HID (human interface device) du noyau Linux. Un attaquant local peut utiliser cette faille pour planter le système ou potentiellement élever ses privilèges.

Déni de service

Les attaques par déni de service distribué (DDoS) sont bien connues : les attaquants utilisent plusieurs appareils détournés pour inonder une cible de trafic, ce qui provoque des pannes de serveur. 

Cependant, toute attaque qui interfère avec un service est connue sous le nom d'attaque par déni de service (DoS). Une mauvaise gestion de la mémoire est souvent à l'origine d'attaques par déni de service basées sur la mémoire, connues sous le nom d'attaques par épuisement des ressources. Ces vulnérabilités peuvent être préjudiciables et entraîner des pannes de services critiques affectant des milliers d'utilisateurs si elles existent sur des serveurs.

CVE-2023-1390 est un exemple de vulnérabilité de déni de service à distance découverte dans le module TIPC du noyau Linux. Cette faille permet à un attaquant distant de provoquer un déni de service.

 

Déréférencement du pointeur NULL

En programmation C, un pointeur est une variable qui stocke l'adresse mémoire d'une valeur, plutôt que la valeur elle-même. Cela permet aux développeurs de manipuler la valeur stockée à un emplacement spécifique de la mémoire, même si la variable associée à cet emplacement est hors de portée. 

Un déréférencement de pointeur NULL se produit lorsqu'une application tente d'accéder à un emplacement de mémoire par l'intermédiaire d'un pointeur qu'elle suppose valide, mais qui est en fait NULL. L'application peut alors se bloquer ou se terminer de manière inattendue.

CVE-2022-47929 est une vulnérabilité de déréférencement de pointeur NULL trouvée dans l'implémentation de la discipline de file d'attente du réseau du noyau Linux. Cette vulnérabilité permet à un attaquant local de provoquer un déni de service (plantage du système).

 

Utilisation avant l'initialisation

Lorsqu'une fonction utilise une variable pour modifier ou créer des données, la variable elle-même doit d'abord être initialisée avec une valeur. Si une valeur n'est pas attribuée à la variable, elle est considérée comme non initialisée et provoque un comportement non défini si elle est référencée dans le programme.

Le comportement indéfini des données non initialisées est difficile à détecter car les compilateurs C ne sont pas tenus de diagnostiquer ou d'afficher une erreur. La plupart des développeurs travaillent avec des outils de test ou de fuzzing pour identifier les données non initialisées qui pourraient causer des problèmes d'erreurs non définies.

CVE-2022-29968 est un exemple de vulnérabilité de type "use-before-initialization" trouvée dans le noyau Linux où le sous-système io_uring manque d'initialisation de kiocb->private. Cette faille permet à un attaquant local d'exposer des informations sensibles (mémoire du noyau).

 

Quelles sont les vulnérabilités de la mémoire les plus dangereuses ?

Chaque année, MITRE publie son rapport Rapport sur les 25 faiblesses logicielles les plus dangereuses. Notez que ce rapport inclut les attaques basées sur le web, mais les trois vulnérabilités de mémoire les plus courantes et les plus dangereuses sont les suivantes :

  • Débordements de mémoire tampon
  • Dépassements d'entiers qui conduisent à un dépassement de tampon
  • Déréférencement de pointeur (vérification de pointeur manquante)

Ces trois vulnérabilités peuvent entraîner de graves violations de données. Les vulnérabilités liées à la corruption de la mémoire ont été à l'origine de certaines des plus importantes violations de données à ce jour. Une conclusion importante d'un récent rapport de renseignement est qu'environ 72 % des attaques sont spécifiques à une application ou à une application web. Un attaquant peut identifier des problèmes dans le code et créer un exploit pour tirer parti de la vulnérabilité, car les programmes open-source sont souvent inclus dans le code dépendant ou constituent l'application principale elle-même.

La troisième statistique intéressante du rapport est que 21 % des attaques ciblent le secteur technologique. Les informations sensibles doivent être stockées, mises en réseau, protégées et transférées par le secteur technologique. En se concentrant sur ce secteur, les attaquants peuvent accéder à l'infrastructure qui stocke les données et en abuser discrètement, ce qui peut exposer l'entreprise pendant des mois.

 

Comment identifier les vulnérabilités liées à la corruption de la mémoire ?

La corruption de la mémoire est généralement le résultat d'erreurs de développement, mais dans les scénarios où plusieurs applications sont exécutées sur une seule machine, il peut être difficile d'identifier l'application à l'origine des problèmes. L'un des moyens d'identifier les erreurs sous Linux consiste à consulter les journaux du système, dans lesquels le système d'exploitation détecte les problèmes. 

Par exemple, Linux réserve les 64 premiers Ko de mémoire au BIOS, et toute modification apportée à cet espace mémoire est analysée par le système d'exploitation. Si Linux détecte des modifications apportées à cette mémoire réservée, il enregistre un avertissement pour que les administrateurs puissent résoudre le problème.

Linux étant un système d'exploitation à code source ouvert, de nombreuses vulnérabilités basées sur la mémoire sont signalées par les chercheurs. L'une de ces découvertes récentes est la vulnérabilité "BleedingTooth", qui permet aux attaquants disposant de l'adresse bd d'une machine cible de la faire planter, de provoquer un déni de service, d'élever les privilèges et, éventuellement, d'accéder aux clés de chiffrement.

Les chercheurs en sécurité utilisent divers outils et techniques pour trouver les bogues dans les logiciels, notamment en examinant soigneusement le code et en utilisant des outils d'analyse tels que le fuzzing pour déclencher des erreurs qui peuvent être signalées aux développeurs. Après avoir identifié les vulnérabilités, les développeurs corrigent le code et une mise à jour de sécurité est publiée pour résoudre le problème.

 

Comment remédier à la corruption de la mémoire ?

Heureusement, Linux a mis en œuvre plusieurs fonctions de sécurité pour lutter contre la corruption de la mémoire, notamment la randomisation de la disposition de l'espace d'adressage du noyau, l'intégrité du flux de contrôle et l'isolation de la table des pages du noyau. Malgré ces mesures d'atténuation, le système d'exploitation et ses dépendances restent vulnérables aux attaques.

Les techniques d'atténuation varient en fonction de la vulnérabilité découverte, mais les solutions temporaires impliquent souvent la désactivation d'un composant critique. Par exemple, lors de l'incident Heartbleed, les administrateurs pouvaient désactiver le battement de cœur utilisé dans OpenSSL pour communiquer entre le client et le serveur. Bien que cela ait permis de résoudre temporairement le problème, toute application nécessitant un signal de battement de cœur de la part du serveur aurait connu des résultats inattendus, tels que des plantages ou des dénis de service.

Toutefois, les techniques d'atténuation temporaires ne sont pas permanentes, et des correctifs doivent être appliqués pour empêcher l'exploitation permanente de la vulnérabilité. Les correctifs de sécurité mettent à jour le code, mais ils nécessitent un redémarrage du système, ce qui entraîne des temps d'arrêt. Par conséquent, les administrateurs de système retardent souvent l'application des correctifs jusqu'à ce qu'une fenêtre de maintenance soit disponible, ce qui a conduit à certaines des violations de données les plus importantes à ce jour.

 

Comment protéger votre infrastructure contre les vulnérabilités liées à la corruption de la mémoire ?

Les administrateurs étant laissés à la merci des développeurs, il est essentiel qu'ils prennent les bonnes mesures pour arrêter les attaquants. Vous ne pouvez peut-être pas contrôler le code, mais les administrateurs peuvent prendre les bonnes mesures pour minimiser la surface d'attaque du réseau et éviter d'être la prochaine cible. Voici quelques façons dont les administrateurs peuvent stopper les attaques basées sur la mémoire :

  • Exécutez régulièrement des analyses de vulnérabilité. Les analyses de vulnérabilité permettent d'identifier les problèmes, y compris ceux qui ont déjà été signalés publiquement. Lorsqu'une vulnérabilité est découverte, un correctif peut être installé.
  • Effectuez des tests approfondis de toutes les applications tierces avant de les promouvoir sur un serveur de production.
  • Utiliser le live patching de KernelCare pour appliquer rapidement les derniers correctifs de sécurité sans avoir à redémarrer l'ordinateur.

 

Conclusion

La détection des vulnérabilités basées sur la mémoire est un défi, et il est crucial d'appliquer immédiatement les correctifs pour assurer une protection optimale contre les erreurs. KernelCare Enterprise offre un service de correction en direct qui évite aux administrateurs de retarder l'application des correctifs. Il corrige automatiquement les différentes versions de Linux sans interruption de service, garantissant ainsi que l'infrastructure critique n'est pas exposée à des vulnérabilités en attendant une fenêtre de maintenance.

Résumé
Guide des vulnérabilités de corruption de la mémoire dans le noyau Linux
Nom de l'article
Guide des vulnérabilités de corruption de la mémoire dans le noyau Linux
Description
Lisez cet article de blog et découvrez la menace des vulnérabilités liées à la corruption de la mémoire, y compris leurs causes et la manière de protéger votre système.
Auteur
Nom de l'éditeur
TuxCare
Logo de l'éditeur

Vous cherchez à automatiser la correction des vulnérabilités sans redémarrage du noyau, temps d'arrêt du système ou fenêtres de maintenance programmées ?

Découvrez le Live Patching avec TuxCare

Devenez rédacteur invité de TuxCare

Commencer

Courrier

Rejoindre

4,500

Professionnels de Linux et de l'Open Source
!

S'abonner à
notre lettre d'information