Retbleed – новая атака на механізм спекулятыўнага выканання CPU Intel і AMD

Група даследнікаў са Швейцарскай вышэйшай тэхнічнай школы Цюрыха выявіла новы варыянт нападу на механізм спекулятыўнага выканання ўскосных пераходаў у CPU, які дазваляе выняць інфармацыю з памяці ядра ці арганізаваць напад на хост-сістэму з віртуальных машын. Уразлівасці атрымалі кодавае імя Retbleed (CVE-2022-29900, CVE-2022-29901) і блізкія па сваёй сутнасці да нападаў Spectre-v2. Адрозненне зводзіцца да арганізацыі спекулятыўнага выканання адвольнага кода пры апрацоўцы інструкцыі "ret" (return), якая здабывае адрас для пераходу са стэка, замест ускоснага пераходу пры дапамозе інструкцыі "jmp" з загрузкай адрасу з памяці або рэгістра CPU.

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

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

Для абароны ад класічных нападаў класа Spectre, у якіх выкарыстоўваюцца інструкцыі ўмоўнага і ўскоснага пераходу, у большасці аперацыйных сістэм ужываецца тэхніка "retpoline", заснаваная на замене аперацый ўскоснага пераходу на інструкцыю "ret", для якой у працэсарах ужываецца асобны блок прадказання стану стэка, які не выкарыстоўвае блок прадказанні пераходаў. Пры ўкараненні retpoline у ​​2018 годзе лічылася, што падобныя на Spectre маніпуляцыі з адрасамі непрымяняльныя на практыцы для спекулятыўнага пераходу пры дапамозе інструкцыі "ret".

Даследнікі, якія распрацавалі метад нападу Retbleed, прадэманстравалі магчымасць стварэння мікраархітэктурных умоў для ініцыявання спекулятыўнага пераходу пры дапамозе інструкцыі «ret» і апублікавалі гатовы інструментар для выяўлення ў ядры Linux падыходных для эксплуатацыі ўразлівасці паслядоўнасцяў інструкцый (гаджэтаў), у якіх выяўляюцца падобныя ўмовы.

У ходзе даследавання падрыхтаваны працоўны эксплоіт, які дазваляе на сістэмах c CPU Intel з непрывілеяванага працэсу ў прасторы карыстача здабываць адвольныя дадзеныя з памяці ядра з хуткасцю 219 байт у секунду і дакладнасцю 98%. На працэсарах AMD эфектыўнасць працы эксплоіта значна вышэй – хуткасць уцечкі складае 3.9/28 КБ у секунду. У якасці практычнага прыкладу паказана, як пры дапамозе прапанаванага эксплоіту вызначыць змесціва файла /etc/shadow. На сістэмах з CPU Intel атака для вызначэння хэша пароля карыстальніка root была праведзена за 6 хвілін, а на сістэмах з CPU AMD – за XNUMX хвілін.

Магчымасць здзяйснення нападу пацверджана для 6-8 пакаленняў працэсараў Intel, якія выпускаліся да 3 квартала 2019 гады (уключаючы Skylake), і працэсараў AMD на базе мікраархітэктур Zen 1, Zen 1+ і Zen 2, якія выпускаліся да другога квартала 2021 гады. У навейшых мадэлях працэсараў, такіх як AMD Zen3 і Intel Alder Lake, а таксама ў працэсарах ARM, праблема блакуецца наяўнымі механізмамі абароны. Напрыклад, ужыванне інструкцый IBRS (Indirect Branch Restricted Speculation) дапамагае абараніцца ад нападу.

Для ядра Linux і гепервізара Xen падрыхтаваны набор змен, на старых CPU блакавальных праблему праграмным шляхам. Прапанаваны для ядра Linux патч змяняе 68 файлаў, дадае 1783 радкоў і выдаляе 387 радкоў. Нажаль абарона прыводзіць да істотных накладных выдаткаў – у праведзеных тэкстах на працэсарах AMD і Intel зніжэнне прадукцыйнасці ацэньваецца ад 14% да 39%. Больш пераважным з'яўляецца ўжыванне абароны на аснове інструкцый IBRS, даступных у новых пакаленнях CPU Intel і падтрымоўваных пачынальна з ядра Linux 4.19.

На працэсарах Intel падстаноўка адрасу для спекулятыўнага ўскоснага пераходу ажыццяўляецца дзякуючы асаблівасці, якая праяўляецца пры перапаўненні праз ніжнюю мяжу (underflow) у буферы прадказанні змесціва стэка (Return Stack Buffer). Пры ўзнікненні падобных умоў для інструкцыі "ret" пачынае прымяняцца логіка выбару адрасу, аналагічная той, што выкарыстоўваецца пры звычайных ўскосных пераходах. У ядры Linux знойдзена больш за тысячу месцаў, якія ствараюць умовы ініцыявання падобнага зваротнага перапаўнення і даступных праз сістэмныя выклікі.

На працэсарах AMD спекулятыўнае выкананне інструкцыі «ret» ажыццяўляецца без прывязкі да спецыфічнага для стэка буфера (Return Address Stack) і блок прадказанні пераходаў разглядае інструкцыю «ret» не як зварот кіравання, а як ускосны пераход, і, адпаведна, выкарыстае пры прадказанні дадзеныя для ўскосных пераходаў. Пры падобных умовах фактычна любая аперацыя "ret", дасягальная праз сістэмны выклік, можа выкарыстоўвацца для эксплуатацыі.

Дадаткова, у CPU AMD таксама выяўлена яшчэ адна праблема (CVE-2022-23825, Branch Type Confusion), звязаная з ажыццяўленнем фіктыўных пераходаў – умовы для прадказання пераходу могуць узнікаць нават без неабходных інструкцый галінавання, што дазваляе ўплываць на буфер прадказанні пераходаў без інструкцыі. ret». Дадзеная асаблівасць істотна ўскладняе рэалізацыю абароны і патрабуе больш актыўнай ачысткі буфера прадказанні пераходаў. Чакаецца, што даданне поўнай абароны ў ядро ​​прывядзе да павелічэння накладных выдаткаў на 209%.

Крыніца: opennet.ru

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