Les anneaux ont été introduits dans le précurseur d'UNIX, Multics, et avaient 8 anneaux pour la lecture, l'écriture, l'exécution et l'appel (je ne ' Je comprends très bien pourquoi il a fallu 8 sonneries pour cela, si quelqu'un considère que c'est une question bonus!). L'architecture x86 d'Intel a incorporé l'idée d'anneaux dans le matériel, avec 4 anneaux correspondant à l'anneau 0 étant pour le noyau, 1 et 2 pour les pilotes de périphérique et 3 pour les applications.
Les anneaux 0 et 3 sont généralement les seuls utilisés dans les systèmes d'exploitation x86 modernes pour la plupart des utilisateurs, l'anneau 0 étant réservé aux opérations au niveau du noyau et l'anneau 3 au niveau utilisateur, bien qu'il y ait quelques exceptions; par exemple, VirtualBox utilise l'anneau 1 pour autoriser l'utilisation d'hôtes virtuels. Généralement, le code de l'anneau 3 ne peut pas accéder à la mémoire ou aux opérations de l'anneau 0, bien que cela soit à l'origine des problèmes de Spectre et Meltdown divulgués en janvier 2018.
'Ring -1' a également été introduit pour les hyperviseurs - Intel VT-X et AMD-V ajoutent 9 instructions de code machine, introduisant le concept de ring -1. Ring -2 est généralement appelé SMM (mode de gestion du système) et est utilisé pour les opérations de très bas niveau telles que la gestion de l'alimentation et utilisé uniquement par le microprogramme du système. Il a été utilisé avec plusieurs exploits pour que les rootkits résident sans que le système d'exploitation puisse interférer.
'Ring -3' a été inventé pour des niveaux fonctionnant en dessous de celui après une attaque a été démontrée par Invisible Things sur le chipset Intel Q35 (corrigé dans Q45 et versions ultérieures). Cela a fonctionné en remappant les 16 premiers Mo de RAM réservés pour Intel Management Engine et fonctionnant même avec un périphérique dans un état S3.
Les processeurs ARM semblent utiliser seulement 3 anneaux, ordonnés dans l'autre sens; PL0 étant utilisateur, PL1 étant système d'exploitation, PL2 étant hyperviseur. Voir la figure 3.20 et cette page d'ARM.
Il y a eu plusieurs exploits au fil des ans démontrant des exploits sur des anneaux en dehors de ceux décrits à l'origine par l'architecture x86. À quoi ressemblerait un anneau de niveau encore plus bas (anneau -4 dans Intel, PL3 dans ARM ou anneau -3 dans AMD) et y a-t-il eu des travaux concernant les exploits dans ce domaine . De plus, j'ai essayé de suivre le guide sur les bonnes questions suggestives afin que les explications sur le "comment" et le "pourquoi" soient applicables.
Les anneaux négatifs sont de faux anneaux. Ce ne sont pas des niveaux de privilèges réels du CPU. Le fonctionnement des anneaux est simple. Certaines instructions ont des vérifications de privilèges où elles vérifient que le niveau de privilège actuel, ou CPL, est suffisant et si ce n'est pas le cas, l'instruction échoue avec un défaut de protection général . CPL0 est l'anneau 0, CPL1 est l'anneau 1, etc. Certaines instructions nécessitent un certain niveau de privilège en fonction de la valeur de ses opérandes (par exemple, mov
peut renvoyer un GPF si le CPL est insuffisant et l'adresse mémoire donné lui nécessite l'anneau 0 pour y accéder, ou si un registre qui lui est donné est privilégié). D'autres nécessitent toujours un niveau de privilège plus élevé.
Un exemple est l'instruction RDTSC
. Il lancera un défaut de protection générale à moins que soit le bit TSD dans CR4 (le quatrième registre de contrôle ) ne soit pas défini, ou le niveau de privilège actuel est zéro ou le système est en mode réel (déterminé en vérifiant si le bit PE dans CR0 n'est pas défini). Cette instruction est définie en interne comme:
if(CR4.TSD == 0 || CPL == 0 || CR0.PE == 0) EDX:EAX = TimeStampCounter;
else Exception(GP(0));
J'ai écrit un peu plus sur les anneaux et leurs utilisations dans cette réponse .
Il n'existe pas de niveau de privilège négatif. Ils n'existent pas. Ring -1 est un surnom pour la fonctionnalité d'hyperviseur (VT-x sur Intel). Ring -2 est un surnom pour le contexte Mode de gestion du système , ou SMM, qui exécute du code isolé lorsqu'une interruption spéciale appelée SMI se produit. Ring -3 est un surnom pour le code qui s'exécute sur le CSME, un coprocesseur hybride i486/i586 à l'intérieur des chipsets Intel modernes qui, indirectement, a accès à la mémoire système (je dis indirectement parce qu'il n'est pas conçu pour un accès complet à la mémoire, mais il expose un périphérique PCIe virtuel, et il s'avère qu'il peut également interférer avec DMAR , utilisé par l'IOMMU).
À quoi ressemblerait un anneau de niveau inférieur
La seule chose qui pourrait être considérée comme inférieure à n'importe laquelle d'entre elles est appelée mode sonde (qui, encore une fois, n'est pas un véritable anneau). Il est initié par JTAG et fournit une quantité extrême de contrôle sur l'ensemble du CPU. Le mode sonde n'est plus aussi puissant qu'avant, mais il existe probablement des moyens de déverrouiller une version beaucoup plus complète du mode sonde avec accès à du matériel et des informations d'identification Intel spéciaux.
y a-t-il eu des travaux concernant les exploits dans ce domaine
Pas vraiment. JTAG nécessite un accès physique et, pour Intel, un mot de passe spécifique au numéro de série du CPU.
Je resterai avec l'architecture Intel/x86 pour ma réponse, mais elle peut probablement être appliquée à d'autres fournisseurs/conceptions d'anneaux.
Ring -3 est "l'ordinateur qui exécute votre ordinateur", le moteur de gestion de la carte mère. La prochaine étape logique serait donc de rechercher une puce sur la carte mère qui pourrait exercer un contrôle total sur le système. La seule chose à laquelle je peux penser serait le [~ # ~] bélier [~ # ~] .
Maintenant, vous pourriez dire que RAM ne contrôle vraiment rien car c'est juste un tampon stupide, et le RAM est directement contrôlé par le moteur de gestion. Cependant, au moins - ne entreprise a commercialisé son RAM avec microcontrôleur (s) intégré (s). Il est censé être utilisé pour décharger les tâches répétitives en mémoire vers le contrôleur intégré dans la puce mémoire) .
Si vous pouvez contrôler la RAM réelle, vous pouvez contrôler tout ce qui se trouve dans le système, sauf le moteur de gestion s'il a sa propre mémoire. Les microcontrôleurs de ces appareils doivent avoir un accès complet au RAM pour faire leur travail.
Quant au travail réalisé sur les exploits: ces appareils sont loin d'être standardisés, donc l'utilisation de leurs particularités se fera à partir de pilotes noyau ou usermode. Vous avez donc besoin d'exploits spécifiques au fournisseur, car ils auront des pilotes spécifiques au fournisseur, pour accéder au microcontrôleur sur les puces RAM.
Je ne suis pas d'accord pour dire que les anneaux négatifs sont de faux anneaux. Ils sont bien réels. Prenons l'exemple de -1: en avoir le contrôle garantit presque le contrôle de tout ce qui commence par 0 (à quelques exceptions près). Rien d'irréel à ce sujet.
Voici comment je le vois aujourd'hui:
Anneau 3 - niveau utilisateur
Anneau 2 - niveau du pilote (pilotes réels)
Ring 1 - niveau d'émulation du pilote (comme pour la superposition de logiciels audio et IRQ depuis Vista)
Ring 0 - niveau du noyau
Ring -1 - VM level (hyperviseurs)
Ring -2 - Systèmes de gestion HW (comme les iDRAC)
Bague -3 - IME & HW similaire
Un anneau -4 pourrait exister si l'on pouvait trouver un moyen de manipuler des signaux électriques pour atteindre un objectif spécifique, comme affecter un composant matériel de telle manière qu'une partie de ses fonctions de base soient désactivées, bloquées ou modifiées. C'est en théorie tout à fait possible, mais cela n'a jamais été démontré en public à ma connaissance. Cela nécessiterait également du matériel spécialement conçu.