У працэсарах AMD на базе мікраархітэктур Zen+ і Zen 2 выяўлена ўразлівасць класа Meltdown

Група даследнікаў з Тэхнічнага ўніверсітэта Дрэздэна выявіла ўразлівасць (CVE-2020-12965) у працэсарах AMD на базе мікраархітэктур Zen+ і Zen 2, якая дазваляе здзейсніць напад класа Meltdown. Першапачаткова меркавалася, што працэсары AMD Zen+ і Zen 2 не схільныя ўразлівасці Meltdown, але даследнікамі была выяўлена асаблівасць, якая прыводзіць да спекулятыўнага звароту да абароненых абласцей памяці пры выкарыстанні некананічных віртуальных адрасоў.

Архітэктура AMD64 мае на ўвазе выкарыстанне толькі першых 48 біт віртуальнага адраса і ігнараванне пакінутых 16 біт. Пры гэтым вызначана, што біты з 48 па 63 заўсёды павінны капіяваць значэнне 47 біта (пашырэнне знакавага біта). У выпадку парушэння дадзенай умовы і спробы звароту па адрасе з адвольнымі значэннямі верхніх бітаў працэсар генеруе выключэнне. Паўтаральнае запаўненне верхніх бітаў прыводзіць да падзелу даступнай адраснай прасторы на два блокі - ніжні (ад 0 да 00007FFFFFFFFFFF), у якім верхнія біты абнулены, і верхні (ад FFFF800000000000 да FFFFFFFFFFFFFFFF), у якім усе верхнія біты ў топ верхніх бітаў .

Адрасы якія падпадаюць пад паказаныя блокі завуцца кананічнымі, а некарэктныя адрасы з адвольным змесцівам верхніх бітаў - некананічнымі. Ніжні дыяпазон кананічных адрасоў, як правіла, вылучаецца пад дадзеныя працэсу, а верхні выкарыстоўваецца для дадзеных ядра (доступ да паказаных адрасоў з прасторы карыстача блакуецца на ўзроўні падзелу прывілеяў).

Класічная ўразлівасць Meltdown засноўваецца на тым, што падчас спекулятыўнага выканання інструкцый працэсар можа выканаць зварот да зачыненай вобласці дадзеных, пасля чаго адкінуць вынік бо выстаўленыя прывілеі забараняюць такі зварот з працэсу карыстача. У праграме спекулятыўна выкананы блок адлучаецца ад асноўнага кода ўмоўным пераходам, які ў рэальных умовах заўсёды спрацоўвае, але з-за таго, што ва ўмоўным аператары выкарыстоўваецца якое вылічаецца значэнне, якое працэсар не ведае падчас папераджальнага выканання кода, ажыццяўляецца спекулятыўнае выкананне ўсіх варыянтаў галінавання.

Бо для спекулятыўна выкананых аперацый выкарыстоўваецца той жа кэш, што і для звычайна выкананых інструкцый, маецца магчымасць падчас спекулятыўнага выканання выставіць у кэшы маркеры, якія адлюстроўваюць змесціва асобных бітаў у зачыненай вобласці памяці, і затым у звычайна выкананым кодзе вызначыць іх значэнне праз аналіз часу звароты да пракэшаваных і не пракэшаваных дадзеных.

Асаблівасць новай уразлівасці, якой схільныя працэсары AMD Zen+ і Zen 2, у тым, што CPU дапушчаюць спекулятыўнае выкананне аперацый чытання і запісы, якія звяртаюцца да памяці з выкарыстаннем недапушчальных некананічных адрасоў, проста ігнаруючы верхнія 16 біт. Такім чынам, падчас спекулятыўным выкананні кода працэсар заўсёды выкарыстае толькі ніжнія 48 біт, а праверка дапушчальнасці адрасу вырабляецца асобна. Калі пры трансляцыі некананічнага віртуальнага адраса ў фізічны адрас у буферы асацыятыўнай трансляцыі (TLB) будзе выяўлена супадзенне кананічнай часткі адрасу, то спекулятыўная аперацыя load верне значэнне без уліку змесціва верхніх 16 біт, што дазваляе абыйсці падзел памяці паміж струменямі. У наступстве аперацыя будзе прызнана недапушчальнай і адкінутая, але зварот да памяці будзе выканана і дадзеныя асядуць у кэшы.

Падчас эксперыменту пры выкарыстанні тэхнікі вызначэння змесціва кэша FLUSH+RELOAD даследнікам атрымалася арганізаваць канал для ўтоенай перадачы дадзеных са хуткасцю 125 байт у секунду. Акрамя чыпаў AMD праблема таксама закранае і ўсе працэсары Intel, схільныя класічнай уразлівасці Meltdown. Для абароны ад новага віду атакі могуць прымяняцца тыя ж метады, якія дапамагаюць блакаваць атакі Meltdown, такія як выкарыстанне інструкцый LFENCE. Напрыклад, калі працэсар Intel уключае апаратную абарону ад Meltdown або ў сістэме ўключаная праграмная абарона, то падобныя канфігурацыі не схільныя новаму варыянту нападу.

Пры гэтым даследнікі адзначаюць, што ў параўнанні з працэсарамі Intel архітэктура працэсараў AMD абмяжоўвае магчымасць правядзення рэальных нападаў, але не выключае ўжыванне новага метаду ў камбінацыі з іншымі мікраархітэктурнымі нападамі для падвышэння іх эфектыўнасці. У прыватнасці, прапанаваны варыянт нападу не дазваляе вызначыць змесціва абласцей памяці ядра і іншых працэсаў, а абмяжоўваецца магчымасцю атрымаць доступ да іншых струменяў той жа праграмы, выкананым у адной прасторы віртуальнай памяці.

Бо праграма з без уразлівасці мае магчымасць атрымаць доступ да сваіх струменяў, то з практычнага боку метад уяўляе цікавасць для абыходу sandbox-ізаляцыі і арганізацыі ўмяшання ў працу іншых струменяў у праграмах, якія дапушчаюць выкананне іншага кода, такіх як web-браўзэры і JIT-рухавічкі. . Даследнікі вывучылі схільнасць нападу JavaScript-рухавічка SpiderMonkey і ядры Linux, але не знайшлі ўразлівых паслядоўнасцяў кода, пры дапамозе якіх можна было б здзейсніць атаку. Акрамя нападу на прыкладанні метад таксама можа ўжывацца для фарсіравання недапушчальных струменяў дадзеных паміж мікраархітэктурнымі элементамі працэсара падчас эксплуатацый іншых мікраархітэктурных уразлівасцяў.

Крыніца: opennet.ru

Дадаць каментар