SWAPGS - новая ўразлівасць у механізме спекулятыўнага выканання CPU

Даследнікі з кампаніі Bitdefender выявілі новую ўразлівасць (CVE-2019-1125) у механізме спекулятыўнага выканання інструкцый сучасных CPU, якая атрымала імя SWAPGS, якое адпавядае назве працэсарнай інструкцыі, якая выклікае праблему. Уразлівасць дазваляе непрывілеяванаму атакаваламу вызначыць змесціва абласцей памяці ядра або запушчаных віртуальных машын. Праблема пацверджана у працэсарах Intel (x86_64) і часткова закранае працэсары AMD, для якіх не выяўляецца асноўны вектар нападу. Раней рэалізаваныя метады процідзеяння ўразлівасцям Spectre і Meltdown не абараняюць ад нападу SWAPGS пры выкарыстанні працэсараў Intel, але для Linux, ChromeOS, Android і Windows ужо прапанаваны выпраўленні.

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

Асаблівасць новага нападу ў выкарыстанні ўцечкі, якая ўзнікае падчас спекулятыўнага выканання інструкцыі SWAPGS, якая ўжываецца ў аперацыйных сістэмах для замены значэння рэгістра GS пры пераходзе кіравання з прасторы карыстача ў ядро ​​АС (выкарыстоўванае ў прасторы карыстача значэнне GS замяняецца на значэнне, выкарыстоўванае пры аперацыях у ядры ). У ядры Linux у GS захоўваецца паказальнік per_cpu, выкарыстоўваны для доступу да дадзеных ядра, а ў прасторы карыстача паказальнікі на TLS (Thread Local Storage).

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

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

У ядры Linux праблема ліквідавана праз змену логікі выкліку інструкцыі SWAPGS (блакаванне спекулятыўнага выканання), па аналогіі з выпраўленнем іншых уразлівасцяў класа Spectre v1. Мяркуецца, што дададзеная абарона мінімальна паўплывае на прадукцыйнасць тыпавых працоўных нагрузак. Затрымка ўзнікае на этапе пераключэння паміж прасторай карыстальніка і ядра, што можа прывесці да зніжэння прадукцыйнасці, напрыклад, пры інтэнсіўным выкананні сістэмных выклікаў з дадатку або частай генерацыі NMI і перапыненняў.

Выпраўленне патрабуе ўсталёўкі абнаўлення ядра як у асноўнай сістэме, так і ў гасцявых асяродках, з наступнай перазагрузкай сістэмы. Для адключэння абароны ў Linux можа быць скарыстана опцыя "nospectre_v1", якая таксама адключае меры для блакавання ўразлівасці SWAPGS. Выпраўленне даступна ў выглядзе патча для ядра Linux, які ўжо ўключаны ў склад выпускаў 4.19.65, 5.2.7, 4.14.137, 4.9.188 і 4.4.188. Абнаўленні для дыстрыбутываў Linux пакуль не выпушчаны (Debian, RHEL, Мяккая фетравы капялюш, Arch Linux, SUSE/openSUSE, Ubuntu). У Windows праблема без лішняй агалоскі была ўхіленая ў ліпеньскім абнаўленні. Кампанія Google падрыхтавала выпраўленне для ядра 4.19, які пастаўляецца ў ChromeOS і Android.

Па заяве даследнікаў з кампаніі Bitdefender, Intel быў інфармаваны аб праблеме яшчэ ў жніўні мінулага года. Праблему было вырашана ўхіліць праграмна, для чаго да скаардынаванай выпрацоўкі выпраўлення былі прыцягнутыя распрацоўнікі з Microsoft, Google і ядры Linux. Старыя працэсары Intel, да Ivy Bridge, атакаваць значна цяжэй з-за адсутнасці падтрымкі інструкцыі WRGSBASE, скарыстанай у эксплоіце. Сістэмы ARM, POWER, SPARC, MIPS і RISC-V не схільныя да праблемы, бо не падтрымліваюць інструкцыю SWAPGS.

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

Крыніца: opennet.ru

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