Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
Введение
В статье рассматривается механизм защиты от исполнения кода, размещенного в области стека программ (далее — механизм защиты). В Astra Linux Special Edition механизм включен начиная со следующих обновлений:
- в Astra Linux Specisl Edition РУСБ.10015-01 очередное обновление 1.7 — начиная с установленным обновлением обновления БЮЛЛЕТЕНЬ № 2024-0830SE17 (оперативное обновление 1.7.6)
Защита от техник по MITRE
В соответствии с базой атак MITRE, механизм защиты обеспечивает защиту от следующих техник:
Идентификатор
Описание
Термины
Эксплойт (англ. exploit, эксплуатировать) — программный код, использующий уязвимости в программном обеспечении и применяемый для проведения атаки на информационную систему.
Show If | ||
---|---|---|
| ||
Шелл-код (англ. shellcode, код запуска оболочки) — двоичный исполняемый код, передающий управление командной оболочке (англ. shell), например '/bin/sh', в том числе может открывать заранее заданный порт TCP (англ. port binding shellcode) или осуществляет подключение к порту атакующего компьютера (англ. reverse shell shellcode). Шелл-код может быть использован как полезная нагрузка эксплойта. Пример эксплойта: |
Предупреждаемые вектора атак
Переполнение
Предупреждаемые вектора атак
Атака на переполнениебуфера
При данной атаке атакующий использует ошибку в программе, когда при записи в буфер данных, находящихся в стеке, не проверяется (или неправильно проверяется) размер записываемых данных, полученных от пользователя. Если размер записываемых данных превышает размер буфера, то лишние данные попадают в область памяти, предназначенную для других локальных переменных, а также могут перезаписать адрес возврата из функции. Если адрес возврата оказывается перезаписан, то при возврате управление будет передано по вновь записанному адресу.
В самой простой версии атаки на переполнение буфера атакующий помещает код («полезную нагрузку») При реализации атаки атакующий, помещая эксплойт в стек, а затем перезаписывает адрес возврата адресом только что записанных им инструкций.и параметры вызова адресом имеющегося в коде программы системного вызова mprotect() для разрешения исполнения кода, содержащегося в эксплойте, после чего управление передается эксплойту
Действие механизма защиты
Включенный механизм защиты делает невозможным выполнение кода из разделяемых библиотек данных на страницах памяти, помеченных «только для данных», включая страницы, содержащие стек. Это Это не предотвратит размещение полезной нагрузки в стекеэксплойта, но не позволит перейти на неё, перезаписав адрес возвратаустановить разрешение исполнения кода эксплойта.
Управление механизмом защиты
Механизм защиты управляется параметром параметром parsec.execstack
в в командной строке загрузчика с допустимыми значениями:
- 0 — включить механизм защиты (используется по умолчанию);
- 1 — выключить механизм защиты.
При срабатывании Порядок отключения механизма защиты запись об ошибке регистрируется в системных журналах:
|
Известные проблемы
см. в статье Нарушение работы некоторых программ после установки оперативного обновления Astra Linux Special Edition 1.7.6
Особенности работы механизма защиты
Включение механизма защиты может привести к отказу прикладного ПО, использующего исполняемый стек в своей работе. При этом могут выдаваться сообщения "Недостаточно прав" ("Permission denied"), например:
|
В случае выявления такого ПО следует:
- по возможности исключить такое ПО из эксплуатации;
- обратиться к производителю ПО с рекомендацией внести изменения в реализацию, чтобы избежать:
- отказа в обслуживании собственного ПО на ОС Astra Linux при включённом механизме защиты от исполнения областей памяти на стеке;
- организации возможностей для эксплуатации уязвимостей в собственном ПО.
Рекомендации для разработки прикладного ПО под Astra Linux
При разработке прикладного ПО, предназначенного для работы в Astra Linux следует:
исключить использование параметра компиляции -z execstack. Этот параметр компилятора передается компоновщику программ и означает, что инструкции, расположенные в стеке, могут быть выполнены. Такое поведение считается допустимым для некоторых архитектур и может использоваться в целях оптимизации.