Sécurité matérielle : évolutions récentes
À propos des fonctions matérielles qui soutiennent l'intégrité du flot de contrôle, quelle association est correcte entre ce qui protège les retours de fonction et ce qui protège les appels et sauts indirects, comme ceux qui passent par des pointeurs de fonction ?
- ALes retours sont protégés par les piles fantômes ou l'authentification de pointeurs ; les appels et sauts indirects par des mécanismes qui exigent une instruction marqueur désignée au début de la cible
- BLes retours sont protégés par des mécanismes qui exigent une instruction marqueur désignée au début de la cible ; les appels et sauts indirects par les piles fantômes
- CLes retours sont protégés par KPTI (kernel page-table isolation) ; les appels et sauts indirects par la traduction d'adresses de l'IOMMU
Afficher la réponse et l'explication
Réponse : A. Les retours sont protégés par les piles fantômes ou l'authentification de pointeurs ; les appels et sauts indirects par des mécanismes qui exigent une instruction marqueur désignée au début de la cible
Une pile fantôme compare l'adresse de retour à sa copie, et l'authentification de pointeurs vérifie le code d'authentification ajouté à l'adresse de retour ; toutes deux protègent donc les retours de fonction. Pour les appels et sauts indirects, Intel IBT et Branch Target Identification d'Arm exigent une instruction marqueur au début de la cible (ENDBR64 sur x86) et transforment en exception les branchements vers le milieu d'une fonction, par exemple. Un emplacement portant un marqueur reste toutefois accessible depuis n'importe quel branchement indirect ; on les combine donc parfois avec des contrôles plus fins du compilateur, qui limitent les cibles aux fonctions d'un type compatible. KPTI est une contre-mesure à Meltdown et l'IOMMU restreint le DMA des périphériques ; aucun des deux ne protège le flot de contrôle.
Continuer : 9 autres questions sur Sécurité matérielle : évolutions récentes