Qu'est-ce qu'un noyau corrompu sous Linux?

99

Dans certaines conditions, le noyau Linux peut être corrompu . Par exemple, le chargement d'un pilote vidéo propriétaire dans le noyau souille le noyau. Cette condition peut être visible dans les journaux système, les messages d'erreur du noyau (oops et panics) et via des outils tels que lsmod, et reste active jusqu'au redémarrage du système.

Qu'est-ce que ça veut dire? Cela affecte-t-il ma capacité à utiliser le système et comment cela affectera-t-il mes options d'assistance?

bwDraco
la source
duplication possible des sorties lsmod: Non corrompue
Gilles
@ Gilles, je pense que la question que vous avez liée devrait être fusionnée dans celle-ci. De plus, il n’est pas évident qu’une question soit un doublon de l’autre.
bwDraco
1
J'espère en faire la version canonique de la question; voir l'édition la plus récente de la question.
bwDraco
9
@MichaelMrozek: 1) Je ne vois pas la question actuelle, car il n'a pas été évident que l'utilisateur demandait « qu'est-ce que « contaminé » signifie », et 2) la question formulée est assez spécifique à une seule commande, lsmod. J'ai écrit cette question et la réponse pour la rendre plus générale, de sorte que quelqu'un qui demande "qu'est-ce que 'terni' veut dire" puisse la trouver facilement.
bwDraco
1
Ils auraient pu utiliser un mot un peu plus neutre que "contaminé".
Roger Dahl

Réponses:

126

Lorsque le noyau est corrompu, cela signifie qu'il est dans un état qui n'est pas pris en charge par la communauté . La plupart des développeurs du noyau ignorent les rapports de bugs concernant les noyaux contaminés et les membres de la communauté peuvent vous demander de corriger la condition d'altération avant de pouvoir procéder au diagnostic des problèmes liés au noyau. De plus, certaines fonctionnalités de débogage et certains appels API peuvent être désactivés lorsque le noyau est corrompu.

Dans la plupart des cas impliquant des pilotes propriétaires, vous pouvez ignorer en toute sécurité la condition d'altération , mais certains scénarios entraînant l'altération du noyau peuvent indiquer de graves problèmes système.

Cette fonctionnalité est destinée à identifier les conditions qui peuvent rendre difficile le dépannage correct d'un problème de noyau. Par exemple, le chargement d'un module propriétaire peut rendre la sortie de débogage du noyau peu fiable car les développeurs du noyau n'ont pas accès au code source du module et ne peuvent donc pas déterminer ce que le module a pu faire au noyau. De même, si le noyau avait précédemment rencontré une condition d'erreur ou si une erreur matérielle grave s'était produite, les informations de débogage générées par le noyau pourraient ne pas être fiables.

Le noyau peut être contaminé pour plusieurs raisons , notamment (mais sans s'y limiter):

  • Utilisation d'un module de noyau propriétaire (ou non compatible GPL): il s'agit de la cause la plus courante de noyaux contaminés et résulte généralement du chargement de pilotes vidéo propriétaires NVIDIA ou AMD.
  • L'utilisation de mise en scène des pilotes, qui font partie du code source du noyau , mais ne sont pas entièrement testés
  • Utilisation de modules hors arbre qui ne sont pas inclus dans le code source du noyau Linux
  • Chargement ou déchargement forcé d'un module de noyau (comme l'insertion forcée d'un module non construit pour la version actuelle du noyau)
  • Utilisation d'un noyau SMP (multiprocesseur) sur certains processeurs à un seul processeur non pris en charge, principalement des processeurs AMD Athlon plus anciens
  • Remplacement de la norme ACPI DSDT, parfois nécessaire pour corriger les bogues liés à la gestion de l'alimentation (voir ici pour plus de détails)
  • Certaines conditions d'erreur critiques, telles que les exceptions de vérification de l' ordinateur et les oops du noyau
  • Certains bugs sérieux dans le firmware du système (BIOS, UEFI) que le noyau doit contourner

Chacune de ces conditions est représentée par un drapeau particulier dans le noyau. Certains fournisseurs Linux, tels que SUSE, ajoutent des indicateurs de protection supplémentaires pour indiquer des conditions telles que le chargement d'un module qui n'est pas pris en charge par le fournisseur.

Plus d'informations sont disponibles dans la documentation du noyau . Les drapeaux de la souillure énumérés sont (avec _ un remplaçant pour "vierge")

  • G | P : G si tous les modules chargés ont une licence GPL ou une licence compatible, sinon un module propriétaire a été chargé. Les modules sans MODULE_LICENSE ou avec un MODULE_LICENSE qui n'est pas reconnu par insmod comme compatible GPL sont supposés être propriétaires.
  • F | _ : si un module a été chargé de force par "insmod -f" sinon, si tous les modules ont été chargés normalement.
  • S | _ : si les oops se sont produits sur un noyau SMP s'exécutant sur du matériel n'ayant pas été certifié comme étant sûr d'exécuter un multiprocesseur. Actuellement, cela ne se produit que sur divers athlètes qui ne sont pas capables du SMP.
  • R | _ : si un module a été déchargé de force rmmod -f, sinon si tous les modules ont été déchargés normalement.
  • M | _ : si un processeur a signalé une exception de contrôle d'ordinateur , sinon aucune exception de contrôle d'ordinateur ne s'est produite.
  • B | _ : si une fonction de libération de page a trouvé une référence de page incorrecte ou des indicateurs de page inattendus.
  • U | _ : si un utilisateur ou une application utilisateur a spécifiquement demandé que l'indicateur Tainted soit défini.
  • D | _ : si le noyau est mort récemment, c'est-à-dire qu'il y avait un OOPS ou un BUG.
  • A | _ : si la table ACPI a été remplacée.
  • W | _ : si un avertissement a déjà été émis par le noyau (bien que certains avertissements puissent définir des drapeaux d'altération plus spécifiques.)
  • C | _ : si un pilote de transfert a été chargé.
  • I | _ : si le noyau fonctionne autour d'un bogue grave dans le microprogramme de la plate-forme (BIOS ou similaire).
  • O | _ : si un module externe ("hors arbre") a été chargé.
  • E | _ : si un module non signé a été chargé dans un noyau prenant en charge la signature du module.
  • L | _ : si un blocage logiciel s'est déjà produit sur le système.
  • K | _ : si le noyau a été patché en direct.
bwDraco
la source
Cette réponse manque beaucoup d'informations du dupe de cette question déplacée.
2
J'ajouterais au moins une possibilité importante du scénario "module non signé": un rootkit du noyau a été chargé dans le noyau ou l'exploit du noyau vient d'être exécuté.
kravietz