Mayhem — une attaque qui altĂšre les bits en mĂ©moire pour contourner l'authentification dans sudo et OpenSSH

Des chercheurs de l'Institut polytechnique de Worcester (États-Unis) ont prĂ©sentĂ© un nouveau type d'attaque Mayhem utilisant une mĂ©thode d'altĂ©ration des bits dans la mĂ©moire dynamique Rowhammer pour modifier les valeurs des variables sur la pile, qui sont utilisĂ©es dans les programmes comme indicateurs de succĂšs d'authentification et de conformitĂ© aux vĂ©rifications de sĂ©curitĂ©. Des exemples pratiques de cette attaque ont Ă©tĂ© dĂ©montrĂ©s pour contourner l'authentification dans SUDO, OpenSSH et MySQL, ainsi que pour modifier les rĂ©sultats des vĂ©rifications de sĂ©curitĂ© dans la bibliothĂšque OpenSSL.

L'attaque peut ĂȘtre appliquĂ©e Ă  des applications oĂč des comparaisons d'Ă©carts de valeurs par rapport Ă  zĂ©ro sont utilisĂ©es lors des vĂ©rifications. Exemple de code vulnĂ©rable : int auth = 0; 
 // code de vĂ©rification qui modifie la valeur de auth en cas de succĂšs d'authentification if(auth != 0) return AUTH_SUCCESS; else return AUTH_FAILURE;

Dans le contexte de cet exemple, une attaque réussie nécessite seulement de provoquer une altération de n'importe quel bit en mémoire correspondant à la variable 32 bits auth sur la pile. Lorsqu'un bit de la variable est altéré, la valeur ne sera plus égale à zéro, et l'instruction conditionnelle déterminera un succÚs d'authentification. De tels modÚles de vérification sont suffisamment répandus dans les applications et se retrouvent, par exemple, dans SUDO, OpenSSH, MySQL et OpenSSL.

Mayhem - une attaque qui déforme les bits en mémoire pour contourner l'authentification dans sudo et OpenSSH

L'attaque peut Ă©galement ĂȘtre appliquĂ©e Ă  des comparaisons du type « if(auth == 1) », mais dans ce cas, sa rĂ©alisation est compliquĂ©e, car il faut altĂ©rer non pas n'importe quel bit sur 32, mais le dernier bit. La mĂ©thode peut aussi ĂȘtre utilisĂ©e pour influer sur les valeurs des variables dans les registres processeur, car le contenu des registres peut ĂȘtre temporairement transfĂ©rĂ© sur la pile lors d'un changement de contexte, d'un appel de fonction ou d'une activation d'un gestionnaire de signal. Pendant la pĂ©riode oĂč les valeurs des registres se trouvent en mĂ©moire, des altĂ©rations peuvent y ĂȘtre faites et une valeur modifiĂ©e peut ĂȘtre restaurĂ©e dans le registre.

Mayhem - une attaque qui déforme les bits en mémoire pour contourner l'authentification dans sudo et OpenSSH

Une des modifications de l'attaque de type RowHammer est utilisĂ©e pour la dĂ©formation des bits. Étant donnĂ© que la mĂ©moire DRAM est un tableau bidimensionnel de cellules, chacune composĂ©e d'un condensateur et d'un transistor, le fait de lire en continu la mĂȘme zone de mĂ©moire entraĂźne des fluctuations de tension et des anomalies, provoquant une lĂ©gĂšre perte de charge des cellules adjacentes. Si l'intensitĂ© de la lecture est Ă©levĂ©e, la cellule voisine peut perdre une quantitĂ© suffisante de charge et le cycle de rĂ©gĂ©nĂ©ration suivant ne parviendra pas Ă  restaurer son Ă©tat initial, ce qui entraĂźnera un changement 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 dĂ©formation des cellules dans certains cas, mais ne protĂšge pas contre toutes les variantes possibles de l'attaque.

Pour se protéger contre l'attaque Mayhem, il est recommandé d'utiliser dans les comparaisons non l'évaluation des écarts par rapport à zéro ou des correspondances avec un, mais de vérifier les correspondances en utilisant une valeur de graine 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 significatif de bits, ce qui est irréaliste, contrairement à la déformation d'un seul bit. Exemple de code protégé contre l'attaque : int auth = 0xbe406d1a; 
 // code de vérification qui définit auth à 0x23ab8701 en cas d'authentification réussie if(auth == 0x23ab8701) return AUTH_SUCCESS; else return AUTH_FAILURE;

La mĂ©thode de protection mentionnĂ©e a dĂ©jĂ  Ă©tĂ© appliquĂ©e par les dĂ©veloppeurs de sudo et a Ă©tĂ© intĂ©grĂ©e dans la version 1.9.15 en tant que correctif pour la vulnĂ©rabilitĂ© CVE-2023-42465. Un prototype de code pour rĂ©aliser l'attaque est prĂ©vu d'ĂȘtre publiĂ© aprĂšs que des corrections aient Ă©tĂ© apportĂ©es aux principaux projets vulnĂ©rables.

Source : opennet.ru

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster