Protection, isolation et machines virtuelles

Découvre comment un système d’exploitation se protège et protège ses utilisateurs. Suis comment les niveaux de privilège du processeur, les appels système et les permissions des tables des pages isolent les programmes les uns des autres ; comment le système vérifie ton identité et stocke les mots de passe en toute sécurité ; et comment les listes de contrôle d’accès, les capacités, les permissions Unix et Windows et les politiques obligatoires déterminent qui peut utiliser quelles ressources. Découvre ensuite comment les hyperviseurs exécutent côte à côte des systèmes d’exploitation complets dans des machines virtuelles et comment les conteneurs isolent les applications à l’aide des espaces de noms, des groupes de contrôle et de la limitation des privilèges, afin de choisir la frontière adaptée à une charge de travail.

IntermédiaireUnité 9 sur 9 de la formation Formation : Systèmes d’exploitation : processus, mémoire et fichiers

Ce que tu vas apprendre

  1. Décris les modes du processeur, les points d’entrée contrôlés et les protections mémoire qui empêchent les programmes de se nuire entre eux ou de nuire au noyau, ainsi que les mécanismes qui rendent les attaques contre eux plus difficiles.
    • Sépare le mode utilisateur du mode noyau
      Explique les niveaux de privilège et les instructions privilégiées, ainsi que ce qui se produit lorsqu’un programme tente une opération réservée au noyau.
    • Entre dans le noyau en toute sécurité par les appels système
      Suis un appel système depuis le déroutement jusqu’à la vérification des permissions, et explique pourquoi le noyau doit se méfier de chaque argument reçu.
    • Protège la mémoire et les périphériques
      Utilise les permissions des tables des pages, les projections mémoire réservées au noyau et l’IOMMU pour expliquer comment le noyau limite chaque processus à sa propre mémoire.
    • Rends les attaques contre les programmes et le noyau plus difficiles
      Explique comment la mémoire non exécutable, la randomisation des adresses, les filtres d’appels système, le démarrage sécurisé et les journaux d’audit augmentent le coût de l’exploitation des failles et en conservent une trace.
  2. Explique comment un système d’exploitation vérifie l’identité d’un utilisateur, stocke les mots de passe en toute sécurité, utilise d’autres facteurs d’authentification et associe l’identité obtenue à chaque processus.
    • Associe des identités aux processus
      Suis une connexion depuis la demande du mot de passe jusqu’à l’exécution d’un interpréteur de commandes, et explique les identifiants utilisateur, les groupes, l’héritage et les programmes qui modifient les privilèges, comme les programmes setuid et sudo.
    • Stocke et vérifie les mots de passe en toute sécurité
      Explique le hachage, le salage et les fonctions lentes de hachage des mots de passe, et calcule comment ils modifient le coût des attaques par essais de mots de passe.
    • Authentifie-toi grâce à ce que tu possèdes et à ce que tu es
      Compare les mots de passe, les jetons et la biométrie, combine-les dans une authentification multifacteur et authentifie les services et les machines sans personne au clavier.
  3. Représente les droits sous forme de matrice d’accès, mets-les en œuvre avec des listes de contrôle d’accès ou des capacités, lis et définis les permissions Unix et Windows, et compare les modèles discrétionnaire, obligatoire et fondé sur les rôles.
    • Compare les listes de contrôle d’accès et les capacités
      Stocke les mêmes droits par objet ou par sujet et évalue les deux approches pour vérifier, examiner, déléguer et révoquer les accès.
    • Lis et définis les permissions sous Unix et Windows
      Interprète les bits de permission et les modes octaux, applique les règles de vérification Unix aux fichiers et aux répertoires, et lis les ACL POSIX et les entrées de contrôle d’accès Windows.
    • Compare les contrôles d’accès discrétionnaire, obligatoire et fondé sur les rôles
      Distingue les modèles où les propriétaires décident de ceux où une politique commune à tout le système décide, et utilise des rôles pour gérer les droits de nombreux utilisateurs.
  4. Explique comment un hyperviseur partage le processeur, la mémoire et les périphériques d’un ordinateur entre plusieurs systèmes d’exploitation complets tout en les isolant.
    • Décris les machines virtuelles et les hyperviseurs
      Définis les machines virtuelles et les hyperviseurs, distingue les architectures de type 1 et de type 2, et explique les usages de la virtualisation et les limites de son isolation.
    • Virtualise le processeur
      Explique l’interception et l’émulation, pourquoi le x86 classique ne pouvait pas les utiliser directement, et comment la traduction binaire, la paravirtualisation et la prise en charge matérielle ont résolu le problème.
    • Virtualise la mémoire
      Traduis une adresse virtuelle d’un invité en adresse réelle de la machine et compare les tables des pages fantômes à la pagination imbriquée matérielle.
    • Virtualise les périphériques et isole les machines virtuelles les unes des autres
      Compare les périphériques émulés, paravirtuels et directement affectés, et explique les forces et les limites de l’isolation entre machines virtuelles.
  5. Construis un conteneur à partir de fonctions du noyau (espaces de noms pour ce qu’un processus peut voir, groupes de contrôle pour ce qu’il peut utiliser et limites de privilèges pour ce qu’il peut faire) et décide quand utiliser un conteneur ou une machine virtuelle.
    • Limite ce qu’un processus voit avec les espaces de noms
      Explique les types d’espaces de noms Linux, crée et rejoins des espaces de noms, et interprète les espaces de noms PID, de montage, réseau et utilisateur.
    • Limite les ressources qu’un processus utilise avec les groupes de contrôle
      Organise les processus en groupes de contrôle et fixe des limites de processeur, de mémoire, de nombre de processus et d’entrées-sorties, en interprétant les valeurs de ces limites.
    • Restreins les conteneurs et choisis entre conteneurs et machines virtuelles
      Réduis ce qu’un processus en conteneur est autorisé à faire, explique le risque d’un noyau partagé et choisis des conteneurs, des machines virtuelles ou les deux pour une charge de travail donnée.

Protection, isolation et machines virtuelles : cours

5 chapitres

1

Explique comment le matériel et le noyau protègent le système

Les programmes s’exécutent rapidement parce que les instructions ordinaires s’exécutent directement sur le processeur. Les permissions matérielles et les points d’entrée contrôlés du noyau rendent cette liberté assez sûre pour permettre le partage d’une machine. Suis cette frontière depuis les privilèges du processeur jusqu’aux accès à la mémoire et aux périphériques, en passant par les vérifications des appels système, puis découvre comment les restrictions d’exécution, la randomisation, la vérification du démarrage et les journaux limitent les attaques contre les programmes et le noyau.

1.1 Sépare le mode utilisateur du mode noyau

Un programme a besoin d’assez de liberté pour calculer rapidement sans prendre le contrôle de tout l’ordinateur. Le mode utilisateur lui permet d’exécuter directement les instructions ordinaires. Le mode noyau, aussi appelé mode superviseur, donne au système d’exploitation accès aux instructions qui contrôlent la machine.

Laisse le matériel faire respecter les privilèges

Le processeur possède un niveau de privilège courant. Les additions, chargements, écritures et sauts s’exécutent normalement à pleine vitesse, sous réserve des permissions mémoire. Le noyau n’examine pas chaque instruction par logiciel. C’est l’exécution directe limitée : les instructions s’exécutent directement jusqu’à ce qu’une opération protégée ou une interruption nécessite l’intervention du noyau.

Une instruction privilégiée provoque un déroutement si le code utilisateur tente de l’exécuter. Sur x86-64, HLT, l’écriture dans le registre de base de la table des pages CR3 et l’installation d’une table des interruptions avec LIDT exigent les privilèges du noyau. Sinon, une application pourrait arrêter le processeur, remplacer ses propres limites mémoire ou rediriger le traitement des interruptions.

Supposons qu’une application exécute HLT. Le processeur déclenche une exception de protection générale au lieu de s’arrêter. Il entre dans le gestionnaire enregistré par le noyau. Linux envoie normalement SIGSEGV au processus, ce qui le termine tandis que les autres programmes continuent. L’application ne peut pas choisir une adresse qui lui convient dans le noyau et commencer à y exécuter du code.

Franchis la frontière par une entrée contrôlée

Les déroutements, exceptions et interruptions entrent par des adresses enregistrées par le noyau. Le matériel change le niveau de privilège et transmet le contrôle au gestionnaire ; le code d’entrée du noyau conserve l’état nécessaire au retour. Une instruction de retour spéciale reprend l’exécution en mode utilisateur au compteur ordinal sauvegardé. Sur x86-64, le retour peut utiliser SYSRET ou IRETQ.

L’horloge rend ce contrôle utile même lorsqu’un programme ne demande jamais de service. Avant de l’exécuter, le noyau programme une horloge. Lorsque l’interruption arrive, l’ordonnanceur peut choisir un autre processus. Le code utilisateur ne peut pas désactiver les interruptions ni reprogrammer cette horloge : une boucle sans fin ne peut donc pas conserver un cœur indéfiniment.

Lis correctement les schémas de privilèges
ArchitectureApplicationNoyauAutres niveaux
x86Anneau 3Anneau 0Les anneaux 1 et 2 existent, mais les noyaux Linux et Windows ordinaires ne les utilisent pas
ARMv8-AEL0EL1EL2 prend en charge un hyperviseur ; EL3 prend en charge le moniteur du micrologiciel sécurisé
RISC-VMode UMode SLe mode M possède les privilèges machine

Les conventions de numérotation diffèrent : un numéro d’anneau x86 plus faible signifie davantage de privilèges, tandis qu’un niveau d’exception ARM plus élevé signifie davantage de privilèges. La virtualisation Intel ajoute aussi les modes VMX root et non-root ; ils sont distincts du numéro d’anneau.

Distingue l’identité du mode du processeur

Root est une identité d’utilisateur, UID 0, que le logiciel du noyau reconnaît. Le code ordinaire d’une application root s’exécute toujours en mode utilisateur et entre dans le noyau par des appels système. Un pilote de périphérique exécuté en mode noyau dispose d’un pouvoir direct bien plus important : un bogue mémoire à cet endroit peut endommager l’état du noyau sans passer par une vérification des permissions de fichier.

La couche qui fait respecter une frontière doit contrôler la couche située à l’intérieur. Le noyau fait respecter les frontières entre processus à l’aide des modes du processeur et des tables mémoire. De même, un hyperviseur contrôle les systèmes d’exploitation invités grâce à la prise en charge matérielle de la virtualisation.

Points clés

  • Les instructions utilisateur s’exécutent directement jusqu’à ce que le matériel exige une entrée dans le noyau.
  • Les opérations privilégiées protègent les tables des pages, les interruptions, les horloges et le contrôle des périphériques.
  • L’horloge permet à l’ordonnanceur de reprendre un cœur à une boucle sans fin.
  • L’identité root ne place pas une application en mode noyau.
  • La numérotation des privilèges dépend de l’architecture.

1.2 Entre dans le noyau en toute sécurité par les appels système

Un appel système est une demande contrôlée adressée au noyau pour obtenir un service. Ouvrir des fichiers, créer des processus et envoyer des données sur le réseau exigent des décisions qu’une application ne peut pas prendre elle-même en toute sécurité. L’entrée dans le noyau donne de l’autorité au gestionnaire ; elle ne donne pas à l’appelant la permission de faire tout ce qu’il a demandé.

Suis la demande

Une fonction d’enveloppe de la bibliothèque C telle que open() place le numéro de l’appel et ses arguments dans des registres. Elle utilise SYSCALL sur x86-64, SVC sur ARM64 ou ECALL sur RISC-V. Le noyau :

  1. Entre par son point d’entrée enregistré et sauvegarde les registres utilisateur.
  2. Choisit le gestionnaire dans la table des appels système et rejette tout numéro inconnu.
  3. Lit l’identité et les identifiants de l’appelant dans le processus courant.
  4. Vérifie les arguments, les droits d’accès et les objets concernés.
  5. Effectue l’opération ou renvoie une erreur.
  6. Restaure l’état sauvegardé et revient en mode utilisateur.

L’identité provient des identifiants du processus, et non d’un nom fourni par l’utilisateur. Un appelant ne peut pas obtenir les droits d’un autre utilisateur en ajoutant le nom de celui-ci à une demande.

Considère les arguments comme non fiables

Un pointeur n’est qu’un nombre fourni par l’appelant. Le noyau doit vérifier toute la zone de mémoire utilisateur demandée, y compris sa longueur et le sens de l’accès. Linux utilise des routines qui effectuent des vérifications, telles que copy_from_user et copy_to_user, pour franchir cette frontière en toute sécurité.

Pour read(fd, buf, 4096), un buf qui pointe dans la mémoire du noyau ne doit pas devenir une destination pour les données du fichier. Linux signale EFAULT pour ce tampon utilisateur invalide. Une autre erreur a une autre cause : write() sur un descripteur ouvert avec O_RDONLY échoue avec EBADF, car le droit d’écriture n’a jamais été accordé à ce descripteur. Une demande ordinaire refusée renvoie une erreur ; elle ne termine pas automatiquement le processus. En C, la fonction d’enveloppe renvoie généralement −1 et définit errno.

Vérifie l’objet réellement utilisé

Une condition de concurrence entre vérification et utilisation (TOCTTOU) sépare une décision de l’objet qu’elle devait protéger. Un programme auxiliaire privilégié vérifie access("/tmp/report", W_OK), puis ouvre le chemin. Entre ces opérations, un attaquant remplace le chemin par un lien symbolique vers /etc/passwd. Le nom ne change pas, mais l’objet ouvert est différent.

La correction consiste à effectuer l’accès avec les identifiants prévus sur l’objet réellement ouvert. Abandonne les privilèges avant l’ouverture et utilise des options telles que O_NOFOLLOW lorsque les liens symboliques ne sont pas souhaités. Copier une seule fois les arguments en mémoire noyau évite aussi de faire confiance à plusieurs reprises à des données utilisateur modifiables ; la structure copiée doit toutefois être validée.

Identifie ce qui doit être fiable

Un moniteur de référence contrôle les accès. Il doit être invoqué chaque fois qu’un accès est obtenu, être protégé contre les modifications et être assez petit pour être examiné soigneusement. Une fois que le noyau a accordé une projection mémoire, chaque lecture et chaque écriture passe par les vérifications de permissions de la MMU ; chacune ne déclenche pas un appel système.

La base informatique de confiance (TCB) comprend le matériel, le micrologiciel et les logiciels privilégiés dont le bon fonctionnement conditionne la protection. Elle inclut le processeur, la chaîne de démarrage, le noyau et les composants de connexion de confiance. Déplacer les pilotes ou les systèmes de fichiers dans des serveurs en mode utilisateur peut réduire la partie de cette base située dans le noyau, comme le font les architectures à micronoyau. Une application ordinaire compromise utilise à mauvais escient les droits qui lui ont été accordés ; un composant de confiance compromis peut affaiblir les vérifications elles-mêmes.

Points clés

  • L’entrée dans le noyau et la permission d’effectuer une opération sont deux choses distinctes.
  • Valide les zones désignées par les pointeurs et les droits d’accès avant d’utiliser les arguments utilisateur.
  • Une condition de concurrence TOCTTOU peut faire qu’un nom vérifié désigne un autre objet.
  • Un moniteur de référence doit résister au contournement et aux modifications.
  • La TCB ne se limite pas au noyau.
  • Un appel système refusé renvoie généralement une erreur que le programme peut traiter.

1.3 Protège la mémoire et les périphériques

La mémoire virtuelle protège les programmes en plus de traduire les adresses. Un processus peut atteindre les cadres physiques désignés par sa table des pages active, selon les permissions définies par le noyau. Les cadres privés d’un autre processus en sont absents ; les projections volontaires de mémoire partagée constituent une exception explicite.

Vérifie chaque accès mémoire

L’unité de gestion mémoire (MMU) vérifie les entrées de table des pages lors des accès. Parmi les permissions importantes figurent la présence ou validité, l’autorisation d’écriture, l’accès en mode utilisateur et l’exécution. Sur x86, U/S distingue les pages accessibles en mode utilisateur de celles réservées au superviseur ; NX ou XD désactive l’exécution. ARM appelle XN sa restriction d’exécution.

Une violation déclenche un défaut de page. Le défaut indique l’échec d’une vérification matérielle ; le noyau détermine si cet échec est attendu et peut être corrigé. Considérons deux écritures dans des pages en lecture seule :

  • Un processus écrase une page de code qui n’est pas en copie sur écriture. Le noyau traite cela comme une écriture invalide et envoie normalement SIGSEGV.
  • Après fork(), un processus écrit dans des données partagées marquées en copie sur écriture. Le noyau alloue une copie privée, modifie la projection pour y autoriser l’écriture et réessaie l’instruction.

Les deux défauts proviennent d’un bit de protection. Les informations du noyau expliquent pourquoi les projections étaient en lecture seule et déterminent la réponse. Un défaut de page n’est donc pas automatiquement une panne ni une demande de lecture de données sur disque.

Protège les projections du noyau dans les deux sens

Les organisations traditionnelles projettent la mémoire du noyau dans les espaces d’adressage des processus en la réservant au superviseur, ce qui facilite l’entrée dans le noyau tout en bloquant les lectures et écritures en mode utilisateur. L’attaque Meltdown de 2018 a montré que certains processeurs pouvaient divulguer de telles données par l’exécution spéculative. L’isolation des tables des pages du noyau (KPTI) retire la plupart des projections du noyau pendant l’exécution du code utilisateur sur les systèmes concernés.

Le code noyau doit aussi être protégé contre une redirection vers une mémoire contrôlée par l’utilisateur. Sur x86, SMEP empêche l’exécution en mode noyau depuis des pages utilisateur. SMAP bloque les accès aux données des pages utilisateur en mode noyau, sauf pendant des opérations de copie explicitement autorisées. ARM fournit des protections apparentées avec PXN et PAN. Ces vérifications réduisent les possibilités pour un attaquant d’exploiter un bogue du noyau afin d’exécuter du code ou de fournir de fausses données au noyau.

L’accès en lecture seule protège l’intégrité, pas le secret. Si un processus peut lire une page projetée, il peut en connaître le contenu même lorsque les écritures échouent. Les données confidentielles doivent être inaccessibles à ce processus : ne les projette pas ou applique une restriction appropriée au superviseur.

Donne aux périphériques leur propre frontière

Les applications demandent généralement à un pilote d’effectuer des opérations sur un périphérique. Les registres des périphériques sont normalement réservés au noyau, même si un processus autorisé peut recevoir certaines projections, comme avec les pilotes graphiques ou les entrées-sorties Linux en espace utilisateur.

Un périphérique qui effectue un accès direct à la mémoire (DMA) lit ou écrit dans la mémoire vive sans faire passer ces accès par la MMU du processeur. Les seules permissions de page du processeur ne peuvent pas empêcher un périphérique défectueux d’écraser les cadres d’un autre processus. Une IOMMU traduit et limite les adresses des périphériques à l’aide de projections propres à chacun. Intel VT-d et AMD-Vi fournissent ce mécanisme.

Pour un périphérique attribué à une machine virtuelle, l’IOMMU limite le DMA à la mémoire attribuée à cette machine. Le processeur a besoin d’une frontière parallèle : une seconde étape de traduction des pages associe les adresses physiques de l’invité uniquement aux cadres autorisés par l’hyperviseur. Protéger une charge de travail exige de couvrir à la fois les accès du processeur et ceux des périphériques.

Points clés

  • La MMU applique les projections et les bits de permission installés par le noyau.
  • Un défaut de page peut déclencher une récupération, une copie sur écriture ou un signal fatal.
  • L’accès en lecture seule ne rend pas les données confidentielles.
  • KPTI retire la plupart des projections du noyau pendant l’exécution en mode utilisateur.
  • SMEP et SMAP limitent l’utilisation des pages utilisateur par le noyau.
  • L’IOMMU limite le DMA qui contourne la MMU du processeur.

1.4 Rends les attaques contre les programmes et le noyau plus difficiles

Un bogue de sûreté mémoire peut donner lieu à une attaque lorsque des données corrompues modifient le flot de contrôle du programme. Un débordement de tampon sur la pile, par exemple, peut écraser une adresse de retour sauvegardée. Les défenses du système d’exploitation limitent ce qu’un attaquant peut faire avec ce bogue ; elles ne corrigent pas l’écriture fautive.

Sépare les données du code exécutable

Le bit NX marque les pages de données comme non exécutables. Windows appelle cela Data Execution Prevention (DEP). Injecter des instructions dans un tampon de la pile est moins utile lorsqu’un saut vers ce tampon provoque un défaut.

W^X, écriture ou exécution exclusive, est plus strict : aucune page n’est accessible en écriture et exécutable en même temps. DEP seul n’interdit pas à un programme de demander explicitement une telle projection. Avec W^X, un compilateur à la volée écrit le code généré dans une mémoire accessible en écriture, puis modifie ses permissions avant de l’exécuter.

Un attaquant peut aussi réutiliser des instructions exécutables existantes. La programmation orientée retour (ROP) enchaîne de courtes séquences d’instructions appelées gadgets. La randomisation de l’espace d’adressage (ASLR) change les emplacements des piles, des tas, des bibliothèques et des programmes indépendants de leur position, ce qui rend les adresses des gadgets difficiles à prévoir.

Avec une base de bibliothèque choisie uniformément parmi 228 emplacements, une tentative à l’aveugle réussit avec une probabilité de 1 sur 268 435 456. Avec seulement 28=256 emplacements et une disposition conservée après les pannes des processus travailleurs, essayer des emplacements distincts nécessite au plus 256 tentatives et 128,5 en moyenne. Une adresse divulguée à l’intérieur d’une bibliothèque connue révèle sa base et les déplacements des gadgets dans cette bibliothèque. Une pile randomisée séparément peut toutefois rester inconnue.

Réduis les services qu’un attaquant peut demander

Les filtres seccomp de Linux limitent les appels système qu’un processus peut effectuer. Un processus de rendu de navigateur, par exemple, peut se voir refuser les appels permettant de lancer des programmes ou d’ouvrir directement des fichiers. Les processus fils héritent des filtres, qui ne peuvent pas être retirés ; des filtres ultérieurs peuvent renforcer les restrictions. Un processus de rendu compromis conserve les opérations qui lui sont autorisées : un filtre constitue donc une frontière autour des services, et non une preuve que le programme est exempt de bogues. pledge d’OpenBSD et App Sandbox de macOS fournissent des restrictions apparentées.

Vérifie le démarrage et conserve les preuves

Le démarrage sécurisé vérifie les signatures tout au long de la chaîne de démarrage. Le micrologiciel vérifie un chargeur de démarrage de confiance ; le chargeur vérifie le noyau ; le noyau peut exiger des modules signés. Un composant modifié sans signature reconnue comme fiable est refusé. Cela aide à empêcher les modifications persistantes des logiciels de démarrage, mais une signature valide ne prouve pas que le logiciel est exempt de vulnérabilités.

Le démarrage mesuré enregistre les empreintes des composants chargés, généralement à l’aide d’un module de plateforme sécurisée (TPM). Ces mesures permettent une attestation : un tiers peut comparer ce qui a démarré à un état attendu. Mesurer et refuser de démarrer sont deux opérations différentes.

La journalisation d’audit enregistre les connexions, les échecs d’authentification, les refus de permission, les modifications de comptes et les actions privilégiées telles que sudo. Les journaux facilitent la détection et la reconstitution. Un attaquant qui contrôle un hôte peut effacer les enregistrements locaux ; une journalisation protégée ou distante permet donc de conserver des preuves ailleurs que sur cet hôte.

Les attaquants peuvent combiner une fuite d’adresse, un bogue de corruption mémoire et une évasion de bac à sable. Les mises à jour suppriment les vulnérabilités sous-jacentes que ces défenses laissent en place.

Points clés

  • NX bloque l’exécution depuis les pages de données marquées ; W^X interdit aussi les permissions simultanées d’écriture et d’exécution.
  • L’ASLR rend plus difficiles à prévoir les adresses utilisées pour la réutilisation de code.
  • La divulgation d’une adresse de bibliothèque ne révèle pas nécessairement les zones randomisées séparément.
  • Les filtres d’appels système limitent les services accessibles à un processus compromis.
  • Le démarrage sécurisé vérifie que les composants de démarrage sont fiables ; le démarrage mesuré enregistre ce qui a été chargé.
  • Les journaux d’audit facilitent la détection et la reconstitution : protège-les donc contre la suppression.
2

Authentifie les utilisateurs et attribue une identité aux processus

Un nom d’utilisateur ne devient utile au noyau que lorsqu’il est associé à des identifiants de processus fiables. Suis une connexion jusqu’à l’exécution d’un interpréteur de commandes, y compris la gestion attentive des programmes auxiliaires disposant de privilèges élevés. Examine ensuite comment les empreintes de mots de passe salées rendent plus difficiles les attaques contre les données de vérification volées, et comment les clés, les codes fondés sur le temps et la biométrie modifient la preuve d’identité avant les vérifications ordinaires de permissions.

2.1 Associe des identités aux processus

Une connexion réussie associe l’identité d’une personne aux identifiants de processus détenus par le noyau. L’authentification vérifie l’identité déclarée ; l’autorisation détermine ce que cette identité peut faire. Un principal peut être une personne ou un compte de service, et les processus agissent pour son compte.

Transmets l’identité aux programmes en cours d’exécution

Les systèmes de type Unix identifient les utilisateurs par des UID numériques et les groupes par des GID. /etc/passwd associe les noms aux UID, aux répertoires personnels et aux interpréteurs de commandes. Les comparaisons du noyau utilisent les nombres : deux noms de compte ayant un même UID représentent une seule identité pour les vérifications d’accès. L’UID 0 est celui de root et contourne la plupart des vérifications ordinaires de permissions.

Windows utilise des identifiants de sécurité (SID) pour les utilisateurs et les groupes. Le jeton d’accès d’un processus enregistre son SID utilisateur, ses SID de groupe et ses privilèges. Sur les deux plateformes, les identifiants du programme en cours d’exécution fournissent l’identité utilisée pour les décisions ultérieures.

Une connexion Linux typique par mot de passe suit cette séquence :

  1. Un service de connexion privilégié, tel que login, sshd ou un gestionnaire de connexion graphique, reçoit les identifiants.
  2. PAM les vérifie par l’intermédiaire des modules d’authentification configurés.
  3. Le service définit les groupes supplémentaires et le GID de l’utilisateur, puis change l’UID pour abandonner les privilèges root.
  4. Il lance l’interpréteur de commandes. Les processus fils héritent de ces identifiants par fork() et les conservent normalement après execve().

L’ordre compte. Abandonner les privilèges root avant de définir les groupes peut empêcher le processus de remplacer la liste de groupes privilégiés dont il a hérité. De plus, modifier l’appartenance d’un compte à des groupes ne réécrit pas les identifiants des processus déjà en cours d’exécution ; une nouvelle session de connexion reçoit la nouvelle liste.

Comprends un changement de privilège contrôlé

Un processus possède un UID réel, qui indique normalement qui l’a lancé ; un UID effectif, utilisé pour la plupart des vérifications d’accès ; et un UID sauvegardé, qui permet un retour contrôlé après une réduction temporaire. Dans les programmes ordinaires, les trois sont égaux.

Le fichier /usr/bin/passwd, qui appartient à root, illustre setuid. Son mode 4755, affiché -rwsr-xr-x, donne l’UID effectif de root lorsqu’un utilisateur ordinaire l’exécute. Si alice a l’UID 1000, son UID réel reste 1000 tandis que l’UID effectif devient 0. Le programme peut mettre à jour /etc/shadow et utilise l’identité réelle de l’appelant pour limiter les mots de passe qu’il peut modifier. Un exécutable setgid modifie de la même façon le groupe effectif.

Ce petit programme de confiance détient un pouvoir dangereux. Un bogue peut exposer les droits root : les systèmes limitent donc le nombre de programmes setuid et abandonnent les privilèges dès que possible. Pour un service qui n’a besoin que d’un port de numéro inférieur, CAP_NET_BIND_SERVICE accorde un privilège Linux plus limité que les droits root complets.

Administre sans partager une identité

sudo authentifie l’utilisateur qui l’invoque, vérifie quelles commandes il peut exécuter sous quelle identité cible et journalise l’utilisation. Sa politique se trouve généralement dans /etc/sudoers. Les identités individuelles permettent d’attribuer les actions à chaque personne, ce que le partage d’un mot de passe root ne permet plus. Sous Windows, UAC lance normalement les programmes d’un administrateur avec un jeton filtré et demande son accord pour l’élévation des privilèges.

Les applications courantes devraient s’exécuter avec des droits ordinaires et les services devraient disposer de comptes dédiés tels que www-data. Un lecteur de documents compromis hérite alors de ces identifiants limités au lieu des pleins pouvoirs d’un administrateur.

Points clés

  • L’authentification établit l’identité ; l’autorisation vérifie les droits.
  • Unix vérifie les UID et GID numériques ; Windows utilise des SID et des jetons.
  • Définis les groupes avant d’abandonner définitivement le privilège de les modifier.
  • L’UID effectif sert à la plupart des vérifications d’accès sous Unix.
  • Les programmes auxiliaires setuid exigent des vérifications soigneuses, car ils détiennent des privilèges élevés.
  • Les processus existants conservent leur ancienne liste de groupes après la modification d’un compte.

2.2 Stocke et vérifie les mots de passe en toute sécurité

Un système de vérification des mots de passe doit reconnaître un mot de passe correct sans en stocker une copie récupérable. Il stocke une empreinte de mot de passe avec les informations nécessaires pour répéter la vérification. Lors de la connexion, il recalcule l’empreinte à partir du mot de passe saisi et compare les résultats ; il ne déchiffre jamais l’empreinte stockée.

Protège les données de vérification stockées

Sous Linux, /etc/shadow contient les empreintes de mots de passe protégées. Le fichier /etc/passwd, lisible par un grand nombre d’utilisateurs, contient les informations des comptes et un x à la place du mot de passe. Un champ de mot de passe de shadow enregistre un identifiant d’algorithme, des paramètres de coût, un sel et l’empreinte obtenue. $y$ désigne yescrypt, utilisé par défaut dans Debian 11, Ubuntu 22.04, Fedora 35 et les versions ultérieures ; $6$ désigne SHA-512-crypt.

Un fichier d’empreintes volé permet une attaque hors ligne. L’attaquant calcule les empreintes de ses propositions sur un autre matériel, sans subir les délais du service de connexion. Une attaque par force brute énumère les chaînes ; une attaque par dictionnaire commence par les mots probables, les mots de passe divulgués et des variantes telles que « Password1! ».

Avec exactement huit lettres minuscules, 268=208 827 064 576 chaînes sont possibles. À 1010 essais par seconde, parcourir tout l’espace prend environ 21 secondes. À 104 essais par seconde, cela prend environ 2,09×107 secondes, soit à peu près 242 jours. Ce sont des durées de recherche exhaustive, pas des garanties pour un mot de passe donné. Douze lettres minuscules donnent environ 9,5×1016 chaînes, soit à peu près 110 jours même au débit le plus élevé.

Rends l’attaque de chaque compte coûteuse

Un sel est une nouvelle valeur aléatoire stockée à côté de chaque empreinte de mot de passe. Il fait produire des empreintes différentes à des mots de passe identiques et rend inutilisables les tables précalculées réutilisables. Le sel est public ; son rôle est d’imposer un travail distinct pour chaque compte.

Considérons 1 000 comptes et une liste de 106 propositions, vérifiées à raison de 104 calculs d’empreinte par seconde. Sans sel, calculer une fois les empreintes de la liste prend 100 secondes et suffit pour tous les comptes. Des sels uniques exigent 109 calculs, soit environ 105 secondes ou 27,8 heures. Un mot de passe courant peut toutefois être trouvé près du début de la liste.

Les méthodes de hachage des mots de passe telles que bcrypt, scrypt, yescrypt, Argon2 et PBKDF2 ont des coûts de calcul réglables. Scrypt, yescrypt et Argon2 imposent aussi des coûts en mémoire. Une connexion pratique peut tolérer une fraction de seconde ; une vaste campagne d’essais répète ce coût des millions de fois. Un seul calcul SHA-256 rapide ne présente pas ce coût délibéré.

Conçois la politique de connexion autour des essais

NIST SP 800-63B-4 (2025) exige des sels d’au moins 32 bits et un coût de hachage des mots de passe aussi élevé que possible en pratique. Ses recommandations exigent au moins 15 caractères pour une authentification par mot de passe seul, ou au moins huit lorsque le mot de passe fait partie d’une authentification multifacteur, et recommandent d’accepter au moins 64 caractères.

Elles rejettent les mélanges obligatoires tels qu’un chiffre et un symbole ainsi que les changements de mot de passe périodiques imposés. Elles exigent de bloquer les choix courants ou compromis, de limiter les essais en ligne et d’imposer un changement lorsque la compromission est avérée. Les limites de débit en ligne protègent le service actif ; un hachage lent avec sel protège les données de vérification volées. Un mot de passe plus long choisi de manière prévisible dans une liste courante peut rester faible.

Points clés

  • La connexion recalcule une empreinte de mot de passe ; elle ne déchiffre pas un mot de passe.
  • Les essais hors ligne contournent les limites de débit du service de connexion actif.
  • Un sel public unique empêche de réutiliser le travail de hachage d’un compte à l’autre.
  • Un coût de calcul réglable rend chaque essai coûteux.
  • La longueur des mots de passe et les listes de blocage aident davantage que des règles de composition prévisibles.

2.3 Authentifie-toi grâce à ce que tu possèdes et à ce que tu es

Les mots de passe prouvent une connaissance. D’autres authentificateurs prouvent la possession d’un objet ou une caractéristique physique. Le système d’exploitation finit par associer l’identité authentifiée aux processus, mais la manière d’établir cette identité influe sur la facilité avec laquelle un attaquant peut usurper l’identité de l’utilisateur.

Combine différents types de facteurs

Les trois types de facteurs sont ce que tu sais, comme un mot de passe ou un code PIN ; ce que tu possèdes, comme un téléphone, une carte à puce ou une clé de sécurité ; et ce que tu es, comme une empreinte digitale. L’authentification multifacteur combine des types différents. Un mot de passe associé à une question de sécurité répète le facteur de connaissance.

Les mots de passe à usage unique fondés sur le temps (TOTP) utilisent un secret partagé et une période, généralement de 30 secondes, pour produire des codes correspondants sur un authentificateur et un serveur. La RFC 6238 définit cette méthode. Un code expire rapidement, mais une fausse page de connexion peut transmettre un code récent avant son expiration. Les codes d’application évitent l’échange de carte SIM ; les codes SMS dépendent du contrôle du numéro de téléphone et peuvent être détournés si celui-ci est compromis.

Prouve la possession sans envoyer la clé

Un authentificateur à clé publique signe un nouveau défi avec une clé privée. Le serveur vérifie la signature à l’aide d’une clé publique stockée, qui ne peut pas elle-même être réutilisée pour signer une connexion. Les clés de sécurité FIDO2 et les clés d’accès associent aussi l’authentification à l’identité du site : une réponse destinée à un faux site ne peut donc pas authentifier l’utilisateur sur le vrai. Une clé SSH ordinaire prouve aussi la possession, mais il ne faut pas supposer qu’elle dispose du même mécanisme de liaison au site web.

Le stockage modifie le risque. Les clés liées à un appareil, dans une clé de sécurité matérielle, un TPM ou une enclave sécurisée, signent dans le matériel sans exposer la clé privée. Les clés d’accès synchronisées copient les éléments de clé chiffrés entre les appareils par l’intermédiaire d’un compte de plateforme, ce qui facilite la récupération tout en intégrant ce compte à la frontière de confiance. Une clé privée SSH ordinaire est un fichier protégé par des permissions et, éventuellement, une phrase secrète.

Interprète les erreurs biométriques

Un système biométrique compare les traits mesurés à un gabarit enregistré. Il accepte lorsque le score de similarité atteint un seuil ; il n’exige pas une image identique à chaque fois.

TauxPopulation utilisée comme dénominateurErreur comptée
Taux de fausse acceptation (FAR)Tentatives d’imposteursImposteurs acceptés
Taux de faux rejet (FRR)Tentatives légitimesUtilisateurs légitimes rejetés

Deux imposteurs acceptés sur 10 000 donnent un FAR de 0,02 %. Trente rejets sur 1 000 tentatives légitimes donnent un FRR de 3 %. Relever le seuil de similarité diminue le FAR tout en augmentant le FRR. Une correspondance plus exigeante réduit les usurpations réussies, mais rend les nouvelles tentatives légitimes plus fréquentes.

Une caractéristique biométrique divulguée ne peut pas être changée comme un mot de passe, et les capteurs ont besoin de protections contre les photos ou les empreintes copiées. Une conception utile emploie la biométrie localement pour déverrouiller une clé protégée et n’envoie qu’une signature au serveur.

Authentifie aussi les processus

Pour une connexion locale de domaine Unix, SO_PEERCRED sous Linux obtient les identifiants du processus distant auprès du noyau au lieu de faire confiance à un nom envoyé par le client. Entre machines, les services utilisent des clés, des certificats ou des jetons stockés avec un accès réservé au compte de service. Après la connexion, les vérifications d’accès ordinaires du système d’exploitation utilisent l’UID ou le jeton d’accès ; elles ne demandent pas si l’utilisateur a saisi un mot de passe ou touché une clé.

Points clés

  • L’authentification multifacteur combine différents types de facteurs, et non simplement deux questions.
  • Les codes TOTP peuvent être transmis tant qu’ils sont valides.
  • La connexion par clé publique prouve la possession sans envoyer la clé privée.
  • FIDO2 lie l’authentification au site prévu.
  • Le FAR et le FRR utilisent des populations de tentatives différentes.
  • Un seuil biométrique plus strict réduit les acceptations d’imposteurs au prix d’une hausse des rejets légitimes.
  • Les identifiants d’un processus distant local devraient provenir du noyau.
3

Contrôle l’accès aux fichiers et aux autres ressources

Une identité authentifiée nécessite encore une décision pour chaque ressource demandée. Représente les droits dans une matrice d’accès, puis compare les listes associées aux objets aux jetons détenus par les processus. Étudie les permissions des fichiers et des répertoires avant d’ajouter les politiques obligatoires et les rôles professionnels. Une même demande peut faire intervenir une référence ouverte, des bits de mode ordinaires et une frontière de protection du service appliquée de façon centralisée.

3.1 Compare les listes de contrôle d’accès et les capacités

Une décision d’accès comporte trois éléments : un sujet demande à effectuer une opération sur un objet. Le sujet est généralement un processus agissant pour un principal ; les objets comprennent les fichiers, les périphériques et les autres processus. Une matrice d’accès représente les droits dans des cases, avec les sujets en lignes et les objets en colonnes.

Stocke les mêmes droits de deux façons

Supposons qu’alice puisse lire et modifier report.txt, que bob puisse seulement le lire et que le service de sauvegarde puisse lire à la fois report.txt et payroll.db. Bob peut aussi lire et modifier payroll.db. Alice et bob peuvent utiliser l’imprimante ; le service de sauvegarde ne le peut pas. Dans un système réel, la matrice est beaucoup plus grande et la plupart de ses cases sont vides.

Une liste de contrôle d’accès (ACL) stocke une colonne avec son objet. La liste de report.txt nomme alice, bob et backup avec leurs droits respectifs. Une liste de capacités stocke une ligne avec le sujet. Bob détient des jetons pour lire le rapport, lire et modifier les données de paie, et utiliser l’imprimante.

QuestionACLListe de capacités
Qui peut utiliser cet objet ?Examiner sa listeTrouver tous les détenteurs
Que peut utiliser ce sujet ?Examiner de nombreux objetsExaminer ses jetons
Comment déléguer des droits limités ?Ajouter ou modifier des entréesTransmettre certains jetons sans ajouter de droits
Qu’est-ce qui rend la révocation difficile ?Des références déjà accordées peuvent subsisterDes copies de jetons peuvent s’être propagées

Une capacité désigne à la fois un objet et les opérations autorisées ; son détenteur ne peut ni la falsifier ni en étendre les droits. La copie et la délégation autorisées sont possibles. Le noyau peut détenir le véritable jeton tandis que le code utilisateur détient un indice ; une autre architecture protège le jeton par cryptographie.

Suis un descripteur après l’ouverture

Unix combine les deux approches. open() vérifie les droits de l’appelant par rapport aux permissions du fichier, puis renvoie un descripteur de fichier qui enregistre l’accès accordé. Les lectures et écritures ultérieures vérifient cette référence ouverte. Un processus fils peut en hériter par fork(), ou un processus peut la recevoir par une socket de domaine Unix.

Alice ouvre app.log en écriture. Son propriétaire change le mode en 444. Le descripteur déjà ouvert d’alice permet toujours d’écrire ; une nouvelle tentative d’ouverture du fichier en écriture se heurte au nouveau mode. Mettre à jour l’ACL qui régit les ouvertures futures n’annule pas toutes les capacités déjà délivrées. Les handles Windows suivent le même principe général.

Capsicum de FreeBSD rend cela utile pour le confinement. Après cap_enter(), un processus ne peut pas ouvrir un chemin absolu arbitraire. Il peut agir au moyen des descripteurs existants, recevoir des descripteurs et utiliser openat() sous un descripteur de répertoire qu’il détient. Un processus père peut donc donner à un processus travailleur exactement les fichiers dont il a besoin. Les noyaux fondés sur les capacités tels que seL4 et Fuchsia étendent l’idée aux objets du noyau en général.

Distingue l’autre sens de capacité sous Linux

Les capacités Linux répartissent les privilèges de root en catégories. CAP_NET_BIND_SERVICE permet de se lier aux ports de numéro inférieur ; CAP_DAC_OVERRIDE contourne les vérifications ordinaires d’accès aux fichiers. Ces privilèges ne désignent pas un objet particulier : ils diffèrent donc d’une capacité au sens de la matrice d’accès. Un seul privilège Linux peut autoriser une catégorie d’opérations sur de nombreux objets.

Points clés

  • Les ACL organisent les droits par objet ; les listes de capacités les organisent par sujet.
  • Une capacité ne peut pas être falsifiée ni étendue par son détenteur.
  • Les descripteurs conservent l’accès accordé à l’ouverture d’un objet.
  • Modifier le mode d’un fichier ne révoque normalement pas les descripteurs existants.
  • Les capacités Linux répartissent les privilèges de root et ne désignent pas d’objets particuliers.

3.2 Lis et définis les permissions sous Unix et Windows

Les permissions Unix associent des droits au propriétaire, au groupe propriétaire et à tous les autres. Pour décider d’un accès, identifie d’abord l’opération et l’objet concerné. Lire le contenu d’un fichier, traverser un répertoire et supprimer un nom exigent des permissions différentes.

Décode et sélectionne les bits

La lecture vaut 4, l’écriture 2 et l’exécution 1. Additionne ces valeurs pour chaque classe : 754 signifie rwxr-xr-- ; 640 signifie rw-r-----. chmod 640 notes.txt définit un mode, tandis que chmod g+w,o-r notes.txt modifie certains bits. Le propriétaire ou root peut modifier le mode ; changer le propriétaire exige les privilèges root, représentés par CAP_CHOWN sous Linux.

Le noyau sélectionne la première classe correspondante : propriétaire si l’UID effectif correspond, sinon groupe si un groupe du processus correspond, sinon autres. Il ne combine pas les classes et n’essaie pas une classe plus généreuse. Alice possède un fichier de mode 077 : ses bits de propriétaire n’accordent aucun droit, elle ne peut donc pas le lire même si le groupe et les autres ont tous les droits. En tant que propriétaire, elle peut toutefois modifier le mode.

Root contourne normalement les vérifications de lecture et d’écriture. Pour exécuter un fichier ordinaire soumis aux vérifications discrétionnaires habituelles de Linux, au moins un bit d’exécution doit être activé. Une politique obligatoire peut imposer d’autres restrictions.

Interprète les bits des répertoires et les bits spéciaux

Pour un répertoire, la lecture permet de répertorier les noms ; l’exécution autorise la traversée et la recherche ; l’écriture associée à l’exécution permet de créer, supprimer et renommer des entrées. Supprimer un nom modifie son répertoire : un fichier de mode 000 peut donc être supprimé par une personne disposant des droits nécessaires sur le répertoire.

Setuid ajoute 4000 en octal au mode d’un exécutable et change l’identité utilisateur effective lors de son exécution. Setgid ajoute 2000 et change de la même façon le groupe ; sur un répertoire, il fait hériter aux nouveaux fichiers le groupe du répertoire. Le bit de restriction de suppression ajoute 1000. Un répertoire tel que /tmp, de mode 1777, n’autorise la suppression ou le renommage que par le propriétaire du fichier, le propriétaire du répertoire ou un processus privilégié, les permissions ordinaires sur le répertoire restant nécessaires.

Retire des bits lors de la création de fichiers

Un umask désactive des bits du mode demandé par un programme. C’est une opération sur les bits, pas une soustraction octale. Avec les demandes habituelles de 666 pour les fichiers et de 777 pour les répertoires :

UmaskNouveau fichierNouveau répertoire
022644755
027640750
000666777

Un umask ne peut pas ajouter des droits d’exécution absents de la demande pour le fichier.

Lis des listes d’accès plus détaillées

Les ACL POSIX ajoutent des utilisateurs et des groupes nommés. setfacl -m u:bob:r report.txt donne à bob une entrée nominative de lecture ; getfacl l’affiche et ls -l marque l’ACL étendue avec +. Le masque d’ACL limite les utilisateurs nommés, les groupes nommés et le groupe propriétaire : une entrée nominative peut donc afficher plus de droits que ceux qui sont effectifs.

Windows NTFS utilise un descripteur de sécurité avec un SID propriétaire et une DACL composée d’ACE ordonnées qui autorisent ou refusent des droits. L’évaluation s’arrête dès qu’un droit demandé est refusé ou que tous les droits demandés ont été accordés ; les droits non accordés sont refusés. L’ordre recommandé place les entrées explicites avant les entrées héritées, avec les refus avant les autorisations dans chaque groupe. Une autorisation explicite peut donc régler une demande avant qu’un refus hérité soit atteint. Une SACL distincte sélectionne les événements d’accès à auditer.

Points clés

  • Choisis la classe de permission Unix correspondante avant de vérifier ses bits.
  • Les permissions du répertoire régissent les noms ; celles du fichier régissent son contenu.
  • Le bit de restriction de suppression ajoute une vérification de propriété pour la suppression et le renommage.
  • Un umask désactive les bits demandés et n’en ajoute jamais.
  • Le masque d’ACL POSIX limite les droits de la classe du groupe et des entrées nominatives.
  • L’évaluation d’une DACL Windows dépend de l’ordre des ACE.
  • Une SACL sélectionne les accès à auditer au lieu d’accorder des accès.

3.3 Compare les contrôles d’accès discrétionnaire, obligatoire et fondé sur les rôles

Les différents modèles de contrôle d’accès répondent à différentes questions de gestion. Qui peut accorder un accès ? Un programme compromis peut-il partager les données d’un utilisateur ? Comment un administrateur peut-il changer les droits de nombreux employés sans modifier chaque fichier ? Un même système d’exploitation peut appliquer plusieurs modèles à une même demande.

Distingue le choix du propriétaire de la politique système

Dans le contrôle d’accès discrétionnaire (DAC), le propriétaire d’un objet décide qui peut l’utiliser. Les modes et les ACL Unix sont des mécanismes courants. Leur faiblesse est qu’un programme malveillant agissant sous l’identité de l’utilisateur peut exercer les droits de celui-ci, notamment copier ailleurs les données qu’il peut lire.

Dans le contrôle d’accès obligatoire (MAC), une politique définie par l’administrateur pour l’ensemble du système limite les accès indépendamment des souhaits du propriétaire. Le noyau applique le MAC en plus du DAC. Les deux vérifications doivent autoriser l’accès : un mode de fichier permissif ne l’emporte donc pas sur un refus obligatoire.

Le modèle de Bell–LaPadula protège la confidentialité à l’aide de niveaux ordonnés et de deux règles : pas de lecture vers le haut et pas d’écriture vers le bas. Un processus Secret peut lire des données Confidentiel et écrire vers une destination Très Secret. Il ne peut pas lire des données Très Secret ni écrire des données Confidentiel. Un programme ne peut pas transférer des informations de Secret vers Confidentiel simplement en les lisant et en les réécrivant. Le modèle de Biba inverse les directions de lecture et d’écriture pour protéger l’intégrité.

Confine un service même lorsqu’il est root

SELinux attribue des étiquettes de type aux fichiers et exécute les processus dans des domaines. Une politique indique quel domaine peut effectuer quelles opérations sur chaque type ; les accès non répertoriés sont refusés. Un serveur web dans httpd_t peut lire les pages étiquetées httpd_sys_content_t tout en étant bloqué pour user_home_t, même si les modes Unix ordinaires autorisent la lecture. ls -Z affiche les étiquettes.

En mode enforcing, SELinux bloque et journalise les violations. En mode permissive, il les journalise sans les bloquer. Root dans un domaine confiné doit toujours respecter une politique appliquée en mode enforcing. L’UID 0 et l’accès sans restriction sont donc deux affirmations différentes.

AppArmor confine les programmes avec des profils fondés sur les chemins de fichiers et les capacités autorisées. Il est couramment utilisé sur Ubuntu et SUSE. SELinux et AppArmor fonctionnent par l’intermédiaire des points d’accroche des modules de sécurité Linux (LSM) lors des décisions de sécurité. Android combine des UID propres aux applications avec SELinux ; les systèmes Apple utilisent aussi des profils de bac à sable pour les applications.

Attribue des rôles professionnels plutôt que des droits individuels

Dans le contrôle d’accès fondé sur les rôles (RBAC), les permissions sont associées aux rôles et les utilisateurs sont affectés à des rôles. Faire passer une personne d’un poste à un autre modifie ses rôles plutôt que de nombreuses permissions indépendantes sur les objets.

Supposons que 50 employés aient chacun besoin de 20 permissions. Une attribution directe nécessite 1 000 liens entre utilisateurs et permissions. Si cinq rôles détiennent chacun 20 permissions et que chaque employé a un rôle, la gestion nécessite 50 liens entre utilisateurs et rôles et 100 liens entre rôles et permissions : 150 au total. L’économie provient des profils de poste partagés, pas de la suppression de permissions nécessaires.

Les groupes Windows utilisés comme rôles et les politiques sudo fondées sur les groupes mettent en œuvre ce principe. Le DAC convient aux fichiers gérés par leur propriétaire, le MAC confine les services selon des règles appliquées de façon centralisée et le RBAC organise les attributions administratives. Un service peut recevoir les droits liés à sa fonction par un rôle, tandis que le DAC et le MAC vérifient tous deux son accès effectif aux fichiers.

Points clés

  • Le DAC laisse les propriétaires choisir les accès ; le MAC applique une politique commune à tout le système.
  • Une demande doit être autorisée à la fois par le DAC et par le MAC appliqué en mode contraignant.
  • Bell–LaPadula bloque les lectures vers le haut et les écritures vers le bas.
  • Les domaines et les types SELinux peuvent confiner les processus root.
  • Le RBAC gère les permissions par des rôles professionnels.
4

Exécute des systèmes d’exploitation dans des machines virtuelles

Exécuter plusieurs noyaux sur un ordinateur ajoute une couche de protection sous le système d’exploitation. Un hyperviseur doit préserver la vue de chaque invité tout en gardant le contrôle du temps processeur physique, de la mémoire et des périphériques. Suis les mécanismes depuis les instructions interceptées jusqu’à la traduction des adresses en deux étapes, puis compare les interfaces de périphériques et les voies restantes par lesquelles un invité pourrait affecter son hôte.

4.1 Décris les machines virtuelles et les hyperviseurs

Une machine virtuelle donne à un système d’exploitation complet l’apparence de disposer de son propre ordinateur. Ce système d’exploitation est le système invité. L’ordinateur physique est l’hôte, et l’hyperviseur, ou moniteur de machine virtuelle (VMM), attribue aux invités du temps processeur réel, de la mémoire et des périphériques.

Préserve le comportement tout en gardant le contrôle

Le cadre défini par Popek et Goldberg en 1974 identifie trois propriétés. L’équivalence signifie que les programmes se comportent comme sur une machine réelle, à l’exception des temps d’exécution et des ressources disponibles. Le contrôle des ressources signifie que l’hyperviseur garde la maîtrise du matériel. L’efficacité signifie que la plupart des instructions de l’invité s’exécutent directement sur le processeur.

L’hyperviseur ordonnance les processeurs virtuels (vCPU) sur les cœurs physiques. Une commutation de machine sauvegarde l’état d’exécution complet d’une machine virtuelle, y compris les registres privilégiés et les paramètres d’interruption, puis restaure celui d’une autre. Un invité voit son propre état même lorsqu’il partage un cœur physique avec d’autres invités.

ArchitectureOù s’exécute l’hyperviseurExemples
Type 1, sur matériel nuContrôle directement le matérielESXi, Xen, Hyper-V
Type 2, hébergéS’exécute comme une application sur un système d’exploitation hôteVirtualBox, VMware Workstation, Parallels Desktop

KVM transforme le noyau Linux lui-même en hyperviseur et est généralement classé dans le type 1. Un hôte Linux complet reste disponible, ce qui rend la distinction simple entre les deux types moins nette. Pour raisonner sur la protection, identifie le composant qui contrôle réellement la virtualisation du processeur et de la mémoire.

Utilise l’abstraction de la machine

La consolidation des serveurs regroupe des systèmes peu utilisés. Douze serveurs utilisant chacun en moyenne 5 % d’un ordinateur à huit cœurs ont besoin, ensemble, de 60 % d’un tel ordinateur. Cette moyenne laisse penser que la consolidation est possible, mais les pics simultanés, les besoins en mémoire vive et les demandes aux périphériques exigent encore une marge.

Un instantané sauvegarde l’état d’une machine virtuelle pour une restauration ultérieure. Copier une image disque seule ne capture pas l’état d’un processeur en cours d’exécution et de sa mémoire. La migration à chaud transfère une machine virtuelle en cours d’exécution vers un autre hôte, en copiant la mémoire et en basculant l’exécution après une courte pause. Ces opérations sont possibles parce que l’état machine de l’invité est représenté par des données que l’hyperviseur gère.

Les machines virtuelles permettent aussi de tester d’anciens systèmes, de séparer des logiciels incompatibles et d’exécuter différents systèmes d’exploitation sur du matériel compatible. Un invité Windows peut s’exécuter dans une machine virtuelle à côté d’un invité Linux, chacun avec son propre noyau. Les instances de serveur dans le cloud utilisent couramment cette frontière.

Distingue la virtualisation de l’émulation complète

Un émulateur peut interpréter ou traduire un jeu d’instructions pour un autre processeur, comme du code ARM sur x86. La virtualisation matérielle exécute normalement les instructions de l’invité directement sur un processeur compatible et intervient lors d’événements sensibles. Cela explique à la fois sa vitesse et son besoin d’une prise en charge par le processeur.

Des noyaux invités distincts forment une frontière utile : prendre le contrôle d’un noyau invité ne donne pas directement le contrôle du noyau hôte. Cette frontière dépend toutefois du bon fonctionnement du code de l’hyperviseur et du modèle de périphérique. Une évasion de machine virtuelle exploite cette couche, tandis qu’un canal auxiliaire peut divulguer des données par le matériel partagé sans accorder d’accès mémoire ordinaire. Choisir une machine virtuelle réduit les interfaces exposées à un invité non fiable ; cela ne rend pas le matériel partagé infaillible.

Points clés

  • Une machine virtuelle présente une machine complète à son système d’exploitation invité.
  • L’équivalence, le contrôle des ressources et l’efficacité décrivent le rôle d’un VMM.
  • Un vCPU est ordonnancé sur un processeur physique.
  • Les instantanés et la migration reposent sur la sauvegarde et le transfert de l’état machine.
  • La consolidation exige une marge pour les pics de demande, et pas seulement une moyenne faible.
  • L’isolation des machines virtuelles dépend du bon fonctionnement de l’hyperviseur, du modèle de périphérique et du matériel.

4.2 Virtualise le processeur

Un noyau invité s’attend à contrôler sa machine. L’hyperviseur doit préserver cette apparence sans lui céder l’ordinateur réel. La virtualisation du processeur permet aux instructions ordinaires de l’invité de s’exécuter directement et intercepte les opérations qui doivent modifier l’état de la machine virtuelle.

Intercepte et émule l’état virtuel

Dans le mécanisme classique d’interception et émulation, le noyau invité est déprivé. Sa tentative de charger un registre de table des pages ou d’installer une table des vecteurs de déroutement provoque un déroutement vers l’hyperviseur. Celui-ci met à jour le registre ou la table virtuelle de l’invité et reprend l’exécution. Il ne laisse pas l’invité remplacer les structures de contrôle réelles de l’hyperviseur.

Dans cette architecture, un appel système de l’invité peut nécessiter plusieurs franchissements. L’application invitée provoque un déroutement vers le gestionnaire réel de l’hyperviseur. Celui-ci transfère l’exécution au gestionnaire enregistré du noyau invité avec des privilèges réduits. Lorsque le noyau invité revient, ce retour privilégié provoque un nouveau déroutement ; l’hyperviseur effectue le retour réel vers l’application invitée.

La condition de Popek et Goldberg pour cette technique est que toute instruction sensible soit privilégiée. Sensible signifie qu’elle modifie la configuration de la machine ou se comporte différemment selon les privilèges. Privilégiée signifie qu’elle provoque un déroutement hors du mode le plus privilégié. Les différences silencieuses ne peuvent pas être émulées si l’hyperviseur n’apprend jamais qu’elles se sont produites.

Comprends l’obstacle du x86 classique

L’analyse de Robin et Irvine en 2000 a identifié 17 instructions x86 sensibles non privilégiées. Par exemple, POPF peut restaurer l’indicateur d’activation des interruptions avec des privilèges suffisants, mais le laisse silencieusement inchangé avec des privilèges réduits. Un invité déprivé peut croire qu’il a désactivé les interruptions alors qu’aucun déroutement n’a informé l’hyperviseur qu’il devait mettre à jour son état virtuel des interruptions.

Trois approches résolvent ce problème :

ApprocheComment elle intercepte l’opérationModification de l’invité
Traduction binaireRéécrit les instructions problématiques du noyau invité avant exécution et met le code traduit en cacheAucune modification du code source
ParavirtualisationRemplace les opérations privilégiées par des hyperappels explicitesNoyau invité modifié
Assistance matérielleFournit un mode distinct pour l’invité et des sorties de machine virtuelle contrôléesUn invité non modifié peut s’exécuter

VMware a utilisé la traduction binaire en 1999 ; Xen a utilisé la paravirtualisation en 2003. Intel VT-x est arrivé en 2005 et AMD-V en 2006. Les applications ordinaires de l’invité peuvent toujours s’exécuter directement lorsque le code du noyau nécessite une traduction ou des hyperappels.

Distingue le numéro d’anneau du mode de virtualisation

Avec Intel VT-x, l’hyperviseur s’exécute en mode VMX root et un invité en mode non-root. Le noyau invité peut y utiliser l’anneau 0. L’anneau 0 dans un invité ne donne pas le contrôle de l’hôte physique.

Les événements configurés provoquent une sortie de machine virtuelle, qui sauvegarde l’état du vCPU dans une structure de contrôle telle que la VMCS. L’hyperviseur traite l’événement et reprend l’exécution par une entrée en machine virtuelle. De nombreux appels système peuvent rester entièrement à l’intérieur de l’invité. ARM utilise EL2 pour l’hyperviseur ; RISC-V fournit une extension pour hyperviseur.

Si un invité exécute HLT et que cet événement est configuré pour provoquer une sortie, l’hyperviseur marque son vCPU comme étant en attente et ordonnance un autre travail jusqu’à l’arrivée d’une interruption virtuelle. Le cœur physique n’a pas besoin de rester inactif. Les sorties et les entrées prennent toutefois du temps, généralement de centaines à des milliers de cycles : le regroupement et les interfaces paravirtuelles restent donc utiles.

Points clés

  • L’interception et l’émulation appliquent les opérations sensibles à l’état de la machine virtuelle.
  • L’interception et l’émulation classiques exigent que les instructions sensibles provoquent un déroutement.
  • La traduction binaire réécrit le code ; la paravirtualisation modifie l’interface de l’invité.
  • L’anneau 0 d’un invité sous VT-x reste distinct du mode VMX root.
  • Les sorties de machine virtuelle sont des événements contrôlés qui ont un coût réel en performances.

4.3 Virtualise la mémoire

Une application invitée utilise une adresse virtuelle de l’invité. Son noyau la traduit en adresse physique de l’invité, qui correspond à la représentation de la mémoire vive par l’invité. L’hyperviseur associe ensuite cette adresse à une adresse physique de l’hôte, ou adresse machine. Chaque invité peut croire que sa mémoire vive commence à zéro tout en utilisant des cadres réels différents.

Conserve le déplacement dans la page

Utilise des pages de 4 KiB. L’invité associe la page virtuelle 2 au cadre 7 de l’invité ; l’hyperviseur associe le cadre 7 de l’invité au cadre machine 42. Pour l’adresse 0x2ABC :

  1. Décompose-la en page 2 et déplacement 0xABC.
  2. Remplace la page 2 par le cadre 7 de l’invité, ce qui donne 0x7ABC.
  3. Remplace le cadre 7 de l’invité par le cadre machine 42, soit 0x2A en hexadécimal.
  4. Conserve le déplacement, ce qui donne l’adresse machine 0x2AABC, soit 174 780 octets à partir de l’adresse zéro.

Seul le numéro de page change. Traiter l’adresse physique de l’invité comme une adresse réelle en mémoire vive contournerait la décision d’allocation et d’isolation de l’hyperviseur.

Compare la traduction logicielle et matérielle

Les tables des pages fantômes associent directement les pages virtuelles de l’invité aux cadres machine. La MMU réelle utilise ces tables construites par l’hyperviseur. Celui-ci protège en écriture les pages contenant les tables des pages de l’invité et intercepte les modifications et les changements de table de l’invité afin que ses tables fantômes restent cohérentes. Des changements fréquents d’espace d’adressage de l’invité provoquent donc des déroutements supplémentaires.

La pagination imbriquée, Intel EPT ou AMD NPT, confie les deux étapes à la MMU. Le matériel parcourt les tables de l’invité et les tables qui associent les adresses physiques de l’invité aux adresses machine. Les mises à jour des tables des pages de l’invité n’ont plus toutes besoin d’être interceptées par logiciel. Le TLB met en cache la traduction finale combinée.

Un échec de recherche dans le cache peut rester coûteux. Avec quatre niveaux à chaque étape, chacune des quatre entrées de la table de l’invité nécessite quatre accès à la table imbriquée, plus l’accès à l’entrée elle-même : 20 accès. La traduction de l’adresse physique finale des données de l’invité en ajoute quatre, soit 24 accès de traduction avant l’accès aux données. Les pages de grande taille et les caches de parcours des tables des pages réduisent ce travail dans le pire des cas, sans résultat en cache.

Récupère de la mémoire malgré une connaissance limitée de l’invité

La surallocation mémoire promet aux invités plus de mémoire au total que l’hôte n’en possède. Quatre machines virtuelles de 16 GiB totalisent 64 GiB sur un hôte de 48 GiB. Cela ne fonctionne que tant que leurs besoins effectifs tiennent dans la mémoire disponible ; si elles deviennent toutes occupées, il faut récupérer de la mémoire ou utiliser l’espace d’échange.

Un pilote de ballonnement dans un invité alloue des pages à la demande de l’hyperviseur. Le système invité choisit ce qu’il libère, tandis que l’hyperviseur récupère les cadres machine correspondant aux pages du ballon. Cela réduit le déficit d’information : l’invité sait quelles données comptent, tandis que l’hyperviseur voit les allocations sans en connaître tout le sens.

Le partage de pages, comme avec KSM de Linux, fusionne les pages identiques en une copie en lecture seule et les sépare en cas d’écriture. L’échange de pages par l’hyperviseur offre un autre recours, mais peut faire de mauvais choix faute de disposer des connaissances de l’invité. Un périphérique directement affecté à la machine virtuelle a aussi besoin d’une IOMMU pour traduire et limiter ses adresses DMA.

Le partage de pages identiques entre clients a un coût pour la confidentialité : la durée d’une copie sur écriture peut révéler si un autre invité détient les mêmes données. Les fournisseurs de cloud désactivent couramment cette forme de partage entre clients, même si elle économise de la mémoire.

Points clés

  • Les adresses virtuelles de l’invité, physiques de l’invité et machine appartiennent à des couches différentes.
  • Le déplacement dans la page reste inchangé au cours des deux traductions.
  • Les tables fantômes exigent que l’hyperviseur suive les modifications des tables de l’invité.
  • La pagination imbriquée effectue les deux étapes dans le matériel et met le résultat combiné en cache.
  • La surallocation dépend du maintien de la demande sous la capacité disponible.
  • Le ballonnement utilise les connaissances de l’invité ; le partage de pages peut exposer des informations par les temps d’accès.

4.4 Virtualise les périphériques et isole les machines virtuelles les unes des autres

Une machine virtuelle a besoin de stockage, d’un réseau et d’autres périphériques en plus du temps processeur et de la mémoire vive. L’interface de périphérique influe sur la compatibilité, les performances et le code qu’un invité non fiable peut atteindre. Une interface rapide et une interface de confiance restreinte sont des choix de conception liés, mais ne constituent pas la même propriété.

Choisis comment l’invité accède à un périphérique
ApprocheInterface de l’invitéPrincipal compromis
ÉmulationModèle d’un périphérique physique connuLes pilotes existants fonctionnent, mais les opérations sur les registres demandent un traitement logiciel
Périphérique paravirtuelPilote conçu pour la virtualisation et files partagéesRegroupement efficace, mais l’invité a besoin du pilote
Affectation directePériphérique physique ou fonction virtuelle attribuéAccès proche des performances natives, mais partage et migration plus difficiles

Un programme auxiliaire tel que QEMU peut émuler une carte réseau Intel e1000. Le pilote ordinaire de l’invité écrit dans des registres connus ; le programme auxiliaire en réalise les effets. Des accès fréquents aux registres peuvent provoquer de nombreuses sorties et opérations logicielles.

Un pilote virtio, lui, échange des requêtes par des files en mémoire partagée. Il peut placer plusieurs opérations dans une file et notifier une seule fois le composant qui les traite. Les périphériques vmxnet3 de VMware et VMBus de Hyper-V suivent des architectures apparentées conçues pour la virtualisation. Un pilote de périphérique paravirtuel ne signifie pas que tout le noyau invité doit utiliser des opérations processeur paravirtuelles.

Avec l’affectation directe de périphérique, l’invité dispose d’un périphérique physique ou d’une fonction virtuelle SR-IOV. L’IOMMU limite le DMA à la mémoire de la machine virtuelle. L’affectation directe réduit les interventions logicielles, mais le transfert de l’état du périphérique vers un autre hôte peut rendre la migration à chaud difficile.

Traite les disques virtuels comme un état géré

Un disque virtuel est généralement un fichier sur l’hôte, tel que qcow2, VMDK ou VHDX, ou un volume de stockage. Les images à copie sur écriture permettent à de nombreux invités de partager une base tout en enregistrant des modifications distinctes. Les instantanés peuvent conserver l’état du disque à faible coût, et un instantané complet d’une machine en cours d’exécution nécessite aussi son état d’exécution et sa mémoire. Le clonage et la migration reposent sur la capacité de l’hyperviseur à gérer ces représentations.

Repère la frontière qu’un attaquant doit franchir

Un noyau invité compromis contrôle déjà sa machine virtuelle, mais atteindre l’hôte exige une évasion de machine virtuelle ou une autre défaillance de frontière. La faille VENOM de 2015 touchait le contrôleur de lecteur de disquettes émulé de QEMU et pouvait permettre au code invité de s’exécuter dans le processus QEMU de l’hôte. Maintenir l’émulation des périphériques dans un processus distinct placé dans un bac à sable limite les pouvoirs exposés par un tel bogue.

Les caches de processeur, les prédicteurs de branchement et les bus mémoire partagés créent aussi des canaux auxiliaires. Spectre et L1TF ont montré que l’isolation ne peut pas être jugée à partir des seules projections de pages. Les mesures d’atténuation comprennent les mises à jour du processeur et du microcode, l’effacement de l’état pertinent entre invités et l’évitement du placement simultané de clients différents sur les fils d’exécution matériels d’un même cœur.

L’informatique confidentielle, notamment AMD SEV-SNP et Intel TDX, protège la mémoire de l’invité contre l’hyperviseur grâce à des clés de chiffrement détenues par le matériel et permet l’attestation de l’environnement lancé. Elle étend la frontière de confiance face à un hôte ou à un opérateur compromis. Elle ne supprime ni tous les canaux auxiliaires ni toutes les possibilités pour un hôte d’interrompre le service. La sécurité des machines virtuelles dépend toujours de l’hyperviseur, des interfaces de périphériques, du matériel et de leur configuration.

Points clés

  • L’émulation favorise la compatibilité ; les files paravirtuelles réduisent les sorties répétées.
  • L’affectation directe exige que l’IOMMU limite le DMA du périphérique.
  • Les disques virtuels et l’état machine sauvegardé permettent les instantanés et la migration.
  • Les bogues du modèle de périphérique peuvent permettre une évasion de machine virtuelle.
  • Le matériel partagé peut divulguer des informations sans violation ordinaire des permissions mémoire.
  • L’informatique confidentielle protège la mémoire de l’invité contre l’hôte dans les limites des garanties matérielles.
5

Isole les applications avec des conteneurs

Les conteneurs construisent un environnement isolé autour de processus ordinaires utilisant le noyau de l’hôte. Leurs vues privées, leurs limites de ressources et leurs pouvoirs proviennent de différentes fonctions du noyau, qui exigent chacune une attention distincte. Lis les correspondances des espaces de noms et les paramètres des groupes de contrôle, puis relie-les aux restrictions de privilèges. Utilise la frontière du noyau partagé pour déterminer si des conteneurs, des machines virtuelles ou une combinaison des deux conviennent à une charge de travail.

5.1 Limite ce qu’un processus voit avec les espaces de noms

Un conteneur Linux est un ensemble de processus utilisant le noyau de l’hôte avec des vues et des privilèges restreints. Il n’a ni noyau distinct ni ordinateur émulé. Les espaces de noms donnent aux processus des instances privées de ressources qui seraient autrement globales.

Associe chaque espace de noms à sa vue
Espace de nomsCe qu’il sépare
MontageSystèmes de fichiers montés et arborescence visible
PIDNuméros de processus et visibilité des processus
RéseauInterfaces, adresses, routes, ports et règles de pare-feu
UTSNom d’hôte et nom de domaine NIS
IPCObjets IPC System V et files de messages POSIX
UtilisateurCorrespondances des identifiants d’utilisateur et de groupe et capacités limitées à un périmètre
CgroupPartie visible de la hiérarchie des cgroups
TempsDécalages des horloges monotone et de démarrage

clone() avec des options d’espace de noms crée un processus fils dans les nouveaux espaces de noms sélectionnés. unshare() sépare le contexte des espaces de noms, et setns() rejoint un espace de noms existant par un descripteur tel que celui ouvert depuis /proc/1234/ns/net. La réassociation PID affecte les processus fils créés ensuite sans déplacer l’appelant. Pour les espaces de noms temps, unshare(CLONE_NEWTIME) prépare aussi un espace de noms pour les processus fils créés ensuite ; setns() peut déplacer l’appelant dans un espace de noms temps existant. Les espaces de noms temps sont créés avec unshare().

Ainsi, unshare --pid --fork --mount-proc bash utilise --fork pour créer l’interpréteur dans le nouvel espace de noms PID. Cet interpréteur y est le PID 1, même si son PID sur l’hôte est 48213. Le PID 1 adopte les processus orphelins ; s’il se termine, le noyau met fin aux processus restants de l’espace de noms. Les processus d’un espace de noms ancêtre peuvent voir leurs descendants, tandis que les processus internes ne peuvent pas voir vers l’extérieur dans les espaces de noms PID ancêtres.

Sépare les fichiers et le réseau

Un espace de noms de montage fournit une liste de montages privée. Un moteur d’exécution assemble une arborescence de fichiers et en fait la racine avec pivot_root. Un conteneur peut utiliser les /etc et /usr d’une autre distribution Linux tout en faisant appel au noyau de l’hôte. chroot seul ne change que le point de départ de la résolution des chemins ; ce n’est pas une frontière sûre contre un processus privilégié.

Un nouvel espace de noms réseau possède une interface de bouclage. Un moteur d’exécution peut le connecter au moyen d’une paire d’interfaces veth, avec une extrémité à l’intérieur et l’autre connectée à un pont de l’hôte. Des piles distinctes permettent à deux conteneurs d’écouter tous deux sur le port 80 sans se disputer le port d’un même espace de noms.

Traduis les identités à travers un espace de noms utilisateur

Une ligne de /proc/<pid>/uid_map indique le premier identifiant interne, le premier identifiant externe et la longueur de la plage. La ligne 0 100000 65536 associe les identifiants internes 0–65535 aux identifiants 100000–165535 de l’hôte. L’UID interne 1000 correspond donc à 101000 à l’extérieur. Les identifiants sans correspondance utilisable sont normalement affichés sous l’UID de débordement 65534.

Root dans cet espace de noms possède des capacités sur les ressources qu’il régit, mais pas de pouvoir sur tout l’hôte. Charger un module du noyau ou changer l’horloge système réelle exige toujours des privilèges dans l’espace de noms utilisateur initial. Une correspondance d’UID ne protège pas une socket privilégiée de moteur d’exécution transmise au conteneur.

Une vue privée ne limite pas non plus la consommation. Un processus disposant de ses propres espaces de noms PID et de montage peut toujours consommer du temps processeur et de la mémoire vive. Les cgroups limitent les quantités, tandis que les limites de capacités et seccomp restreignent les opérations.

Points clés

  • Les conteneurs utilisent des processus du noyau hôte dotés de vues privées des ressources.
  • Les huit types d’espaces de noms séparent différents types d’état global.
  • La réassociation PID et unshare pour les espaces de noms temps affectent les processus fils créés ensuite ; setns peut rejoindre directement un espace de noms temps.
  • Le PID 1 a des responsabilités particulières concernant le cycle de vie des processus dans son espace de noms.
  • Les espaces de noms utilisateur traduisent les identifiants et délimitent les pouvoirs.
  • Les vues privées ont besoin de limites distinctes pour les ressources et les privilèges.

5.2 Limite les ressources qu’un processus utilise avec les groupes de contrôle

Un groupe de contrôle, ou cgroup, rassemble des processus pour comptabiliser et contrôler les ressources. Les espaces de noms déterminent leur vue ; les cgroups régissent des quantités telles que le temps processeur, la mémoire et le nombre de tâches. Les processus fils héritent du groupe de leur père, et la hiérarchie empêche un groupe fils d’échapper aux limites d’un ancêtre.

Lis les fichiers de cgroup v2

Cgroup v2 utilise une hiérarchie unifiée, normalement sur /sys/fs/cgroup. Un groupe père active les contrôleurs pour ses fils par cgroup.subtree_control, par exemple +cpu +memory +pids. Des fichiers individuels dans chaque groupe fils contiennent les limites et les compteurs.

Les contrôleurs comprennent cpu, cpuset, memory, io, pids, hugetlb et rdma. Ils régissent le temps processeur, le placement sur les processeurs et les nœuds mémoire, la mémoire ordinaire, les entrées-sorties en mode bloc, le nombre de tâches, les pages de très grande taille et les ressources RDMA. Les événements de performance prenant en compte les cgroups permettent la mesure, et cgroup.freeze suspend l’exécution d’un groupe.

Distingue une limite de processeur d’une part

cpu.max contient un quota et une période en microsecondes. 50000 100000 autorise 50 ms d’exécution sur le processeur par période de 100 ms, soit l’équivalent de la moitié d’un processeur. 200000 100000 autorise l’équivalent du temps de deux processeurs, éventuellement réparti sur plusieurs cœurs. max 100000 signifie qu’aucun quota ne s’applique. Une fois le quota consommé, le groupe attend la période suivante même si un processeur est inactif.

cpu.weight fixe une part relative en cas de concurrence, de 1 à 10 000, avec 100 par défaut. Pour des groupes prêts à s’exécuter, placés de façon équivalente sur quatre processeurs, les poids 100 et 300 répartissent le temps disponible selon le rapport 1:3 : environ un processeur et trois processeurs. Si le groupe de poids supérieur devient inactif, l’autre peut utiliser les quatre, sauf si une autre limite intervient. Un poids n’est ni une réservation ni un plafond strict.

Contiens l’épuisement de la mémoire et des tâches

memory.high provoque une récupération de mémoire et ralentit les tâches au-delà de son seuil. memory.max impose une limite stricte. Le noyau essaie d’abord de récupérer de la mémoire, notamment le cache, et utilise l’espace d’échange disponible. S’il ne peut pas en récupérer assez, le mécanisme OOM du cgroup termine un processus admissible dans le groupe concerné.

Pour une valeur memory.max de 512M, la limite est de 536 870 912 octets, soit 512 MiB. Un processus présentant une fuite peut forcer la récupération de mémoire et finir par provoquer la mise à mort d’un processus par le mécanisme OOM, mais la victime est choisie par le noyau et n’est pas nécessairement ce processus. La frontière du groupe contient l’événement au lieu de laisser choisir un processus sans rapport sur l’hôte.

pids.max compte les processus et les fils d’exécution. Avec une limite de 100, toute création supplémentaire échoue avec EAGAIN, ce qui contient la croissance des tâches d’une bombe fork. Une limite d’entrées-sorties telle que 8:0 rbps=10485760 dans io.max plafonne les lectures du périphérique en mode bloc 8:0 à 10 MiB/s.

Ces fichiers ne masquent pas les processus ni les noms de fichiers de l’hôte. De plus, /proc/meminfo et les outils qui le lisent peuvent indiquer la mémoire vive de l’hôte au lieu de memory.max ; le total affiché ne prouve pas à lui seul qu’un cgroup n’a pas de limite. Les mesures de ressources doivent être lues à la couche qui fait respecter la frontière.

Points clés

  • Cgroup v2 applique les contrôles de ressources par une hiérarchie unifiée.
  • Un groupe fils reste soumis aux limites de ses ancêtres.
  • cpu.max est un quota strict ; cpu.weight est une part relative en cas de concurrence.
  • memory.high exerce une pression ; memory.max peut conduire à la suppression locale d’un processus par le mécanisme OOM.
  • pids.max compte les fils d’exécution aussi bien que les processus.
  • Les limites des cgroups ne créent pas de vues privées des ressources de l’hôte.

5.3 Restreins les conteneurs et choisis entre conteneurs et machines virtuelles

Une frontière de conteneur utile combine des vues, des contrôles de ressources et des pouvoirs restreints. Une arborescence privée ne bloque pas à elle seule les appels système dangereux, et un quota de processeur ne bloque pas l’accès à un fichier exposé de l’hôte. Le noyau de l’hôte applique chacun de ces contrôles.

Réduis les pouvoirs du processus

Un moteur d’exécution combine des espaces de noms, des cgroups et une image de système de fichiers contenant des programmes et des bibliothèques. Il peut renforcer la frontière en :

  • Exécutant la charge de travail sans être root ou en associant les identifiants du conteneur à ceux de l’hôte par un espace de noms utilisateur.
  • Abandonnant des capacités Linux, en particulier des pouvoirs étendus tels que CAP_SYS_ADMIN et CAP_SYS_MODULE.
  • Appliquant seccomp pour restreindre les appels inutiles.
  • Appliquant une politique SELinux ou AppArmor.
  • Plaçant le système de fichiers racine en lecture seule lorsque c’est possible.
  • Définissant no_new_privs pour que l’exécution de programmes setuid ne puisse pas élever les privilèges.

Chaque contrôle couvre une voie différente. Un système de fichiers racine en lecture seule autorise toujours les opérations réseau permises ; un filtre seccomp autorise toujours les appels de sa liste. La conception devrait correspondre aux opérations dont l’application a réellement besoin.

Identifie le risque du noyau partagé

Tous les conteneurs ordinaires partagent le noyau de l’hôte. Un bogue du noyau accessible peut donc compromettre l’hôte et les autres conteneurs. Dans une machine virtuelle, l’exploitation d’un bogue du noyau invité donne le contrôle de cet invité ; atteindre l’hôte exige une défaillance supplémentaire de la frontière de l’hyperviseur ou des périphériques.

Root dans un conteneur est particulièrement sensible. Sans espace de noms utilisateur, il correspond à l’UID 0 pour le noyau de l’hôte, avec les limites imposées par les capacités, les filtres et la politique obligatoire. Le mode privilégié ou l’accès au système de fichiers racine de l’hôte peut supprimer ces contraintes. Une socket de moteur d’exécution appartenant à root est également dangereuse : son client peut demander au moteur d’effectuer des actions privilégiées. Associer root dans le conteneur à un identifiant non privilégié sur l’hôte ne rend pas cette socket sûre et ne supprime pas les vulnérabilités du noyau.

Choisis une frontière pour la charge de travail
BesoinFrontière adaptéeRaison
Services Linux d’une équipe déployés fréquemmentConteneurs restreintsDémarrage rapide et faible surcoût sur un seul noyau
Code de clients qui ne se font pas confianceMachines virtuelles ou micromachines virtuellesDes noyaux invités distincts réduisent l’exposition au noyau partagé
Application réservée à Windows sur des hôtes LinuxMachine virtuelleLa charge de travail a besoin d’un autre noyau

Un conteneur Linux a besoin d’un noyau Linux. Les plateformes Windows et macOS fournissent donc souvent une machine virtuelle Linux sous les conteneurs Linux. Les machines virtuelles démarrent un système d’exploitation et allouent de la mémoire pour chaque noyau ; les conteneurs démarrent des processus ordinaires et permettent de regrouper les charges de travail plus densément.

Reconnais les architectures intermédiaires

gVisor traite de nombreux appels système des conteneurs dans un noyau en espace utilisateur, ce qui réduit le contact direct avec le noyau de l’hôte. Kata Containers donne à chaque bac à sable, généralement un pod Kubernetes, une machine virtuelle légère ; les conteneurs de ce bac à sable partagent son noyau invité. Firecracker fournit des micromachines virtuelles avec un modèle de périphériques minimal pour les plateformes qui exécutent des fonctions ou des charges de travail en conteneurs, notamment AWS Lambda.

Les systèmes cloud placent souvent des conteneurs dans des machines virtuelles : une machine virtuelle sépare les clients tandis que les conteneurs organisent les applications d’un même client. Les noyaux invités et le noyau hôte restent distincts : une évasion de conteneur dans une machine virtuelle ne prouve donc pas à elle seule une évasion de l’hyperviseur.

Points clés

  • L’isolation des conteneurs exige des vues, des limites de ressources et des restrictions de privilèges.
  • Tous les conteneurs ordinaires d’un hôte partagent son noyau.
  • Une correspondance d’UID sans privilèges réduit les pouvoirs, mais ne peut pas corriger les bogues du noyau.
  • L’accès à une socket privilégiée de moteur d’exécution peut donner le contrôle de l’hôte.
  • Les machines virtuelles peuvent apporter un autre noyau ; les conteneurs utilisent le noyau sous-jacent.
  • gVisor, Kata et Firecracker ajoutent différentes frontières autour des charges de travail.
  • Les conteneurs dans des machines virtuelles combinent une forte densité d’applications avec des noyaux invités distincts.

Protection, isolation et machines virtuelles : exemples

5 Leçons Interactives

1

Suis une demande à travers la frontière du noyau

16 étapes
Suis l’exécution, les vérifications des arguments, les permissions mémoire et les défenses contre l’exploitation des failles dans un petit service.
  1. 1
    IntroductionPars d’une application en cours d’exécution

    Un service de production de rapports passe la majeure partie de son temps à calculer en mode utilisateur. Il n’a besoin du noyau que pour les opérations protégées, comme ouvrir un fichier ou mettre en place une projection mémoire.

    Suis ce qui change lorsque l’exécution franchit cette frontière : le privilège du processeur change, mais l’identité de l’appelant et la validité de sa demande doivent toujours être vérifiées. Suis ensuite les protections distinctes de la mémoire, des périphériques et du code exécutable.

  2. 2
    ExplicationExécute directement le code ordinaire

    Le processeur exécute directement les additions, chargements et sauts du service. Le matériel vérifie les privilèges et les permissions mémoire pendant l’exécution ; le noyau n’approuve pas chaque instruction par logiciel.

    Une tentative de remplacement d’une table des pages ou de désactivation des interruptions doit provoquer un déroutement. Sinon, le programme pourrait supprimer les restrictions mêmes qui sont censées le contenir. Cette combinaison constitue l’exécution directe limitée.

  3. 3
    DéfiUn service cesse d’effectuer des demandes

    Le service reste bloqué dans une boucle sans fin en mode utilisateur. Il n’effectue plus aucun appel système. L’ordonnanceur peut-il encore exécuter un autre processus prêt ?

    ---reveal---

    Oui. Une interruption d’horloge matérielle entre dans le noyau sans dépendre de la coopération du service. L’ordonnanceur peut choisir un autre processus. Programmer l’horloge et désactiver les interruptions exigent des privilèges : le service en boucle ne peut donc pas conserver le cœur en évitant les appels système.

  4. 4
    ExplicationDemande un service protégé

    Pour lire un fichier, la fonction d’enveloppe de bibliothèque place un numéro d’appel, un descripteur, une adresse de tampon et une longueur dans des registres, puis exécute l’instruction d’entrée pour les appels système propre à l’architecture.

    Le noyau sauvegarde l’état utilisateur, sélectionne le gestionnaire et obtient les identifiants de l’appelant à partir du processus courant. L’entrée avec les privilèges du noyau n’est que le début : le gestionnaire doit encore déterminer si cet appelant et ces arguments sont autorisés.

  5. 5
    ExempleExamine toute la destination

    Supposons que le service demande à read(fd, buf, 8192) de copier des octets dans son tampon. La validité du premier octet ne suffit pas : la copie peut franchir une frontière de page et atteindre une zone interdite.

    Le noyau doit valider toute la destination nécessaire au transfert et y accéder en toute sécurité. Les routines Linux de copie depuis et vers l’espace utilisateur effectuent des vérifications et traitent les adresses utilisateur invalides sans laisser la copie demandée écraser la mémoire du noyau.

  6. 6
    DéfiUne demande utilise un type d’accès incorrect

    Le tampon est valide, mais le service essaie write() avec un descripteur qu’il a ouvert avec O_RDONLY. Que doit vérifier le noyau et le processus doit-il se terminer ?

    ---reveal---

    Il vérifie l’accès accordé au descripteur et refuse l’écriture avec EBADF sous Linux. C’est un résultat d’erreur que le programme peut traiter. L’appel est correctement entré dans le noyau, mais le descripteur ne contient pas le droit demandé.

  7. 7
    Point cléGarde un chemin vérifié lié à son objet

    Un programme auxiliaire vérifie une permission sur un chemin, puis l’ouvre avec des privilèges plus élevés. Entre les deux opérations, un autre processus peut remplacer l’entrée de répertoire. Copier la chaîne du chemin n’empêche pas ce remplacement.

    C’est une condition de concurrence TOCTTOU. Ouvre avec les identifiants prévus et utilise une stratégie d’acquisition d’objet qui vérifie ce qui est réellement ouvert ; utilise O_NOFOLLOW lorsque les liens symboliques ne sont pas souhaités.

  8. 8
    ExplicationLaisse les projections régir les accès ultérieurs

    Une fois une projection accordée, les lectures et écritures utilisent la MMU sans appel système pour chaque octet. La MMU vérifie les permissions d’écriture, d’accès utilisateur ou superviseur et d’exécution de la table des pages active.

    Une page utilisateur en lecture seule protège son contenu contre les modifications, mais permet toujours au processus de le lire. Pour garder les données secrètes vis-à-vis de ce processus, la projection doit aussi interdire la lecture, par exemple en étant absente ou réservée au superviseur.

  9. 9
    ExempleInterprète deux défauts d’écriture sur des pages en lecture seule

    Le service écrit d’abord dans sa page de code, puis dans des données partagées après fork(). Les deux pages sont en lecture seule : les deux écritures provoquent donc initialement un défaut.

    Les informations du noyau distinguent les résultats. Une écriture non autorisée dans le code conduit normalement à SIGSEGV. Un défaut valide de copie sur écriture dans les données conduit à une copie privée et à la reprise de l’instruction. Le matériel signale la violation ; les informations du noyau déterminent si elle peut être corrigée.

  10. 10
    DéfiUn périphérique franchit la frontière mémoire

    Le service est limité par les tables des pages du processeur, mais un périphérique défectueux écrit directement dans une zone de mémoire vive sans rapport avec lui. Pourquoi ces projections du processeur ne l’ont-elles pas arrêté ?

    ---reveal---

    Le DMA ne passe pas par la MMU du processeur. Le périphérique a besoin d’une projection IOMMU qui limite ses propres adresses. Protéger les lectures et écritures du processeur constitue une frontière ; limiter les transferts provenant des périphériques exige la frontière correspondante pour ces derniers.

  11. 11
    ExplicationBloque l’exécution des octets injectés

    Un débordement de tampon peut écraser une adresse de retour sauvegardée. Marquer la pile avec NX rend les instructions injectées dans la pile non exécutables : un saut vers celles-ci provoque donc un défaut.

    W^X ajoute la règle selon laquelle aucune page ne peut être accessible en écriture et exécutable à la fois. Un compilateur à la volée doit écrire le code généré, puis changer les permissions avant de l’exécuter. Ces vérifications limitent l’exploitation tout en laissant à corriger l’écriture initiale hors limites.

  12. 12
    LienRends le code existant difficile à localiser

    Un attaquant peut réutiliser les instructions déjà présentes dans des bibliothèques exécutables au lieu d’injecter de nouvelles instructions. ROP relie ces courts gadgets pour effectuer un nouveau calcul.

    L’ASLR rend leurs adresses plus difficiles à prévoir. La divulgation d’une adresse de bibliothèque connue révèle la base et les déplacements connus de cette bibliothèque, mais pas une pile randomisée indépendamment. La randomisation fonctionne mieux lorsque des bogues ne peuvent pas divulguer les adresses choisies.

  13. 13
    DéfiContiens un processus de rendu compromis

    Un processus de rendu a été compromis. Sa pile est protégée par NX et les adresses de ses bibliothèques sont désormais connues de l’attaquant. Une politique seccomp bloque toujours les appels de lancement de programmes. La réutilisation de code peut-elle simplement supprimer cette restriction ?

    ---reveal---

    Non. Réutiliser des instructions exécutables ne supprime pas un filtre seccomp installé. Le processus reste limité aux appels autorisés : lancer un autre programme exige donc un autre moyen de contourner le filtre ou une autre défaillance de frontière.

  14. 14
    ExplicationDistingue les vérifications du démarrage des enregistrements d’événements

    Le démarrage sécurisé vérifie les signatures avant de transmettre le contrôle au composant de démarrage de confiance suivant. Le démarrage mesuré enregistre les empreintes des composants, souvent à l’aide d’un TPM, afin qu’un vérificateur externe puisse évaluer ce qui a été chargé.

    La journalisation d’audit sert un objectif ultérieur : elle enregistre des événements tels que les échecs de connexion et les commandes exécutées avec des privilèges élevés. Protéger des copies à l’extérieur de l’hôte aide à conserver ces preuves si un intrus obtient le pouvoir d’effacer les journaux locaux.

  15. 15
    DéfiChoisis la couche de protection manquante

    Un service root projette des données sensibles en lecture seule dans l’espace d’un processus travailleur non fiable et restreint ses appels système. Le processus travailleur lit ensuite les données. Quelle décision les a exposées ?

    ---reveal---

    La projection lisible en mode utilisateur a exposé le contenu. La lecture seule protège contre les modifications, et un filtre d’appels système ne bloque pas les lectures ordinaires d’une page autorisée. Le noyau doit refuser cette projection au processus travailleur ou lui retirer la permission de lecture pour préserver la confidentialité.

  16. 16
    RécapitulatifRepère la vérification qui régit l’action

    Face à un échec que tu ne connais pas, suis l’opération : instruction du processeur, demande au noyau, accès à une mémoire projetée ou DMA d’un périphérique. Chacune atteint un point de contrôle différent.

    Demande-toi ensuite ce que l’attaquant contrôle déjà. Une identité root, des gadgets exécutables et un descripteur valide confèrent des pouvoirs différents. Un diagnostic utile nomme la vérification précise qui manque au lieu de supposer qu’une défense efficace protège toutes les voies.

2

Suis la connexion jusqu’aux identifiants du processus

14 étapes
Relie la vérification du mot de passe et les autres facteurs à l’identité effectivement portée par un programme en cours d’exécution.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionTransforme une connexion en identité pour l’exécution
  2. 2
    ExplicationDéfinis les groupes avant d’abandonner les privilèges root
  3. 3
    ExempleSuis un programme auxiliaire setuid de gestion des mots de passe
  4. 4
    DéfiMets à jour un compte pendant une session
  5. 5
    ExplicationRecalcule une donnée de vérification sans récupérer le mot de passe
  6. 6
    ExempleMesure le travail d’essai pour un compte
  7. 7
    ExempleRépète le travail pour des sels différents
  8. 8
    DéfiUn verrouillage n’atteint pas le fichier volé
  9. 9
    ExplicationDistingue un code d’une signature liée à un site
  10. 10
    ExempleChoisis le dénominateur avant de calculer
  11. 11
    DéfiDeux secrets restent un seul type de facteur
  12. 12
    LienLaisse le noyau identifier un processus local
  13. 13
    DéfiRepère où la robustesse de la connexion cesse d’intervenir
  14. 14
    RécapitulatifDistingue la preuve des droits qui en résultent
3

Analyse une décision d’accès

15 étapes
Utilise ensemble les identifiants, les opérations sur les répertoires et les politiques pour expliquer un résultat d’accès.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionNomme l’opération et son objet
  2. 2
    ExplicationOrganise les droits par objet ou par sujet
  3. 3
    ExempleTransmets un accès limité à un processus travailleur
  4. 4
    DéfiModifie les permissions après avoir accordé une référence
  5. 5
    ExplicationSélectionne une classe avant d’additionner ses bits
  6. 6
    ExempleCrée un fichier avec un masque
  7. 7
    ExempleTeste l’accès avec le mode obtenu
  8. 8
    DéfiSupprime un nom sans lire ses données
  9. 9
    ConseilLis la limite de l’ACL ainsi que l’entrée
  10. 10
    ExplicationAjoute une politique que le propriétaire ne peut pas écarter
  11. 11
    ExempleSuis les informations confidentielles entre niveaux
  12. 12
    DéfiExplique le refus de lecture d’un service root
  13. 13
    LienChange de poste grâce aux rôles
  14. 14
    DéfiSuis un accès accordé à travers plusieurs contrôles
  15. 15
    RécapitulatifSuis la décision dans un ordre utile
4

Exécute un invité sans céder l’hôte

17 étapes
Suis l’interception du processeur, la traduction des pages et le traitement des périphériques à travers la frontière d’une machine virtuelle.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionDonne à un noyau l’apparence de disposer de son propre ordinateur
  2. 2
    ExplicationOrdonnance un processeur virtuel
  3. 3
    DéfiÉvalue une affirmation sur la consolidation
  4. 4
    ExplicationÉmule uniquement l’état de contrôle de l’invité
  5. 5
    ExempleCorrige le problème d’une instruction qui ne provoque pas de déroutement
  6. 6
    DéfiGarde le contrôle de l’anneau 0 de l’invité
  7. 7
    ExplicationDistingue les trois types d’adresses
  8. 8
    ExempleApplique d’abord la correspondance de l’invité
  9. 9
    ExempleApplique ensuite la correspondance de l’hyperviseur
  10. 10
    DéfiTraduis un autre octet de la page
  11. 11
    LienChoisis où maintenir la correspondance combinée
  12. 12
    Point cléRécupère de la mémoire avec l’aide de l’invité
  13. 13
    ExplicationÉchange de la compatibilité des périphériques contre moins de transitions
  14. 14
    DéfiRéduis les sorties fréquentes liées aux périphériques
  15. 15
    ExplicationProtège une frontière qui dépasse les projections de pages
  16. 16
    DéfiPrépare une machine en cours d’exécution pour un autre hôte
  17. 17
    RécapitulatifGarde le contrôle à chaque interface virtuelle
5

Construis et évalue une frontière de conteneur

16 étapes
Combine les vues des espaces de noms, les limites de ressources et les restrictions de privilèges, puis choisis une couche d’isolation adaptée.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionDistingue trois fonctions dans un conteneur
  2. 2
    ExplicationDonne aux processus des vues privées des ressources
  3. 3
    ExempleDémarre le premier processus fils dans un espace de noms PID
  4. 4
    ExempleAssocie une identité interne à l’hôte
  5. 5
    DéfiChoisis la vue qui résout un conflit
  6. 6
    ExplicationLis une limite stricte de temps processeur
  7. 7
    ExempleRépartis le quota d’un groupe père entre ses fils
  8. 8
    DéfiLaisse un groupe concurrent devenir inactif
  9. 9
    ExplicationContiens la croissance de la mémoire et des tâches
  10. 10
    DéfiLis la limite à la couche qui l’applique
  11. 11
    ExplicationRéduis ce que le processus peut demander
  12. 12
    DéfiUn UID associé à l’hôte atteint toujours un service privilégié
  13. 13
    LienChoisis où placer un noyau distinct
  14. 14
    ExplicationReconnais les couches de bac à sable ajoutées
  15. 15
    DéfiPlace des tâches non fiables avec des limites de ressources
  16. 16
    RécapitulatifAssocie chaque besoin à son mécanisme

Protection, isolation et machines virtuelles : QCM

60 Questions Pratiques en 6 séries

Série 1 : Suis les frontières du matériel et du noyau10 Questions Pratiques

Question 1 sur 10

Une calculatrice appartenant à root additionne deux entiers dans sa fonction principale. Dans quel mode du processeur ce code d’application s’exécute-t-il normalement ?
  1. En mode noyau.
  2. En mode VMX root.
  3. En mode utilisateur.
  4. En mode root.
Afficher la réponseMasquer la réponse
Réponse : C
Root est un identifiant utilisé par les vérifications d’accès du noyau ; il ne change pas le mode d’exécution du code ordinaire d’une application. L’addition s’exécute directement en mode utilisateur. Entrer en mode noyau exige un événement contrôlé, comme un appel système, un défaut ou une interruption, même pour une application appartenant à root.

Question 2 sur 10

Un processus utilisateur tente d’installer une table des interruptions de remplacement avec LIDT sur x86. Qu’est-ce qui l’empêche de prendre le contrôle du traitement des interruptions ?
  1. L’ordonnanceur refuse sa prochaine tranche de temps.
  2. Le processeur déclenche un déroutement sur l’instruction privilégiée.
  3. La bibliothèque C réécrit l’adresse de la table.
  4. Le cache de pages rejette le contenu de la table.
Afficher la réponseMasquer la réponse
Réponse : B
L’installation de la table réelle des interruptions est privilégiée : le processeur provoque donc un déroutement lorsque du code en mode utilisateur la tente. Le gestionnaire enregistré du noyau reçoit le contrôle avant que le remplacement demandé puisse avoir lieu. Une vérification de bibliothèque serait insuffisante, car le code machine peut s’exécuter sans passer par cette bibliothèque.

Question 3 sur 10

Un processus effectue des sauts répétés vers son propre code et ne fait aucun appel système. Comment un autre processus prêt peut-il tout de même recevoir du temps processeur ?
  1. Son prochain appel système sélectionne automatiquement l’autre processus.
  2. Les sauts en mode utilisateur perdent leurs privilèges après assez de répétitions.
  3. La MMU compte les sauts et finit par invalider la page de code.
  4. Une interruption d’horloge entre dans le noyau, qui peut réordonnancer les processus.
Afficher la réponseMasquer la réponse
Réponse : D
L’horloge matérielle donne au noyau une voie d’entrée indépendante des appels système volontaires. Son interruption permet à l’ordonnanceur de sélectionner un autre processus prêt. Attendre que le programme en boucle appelle le noyau échouerait ici, et le code utilisateur ne peut pas désactiver le mécanisme d’horloge privilégié pour empêcher la préemption.

Question 4 sur 10

Un programme ouvre un fichier en lecture seule, puis appelle write() avec ce descripteur. Quelle erreur Linux correspond à l’accès manquant sur le descripteur ?
  1. EBADF.
  2. EFAULT.
  3. EACCES.
  4. EAGAIN.
Afficher la réponseMasquer la réponse
Réponse : A
Le descripteur a été ouvert sans accès en écriture : write() refuse donc son utilisation avec EBADF. EACCES décrit couramment un refus de contrôle d’accès lors de l’acquisition d’un accès, mais cet échec concerne le mode d’un descripteur déjà ouvert. EFAULT indiquerait plutôt une adresse de mémoire utilisateur invalide.

Question 5 sur 10

Un programme auxiliaire d’exportation privilégié vérifie un chemin, fait une pause, puis l’ouvre. Un autre processus remplace le chemin pendant la pause. Quel changement corrige la condition de concurrence ?
  1. Vérifier deux fois le chemin avant l’ouverture avec tous les privilèges.
  2. Copier le texte du chemin et garder la vérification séparée initiale.
  3. Augmenter le délai de connexion avant de lancer le programme auxiliaire.
  4. Ouvrir l’objet réel avec les identifiants aux privilèges réduits prévus.
Afficher la réponseMasquer la réponse
Réponse : D
La décision de permission doit porter sur l’objet réellement ouvert avec les identifiants prévus. Répéter la vérification préalable laisse toujours un intervalle permettant le remplacement avant l’ouverture privilégiée. Conserver une copie inchangée de la chaîne du chemin ne maintient pas non plus inchangé l’objet du système de fichiers associé à ce nom.

Question 6 sur 10

Un gestionnaire du noyau fait confiance à un nom d’utilisateur fourni par l’appelant, valide le premier octet d’un tampon, puis y copie une longueur fournie par l’appelant. Quelle correction complète faut-il apporter ?
  1. Utiliser les identifiants du noyau et ne valider que la première page de destination.
  2. Utiliser les identifiants du noyau et valider toute la zone de destination.
  3. Faire confiance au nom après avoir vérifié toute la zone de destination.
  4. Garder la vérification du nom et copier avec une instruction en mode noyau.
Afficher la réponseMasquer la réponse
Réponse : B
Deux erreurs de confiance indépendantes sont présentes : le client fournit l’identité qu’il déclare et sa zone mémoire. Le gestionnaire doit utiliser les identifiants authentifiés détenus par le noyau et valider toute la destination définie par l’adresse et la longueur. Vérifier uniquement la première page peut laisser des octets ultérieurs hors de la zone autorisée.

Question 7 sur 10

Une écriture dans une page de données en lecture seule provoque un défaut après fork(). Les informations du noyau la marquent en copie sur écriture. Quelle réponse préserve le comportement normal du programme ?
  1. Terminer le processus, car toute écriture en lecture seule est fatale.
  2. Autoriser l’écriture dans la page physique partagée pour les deux processus.
  3. Créer une copie privée accessible en écriture et réessayer l’écriture.
  4. Renvoyer EACCES comme résultat de l’instruction d’écriture.
Afficher la réponseMasquer la réponse
Réponse : C
L’état en lecture seule est volontairement utilisé pour la copie sur écriture : le noyau peut donc copier la page, mettre à jour la projection de ce processus et réessayer. Rendre la page partagée d’origine accessible en écriture permettrait à l’écriture d’affecter l’autre processus. Un défaut seul ne détermine pas si une récupération est possible ; les informations sur la projection le déterminent.

Question 8 sur 10

Un processus possède une page de code exécutable en lecture seule sans copie sur écriture et une page de données en lecture seule partagée après fork() et marquée en copie sur écriture. Les écritures dans les deux pages provoquent un défaut. Un pilote a aussi besoin d’un DMA vers un tampon distinct. Quelle réponse préserve les frontières prévues ?
  1. Garder le code protégé, copier les données modifiées en privé et limiter le DMA avec une IOMMU.
  2. Garder le code protégé, copier les données modifiées en privé et limiter le DMA avec la seule MMU du processeur.
  3. Garder le code protégé, autoriser l’écriture dans les données partagées en place et limiter le DMA avec une IOMMU.
  4. Autoriser l’écriture dans le code après le défaut, copier les données en privé et limiter le DMA avec une IOMMU.
Afficher la réponseMasquer la réponse
Réponse : A
L’écriture dans le code est invalide, tandis que le défaut sur les données doit créer une copie privée accessible en écriture afin que les données de l’autre processus restent inchangées. Le périphérique a besoin d’une IOMMU, car le DMA contourne la MMU du processeur. Rendre accessible en écriture toute page provoquant un défaut supprimerait la protection prévue du code et traiterait mal les données partagées.

Question 9 sur 10

Un attaquant redirige l’exécution vers des octets injectés sur une page de pile marquée NX. Quelle protection immédiate s’applique ?
  1. Les octets injectés sont d’abord effacés.
  2. La recherche d’une instruction sur cette page provoque un défaut.
  3. La page est déplacée vers un cadre physique aléatoire.
  4. L’UID effectif devient celui d’un utilisateur ordinaire.
Afficher la réponseMasquer la réponse
Réponse : B
NX interdit l’exécution depuis la page marquée : la tentative de recherche d’une instruction provoque donc un défaut. Il n’efface pas les octets et ne corrige pas le débordement initial. L’ASLR traite un autre problème en rendant les adresses plus difficiles à prévoir ; ce n’est pas la permission de page qui bloque ce saut précis.

Question 10 sur 10

Une fuite révèle une adresse à l’intérieur d’une bibliothèque partagée connue. La pile est randomisée indépendamment. Que peut en déduire un attaquant ?
  1. La base de la bibliothèque et les déplacements connus des gadgets, mais pas la base de la pile.
  2. La base de la bibliothèque et la base indépendante de la pile.
  3. Seulement l’octet divulgué, car les déplacements changent dans la bibliothèque.
  4. La base de la pile, mais aucune autre adresse dans la bibliothèque.
Afficher la réponseMasquer la réponse
Réponse : A
Pour une organisation connue de la bibliothèque, soustraire le déplacement du symbole divulgué révèle la base et donc les autres déplacements connus dans cette bibliothèque. Ce calcul ne résout pas la randomisation indépendante de la pile. Considérer qu’une fuite d’adresse compromet complètement toutes les zones randomisées suppose une relation que la question ne fournit pas.
Série 2 : Suis les identités et l’authentification10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Deux noms de comptes locaux ont l’UID 2400. Comment le noyau Unix distingue-t-il leur identité de propriétaire de fichier ?
  1. Il compare l’orthographe de leurs noms de connexion.
  2. Il donne à chacun un nouvel UID au lancement de l’interpréteur.
  3. Il compare leurs algorithmes de hachage des mots de passe.
  4. Il les traite comme une même identité utilisateur numérique.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un programme auxiliaire de connexion passe définitivement de l’UID 0 à l’UID 2400 avant de remplacer ses groupes supplémentaires. Pourquoi cet ordre est-il risqué ?
  1. Il peut perdre les privilèges nécessaires pour remplacer les groupes privilégiés.
  2. Il attribue tous les fichiers existants au groupe principal de l’utilisateur.
  3. Il transforme l’UID réel de l’utilisateur en ancien identifiant de groupe.
  4. Il autorise ensuite l’utilisateur à définir n’importe quel groupe.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Nora est ajoutée au groupe archive alors que son terminal reste ouvert. Pourquoi une commande lancée depuis ce terminal peut-elle encore échouer à une vérification du groupe archive ?
  1. Le propriétaire du fichier doit d’abord renommer le groupe archive.
  2. Elle hérite de l’ancienne liste de groupes du processus du terminal.
  3. Seul l’UID réel peut enregistrer un groupe supplémentaire.
  4. Les nouveaux processus fils abandonnent toujours les groupes supplémentaires.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Une base de mots de passe volée contient un sel aléatoire différent à côté de chaque empreinte. Les sels doivent-ils être cachés pour que leur protection principale fonctionne ?
  1. Oui ; ce sont les clés de déchiffrement des mots de passe.
  2. Oui ; un sel public rend chaque empreinte stockée réversible.
  3. Non ; ils empêchent de réutiliser le travail de hachage même s’ils sont publics.
  4. Non ; le sel remplace lui-même le secret du mot de passe utilisateur.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Un espace de test contient 81 000 000 de mots de passe équiprobables. Un attaquant hors ligne en vérifie 3 000 par seconde. Combien de temps faut-il pour parcourir tout l’espace ?
  1. 13 500 secondes.
  2. 27 000 secondes.
  3. 243 000 secondes.
  4. 270 000 secondes.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Un service ajoute un sel public unique par compte et un verrouillage en ligne, mais conserve un seul calcul de hachage rapide. Sa base de données de vérification est volée. Quelle protection manque encore ?
  1. Une méthode de hachage des mots de passe coûteuse pour chaque essai hors ligne.
  2. Un second verrouillage en ligne appliqué à la base de données volée.
  3. Un chiffrement permettant au service de récupérer les mots de passe oubliés.
  4. Un sel commun caché dans le fichier public des noms de compte.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Un service utilisant uniquement un mot de passe suit NIST SP 800-63B-4. Quelle politique respecte ses indications sur la longueur minimale et les changements périodiques ?
  1. Au moins 8 caractères, avec un changement imposé chaque mois civil.
  2. Au moins 12 caractères, avec un symbole imposé dans chaque mot de passe.
  3. Au moins 15 caractères, avec un changement imposé en cas d’indice de compromission.
  4. Au moins 15 caractères, avec un changement imposé après chaque connexion réussie.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Une connexion demande un mot de passe, puis un code PIN mémorisé par l’utilisateur. Combien de types de facteurs utilise-t-elle ?
  1. Deux : avec la possession.
  2. Un : l’identité.
  3. Deux : un par écran.
  4. Un : la connaissance.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Lors d’un test biométrique, 6 des 30 000 tentatives d’imposteurs réussissent et 18 des 900 tentatives légitimes échouent. Quels sont le FAR et le FRR ?
  1. FAR 0,02 % ; FRR 2 %.
  2. FAR 2 % ; FRR 0,02 %.
  3. FAR 0,02 % ; FRR 0,06 %.
  4. FAR 0,2 % ; FRR 20 %.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Un attaquant vole la base de données de vérification d’un service et exploite un faux site qui transmettait auparavant des codes TOTP récents. Le service remplace cette connexion par FIDO2. Les clés publiques stockées ou les réponses obtenues pour le faux site peuvent-elles fournir une signature valide pour le vrai site ?
  1. Les clés publiques peuvent signer de nouveaux défis, mais les réponses du faux site ne sont pas valides pour le vrai.
  2. Aucune ne suffit : les clés publiques ne peuvent pas signer et les réponses du faux site ne sont pas valides pour le vrai.
  3. Les clés publiques ne peuvent pas signer, mais une réponse récente du faux site peut être transmise comme un code TOTP.
  4. Les deux suffisent tant qu’un défi est récent, car le temps, et non l’identité du site, détermine l’acceptation.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 3 : Détermine qui peut utiliser une ressource10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Un administrateur veut examiner toutes les personnes autorisées à lire un objet d’une base de données. Quelle représentation regroupe directement ces droits ?
  1. La liste de capacités de chaque utilisateur.
  2. L’ACL de l’objet de la base de données.
  3. La file des processus prêts de l’ordonnanceur.
  4. Les tables des pages de chaque processus.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un processus travailleur hérite d’un descripteur de metrics.bin autorisé en écriture. Le propriétaire retire ensuite la permission d’écriture du mode du fichier. Qu’advient-il des écritures ordinaires par ce descripteur ?
  1. Elles peuvent continuer grâce à l’accès accordé à l’ouverture.
  2. Elles échouent dès que la prochaine vérification du mode constate l’absence du bit d’écriture.
  3. Elles continuent uniquement si le processus travailleur devient propriétaire du fichier.
  4. Elles rouvrent automatiquement le chemin avec l’UID du processus travailleur.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Un processus superviseur doit donner à un processus travailleur l’accès en lecture à un fichier d’entrée déjà ouvert, sans autoriser de recherche par chemin, tout en conservant tous ses autres droits. Quelle solution convient le plus directement ?
  1. Partager tous les identifiants du compte du superviseur.
  2. Ajouter le processus travailleur au groupe des répertoires d’entrée.
  3. Transmettre au processus travailleur une capacité d’objet en lecture seule.
  4. Accorder un privilège Linux contournant les vérifications d’accès aux fichiers.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Quels droits le mode Unix 652 donne-t-il au groupe propriétaire ?
  1. Lecture et écriture.
  2. Écriture seule.
  3. Lecture seule.
  4. Lecture et exécution.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Mina possède un fichier de mode 046. Sans tenir compte des ACL ni des dérogations liées aux privilèges, peut-elle le lire selon la vérification du propriétaire ?
  1. Oui, car la classe du groupe accorde la lecture.
  2. Non, car la classe du propriétaire n’a aucun droit.
  3. Oui, car la classe des autres accorde la lecture.
  4. Oui, car les trois classes sont combinées.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Un programme demande le mode 666 pour un nouveau fichier avec l’umask 037. Quel mode en résulte ?
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Omar possède les droits ordinaires d’écriture et d’exécution sur le répertoire de Leena, doté du bit de restriction de suppression. Un fichier de mode 000 à l’intérieur appartient aussi à Leena. Omar n’est propriétaire ni de l’un ni de l’autre et ne dispose d’aucune dérogation. Peut-il maintenant le lire ou le supprimer, et pourrait-il le supprimer si seul le bit de restriction de suppression était retiré ?
  1. Il ne peut pas lire maintenant, mais la suppression est déjà possible et le reste après le retrait du bit.
  2. La lecture et la suppression sont toutes deux possibles maintenant grâce aux droits d’écriture et d’exécution sur le répertoire.
  3. Aucune des deux actions n’est possible maintenant, et le mode 000 empêche encore la suppression après le retrait du bit.
  4. Ni lecture ni suppression maintenant ; la suppression devient possible après le retrait du bit de restriction de suppression.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Les vérifications Unix d’un service root autorisent une lecture, mais SELinux en mode enforcing refuse à son domaine l’accès au type du fichier. Quel est le résultat ?
  1. L’UID 0 l’emporte sur le refus de SELinux.
  2. La vérification DAC préalable autorise la lecture.
  3. La lecture est refusée par la politique obligatoire.
  4. La lecture est journalisée mais reste autorisée.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un processus Secret doit envoyer des notes Secret vers un stockage Confidentiel. Il peut écrire directement ou demander à un programme auxiliaire Confidentiel de lire son tampon étiqueté Secret, puis d’écrire dans le stockage. Selon Bell–LaPadula, que se passe-t-il pour ces deux voies ?
  1. Seule l’écriture directe échoue ; le programme auxiliaire peut lire vers le haut avant d’écrire à son niveau.
  2. Seule la voie du programme auxiliaire échoue ; le processus Secret peut écrire vers toute destination qu’il peut lire.
  3. Les deux échouent : l’écriture directe va vers le bas et la lecture du programme auxiliaire vers le haut.
  4. Les deux réussissent, car le programme auxiliaire Confidentiel peut écrire dans la destination finale.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Une entreprise gère 72 employés disposant chacun de 24 permissions. Six rôles professionnels sans chevauchement contiennent chacun 24 permissions ; chaque personne a un rôle. Combien d’attributions cette architecture RBAC nécessite-t-elle, et pourquoi ?
  1. 216 : 72 liens entre utilisateurs et rôles plus 144 liens entre rôles et permissions.
  2. 144 : seuls les six ensembles de liens entre rôles et permissions comptent.
  3. 1 728 : chaque utilisateur doit toujours recevoir directement chaque permission.
  4. 288 : 72 liens entre utilisateurs et rôles plus 216 liens entre rôles et permissions.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 4 : Suis un invité à travers le matériel virtuel10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Une application de virtualisation dépend d’un système d’exploitation hôte ordinaire qui contrôle le matériel. De quel type d’hyperviseur s’agit-il ?
  1. Type 1, natif.
  2. Fondé sur les conteneurs.
  3. Type 2, hébergé.
  4. Fondé sur l’affectation directe.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Huit serveurs de même capacité utilisent chacun en moyenne 7 % du processeur. Que peut indiquer leur moyenne cumulée à une personne chargée de planifier la consolidation ?
  1. Ils atteignent en moyenne 56 % : un hôte est donc garanti de satisfaire toute la demande future.
  2. Ils atteignent en moyenne 7 %, car les invités simultanés partagent les mêmes cœurs physiques.
  3. Ils atteignent en moyenne 87,5 % : les besoins en mémoire et en périphériques n’ont pas à être vérifiés.
  4. Ils atteignent en moyenne 56 % d’une machine équivalente, mais les pics exigent encore une marge.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Sous Intel VT-x, un noyau invité s’exécute dans l’anneau 0 en mode VMX non-root. Ce numéro d’anneau lui donne-t-il les pouvoirs matériels de l’hyperviseur ?
  1. Non ; le mode VMX root reste une couche de contrôle distincte.
  2. Oui ; chaque instruction de l’anneau 0 appartient au noyau hôte.
  3. Oui ; le mode non-root ne change que l’UID de l’invité.
  4. Non ; l’anneau 0 est l’anneau de protection x86 le moins privilégié.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Une instruction d’un invité classique déprivé laisse silencieusement un indicateur d’interruption inchangé au lieu de provoquer un déroutement. Pourquoi l’interception et l’émulation simples sont-elles insuffisantes ?
  1. L’instruction est trop coûteuse en calcul pour s’exécuter directement.
  2. L’hyperviseur ne reçoit aucun événement pour émuler le changement voulu par l’invité.
  3. L’invité doit d’abord traduire l’indicateur par les tables des pages imbriquées.
  4. L’hyperviseur a déjà cédé la table physique des interruptions.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Un invité ne peut pas être modifié et le processeur disponible ne possède pas d’assistance adaptée à la virtualisation. Son noyau utilise des instructions sensibles qui ne provoquent pas de déroutement. Quelle approche peut préserver le comportement de l’invité tout en gardant le contrôle ?
  1. Exécuter directement le noyau invité avec tous les privilèges de l’hôte.
  2. Remplacer ces instructions par des hyperappels dans son code source.
  3. Utiliser des tables des pages imbriquées pour intercepter chaque instruction du processeur.
  4. Traduire les instructions problématiques du noyau invité avant leur exécution.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Avec des pages de 4 KiB, la page virtuelle 5 de l’invité est associée au cadre 12 de l’invité, lui-même associé au cadre machine 29. Quelle adresse machine correspond à 0x53D0 ?
  1. 0x1D3D0.
  2. 0xC3D0.
  3. 0x1D53D0.
  4. 0x533D0.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Une machine virtuelle utilise la pagination imbriquée matérielle avec trois niveaux de tables des pages pour l’invité et quatre niveaux pour l’hyperviseur. Pour une traduction entièrement sans résultat en cache, combien d’accès mémoire aux tables des pages sont nécessaires avant l’accès aux données, et chaque modification d’une table de l’invité doit-elle provoquer un déroutement pour synchroniser une table fantôme ?
  1. 7 accès ; la pagination imbriquée matérielle n’exige pas de synchronisation d’une table fantôme à chaque modification.
  2. 19 accès ; chaque modification d’une table de l’invité doit être interceptée pour synchroniser une table fantôme logicielle.
  3. 19 accès ; la pagination imbriquée matérielle n’exige pas de synchronisation d’une table fantôme à chaque modification.
  4. 24 accès ; chaque paire de tables imbriquées a la même longueur de parcours quelle que soit sa profondeur.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Un hôte suralloue la mémoire entre plusieurs clients distincts. Chaque invité sait quelles données il peut libérer, et le partage de pages entre clients est interdit. Quelle stratégie de récupération utilise ces connaissances, et que se passe-t-il si tous les invités ont ensuite besoin de toute la mémoire promise ?
  1. Utiliser l’échange à l’aveugle par l’hôte ; il connaît directement les pages libres des invités et évite toute pression à pleine demande.
  2. Utiliser le ballonnement ; il ne peut toujours pas fournir toute la mémoire vive promise si la demande active cumulée dépasse celle de l’hôte.
  3. Utiliser le ballonnement ; il augmente définitivement la capacité de l’hôte pour honorer toutes les allocations promises.
  4. Fusionner les pages identiques ; cela respecte la restriction de partage, car les pages fusionnées sont d’abord en lecture seule.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un pilote de stockage invité place de nombreuses requêtes dans une file en mémoire partagée avant de notifier un composant chargé de les traiter. Quel modèle de périphérique cela illustre-t-il ?
  1. Un périphérique émulé registre par registre.
  2. Une interface de périphérique paravirtuel.
  3. Un périphérique physique partagé sans intermédiaire.
  4. Un émulateur du jeu d’instructions du processeur.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Des machines virtuelles possèdent des projections de pages privées correctes, mais un attaquant déduit des données à partir du temps d’accès à un cache partagé. L’opérateur envisage des mises à jour du microcode du processeur et évite de placer différents clients sur les fils d’exécution matériels d’un même cœur. Quel diagnostic relie cette exposition à ces contrôles ?
  1. Un canal auxiliaire matériel partagé exige des mesures sur le processeur et un placement attentif des fils d’un même cœur.
  2. Une évasion par le modèle de périphérique exige seulement de corriger l’émulation ; les temps du cache ne peuvent pas franchir des projections correctes.
  3. Un canal auxiliaire du cache partagé exige seulement des mises à jour du processeur ; elles suppriment tous les risques liés aux fils d’un même cœur.
  4. Un canal auxiliaire du cache partagé exige seulement de séparer les fils ; les vulnérabilités du processeur n’ont alors pas besoin de mises à jour.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 5 : Interprète les vues et les limites des conteneurs10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Un service a besoin de ses propres interfaces, de sa table de routage et de son espace de ports d’écoute. Quel espace de noms Linux fournit cette vue ?
  1. Réseau.
  2. Montage.
  3. PID.
  4. Cgroup.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Une correspondance d’UID est 0 220000 8000. Quel UID sur l’hôte correspond à l’UID interne 1750 ?
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Un processus superviseur appelle unshare(CLONE_NEWPID), crée son premier processus fils dans le nouvel espace de noms et reste actif à l’extérieur. Ce processus fils crée un processus de journalisation, puis se termine. Qu’arrive-t-il au processus de journalisation et au superviseur ?
  1. Le processus de journalisation survit comme PID 1 et le superviseur rejoint l’espace de noms du processus fils.
  2. Le processus de journalisation survit dans l’espace de noms de l’hôte et le superviseur conserve son appartenance initiale.
  3. Le processus de journalisation et le superviseur sont terminés parce qu’ils partagent le même noyau.
  4. Le processus de journalisation est terminé et le superviseur reste dans son espace de noms PID initial.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Un groupe a pour valeur cpu.max : 120000 100000. Quelle allocation de temps processeur cela représente-t-il ?
  1. L’équivalent du temps de 0,12 processeur par période.
  2. L’équivalent du temps de 1,2 processeur par période.
  3. L’équivalent du temps de 12 processeurs par période.
  4. Un poids relatif d’ordonnancement de 1,2.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Deux groupes de même niveau, disposant d’assez de fils d’exécution prêts, sont en concurrence sur six processeurs également disponibles. Leurs poids sont de 200 et 400, sans quota. Quelle part reçoit le premier et que se passe-t-il si le second devient inactif ?
  1. Environ deux processeurs en concurrence ; il reste limité à deux lorsqu’il est seul.
  2. Environ deux processeurs en concurrence ; il peut utiliser les six lorsqu’il est seul.
  3. Environ trois processeurs en concurrence ; il peut utiliser les six lorsqu’il est seul.
  4. Environ quatre processeurs en concurrence ; il reste limité à quatre lorsqu’il est seul.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Un groupe père limite deux groupes fils occupés à l’équivalent de 1,5 processeur. Le groupe fils A a un poids de 100 et son propre quota de 0,5 processeur ; B a un poids de 200. A doit conserver sa part d’un tiers pendant la concurrence, mais utiliser toute la capacité disponible du père lorsque B est inactif. Quel changement convient ?
  1. Supprimer le quota propre à A en conservant les deux poids et le plafond du père.
  2. Porter le poids de A à 300 en conservant son quota propre et le plafond du père.
  3. Augmenter seulement le plafond du père en conservant le quota propre à A et les deux poids.
  4. Donner à B un quota plus faible en conservant le quota propre à A et les deux poids.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Un groupe père a une valeur pids.max de 30. Le groupe fils A contient quatre processus ayant chacun sept fils d’exécution au total et possède une limite locale de 40 ; le groupe B, de même niveau, contient deux processus à un seul fil d’exécution. A peut-il créer un autre fil d’exécution alors que toutes les tâches existantes restent actives ?
  1. Oui ; A est sous sa limite locale de 40, donc le total du père ne compte pas.
  2. Oui ; le père ne compte que les six fils principaux des processus, ce qui laisse 24 places.
  3. Non ; les 28 tâches de A et les 2 de B atteignent déjà la limite de 30 tâches du père.
  4. Non ; A dépasse déjà sa limite locale, car chaque processus ajoute sept fils principaux supplémentaires.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Une équipe veut exécuter sur des serveurs Linux une application qui exige un noyau Windows. Quelle frontière peut fournir ce noyau ?
  1. Un conteneur Windows.
  2. Un espace de noms UID 0.
  3. Une arborescence Windows montée.
  4. Une machine virtuelle exécutant Windows.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un conteneur sans privilèges reçoit une socket utilisable vers un moteur d’exécution de l’hôte appartenant à root. Pourquoi la correspondance d’UID peut-elle ne pas protéger l’hôte contre ses demandes ?
  1. L’UID associé ne donne aux demandes du moteur que les pouvoirs réduits du conteneur.
  2. La correspondance bloque les changements de privilèges du client, donc ses demandes ne peuvent pas affecter les objets de l’hôte.
  3. Le moteur agit avec ses propres privilèges pour les demandes que le client peut lui soumettre.
  4. La socket n’autorise que des actions locales à l’espace de noms, car son client se trouve dans un espace de noms utilisateur.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Un fournisseur exécute du code envoyé par des clients sans lien entre eux. Les clients A et C ont besoin de Linux ; B a besoin de Windows. Il veut déployer rapidement des conteneurs dans chaque environnement client tout en confinant à ce client une compromission du noyau invité. Comment doit-il organiser les frontières ?
  1. Utiliser une machine virtuelle ou micromachine virtuelle distincte par client, avec le système nécessaire et des conteneurs compatibles à l’intérieur.
  2. Utiliser une machine virtuelle par système, en mélangeant les conteneurs de A et C sous Linux et en plaçant B dans une machine virtuelle Windows.
  3. Utiliser une machine virtuelle Linux partagée avec des conteneurs sans privilèges distincts et donner à B une arborescence Windows.
  4. Utiliser une machine virtuelle Windows partagée avec des espaces de noms PID distincts et y placer les bibliothèques des trois clients.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 6 : Diagnostique les défaillances à travers les couches d’isolation10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Une personne chargée d’une enquête a besoin d’enregistrements des échecs de connexion et des utilisations de commandes à privilèges élevés. Quel mécanisme fournit ces preuves ?
  1. La randomisation des adresses.
  2. La journalisation d’audit.
  3. La pagination imbriquée.
  4. Un quota d’exécution du processeur.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un système biométrique accepte trop d’imposteurs. L’opérateur augmente son seuil de similarité. Quel compromis les tests doivent-ils rechercher ?
  1. Plus d’acceptations d’imposteurs et moins de rejets d’utilisateurs légitimes.
  2. Moins d’acceptations d’imposteurs et moins de rejets d’utilisateurs légitimes.
  3. Plus d’acceptations d’imposteurs et plus de rejets d’utilisateurs légitimes.
  4. Moins d’acceptations d’imposteurs et plus de rejets d’utilisateurs légitimes.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Une ACL POSIX donne à un utilisateur nommé les droits de lecture et d’écriture, mais son masque n’autorise que la lecture. L’entrée des autres du fichier autorise l’écriture. L’utilisateur n’est pas propriétaire. Peut-il écrire après une nouvelle ouverture ?
  1. Non ; l’entrée nominative est limitée par le masque et ne peut pas passer à la classe des autres.
  2. Oui ; l’entrée nominative en lecture et écriture contourne le masque de la classe du groupe.
  3. Oui ; l’écriture des autres est combinée à l’entrée nominative limitée par le masque.
  4. Non ; tout utilisateur nommé doit rejoindre le groupe propriétaire avant d’utiliser une ACL.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Un programme auxiliaire privilégié copie un chemin dans une mémoire privée, le vérifie avec access(), puis l’ouvre avec tous ses privilèges. Un attaquant peut remplacer l’entrée désignée. Quelle faille subsiste ?
  1. La copie de la chaîne a supprimé la condition de concurrence mémoire et celle du chemin.
  2. La copie change l’UID réel du programme pour qu’il corresponde au propriétaire du chemin.
  3. La chaîne stable peut toujours être résolue vers un autre objet au moment de l’ouverture.
  4. La copie rend les liens symboliques invisibles pour toutes les recherches de noms ultérieures.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Avec des pages de 4 KiB, un invité associe la page virtuelle 9 au cadre 4 de l’invité, puis au cadre machine 51. L’IOMMU autorise aussi un périphérique attribué à accéder aux cadres machine 48–55. Quelle est l’adresse du processeur pour 0x9B20, et le cadre obtenu est-il dans la projection du périphérique ?
  1. 0x4B20 ; non, le cadre 4 est hors de la plage autorisée.
  2. 0x33B20 ; non, le déplacement est hors de la plage autorisée.
  3. 0x33B20 ; oui, le cadre 51 est dans la plage autorisée.
  4. 0x9B20 ; oui, le numéro de page virtuelle est dans la plage autorisée.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Un hôte à huit processeurs donne à un cgroup père un quota de deux processeurs. Deux groupes fils de même niveau, prêts à s’exécuter, ont des poids de 100 et 300, aucun quota inférieur et assez de travail parallèle. Quelles parts soutenues obtiennent-ils lorsqu’ils sont tous deux en concurrence ?
  1. Environ 2 et 6 processeurs sur les huit processeurs de l’hôte.
  2. Environ 0,5 et 1,5 processeur dans la limite du père.
  3. Environ 1 et 1 processeur avec un quota partagé également.
  4. Environ 2 et 2 processeurs avec un quota complet chacun.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Un processus superviseur ouvre un fichier, transmet un descripteur en lecture seule à un processus travailleur, puis change le mode du fichier pour lui refuser les ouvertures futures. Quel accès le processus travailleur conserve-t-il par ce descripteur ?
  1. Il conserve l’accès en lecture par le descripteur existant.
  2. Il perd le descripteur à la prochaine commutation de l’ordonnanceur.
  3. Il obtient l’accès en écriture, car les descripteurs ignorent les modes d’accès.
  4. Il peut rouvrir tout fichier voisin par ce descripteur de fichier.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Une machine virtuelle utilise l’affectation directe pour une carte capable d’effectuer du DMA et une mémoire invitée chiffrée par le matériel. L’opérateur souhaite une migration à chaud et la limitation de l’accès du périphérique à la bonne machine virtuelle. Quel travail reste nécessaire ?
  1. Utiliser l’IOMMU, mais ne migrer que le disque et ignorer l’état du périphérique attribué.
  2. Transférer l’état du périphérique, mais limiter son DMA avec les seules tables des pages de l’invité.
  3. Laisser le chiffrement mémoire remplacer la limitation du DMA et ne copier que l’état du processeur.
  4. Limiter le DMA avec une IOMMU et gérer l’état du périphérique attribué lors de la migration.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un conteneur possède un nouvel espace de noms PID, mais partage l’espace de noms réseau de l’hôte. Sa seule isolation PID peut-elle lui permettre de se lier à un port déjà occupé sur l’hôte ?
  1. Non ; le port reste dans l’espace de noms réseau partagé.
  2. Oui ; chaque espace de noms PID possède un espace de ports indépendant.
  3. Oui ; le PID 1 reçoit automatiquement une nouvelle pile réseau.
  4. Non ; les conteneurs ne peuvent jamais se lier à des ports réseau.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Un attaquant entre dans un conteneur de la machine virtuelle du client A et exploite un bogue pour contrôler le noyau invité de cette machine. Les autres clients possèdent des machines virtuelles distinctes sur le même hôte physique. Quelles charges de travail sont directement exposées, et que reste-t-il à franchir avant d’exécuter du code sur l’hôte ?
  1. Seul le conteneur initial est exposé ; son espace de noms PID confine toujours le noyau invité contrôlé.
  2. Les autres conteneurs de la machine virtuelle de A sont exposés ; exécuter du code sur l’hôte exige encore de franchir la frontière de la machine virtuelle.
  3. Toutes les machines virtuelles des clients sont directement exposées ; tout noyau invité contrôle l’hôte physique partagé.
  4. Seuls les conteneurs ayant le même UID sont exposés ; un noyau invité contrôlé doit toujours respecter chaque UID.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Tu bloques sur ton propre exercice ? Aide aux Devoirs

Mots-Clés

113 Mots-Clés, chacun avec sa définition

A

accès direct à la mémoire
L’accès direct à la mémoire permet à un périphérique de transférer des données vers ou depuis la mémoire vive sans faire passer ces accès par la MMU du processeur.
Un périphérique réseau utilisant l’accès direct à la mémoire a besoin d’une frontière distincte autour des adresses de mémoire vive qu’il peut atteindre.
adresse physique de l’invité
Une adresse physique de l’invité désigne une zone mémoire dans la vue physique du système invité et doit être traduite en adresse machine réelle.
Une adresse physique de l’invité égale à zéro peut être associée à des cadres machine différents dans deux machines virtuelles exécutées sur un même hôte.
affectation directe de périphérique
L’affectation directe de périphérique attribue directement un périphérique physique ou une fonction à une machine virtuelle, une IOMMU limitant son accès DMA.
L’affectation directe de périphérique peut améliorer les performances réseau tout en rendant le partage et la migration à chaud plus difficiles.
anneau de protection
Un anneau de protection est un niveau de privilège x86 ; l’anneau 0 est le plus privilégié et l’anneau 3 le moins privilégié.
Linux place normalement le code des applications dans l’anneau de protection 3 et celui du noyau dans l’anneau de protection 0.
appel système
Un appel système est une demande contrôlée adressée au noyau par un programme utilisateur pour obtenir un service qui exige les pouvoirs du noyau.
La fonction d’enveloppe open() effectue un appel système afin que le noyau puisse vérifier l’accès avant de renvoyer un descripteur de fichier.
attaque hors ligne
Une attaque hors ligne teste des propositions contre des données de vérification volées sur le matériel de l’attaquant, sans consulter le service de connexion.
Une attaque hors ligne se poursuit à son propre rythme même si le compte réel est verrouillé après des échecs de connexion.
attaque par dictionnaire
Une attaque par dictionnaire essaie les mots de passe probables, notamment les choix divulgués et leurs variantes prévisibles, avant les chaînes moins probables.
Une attaque par dictionnaire peut trouver « Winter2027! » rapidement malgré son mélange de lettres, de chiffres et de ponctuation.
attaque par force brute
Une attaque par force brute essaie systématiquement chaque candidat d’un espace de mots de passe défini jusqu’à trouver une donnée de vérification correspondante.
Une attaque par force brute sur huit lettres minuscules possède un espace de recherche de 26 puissance huit.
authentificateur à clé publique
Un authentificateur à clé publique prouve la possession d’une clé privée en signant un défi qu’un serveur vérifie avec sa clé publique.
Un authentificateur à clé publique peut achever la connexion sans transmettre sa clé privée de signature au serveur.
authentification
L’authentification vérifie qu’une entité qui déclare une identité contrôle les identifiants ou les facteurs associés à cette identité.
Une authentification réussie permet au service de connexion d’associer les identifiants du compte à un nouvel interpréteur de commandes.
authentification multifacteur
L’authentification multifacteur exige des preuves de différents types de facteurs, comme une connaissance et la possession d’un appareil.
Un mot de passe et un code d’application d’authentification fournissent une authentification multifacteur, contrairement à deux questions de connaissance.
autorisation
L’autorisation détermine si un principal authentifié peut effectuer une opération donnée sur une ressource protégée.
L’autorisation d’accès aux fichiers peut refuser à un utilisateur connecté la permission de lire un rapport appartenant à un autre compte.

B

ballonnement mémoire
Le ballonnement mémoire utilise un pilote invité pour réserver des pages afin que l’hyperviseur puisse récupérer leurs cadres machine avec la coopération de l’invité.
Le ballonnement mémoire permet à l’invité de choisir les pages auxquelles renoncer grâce à des connaissances dont l’hyperviseur ne dispose pas.
base informatique de confiance
La base informatique de confiance comprend le matériel, le micrologiciel et les logiciels dont le bon fonctionnement conditionne la sécurité du système.
Une faille dans un programme auxiliaire de connexion de confiance peut compromettre la base informatique de confiance même lorsque le noyau est correct.
bit de non-exécution
Un bit de non-exécution est une permission de page qui empêche l’exécution d’instructions depuis la page, tandis que les autres accès sont contrôlés séparément.
Une page de pile dont le bit de non-exécution est activé peut contenir des données, mais provoque un défaut si le programme tente de l’exécuter.
bit de restriction de suppression
Le bit de restriction de suppression limite la suppression et le renommage dans un répertoire aux propriétaires des fichiers, au propriétaire du répertoire ou aux processus privilégiés.
Le bit de restriction de suppression empêche un utilisateur ordinaire de supprimer l’entrée d’un autre dans un répertoire temporaire partagé de mode 1777.

C

capacité d’objet
Une capacité d’objet est un jeton infalsifiable qui désigne un objet et les opérations que son détenteur peut effectuer sur cet objet.
Un processus père peut transmettre une capacité d’objet pour un fichier d’entrée sans donner à son processus travailleur accès à tout le répertoire.
capacité Linux
Une capacité Linux est une partie des privilèges de root qui peut être attribuée séparément et autorise une catégorie d’opérations privilégiées.
La capacité Linux CAP_NET_BIND_SERVICE permet de se lier aux ports de numéro inférieur sans accorder tous les pouvoirs de root.
clé d’accès
Une clé d’accès est un identifiant à clé publique utilisé pour une authentification liée au site, stocké sur un appareil ou synchronisé de manière sécurisée entre appareils.
Une clé d’accès synchronisée permet de se connecter sur un autre appareil tout en intégrant le compte de la plateforme à la protection de l’identifiant.
condition de concurrence entre vérification et utilisation
Une condition de concurrence entre vérification et utilisation se produit lorsqu’un objet ou une condition vérifié change avant son utilisation, rendant la décision précédente inapplicable.
Une condition de concurrence entre vérification et utilisation permet à un lien symbolique remplacé de rediriger un programme auxiliaire privilégié après sa vérification de permission.
conteneur
Un conteneur est constitué d’un ou plusieurs processus utilisant le noyau de l’hôte, isolés par des vues privées, des contrôles de ressources et des restrictions de privilèges.
Un conteneur peut contenir les fichiers d’une autre distribution Linux tout en utilisant le même noyau que l’hôte.
conteneur sans privilèges
Un conteneur sans privilèges s’exécute avec des pouvoirs non privilégiés sur l’hôte, en associant normalement son identité root interne par un espace de noms utilisateur.
Un conteneur sans privilèges réduit les privilèges sur l’hôte, mais dépend toujours du noyau de l’hôte pour refuser les opérations dangereuses.
contrôle d’accès discrétionnaire
Le contrôle d’accès discrétionnaire permet au propriétaire d’un objet de décider quels autres principaux peuvent y accéder et avec quels droits.
Le contrôle d’accès discrétionnaire permet au propriétaire d’un fichier d’accorder l’accès en lecture, notamment par l’intermédiaire d’un programme exécuté sous son identité.
contrôle d’accès fondé sur les rôles
Le contrôle d’accès fondé sur les rôles attribue des permissions à des rôles professionnels et donne ces permissions aux utilisateurs par leur appartenance aux rôles.
Le contrôle d’accès fondé sur les rôles permet de remplacer les rôles attribués lors d’un changement de poste sans modifier chaque règle individuelle de fichier.
contrôle d’accès obligatoire
Le contrôle d’accès obligatoire applique une politique définie par l’administrateur indépendamment des choix discrétionnaires du propriétaire d’un objet.
Le contrôle d’accès obligatoire peut refuser à un serveur web la lecture d’un répertoire personnel autorisée par le mode ordinaire du fichier.
contrôleur de groupe de contrôle
Un contrôleur de groupe de contrôle mesure ou régule une catégorie de ressources pour les groupes de la hiérarchie des groupes de contrôle.
Un groupe père active le contrôleur de groupe de contrôle de la mémoire pour ses fils avant de configurer leurs limites mémoire.
correspondance des UID
Une correspondance des UID associe une plage d’identifiants utilisateur internes à un espace de noms à une plage externe, à l’aide de deux valeurs de départ et d’une longueur.
Une correspondance des UID commençant à 0 à l’intérieur et à 100000 sur l’hôte traduit l’identifiant interne 1000 en 101000 sur l’hôte.
coût du hachage des mots de passe
Le coût du hachage des mots de passe définit le calcul volontairement imposé, et parfois la mémoire nécessaire, pour calculer une donnée de vérification de mot de passe.
Augmenter le coût du hachage des mots de passe ralentit à la fois une vérification légitime de connexion et chaque essai de l’attaquant.
cpu.max
cpu.max est le fichier cgroup v2 qui précise un quota et une période d’exécution du processeur en microsecondes, ou un quota illimité.
Une valeur cpu.max de 75000 100000 autorise au plus les trois quarts du temps d’un processeur par période.
cpu.weight
cpu.weight fixe la part relative de processeur d’un cgroup en cas de contention sans imposer de plafond strict au temps autrement disponible.
Une valeur cpu.weight plus élevée favorise un groupe occupé face aux groupes concurrents de même niveau, mais ne peut pas annuler son quota distinct.

D

débordement de tampon
Un débordement de tampon est une écriture au-delà des limites d’un tampon qui peut corrompre les données voisines, notamment une adresse sauvegardée utilisée pour le contrôle de l’exécution.
Un débordement de tampon sur la pile peut remplacer une adresse de retour alors que l’opération prévue ne faisait que copier du texte.
défaut de page
Un défaut de page est une exception provoquée par l’échec d’une traduction de page ou d’une vérification de permission, que le noyau doit interpréter.
Un défaut de page sur une projection en copie sur écriture peut conduire à une copie privée de la page et à une nouvelle exécution réussie de l’instruction.
démarrage mesuré
Le démarrage mesuré enregistre les empreintes des composants de démarrage, souvent dans un TPM, afin qu’un tiers puisse vérifier ce qui a été chargé.
Le démarrage mesuré fournit des mesures du démarrage pour l’attestation sans être lui-même le mécanisme de refus fondé sur les signatures.
démarrage sécurisé
Le démarrage sécurisé vérifie les signatures de confiance tout au long de la chaîne de démarrage et refuse les composants qui échouent aux vérifications de confiance configurées.
Le démarrage sécurisé peut rejeter un chargeur de démarrage modifié avant que celui-ci reçoive le contrôle de la machine.
descripteur de fichier
Un descripteur de fichier est un indice local à un processus qui désigne une ressource ouverte détenue par le noyau et enregistre l’accès accordé lors de son ouverture.
Un descripteur de fichier hérité et autorisé en écriture peut rester utilisable après que le mode du fichier interdit les nouvelles ouvertures en écriture.
domaine SELinux
Un domaine SELinux est une étiquette de processus utilisée par une politique de contrôle fondée sur les types pour déterminer les types d’objets auxquels le processus peut accéder.
Un domaine SELinux pour un serveur web peut autoriser la lecture des pages tout en refusant celle des types de fichiers des répertoires personnels.

E

EFAULT
EFAULT est une erreur Linux indiquant qu’une adresse fournie pour un accès mémoire lors d’un appel système n’est pas une adresse utilisateur valide et autorisée.
Un appel read() dont la destination se trouve en mémoire noyau peut renvoyer EFAULT au lieu d’écraser le noyau.
empreinte de mot de passe
Une empreinte de mot de passe est une donnée de vérification à sens unique, recalculée à partir d’un mot de passe soumis et de paramètres stockés pour vérifier une connexion.
Une empreinte de mot de passe volée peut être testée avec des propositions sans révéler le mot de passe par déchiffrement.
entrée de contrôle d’accès
Une entrée de contrôle d’accès est une règle individuelle d’ACL Windows qui désigne un SID et les droits à autoriser, refuser ou auditer.
Une entrée de contrôle d’accès refusant l’écriture à un groupe concerné peut bloquer une demande comprenant l’accès en écriture.
entrée en machine virtuelle
Une entrée en machine virtuelle restaure l’exécution de l’invité sous virtualisation matérielle après que l’hyperviseur a sélectionné et préparé son état.
Après avoir traité une notification de périphérique, l’hyperviseur effectue une entrée en machine virtuelle pour reprendre l’invité concerné.
espace de noms
Un espace de noms donne aux processus leur propre instance ou vue d’une catégorie d’état du système Linux normalement globale.
Un espace de noms peut séparer les listes de montages sans imposer de limite de processeur aux processus qui utilisent cette vue.
espace de noms de montage
Un espace de noms de montage sépare la liste des systèmes de fichiers montés d’un groupe de processus, permettant une arborescence visible privée.
Un espace de noms de montage permet à un moteur d’exécution d’assembler une racine de conteneur sans remplacer la liste des montages propre à l’hôte.
espace de noms PID
Un espace de noms PID donne aux processus une hiérarchie distincte de numérotation et de visibilité, avec son propre cycle de vie lié au PID 1.
Un processus peut être le PID 1 dans un espace de noms PID alors que l’hôte identifie le même processus par un autre numéro.
espace de noms réseau
Un espace de noms réseau fournit des interfaces, adresses, routes, ports et autres états distincts appartenant à une pile réseau.
Deux services dans des espaces de noms réseau différents peuvent tous deux écouter sur le port 80 sans conflit de port dans un même espace de noms.
espace de noms utilisateur
Un espace de noms utilisateur associe les identifiants d’utilisateur et de groupe des vues interne et externe et limite les capacités à ses ressources.
Un espace de noms utilisateur peut associer l’UID 0 du conteneur à un UID non privilégié sur l’hôte au lieu de root sur l’hôte.
exécution directe limitée
L’exécution directe limitée exécute les instructions ordinaires de façon native, tandis que les vérifications matérielles et les déroutements contrôlés préservent le contrôle du superviseur.
L’exécution directe limitée donne à une application une vitesse de calcul native sans lui permettre de remplacer les tables des pages.

É

émulation de périphérique
L’émulation de périphérique présente un modèle logiciel de matériel physique afin qu’un invité puisse utiliser un pilote destiné à ce périphérique.
L’émulation de périphérique peut traduire une écriture de l’invité dans un registre de carte réseau en travail effectué par un programme auxiliaire de l’hôte.
évasion de machine virtuelle
Une évasion de machine virtuelle franchit la frontière de l’invité par une faille de l’hyperviseur ou d’un périphérique virtuel exposé et permet d’obtenir des pouvoirs sur l’hôte.
Un périphérique émulé comportant un bogue peut permettre une évasion de machine virtuelle même si les projections de pages ordinaires de l’invité sont séparées.

G

gabarit biométrique
Un gabarit biométrique est un ensemble stocké de traits dérivés d’une caractéristique physique et utilisés pour comparer les identités par similarité.
Un capteur d’empreintes digitales compare les nouveaux traits à un gabarit biométrique au lieu d’exiger des images identiques.
groupe de contrôle
Un groupe de contrôle organise les processus hiérarchiquement pour mesurer et contrôler les ressources, avec héritage des restrictions des ancêtres.
Un groupe de contrôle peut plafonner l’utilisation du processeur par une tâche par lots sans lui masquer les noms des processus de l’hôte.
gVisor
gVisor interpose un noyau en espace utilisateur pour les appels système des conteneurs, ce qui réduit l’exposition directe de la charge de travail au noyau de l’hôte.
gVisor traite une grande partie de la surface d’appels système d’un bac à sable avant que certaines opérations atteignent le noyau réel de l’hôte.

H

hyperappel
Un hyperappel est une demande explicite d’un logiciel invité à l’hyperviseur pour effectuer une opération pour le compte de l’invité.
Un hyperappel peut demander au moniteur de modifier l’état de la machine virtuelle d’un invité sans prétendre contrôler l’hôte.
hyperviseur
Un hyperviseur est la couche logicielle qui crée des machines virtuelles, leur attribue des ressources et conserve le contrôle de la machine physique.
L’hyperviseur sauvegarde l’état du processeur d’un invité avant d’ordonnancer un autre invité sur le même cœur physique.

I

informatique confidentielle
L’informatique confidentielle utilise la protection matérielle et l’attestation pour protéger la mémoire de l’invité contre un hôte potentiellement non fiable.
L’informatique confidentielle peut empêcher l’hyperviseur d’accéder aux clés de mémoire d’une machine virtuelle tandis que le matériel vérifie l’état de lancement.
instantané
Un instantané conserve l’état d’une machine virtuelle pour une restauration ultérieure ; un instantané de l’état en cours d’exécution comprend l’exécution et la mémoire ainsi que les disques.
Restaurer un instantané complet ramène une machine virtuelle de test à l’état sauvegardé de son processeur, de sa mémoire et de son stockage.
instruction privilégiée
Une instruction privilégiée effectue une opération protégée uniquement avec des privilèges suffisants du processeur et provoque sinon un déroutement.
La tentative d’une application d’exécuter l’instruction privilégiée HLT sur x86 déclenche une exception de protection.
instruction sensible
Une instruction sensible modifie la configuration de la machine ou se comporte différemment selon le niveau de privilège d’exécution.
Une instruction sensible qui change silencieusement de comportement peut mettre en échec l’interception classique par déroutement et émulation.
interception et émulation
L’interception et émulation intercepte les opérations protégées d’un invité déprivé et applique leurs effets à l’état de la machine virtuelle.
L’interception et émulation met à jour l’indicateur virtuel d’interruption d’un invité sans lui permettre de désactiver les interruptions de l’hôte.
interruption d’horloge
Une interruption d’horloge est un événement matériel qui rend le contrôle du processeur au noyau après un intervalle programmé.
L’interruption d’horloge permet à l’ordonnanceur de remplacer un processus même si celui-ci ne cède jamais volontairement le processeur.
IOMMU
Une IOMMU traduit les adresses des périphériques et applique des projections qui limitent la mémoire accessible à chaque périphérique capable d’effectuer du DMA.
L’IOMMU empêche un périphérique réseau affecté directement d’écrire hors de la mémoire attribuée à sa machine virtuelle.
isolation des tables des pages du noyau
L’isolation des tables des pages du noyau retire la plupart des projections du noyau pendant l’exécution en mode utilisateur afin de réduire l’exposition sur les processeurs touchés par Meltdown.
L’isolation des tables des pages du noyau change les projections actives lorsque l’exécution franchit la frontière entre utilisateur et noyau.

J

jeton d’accès
Un jeton d’accès est un objet d’identifiants Windows contenant les SID de l’utilisateur et des groupes ainsi que les privilèges utilisés lors des vérifications d’accès.
UAC lance le programme ordinaire d’un administrateur avec un jeton d’accès filtré avant toute élévation approuvée.
journal d’audit
Un journal d’audit enregistre les événements liés à la sécurité afin que les administrateurs puissent détecter les utilisations abusives et reconstituer les faits.
Un journal d’audit distant protégé peut conserver la trace d’une commande privilégiée après qu’un attaquant a effacé les fichiers locaux.

K

Kata Containers
Kata Containers place chaque bac à sable de conteneur dans une machine virtuelle légère, ce qui donne des noyaux invités distincts aux différents bacs à sable.
Kata Containers peut placer plusieurs conteneurs d’un même pod dans un bac à sable partageant un noyau invité protégé.

L

liste de contrôle d’accès
Une liste de contrôle d’accès stocke les sujets et les droits associés à un objet ; elle correspond à une colonne de la matrice d’accès.
La liste de contrôle d’accès d’un rapport peut accorder l’écriture à un compte et la lecture à un second.
liste de contrôle d’accès discrétionnaire
Une liste de contrôle d’accès discrétionnaire est une liste ordonnée d’entrées d’autorisation et de refus d’un objet Windows qui détermine les droits demandés qui sont accordés.
Une DACL peut accorder une lecture demandée par une entrée explicite avant que l’évaluation atteigne un refus hérité.

M

machine virtuelle
Une machine virtuelle présente un ordinateur virtuel complet à un système d’exploitation invité tandis qu’un hyperviseur contrôle les ressources réelles.
Une machine virtuelle peut exécuter un noyau Windows sur du matériel compatible géré par un hôte fondé sur Linux.
masque d’ACL POSIX
Un masque d’ACL POSIX limite les droits effectifs des entrées d’utilisateurs nommés, de groupes nommés et du groupe propriétaire.
Un masque d’ACL POSIX en lecture seule rend effectivement accessible en lecture seule l’entrée en lecture et écriture d’un utilisateur nommé.
matrice d’accès
Une matrice d’accès représente les opérations autorisées avec un sujet par ligne, un objet par colonne et les droits dans chaque case.
Une matrice d’accès peut montrer qu’un processus de sauvegarde peut lire un rapport mais n’a pas le droit d’utiliser une imprimante.
memory.high
memory.high est un seuil de pression mémoire d’un cgroup qui ralentit les tâches effectuant des allocations et déclenche une récupération intensive au-delà de ce seuil.
Un groupe peut dépasser memory.high tandis que la pression de récupération augmente, contrairement à une simple limite d’allocation fixe.
memory.max
memory.max est une limite mémoire stricte d’un cgroup qui peut déclencher la suppression locale d’un processus pour manque de mémoire lorsque la récupération ne peut pas satisfaire la demande.
Après épuisement des possibilités de récupération du cache et de l’espace d’échange utilisable, memory.max peut imposer la suppression d’une tâche admissible du groupe.
micromachine virtuelle
Une micromachine virtuelle est une petite machine virtuelle conçue avec un modèle de périphériques minimal pour isoler efficacement des charges de travail légères.
Une plateforme peut placer une fonction non fiable dans une micromachine virtuelle Firecracker afin de lui donner une frontière de noyau invité distincte.
migration à chaud
La migration à chaud transfère une machine virtuelle en cours d’exécution entre hôtes, généralement en copiant la mémoire avant un court basculement final de l’exécution.
Un périphérique affecté directement peut compliquer la migration à chaud, car son état matériel actif doit aussi être pris en charge.
mode noyau
Le mode noyau est le niveau de privilège du processeur qui permet au système d’exploitation d’exécuter des instructions protégées et de gérer le matériel.
Un pilote exécuté en mode noyau peut modifier un état de la machine qu’une application ordinaire ne peut pas contrôler directement.
mode octal
Un mode octal code les classes de permissions Unix avec lecture 4, écriture 2 et exécution 1, ainsi que des bits spéciaux facultatifs.
Le mode octal 640 accorde la lecture et l’écriture au propriétaire, la lecture au groupe et aucun accès par la classe des autres.
mode utilisateur
Le mode utilisateur est le niveau de privilège restreint du processeur dans lequel les instructions des applications s’exécutent sous réserve des vérifications de protection matérielles.
Un éditeur de texte appartenant à root exécute toujours ses instructions ordinaires en mode utilisateur et demande au noyau les opérations sur les fichiers.
modèle de Bell–LaPadula
Le modèle de Bell–LaPadula protège la confidentialité en interdisant les lectures au-dessus du niveau d’un sujet et les écritures en dessous.
Selon le modèle de Bell–LaPadula, un processus Secret peut lire des données Confidentiel, mais ne peut pas écrire dans un fichier Confidentiel.
moniteur de référence
Un moniteur de référence est un mécanisme protégé qui contrôle les accès, ne peut pas être contourné et est assez petit pour être vérifié soigneusement.
Le moniteur de référence vérifie une demande de projection ; le matériel applique ensuite l’accès déjà accordé dans la table des pages.
mot de passe à usage unique fondé sur le temps
Un mot de passe à usage unique fondé sur le temps est un code de courte durée dérivé d’un secret partagé et d’une période, couramment utilisé pour prouver la possession d’un authentificateur.
Une fausse page de connexion peut transmettre un TOTP au vrai service tant que le code est valide.

N

niveau d’exception
Un niveau d’exception est un niveau de privilège d’exécution d’ARMv8-A, allant d’EL0 pour les applications à EL3 pour le micrologiciel sécurisé.
L’hyperviseur ARM s’exécute au niveau d’exception EL2, tandis que le noyau d’un système d’exploitation invité s’exécute normalement à EL1.
no_new_privs
no_new_privs est un indicateur de processus Linux qui empêche l’exécution d’accorder de nouveaux privilèges par setuid ou des mécanismes apparentés.
Lorsque no_new_privs est défini, un processus de conteneur ne peut pas gagner de pouvoirs simplement en lançant un exécutable setuid.

P

pagination imbriquée
La pagination imbriquée fait effectuer par le matériel la traduction des adresses virtuelles de l’invité en adresses physiques de l’invité, puis en adresses machine.
La pagination imbriquée permet de modifier les tables des pages de l’invité sans exiger une interception logicielle de chaque modification.
paire d’interfaces veth
Une paire d’interfaces veth est une paire d’interfaces réseau virtuelles reliées qui peut connecter l’espace de noms réseau d’un conteneur à son hôte.
Une extrémité d’une paire d’interfaces veth peut se trouver dans un conteneur et l’autre sur un pont de la pile réseau de l’hôte.
PAM
PAM est un cadre d’authentification Linux qui permet aux services de connexion d’utiliser des modules configurés pour vérifier les identifiants et appliquer les politiques associées.
Un service de connexion SSH peut utiliser PAM pour vérifier les identifiants avant de définir l’identité du processus de l’utilisateur.
paravirtualisation
La paravirtualisation modifie une interface de l’invité pour demander explicitement des opérations virtuelles au lieu de dépendre entièrement de leur interception.
La paravirtualisation du processeur modifie un noyau invité pour qu’il effectue des hyperappels pour les opérations exigeant le contrôle de l’hyperviseur.
partage de pages
Le partage de pages fusionne des pages identiques en une copie en lecture seule et rétablit des copies distinctes lorsqu’un invité écrit dans l’une d’elles.
Le partage de pages entre clients peut révéler des données identiques par le temps nécessaire à la création d’une copie privée accessible en écriture.
pids.max
pids.max est une limite de tâches d’un cgroup qui compte les processus et les fils d’exécution et empêche toute création au-delà du total autorisé.
Un service à plusieurs fils d’exécution peut atteindre pids.max même si son nombre de processus distincts semble faible.
principal
Un principal est une entité, comme une personne ou un compte de service, à laquelle des droits sont attribués et pour le compte de laquelle des processus agissent.
Un service de sauvegarde s’exécute en tant que principal distinct afin que ses droits sur les fichiers puissent être gérés indépendamment de ceux d’un utilisateur humain.
processeur virtuel
Un processeur virtuel est un processeur visible par l’invité dont l’hyperviseur ordonnance l’état d’exécution sur un processeur physique.
Un processeur virtuel inactif peut attendre son interruption virtuelle tandis que le cœur physique exécute un autre invité.
profil AppArmor
Un profil AppArmor confine un programme en précisant les chemins et les opérations autorisés, y compris certaines capacités Linux.
Un profil AppArmor peut autoriser un service à lire sa configuration tout en lui refusant l’accès à des fichiers personnels sans rapport.
programmation orientée retour
La programmation orientée retour construit un comportement choisi par l’attaquant en enchaînant de courtes séquences d’instructions déjà présentes en mémoire exécutable.
La programmation orientée retour peut réutiliser des instructions de bibliothèque sans exécuter d’octets injectés depuis une page de données.

R

randomisation de l’espace d’adressage
La randomisation de l’espace d’adressage modifie aléatoirement l’emplacement des zones mémoire afin que les attaquants ne puissent pas prévoir de façon fiable les adresses utilisées pour réutiliser du code ou cibler des données.
Une fuite d’informations peut révéler l’adresse de base d’une bibliothèque et affaiblir l’ASLR pour les gadgets de cette bibliothèque.
répertoire setgid
Un répertoire setgid fait hériter son groupe aux nouveaux fichiers, ce qui aide une équipe à conserver une même identité de groupe pour les fichiers partagés.
Un répertoire setgid de projet maintient les nouveaux documents dans le groupe du projet au lieu du groupe principal de chaque auteur.
révocation de capacité
La révocation de capacité retire un accès précédemment accordé par jeton et peut exiger de contrôler les copies déléguées.
La révocation de capacité est difficile lorsque de nombreux processus détiennent des copies utilisables indépendamment de l’accès accordé à un objet.

S

seccomp
Seccomp est un mécanisme Linux qui filtre les appels système d’un processus et limite les services du noyau auxquels il peut accéder.
La politique seccomp d’un processus de rendu de navigateur peut bloquer les appels de lancement de programmes même après sa compromission.
sel
Un sel est une valeur aléatoire propre à chaque mot de passe, stockée avec son empreinte pour empêcher que des mots de passe identiques permettent de réutiliser le même travail de vérification.
Des sels différents font produire des empreintes de mots de passe stockées différentes à deux comptes ayant le même mot de passe.
setuid
Setuid est un mécanisme de fichier exécutable qui lance un programme avec l’identité utilisateur effective de son propriétaire selon les règles normales d’exécution.
Setuid permet au programme auxiliaire de gestion des mots de passe de mettre à jour un fichier de vérification protégé, tandis que son code vérifie quel compte peut être modifié.
SMAP
SMAP est une protection x86 qui limite l’accès aux données des pages utilisateur en mode superviseur en dehors des copies explicitement autorisées.
SMAP exige que le code de copie du noyau autorise explicitement l’accès à la mémoire utilisateur nécessaire pour un tampon validé.
SMEP
SMEP est une protection x86 qui empêche le code en mode superviseur d’exécuter des instructions dans des pages marquées comme accessibles en mode utilisateur.
SMEP empêche un retour corrompu du noyau de sauter vers des instructions contrôlées par un attaquant dans une page utilisateur.
socket du moteur d’exécution de conteneurs
Une socket du moteur d’exécution de conteneurs est une interface permettant de contrôler un moteur d’exécution dont les pouvoirs peuvent exposer des opérations privilégiées sur tout l’hôte.
L’accès à une socket du moteur d’exécution de conteneurs appartenant à root peut mettre en échec la protection attendue d’une correspondance d’UID non privilégiée.
sortie de machine virtuelle
Une sortie de machine virtuelle est un transfert contrôlé par le matériel de l’exécution de l’invité vers l’hyperviseur après un événement configuré pour être intercepté.
Une sortie de machine virtuelle sur HLT exécuté par l’invité permet à l’hyperviseur de cesser d’ordonnancer le vCPU inactif et d’exécuter une autre charge de travail.
surallocation mémoire
La surallocation mémoire promet aux machines virtuelles plus de mémoire au total que l’hôte n’en possède, en supposant que leurs demandes actives n’atteignent pas leur pic simultanément.
La surallocation mémoire peut ne pas offrir de bonnes performances lorsque chaque invité commence à utiliser toute son allocation.
système invité
Un système invité est un système d’exploitation exécuté dans une machine virtuelle avec une vue du matériel fournie par un hyperviseur.
Le système invité met à jour ses tables des pages sans recevoir le contrôle direct de tous les cadres machine de l’hôte.

T

table des pages fantôme
Une table des pages fantôme associe directement les adresses virtuelles de l’invité aux cadres machine et est maintenue par logiciel par l’hyperviseur.
Une table des pages fantôme doit être mise à jour lorsque l’invité change les projections que le matériel utilisera réellement.
taux de fausse acceptation
Le taux de fausse acceptation est la proportion de tentatives d’imposteurs qu’un système biométrique accepte à tort comme légitimes.
Un imposteur accepté parmi 5 000 tentatives donne un taux de fausse acceptation de 0,02 %.
taux de faux rejet
Le taux de faux rejet est la proportion de tentatives légitimes qu’un système biométrique refuse à tort.
Un seuil de similarité plus strict augmente le taux de faux rejet lorsque davantage de relevés légitimes n’atteignent pas le seuil.
traduction binaire
La traduction binaire réécrit les instructions problématiques du noyau invité en séquences sûres avant de les exécuter et de mettre le résultat en cache.
La traduction binaire peut prendre en charge un noyau invité non modifié sur un processeur dont certaines instructions sensibles ne provoquent pas de déroutement.
traversée de répertoire
La traversée de répertoire est la recherche à travers un répertoire pour atteindre une entrée ; elle exige la permission d’exécution sur ce répertoire.
La traversée de répertoire peut permettre d’ouvrir un nom connu même lorsque l’absence de permission de lecture interdit de répertorier tous les noms.

U

UID effectif
L’UID effectif est l’identité d’un processus Unix utilisée pour la plupart des vérifications d’accès ; il peut différer de l’identité qui a lancé le processus.
Un programme auxiliaire setuid de gestion des mots de passe appartenant à root possède l’UID effectif 0 tout en conservant l’UID réel de l’appelant.
umask
Un umask est un paramètre de processus qui désactive certains bits de permission du mode demandé lors de la création d’un objet.
Avec un umask de 027, une demande de fichier ordinaire en mode 666 crée un fichier de mode 640, et non un fichier exécutable.
unité de gestion mémoire
L’unité de gestion mémoire traduit les adresses virtuelles du processeur et vérifie les permissions des pages avant d’autoriser les accès mémoire.
L’unité de gestion mémoire bloque une écriture en mode utilisateur dans une page marquée comme réservée au superviseur dans la table des pages.

V

Virtio
Virtio est une interface de périphérique paravirtuel qui utilise des pilotes adaptés à l’invité et des files partagées pour réduire le surcoût du traitement des périphériques.
Un pilote virtio place plusieurs requêtes de stockage dans une file avant de notifier le composant qui les traite, ce qui réduit les transitions répétées.

W

W^X
W^X est une politique mémoire qui interdit qu’une page soit accessible en écriture et exécutable en même temps.
Avec W^X, un compilateur à la volée écrit d’abord le code et modifie les permissions avant de l’exécuter.

À propos de cette unité

Par StudeliSignaler une erreur

Crée ton propre Matériel d'Étude

Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.

Commencer