Описание
При выполнении стороннего программного обеспечения (ПО) в среде Astra Linux Special Edition 1.7 с установленным актуальным оперативным обновлением работа некоторых программ завершается ошибкой "cannot enable executable stack as shared object requires: Permission denied". Данная ошибка возникает при попытке ПО запустить исполнение кода, находящегося в программном стеке. Исполнение такого кода допустимо на некоторых аппаратных платформах, но может представлять угрозу для безопасности, поэтому по умолчанию запрещено.
Рекомендации
- По возможности исключить использование ПО, генерирующего указанную выше ошибку, как потенциально небезопасного.
- Обратиться к разработчикам ПО для его доработки с целью устранения потенциально небезопасных действий ПО и использовать только доработанное ПО.
- При невозможности выполнения предыдущих рекомендаций в сочетании с необходимостью эксплуатировать имеющееся ПО — отключить контроль разрешения исполнения кода в программном стеке:
Описанное ниже изменение в настройке операционной системы ведет к снижению её защищенности. Применяя это изменение вы принимаете на себя ответственность за возможные последствия. |
Для отключения контроля: - добавить параметр ядра parsec.execstack со значением 1 в строку значений параметра GRUB_CMDLINE_LINUX_DEFAULT в конфигурационном файле /etc/default/grub. Пример результирующей строки:
GRUB_CMDLINE_LINUX_DEFAULT="parsec.mac=0 quiet net.ifnames=0 parsec.execstack=1" |
- обновить конфигурацию загрузчика:
- перезагрузить компьютер.
Для обратного включения контроля после обновления ПО: - убрать параметр ядра parsec.execstack из строки значений параметра GRUB_CMDLINE_LINUX_DEFAULT или заменить его значение на 0 в конфигурационном файле /etc/default/grub. Пример результирующей строки:
GRUB_CMDLINE_LINUX_DEFAULT="parsec.mac=0 quiet net.ifnames=0 parsec.execstack=0" |
- обновить конфигурацию загрузчика:
- перезагрузить компьютер.
|
Рекомендации для разработчиков
Ошибка "cannot enable executable stack as shared object requires: Permission denied" возникает при попытке установки флага разрешения исполнения на область памяти, т.е. при попытке исполнения системного вызова mprotect(). Для предотвращения возникновения ошибки:
- При сборке ПО не использовать параметр компиляции -z execstack. Этот параметр, передаваемый компоновщику. означает, что инструкции, расположенные в стеке, могут быть выполнены.
- Для выявления попыток установки флага исполнения (выявления обращений к системному вызову mprotect()) использовать инструмент strace.