Mayhem - attaque de corruption de bits de mémoire pour contourner l'authentification sudo et OpenSSH

Des chercheurs du Worcester Polytechnic Institute (États-Unis) ont introduit un nouveau type d'attaque Mayhem qui utilise la technique de distorsion dynamique des bits de la mémoire vive Rowhammer pour modifier les valeurs des variables de pile utilisées comme indicateurs dans le programme afin de décider si l'authentification et les contrôles de sécurité ont passé. Des exemples pratiques de l'attaque sont démontrés pour contourner l'authentification dans SUDO, OpenSSH et MySQL, ainsi que pour modifier le résultat des contrôles liés à la sécurité dans la bibliothèque OpenSSL.

L'attaque peut être appliquée aux applications qui utilisent des contrôles pour comparer des valeurs différentes de zéro. Exemple de code vulnérable : int auth = 0; ... // code de vérification qui modifie la valeur d'authentification en cas d'authentification réussie if(auth != 0) return AUTH_SUCCESS; sinon, retourne AUTH_FAILURE ;

Dans le contexte de cet exemple, pour une attaque réussie, il suffit de corrompre n'importe quel bit de la mémoire associé à la variable d'authentification 32 bits sur la pile. Si un bit de la variable est corrompu, la valeur ne sera plus nulle et l'opérateur conditionnel déterminera la réussite de l'authentification. De tels modèles de validation sont assez courants dans les applications et se retrouvent, par exemple, dans SUDO, OpenSSH, MySQL et OpenSSL.

Mayhem - attaque de destruction de bits de mémoire pour contourner l'authentification sudo et OpenSSH

L'attaque peut également être appliquée à des comparaisons de la forme « if(auth == 1) », mais dans ce cas sa mise en œuvre devient plus compliquée, puisqu'il faut déformer non pas n'importe quel bit de 32, mais le dernier bit. La méthode peut également être utilisée pour influencer les valeurs des variables dans les registres du processeur, car le contenu des registres peut être temporairement vidé sur la pile lorsqu'un changement de contexte, un appel de fonction ou un gestionnaire de signal se déclenche. Pendant la période pendant laquelle les valeurs du registre sont en mémoire, des distorsions peuvent être introduites dans cette mémoire et la valeur modifiée sera restaurée dans le registre.

Mayhem - attaque de destruction de bits de mémoire pour contourner l'authentification sudo et OpenSSH

Pour déformer les bits, une des modifications de l'attaque de classe RowHammer est utilisée. Étant donné que la mémoire DRAM est un réseau bidimensionnel de cellules, chacune composée d'un condensateur et d'un transistor, la réalisation de lectures continues de la même région de mémoire entraîne des fluctuations de tension et des anomalies qui provoquent une petite perte de charge dans les cellules voisines. Si l'intensité de lecture est élevée, alors la cellule voisine risque de perdre une quantité de charge suffisamment importante et le prochain cycle de régénération n'aura pas le temps de restaurer son état d'origine, ce qui entraînera une modification de la valeur des données stockées dans la cellule. . Pour se protéger contre RowHammer, les fabricants de puces ont ajouté un mécanisme TRR (Target Row Refresh), qui bloque la corruption des cellules dans des cas particuliers, mais ne protège pas contre toutes les variantes d'attaque possibles.

Pour se protéger contre l'attaque Mayhem, il est recommandé d'utiliser dans les comparaisons non pas une évaluation des différences par rapport à zéro ou une coïncidence avec un, mais une vérification de correspondance utilisant une valeur de départ aléatoire avec des octets non nuls. Dans ce cas, pour définir la valeur souhaitée de la variable, il est nécessaire de déformer avec précision un nombre important de bits, ce qui est irréaliste, contrairement à la distorsion d'un bit. Exemple de code non attaquable : int auth = 0xbe406d1a ; ... // code de vérification qui définit la valeur d'authentification sur 0x23ab8701 en cas d'authentification réussie if(auth == 0x23ab8701) return AUTH_SUCCESS ; sinon, retourne AUTH_FAILURE ;

La méthode de protection spécifiée a déjà été utilisée par les développeurs sudo et a été incluse dans la version 1.9.15 en tant que correctif pour la vulnérabilité CVE-2023-42465. Ils prévoient de publier un prototype du code permettant de mener l'attaque après que des correctifs auront été apportés aux principaux projets vulnérables.

Source: opennet.ru

Ajouter un commentaire