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

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

« Предыдущий Версия 13 Следующий »

Данная статья применима к:


Введение

В статье рассматривается механизм защиты от исполнения кода, размещенного в области стека программ (далее — механизм защиты). В Astra Linux Special Edition механизм включен начиная со следующих обновлений:

Термины

Эксплойт (англ. exploit, эксплуатировать) — программный код, использующий уязвимости в программном обеспечении и применяемый для проведения атаки на информационную систему.


Предупреждаемые вектора атак

Атака на переполнение буфера

При данной атаке атакующий использует ошибку в программе, когда при записи в буфер данных не проверяется (или неправильно проверяется) размер записываемых данных. Если размер записываемых данных превышает размер буфера, то лишние данные попадают в область памяти, предназначенную для других локальных переменных, а также могут перезаписать адрес возврата из функции. Если адрес возврата оказывается перезаписан, то при возврате управление будет передано по вновь записанному адресу.

В самой простой версии атаки на переполнение буфера атакующий помещает эксплойт в стек, а затем перезаписывает адрес возврата адресом записанных им инструкций.

Включенный механизм защиты делает невозможным выполнение кода на страницах памяти, помеченных «только для данных», включая страницы, содержащие стек. Это не предотвратит размещение эксплойта в стеке и перезапись адреса возврата, но не позволит выполнить переход по измененному адресу.

Управление механизмом защиты

Механизм защиты управляется параметром parsec.execstack в командной строке загрузчика с допустимыми значениями:

  • 0 — включить механизм защиты (используется по умолчанию);
  • 1 — выключить механизм защиты.

Для отключения механизма защиты:

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

  • добавить параметр ядра 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 из строки значений параметра GRUB_CMDLINE_LINUX_DEFAULT или заменить его значение на 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

В случае выявления такого ПО следует:

  • по возможности исключить такое ПО из эксплуатации;
  • обратиться к производителю ПО с рекомендацией внести изменения в реализацию, чтобы избежать:
    • отказа в обслуживании собственного ПО на ОС Astra Linux при включённом механизме защиты от исполнения областей памяти на стеке;
    • организации возможностей для эксплуатации уязвимостей в собственном ПО.

Рекомендации для разработки прикладного ПО под Astra Linux

При разработке прикладного ПО, предназначенного для работы в Astra Linux следует:

  • исключить использование параметра компиляции -z execstack. Этот параметр компилятора передается компоновщику программ и означает, что инструкции, расположенные в стеке, могут быть выполнены.
  • Нет меток