SMEP / SMAP
Что такое SMEP / SMAP?
SMEP / SMAPSMEP и SMAP — функции процессора, запрещающие ядру выполнять или обращаться к страницам пользовательского пространства и блокирующие распространённые приёмы локального повышения привилегий.
Supervisor Mode Execution Prevention (SMEP) и Supervisor Mode Access Prevention (SMAP) — расширения x86_64, представленные Intel в Ivy Bridge (SMEP, 2012) и Broadwell (SMAP, 2014); у ARM существуют аналоги PXN и PAN. SMEP вызывает исключение, если ядро пытается выполнить инструкции на странице пользователя, чем останавливает ret2usr. SMAP вызывает исключение при любом чтении или записи ядра в пользовательские страницы, кроме случаев, когда код временно устанавливает EFLAGS.AC через stac/clac (в Linux — обёртки copy_from_user). Вместе они закрывают большой класс эксплойтов ядра и дополняют KASLR, kCFI, KPTI и CET.
● Примеры
- 01
На CPU с SMEP эксплойт ядра вызывает #PF при переходе к шеллкоду в пользовательской странице.
- 02
В Linux с SMAP copy_from_user использует stac/clac для доступа к пользовательским буферам.
● Частые вопросы
Что такое SMEP / SMAP?
SMEP и SMAP — функции процессора, запрещающие ядру выполнять или обращаться к страницам пользовательского пространства и блокирующие распространённые приёмы локального повышения привилегий. Относится к категории Безопасность приложений в кибербезопасности.
Что означает SMEP / SMAP?
SMEP и SMAP — функции процессора, запрещающие ядру выполнять или обращаться к страницам пользовательского пространства и блокирующие распространённые приёмы локального повышения привилегий.
Как работает SMEP / SMAP?
Supervisor Mode Execution Prevention (SMEP) и Supervisor Mode Access Prevention (SMAP) — расширения x86_64, представленные Intel в Ivy Bridge (SMEP, 2012) и Broadwell (SMAP, 2014); у ARM существуют аналоги PXN и PAN. SMEP вызывает исключение, если ядро пытается выполнить инструкции на странице пользователя, чем останавливает ret2usr. SMAP вызывает исключение при любом чтении или записи ядра в пользовательские страницы, кроме случаев, когда код временно устанавливает EFLAGS.AC через stac/clac (в Linux — обёртки copy_from_user). Вместе они закрывают большой класс эксплойтов ядра и дополняют KASLR, kCFI, KPTI и CET.
Как защититься от SMEP / SMAP?
Защита от SMEP / SMAP обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия SMEP / SMAP?
Распространённые альтернативные названия: SMEP, SMAP, PXN, PAN.
● Связанные термины
- appsec№ 581
KASLR
KASLR (ASLR ядра) при каждой загрузке случайно сдвигает базу ядра и загружаемые модули, чтобы атакующий не мог использовать жёстко заданные адреса ядра для повышения привилегий.
- appsec№ 217
Целостность потока управления
Целостность потока управления (CFI) ограничивает непрямые вызовы и возвраты программы заранее вычисленным множеством легитимных целей, блокируя ROP и JOP.
- appsec№ 545
Intel CET
Intel CET (Control-flow Enforcement Technology) — функция процессора, объединяющая аппаратный теневой стек и Indirect Branch Tracking (IBT) для блокировки ROP, JOP и COP.
- appsec№ 670
Безопасность памяти
Безопасность памяти — свойство, при котором программа никогда не читает, не пишет и не исполняет память, которую она не выделяла легитимно, что устраняет целые классы уязвимостей.
- appsec№ 303
DEP
Предотвращение выполнения данных (DEP, NX или W^X) помечает страницы памяти как неисполняемые, чтобы атакующий не мог запустить шеллкод, внедрённый в стек или кучу.
- appsec№ 925
Возвратно-ориентированное программирование (ROP)
ROP — техника эксплуатации с повторным использованием кода, в которой короткие последовательности инструкций, оканчивающиеся RET, выстраиваются в цепочку для выполнения произвольных вычислений без внедрения нового кода.