Mayhem – memóriabites korrupciós támadás a sudo és az OpenSSH hitelesítés megkerülésére

A Worcester Polytechnic Institute (USA) kutatói új típusú Mayhem támadást vezettek be, amely a Rowhammer dinamikus véletlen hozzáférésű memória bittorzítási technikáját használja a programban zászlóként használt veremváltozók értékeinek megváltoztatására annak eldöntésére, hogy a hitelesítés és a biztonsági ellenőrzések megfelelnek-e. átment. A támadás gyakorlati példái a SUDO, OpenSSH és MySQL hitelesítés megkerülésére, valamint az OpenSSL-könyvtárban a biztonsággal kapcsolatos ellenőrzések eredményének megváltoztatására.

A támadás olyan alkalmazásokra alkalmazható, amelyek ellenőrzéseket használnak a nullától eltérő értékek összehasonlítására. Példa a sebezhető kódra: int auth = 0; ... // ellenőrző kód, amely megváltoztatja az auth értéket sikeres hitelesítés esetén if(auth != 0) return AUTH_SUCCESS; egyébként AUTH_FAILURE;

Ebben a példában a sikeres támadáshoz elegendő a verem 32 bites hitelesítési változójához társított memória bármely bitjének megsértése. Ha a változó bármely bitje megsérül, az érték többé nem lesz nulla, és a feltételes operátor határozza meg a hitelesítés sikeres befejezését. Az ilyen érvényesítési minták meglehetősen gyakoriak az alkalmazásokban, és megtalálhatók például a SUDO-ban, az OpenSSH-ban, a MySQL-ben és az OpenSSL-ben.

Mayhem – memóriabit-megzavaró támadás a sudo és az OpenSSH hitelesítés megkerülésére

A támadás alkalmazható az „if(auth == 1)” formájú összehasonlításokra is, de ebben az esetben a megvalósítás bonyolultabbá válik, mivel nem a 32-es, hanem az utolsó bitet kell torzítani. A módszer felhasználható a processzorregiszterekben lévő változók értékeinek befolyásolására is, mivel a regiszterek tartalma átmenetileg kihúzható a verembe, amikor egy kontextuskapcsoló, függvényhívás vagy jelkezelő aktiválódik. Abban az időtartamban, amíg a regiszterértékek a memóriában vannak, ebbe a memóriába torzítások vihetők be, és a megváltozott érték visszaáll a regiszterbe.

Mayhem – memóriabit-megzavaró támadás a sudo és az OpenSSH hitelesítés megkerülésére

A bitek torzítására a RowHammer osztályú támadás egyik módosítását használják. Mivel a DRAM memória cellák kétdimenziós tömbje, amelyek mindegyike egy kondenzátorból és egy tranzisztorból áll, ugyanazon memóriaterület folyamatos leolvasása feszültségingadozásokat és anomáliákat eredményez, amelyek kismértékű töltésveszteséget okoznak a szomszédos cellákban. Ha az olvasási intenzitás nagy, akkor a szomszédos cella kellően nagy mennyiségű töltést veszíthet, és a következő regenerációs ciklusnak nem lesz ideje visszaállítani eredeti állapotát, ami a cellában tárolt adatok értékének megváltozásához vezet. . A RowHammer elleni védelem érdekében a chipgyártók egy TRR (Target Row Refresh) mechanizmust adtak hozzá, amely speciális esetekben blokkolja a sejtsérülést, de nem véd minden lehetséges támadási variáció ellen.

A Mayhem támadás elleni védelem érdekében ajánlatos az összehasonlítások során nem a nullától való eltérések értékelését vagy az eggyel való egybeesés értékelését használni, hanem egy véletlenszerű kezdőértéket használva, nullától eltérő oktettekkel. Ebben az esetben a változó kívánt értékének beállításához jelentős számú bitet kell pontosan torzítani, ami irreális, ellentétben egy bit torzításával. Példa nem támadható kódra: int auth = 0xbe406d1a; ... // ellenőrző kód, amely az auth értéket 0x23ab8701-re állítja sikeres hitelesítés esetén if(auth == 0x23ab8701) return AUTH_SUCCESS; egyébként AUTH_FAILURE;

A megadott védelmi módszert a sudo fejlesztői már használták, és a CVE-1.9.15-2023 sérülékenység javításaként szerepelt az 42465-ös kiadásban. Azt tervezik, hogy közzéteszik a támadás végrehajtásához szükséges kód prototípusát, miután a főbb sebezhető projekteken javításokat végeztek.

Forrás: opennet.ru

Hozzászólás