Уразлівасці ў eBPF, якія дазваляюць абыйсці абарону ад нападу Spectre 4

У ядры Linux выяўлены дзве ўразлівасці, якія дазваляюць выкарыстоўваць падсістэму еBPF для абыходу абароны ад нападу Spectre v4 (SSB, Speculative Store Bypass). Пры дапамозе непрывілеяванай BPF-праграмы атакавалы можа стварыць умовы для спекулятыўнага выканання вызначаных аперацый і вызначыць змесціва адвольных абласцей памяці ядра. Суправаджальныя падсістэмы eBPF у ядры атрымалі доступ да прататыпа эксплоіта, які дэманструе магчымасць здзяйснення нападаў на практыцы. Праблемы ўхілены ў форме патчаў (1, 2), якія ўвойдуць у склад найблізкага абнаўлення ядра Linux. Абнаўленні ў дыстрыбутывах пакуль не сфарміраваны (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Метад нападу Spectre 4 грунтуецца на аднаўленні аселых у працэсарным кэшы дадзеных пасля адкідвання выніку спекулятыўнага выканання аперацый пры апрацоўцы якія чаргуюцца аперацый запісу і чытанні з выкарыстаннем ускоснага адрасавання. Калі аперацыя чытання ідзе за аперацыяй запісу (напрыклад, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), зрушэнне адраса для чытання ўжо можа быць вядома з-за выканання падобных аперацый (аперацыі чытання выконваюцца значна часцей і чытанне можа быць выканана з кэша) і працэсар можа спекулятыўна выканаць чытанне раней запісу, не чакаючы пакуль будзе вылічана зрушэнне ўскоснага адрасавання для запісу.

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

Першая ўразлівасць (CVE-2021-35477) выклікана недапрацоўкай у механізме праверкі праграм BPF. Для абароны ад нападу Spectre 4 верыфікатар дадае пасля патэнцыйна праблемных аперацый захавання ў памяць дадатковую інструкцыю, якая захоўвае нулявое значэнне для выцяснення слядоў мінулай аперацыі. Меркавалася, што аперацыя запісу нуля выканаецца вельмі хутка і блакуе спекулятыўнае выкананне, бо яна залежыць толькі ад паказальніка на кадр стэка BPF. Але на справе, аказалася магчымым стварэнне ўмоў, пры якіх інструкцыя, якая прыводзіць да спекулятыўнага выканання, паспявае выканацца да аперацыі выцясняе захавання.

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

Крыніца: opennet.ru

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