Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 5 Текущий »

Описание

При выполнении стороннего программного обеспечения (ПО) в среде Astra Linux Special Edition 1.7 с установленным актуальным оперативным обновлением работа некоторых программ завершается ошибкой "cannot enable executable stack as shared object requires: Permission denied". Данная ошибка возникает при попытке ПО разрешить исполнение кода, находящегося в программном стеке. Исполнение такого кода допустимо на некоторых аппаратных платформах, но может представлять угрозу для безопасности, поэтому по умолчанию запрещено.

Рекомендации

  1. По возможности исключить использование ПО, генерирующего указанную выше ошибку, как потенциально небезопасного.
  2. Обратиться к разработчикам ПО для его доработки с целью устранения потенциально небезопасных действий ПО и использовать только доработанное ПО.
  3. При невозможности выполнения предыдущих рекомендаций в сочетании с необходимостью эксплуатировать имеющееся ПО — отключить контроль разрешения исполнения кода в программном стеке:

    Описанное ниже изменение в настройке операционной системы ведет к снижению её защищенности. Применяя это изменение вы принимаете на себя ответственность за возможные последствия.

    Для отключения контроля:

    • добавить параметр ядра parsec.execstack=1 в строку значений параметра GRUB_CMDLINE_LINUX_DEFAULT в конфигурационном файле /etc/default/grub. Пример результирующей строки:
      GRUB_CMDLINE_LINUX_DEFAULT="parsec.mac=0 quiet net.ifnames=0 parsec.execstack=1"
    • обновить конфигурацию загрузчика:
      sudo update-grub
    • перезагрузить компьютер.

    Для обратного включения контроля после обновления ПО:

    • убрать параметр ядра parsec.execstack=1 в строку значений параметра GRUB_CMDLINE_LINUX_DEFAULT или заменить его на parsec.execstack=0 в конфигурационном файле /etc/default/grub. Пример результирующей строки:
      GRUB_CMDLINE_LINUX_DEFAULT="parsec.mac=0 quiet net.ifnames=0 parsec.execstack=0"
    • обновить конфигурацию загрузчика:
      sudo update-grub
    • перезагрузить компьютер.

Рекомендации для разработчиков

Ошибка "cannot enable executable stack as shared object requires: Permission denied" возникает при выполнении системного вызова mprotect(). Для предотвращения возникновения ошибки:

  1. При сборке ПО не использовать параметр компиляции -z execstack. Этот параметр, передаваемый компоновщику. означает, что инструкции, расположенные в стеке, могут быть выполнены.
  2. Для выявления попыток установки флага исполнения (выявления обращений к системному вызову mprotect()) использовать инструмент strace.
  • Нет меток