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

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

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

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


Введение

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

Термины

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


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

Переполнение буфера

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

При реализации атаки атакующий, помещая эксплойт в стек, перезаписывает адрес возврата и параметры вызова адресом имеющегося в коде программы системного вызова mtrace() для разрешения исполнения кода, содержащегося в эксплойте, после чего управление передается эксплойту

Инъекция исполняемого кода

При данной атаке в ПО заранее заложена возможность исполнения полученного извне кода.

При реализации атаки ПО получает эксплойт извне, и установив с помощью системного вызова mprotect() разрешение исполнения на полученные данные, передает управление эксплойту.

Действие механизма защиты

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

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

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

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

Порядок отключения механизма защиты см. в статье Нарушение работы некоторых программ после установки оперативного обновления Astra Linux Special Edition 1.7.6

Особенности работы механизма защиты

Включение механизма защиты может привести к отказу прикладного ПО, использующего исполняемый стек в своей работе. При этом могут выдаваться сообщения "Недостаточно прав" ("Permission denied"), например: 

cannot enable executable stack as shared object requires: Permission denied

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

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

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

См. Нарушение работы некоторых программ после установки оперативного обновления Astra Linux Special Edition 1.7.6

  • Нет меток