Vulnérabilités dans eBPF qui permettent de contourner la protection contre les attaques Spectre 4

Deux vulnérabilités ont été identifiées dans le noyau Linux qui permettent d'utiliser le sous-système eBPF pour contourner la protection contre l'attaque Spectre v4 (SSB, Speculative Store Bypass). À l'aide d'un programme BPF non privilégié, un attaquant peut créer des conditions pour l'exécution spéculative de certaines opérations et déterminer le contenu de zones arbitraires de la mémoire du noyau. Les responsables des sous-systèmes eBPF du noyau ont eu accès à un prototype d'exploit qui démontre la capacité de mener des attaques dans la pratique. Les problèmes ont été corrigés sous forme de correctifs (1, 2), qui seront inclus dans la prochaine mise à jour du noyau Linux. Les mises à jour dans les kits de distribution n'ont pas encore été créées (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

La méthode d'attaque Spectre 4 est basée sur la restauration des données stockées dans le cache du processeur après avoir rejeté le résultat de l'exécution spéculative des opérations lors du traitement des opérations d'écriture et de lecture alternées utilisant l'adressage indirect. Lorsqu'une opération de lecture suit une opération d'écriture (par exemple, mov [rbx + rcx], 0x0 ; mov rax, [rdx + rsi]), le décalage de l'adresse de lecture peut déjà être connu en raison d'opérations similaires effectuées (les opérations de lecture sont effectué beaucoup plus fréquemment et les lectures peuvent être effectuées à partir du cache) et le processeur peut effectuer de manière spéculative des lectures avant les écritures sans attendre que le décalage d'indirection de l'écriture soit calculé.

Si, après avoir calculé le décalage, une intersection de zones mémoire pour l'écriture et la lecture est détectée, le processeur rejettera simplement le résultat de lecture déjà obtenu de manière spéculative et répétera cette opération. Cette fonctionnalité permet à une instruction de lecture d'accéder à une ancienne valeur à une certaine adresse alors que l'opération de stockage n'est pas encore terminée. Après avoir rejeté une opération spéculative infructueuse, des traces de son exécution restent dans le cache, après quoi l'une des méthodes de détermination du contenu du cache peut être utilisée pour le récupérer sur la base d'une analyse des changements de temps d'accès aux données mises en cache et non mises en cache.

La première vulnérabilité (CVE-2021-35477) est causée par une faille dans le mécanisme de vérification du programme BPF. Pour se protéger contre une attaque Spectre 4, le vérificateur ajoute une instruction supplémentaire après des stockages potentiellement problématiques dans la mémoire qui stocke une valeur nulle pour déplacer les traces de l'opération précédente. L'opération d'écriture nulle devait être très rapide et bloquer l'exécution spéculative car elle ne dépend que d'un pointeur vers le cadre de pile BPF. Mais en fait, il s'est avéré possible de créer des conditions dans lesquelles une instruction conduisant à une exécution spéculative parvient à être exécutée avant l'opération de stockage préemptif.

La deuxième vulnérabilité (CVE-2021-3455) est due au fait que lorsque le vérificateur BPF identifie des opérations de sauvegarde de mémoire potentiellement dangereuses, il ne prend pas en compte les zones non initialisées de la pile BPF dont la première opération d'écriture n'est pas protégée. Cette fonctionnalité conduit à la possibilité d'effectuer une opération de lecture spéculative, dépendante d'une zone mémoire non initialisée, avant d'exécuter l'instruction de stockage. La nouvelle mémoire pour la pile BPF est allouée sans vérifier le contenu déjà dans la mémoire allouée, et il existe un moyen avant l'exécution du programme BPF de manipuler le contenu de la région mémoire qui sera ensuite allouée à la pile BPF.

Source: opennet.ru

Ajouter un commentaire