Mayhem - memory bit corruption attack para i-bypass ang sudo at OpenSSH authentication

Ang mga mananaliksik mula sa Worcester Polytechnic Institute (USA) ay nagpakilala ng isang bagong uri ng Mayhem attack na gumagamit ng Rowhammer dynamic random access memory bit distortion technique upang baguhin ang mga halaga ng stack variable na ginagamit bilang mga flag sa programa upang magpasya kung ang pagpapatunay at mga pagsusuri sa seguridad ay may pumasa. Ang mga praktikal na halimbawa ng pag-atake ay ipinapakita upang i-bypass ang pagpapatotoo sa SUDO, OpenSSH at MySQL, gayundin upang baguhin ang resulta ng mga pagsusuring nauugnay sa seguridad sa OpenSSL library.

Ang pag-atake ay maaaring ilapat sa mga application na gumagamit ng mga tseke upang ihambing ang mga halaga na naiiba sa zero. Halimbawa ng vulnerable code: int auth = 0; ... // verification code na nagbabago sa auth value kung sakaling matagumpay ang authentication if(auth != 0) return AUTH_SUCCESS; kung hindi, ibalik ang AUTH_FAILURE;

Sa konteksto ng halimbawang ito, para sa isang matagumpay na pag-atake, sapat na upang sirain ang anumang bit sa memorya na nauugnay sa 32-bit na auth variable sa stack. Kung nasira ang anumang bit sa variable, hindi na magiging zero ang value at tutukuyin ng conditional operator ang matagumpay na pagkumpleto ng authentication. Ang ganitong mga pattern ng pagpapatunay ay medyo karaniwan sa mga application at matatagpuan, halimbawa, sa SUDO, OpenSSH, MySQL at OpenSSL.

Mayhem - memory bit mangling attack para i-bypass ang sudo at OpenSSH authentication

Ang pag-atake ay maaari ding ilapat sa mga paghahambing ng form na "if(auth == 1)", ngunit sa kasong ito ang pagpapatupad nito ay nagiging mas kumplikado, dahil ito ay kinakailangan upang baluktot hindi anumang bit ng 32, ngunit ang huling bit. Ang pamamaraan ay maaari ding gamitin upang maimpluwensyahan ang mga halaga ng mga variable sa mga rehistro ng processor, dahil ang mga nilalaman ng mga rehistro ay maaaring pansamantalang i-flush sa stack kapag ang isang context switch, function na tawag, o signal handler ay sunog. Sa tagal ng panahon habang ang mga halaga ng rehistro ay nasa memorya, ang mga pagbaluktot ay maaaring ipasok sa memorya na ito at ang binagong halaga ay maibabalik sa rehistro.

Mayhem - memory bit mangling attack para i-bypass ang sudo at OpenSSH authentication

Upang i-distort ang mga bits, ginagamit ang isa sa mga pagbabago ng RowHammer class attack. Dahil ang DRAM memory ay isang dalawang-dimensional na hanay ng mga cell, bawat isa ay binubuo ng isang capacitor at isang transistor, ang pagsasagawa ng tuluy-tuloy na pagbabasa ng parehong rehiyon ng memorya ay nagreresulta sa pagbabagu-bago ng boltahe at mga anomalya na nagdudulot ng maliit na pagkawala ng singil sa mga kalapit na cell. Kung ang intensity ng pagbabasa ay mataas, kung gayon ang kalapit na cell ay maaaring mawalan ng isang sapat na malaking halaga ng singil at ang susunod na ikot ng pagbabagong-buhay ay hindi magkakaroon ng oras upang maibalik ang orihinal na estado nito, na hahantong sa pagbabago sa halaga ng data na nakaimbak sa cell . Upang maprotektahan laban sa RowHammer, nagdagdag ang mga tagagawa ng chip ng TRR (Target Row Refresh) na mekanismo, na humaharang sa cell corruption sa mga espesyal na kaso, ngunit hindi nagpoprotekta laban sa lahat ng posibleng variation ng pag-atake.

Upang maprotektahan laban sa pag-atake ng Mayhem, inirerekumenda na gamitin sa paghahambing hindi isang pagsusuri ng mga pagkakaiba mula sa zero o isang pagkakataon sa isa, ngunit isang match check gamit ang isang random na halaga ng binhi na may mga non-zero octet. Sa kasong ito, upang itakda ang nais na halaga ng variable, kinakailangan upang tumpak na i-distort ang isang makabuluhang bilang ng mga bit, na hindi makatotohanan, sa kaibahan sa pagbaluktot ng isang bit. Halimbawa ng hindi naaatakeng code: int auth = 0xbe406d1a; ... // verification code na nagtatakda ng auth value sa 0x23ab8701 kung sakaling matagumpay ang authentication if(auth == 0x23ab8701) return AUTH_SUCCESS; kung hindi, ibalik ang AUTH_FAILURE;

Ang tinukoy na paraan ng proteksyon ay ginamit na ng mga developer ng sudo at isinama sa release 1.9.15 bilang isang pag-aayos para sa kahinaan ng CVE-2023-42465. Plano nilang mag-publish ng isang prototype ng code para sa pagsasagawa ng pag-atake pagkatapos na maisagawa ang mga pag-aayos sa mga pangunahing mahihinang proyekto.

Pinagmulan: opennet.ru

Magdagdag ng komento