Kërkuesit nga Instituti Politeknik i Worcester (Shtetet e Bashkuara) prezantuan një tip të ri sulmi të quajtur Mayhem, që përdor metodën e deformimit të bitëve në memorien dinamike Rowhammer për të ndryshuar vlerat e variablave në stek, të përdorura në program si flamuj për të marrë vendime mbi suksesin e autentifikimit dhe kalimin e kontrolleve të sigurisë. Shembuj praktikë të përdorimit të sulmit janë demonstruar për të anashkaluar autentifikimin në SUDO, OpenSSH dhe MySQL, si dhe për të ndryshuar rezultatet e kontrolleve të sigurisë në bibliotekën OpenSSL.
Sulmi mund të aplikohet në aplikacione ku gjatë kontrolleve përdoret krahasimi i ndryshimit të vlerave nga zero. Shembuj i kodit të cenueshëm: int auth = 0; ⊠// kodi i kontrollit, që ndryshon vlerën auth në rast suksesit të autentifikimit if(auth != 0) return AUTH_SUCCESS; else return AUTH_FAILURE;
Në kontekstin e këtij shembulli, për një sulm të suksesshëm mjafton të arrihet deformimi i çdo biti në memorie që i përket një variabli 32-bitësh auth në stek. Me deformimin e çdo biti në variablin, vlera nuk do të jetë më zero dhe operatori kushtor do të përcaktojë kalimin me sukses të autentifikimit. Të tilla modele kontrolli janë mjaft të zakonshme në aplikacione dhe hasen, për shembull, në SUDO, OpenSSH, MySQL dhe OpenSSL.

Sulmi mund të aplikohet edhe në krahasime si «if(auth == 1)», por në këtë rast, mbajtja e tij bëhet më e komplikuar, sepse duhet të deformohet jo çdo bit nga 32, por biti përfundimtar. Metoda gjithashtu mund të përdoret për të ndikuar në vlerat e variablave në regjistrat e procesorit, pasi përmbajtja e regjistrave mund të mund të shkarkohet në stek për një kohë të shkurtër gjatë ndryshimit të kontekstit, thirrjes së funksioneve ose aktivizimit të një trajtuesi sinjali. Në intervalin e kohës kur vlerat e regjistrave janë në memorie, deformime të tilla mund të bëhen dhe vlera e ndryshuar do të rikthehet në regjistër.

Për të deformuar bitet, përdoret një nga modifikimet e sulmit të klasës RowHammer. Duke qenë se memoria DRAM përbën një grumbull dy dimensional të qelizave, secila prej të cilave përbëhet nga një kondensator dhe një transistor, kryerja e leximeve të vazhdueshme në të njëjtën zonë të memories çon në ndryshime tensioni dhe anomali, të cilat shkaktojnë humbje të vogla të ngarkesës në qelizat fqinje. Nëse intensiteti i leximit është i lartë, qeliza fqinje mund të humbasë një sasi të konsiderueshme ngarkese dhe cikli tjetër i rigjenerimit nuk do të jetë në gjendje ta rikthejë atë në gjendjen e saj fillestare, çka do të rezultojë në ndryshimin e vlerës së të dhënave të ruajtura në atë qelizë. Për të mbrojtur nga RowHammer, prodhuesit e çipave kanë shtuar mekanizmin TRR (Target Row Refresh), i cili bllokon deformimin e qelizave në raste të veçanta, por nuk mbron nga të gjitha variantet e mundshme të sulmit.
Për të mbrojtur nga sulmi Mayhem, rekomandohet që në krahasime të mos përdoret vlerësimi i dallimeve nga zero ose përputhja me njësi, por verifikimi i përputhjeve duke përdorur një vlerë fillestare të rastësishme me oktete jo zero. Në këtë rast, për të vendosur vlerën e duhur të variablit, është e nevojshme të deformoni saktësisht një numër të madh bitësh, gjë që është e paarritshme, ndryshe nga deformimi i një biti. Një shembull i kodit të paprekur nga sulmi: int auth = 0xbe406d1a; ⊠// kodi i verifikimit që caktuar vlerën auth në 0x23ab8701 në rast të suksesit në autentifikim if(auth == 0x23ab8701) return AUTH_SUCCESS; else return AUTH_FAILURE;
Metoda e caktuar e mbrojtjes tashmë është aplikuar nga zhvilluesit e sudo dhe është përfshirë në versionin 1.9.15 si një rregullim për vulnerabilitetin CVE-2023-42465. Prototipi i kodit për kryerjen e sulmit planifikon të publikohet pas përmirësimeve në projektet kryesore të prekura.
Burimi: opennet.ru
