Коротенькая заметка.
Начиная с архитектуры IvyBridge (Core iX-
3XXX) в процессорах Intel есть
SMEP (Supervisor Mode
Execution Protection).
Начиная с архитектуры
Haswell Broadwell (предположительно Core iX-
5XXX) в процессорах Intel будет
SMAP (Supervisor Mode
Access Protection).
SMEP
Не позволяет процессору, будучи в ring0,
выполнять код со страниц, помеченных флагом User.
Таким образом, столь привычные способы эксплуатации, когда есть возможность перезаписать указатель в какой-нибудь структуре в ядре адресом в юзер-моде, заммапить этот адрес и ждать, что ядро прыгнет на него исполнять наш шелл-код, перестают работать.
SMAP
Не позволяет процессору, будучи в ring0,
обращаться (например, читать) к страницам, помеченным флагом User.
Поскольку ядру это необходимо в работе, были введены 2 новые инструкции, которые должны использоваться перед и после обращением к страницам памяти с флагом User: CLAC/STAC.
Использование SMAP незначительно увеличивает размер ядра и уменьшает скорость работы.
Положение дел на сегодня:
Linux получил SMEP в 3.0, SMAP - в 3.7. Обе функции по умолчанию включены.
Windows получила SMEP в Win 8.
Mac OS X получила поддержку SMEP в Mountain Lion (нужно проверить).
http://forums.grsecurity.net/viewtopic.php?f=7&t=3046
http://vulnfactory.org/blog/2011/06/...t-it-on-linux/
[GIT PULL] x86/smap changes for v3.7
http://blog.ptsecurity.com/2012/09/i...al-bypass.html
http://blog.ptsecurity.com/2012/09/b...ows-8-x64.html