Разработчики OpenBSD развивают новый метод защиты стека
Как сообщает opennet.ru тео де Раадт (Theo de Raadt) представил новый метод защиты стека Stack-register, в рамках которого традиционные типы разрешения доступа к памяти (например, возможность чтения, записи и выполнения кода) расширены новым полномочием - MAP_STACK, которое реализуется программно на уровне ядра ОС. Суть предложенного метода в том, что когда память используется как стек, она обязательно должна быть отражена через mmap с использованием флага MAP_STACK.
При выделении областей под стек для процессов флаг MAP_STACK автоматически выставляется ядром во время запуска процесса, поэтому модификация кода приложений не требуется. При совершении системного вызова осуществляется проверка регистра с указателем на стек. Если регистр указывает на область памяти, помеченную MAP_STACK, то выполнение продолжатся в штатном режиме. Если нет, то считается, что указатель стека вышел за выделенную под стек область и процесс принудительно завершается.
Новая система защиты пока имеет экспериментальный характер и проходит тестирование в свежих снапшотах OpenBSD. В тестовом режиме вместо фактического завершения процесса осуществляется вывод предупреждений в лог. За несколько дней тестировния уже выявлены и устранены проблемы, проявляющиеся при сборке портов go и SBCL, а также при выполнении двух тестов из набора src/regress. Тестирование портов продолжается и если не возникнет новых проблемных моментов, новый метод защиты может быть включен в состав OpenBSD 6.3.
Кроме того, сообщается о расширении применения системы syspatches для обновления OpenBSD через бинарные патчи. Отныне через syspatches будут поддерживаться не только обновления для текущего релиза, но и для прошлого выпуска, поддержание которого в актуальном виде теперь возможно без пересборки из исходных текстов. Например, помимо обновлений для OpenBSD 6.2 теперь через бинарные патчи можно обновлять и прошлую ветку OpenBSD 6.1. После выхода OpenBSD 6.3 аналогично будет продолжена поддержка для ветки OpenBSD 6.2. Как и раньше, бинарные патчи формируются только для архитектур amd64 и i386.