Sécurité
IBRS : Indirect Branch Restricted Speculation. « Spéculation restreinte sur les branchements indirects », par analogie avec un serveur de restaurant qui cesse d'anticiper la commande d'un client important à partir des habitudes des clients précédents. Mécanisme des processeurs Intel (repris aussi par AMD) contre Spectre variante 2 : les prédictions apprises en mode moins privilégié n'orientent plus l'exécution spéculative du noyau.
Principe : Activé par le bit 0 du registre de contrôle IA32_SPEC_CTRL, IBRS empêche que les cibles de branchements indirects entraînées par du code moins privilégié (processus utilisateur, machine invitée) soient utilisées par la spéculation en mode plus privilégié. Un attaquant ne peut plus guider le noyau vers un gadget de son choix.
Coût du mode historique : En version d'origine, il faut écrire le registre à chaque entrée et sortie du noyau, ce qui coûte cher en appels système. Le nom promet une restriction ; la facture, elle, arrive sans restriction aucune, en cycles processeur.
eIBRS : Les processeurs plus récents proposent une version « enhanced » : on active le bit une fois au démarrage et la protection reste en place. Les travaux sur l'injection d'historique de branchements (2022) ont montré qu'elle ne suffit pas seule et doit être complétée.
Face à retpoline : Retpoline remplace les sauts indirects par une construction qui piège la spéculation, souvent moins coûteuse. Sur certaines générations (Skylake et assimilées), Retbleed a montré ses limites et le noyau Linux y revient à IBRS : la contre-mesure qu'on avait abandonnée pour cause de lenteur redevient, faute de mieux, la bonne.
Ce qui arrive si on s'en passe
Sans IBRS ni mécanisme équivalent (retpoline, eIBRS), le prédicteur de branchements reste partagé entre niveaux de privilège. Un processus utilisateur peut alors entraîner le tampon des cibles de branchement ; une machine virtuelle invitée peut faire de même face à l'hyperviseur. Le noyau exécute ensuite de manière spéculative, lors d'un branchement indirect, un fragment de code choisi par l'attaquant. Ce fragment lit des données du noyau et laisse une empreinte dans le cache, que l'attaquant relève en chronométrant ses propres accès mémoire. Il devient ainsi possible de lire, lentement et octet par octet, de la mémoire normalement inaccessible : secrets du noyau, mais aussi adresses internes, ce qui affaiblit KASLR, le tirage au sort des adresses du noyau à chaque démarrage. Comme l'exécution spéculative est annulée, la fuite ne provoque ni faute, ni plantage, ni entrée de journal. Pour la détecter, il ne reste au mieux que les compteurs de performance matériels.
Explication de la marmotte
Pour aller plus vite, un ordinateur devine souvent la suite de ce qu'il doit faire, un peu comme un serveur qui prépare un café avant même la commande parce que les derniers clients en ont tous pris un. Le souci : un programme malveillant peut l'habituer exprès à de mauvaises suppositions, puis profiter de ces devinettes quand la partie la plus protégée de l'ordinateur prend le relais. Elle laisse alors échapper des secrets, sans le vouloir. Cette protection oblige l'ordinateur à oublier les habitudes apprises auprès des programmes ordinaires quand il travaille pour la partie sensible. C'est plus sûr, mais un peu plus lent.
Où ce terme est utilisé
- Rowhammer, Spectre et Meltdown, mécanismes et contre-mesures (3 occurrences)
