Данная статья применима к:
- Astra Linux Specisl Edition РУСБ.10015-01 очередное обновление 1.7 с установленным обновлением БЮЛЛЕТЕНЬ № 2024-0830SE17 (оперативное обновление 1.7.6)
Введение
В статье рассматривается механизм защиты от исполнения кода, размещенного в области стека программ (далее — механизм). В Astra Linux Special Edition механизм включен начиная со следующих обновлений:
- Astra Linux Specisl Edition РУСБ.10015-01 очередное обновление 1.7 с установленным обновлением БЮЛЛЕТЕНЬ № 2024-0830SE17 (оперативное обновление 1.7.6)
Защита от техник по MITRE
В соответствии с базой атак MITRE, Механизм обеспечивает защиту от следующих техник:
Предупреждаемые вектора атак
Атака на переполнение буфера
При данной атаке атакующий использует ошибку в программе, когда при записи в буфер данных не проверяется (или неправильно проверяется) размер данных, полученных от пользователя. Если размер данных превышает размер буфера, то лишние данные попадают в область памяти, предназначенную для других локальных переменных, а также могут перезаписать адрес возврата из функции. Если адрес возврата оказывается перезаписан, то при возврате управление будет передано по вновь записанному адресу.
В самой простой версии атаки на переполнение буфера атакующий помещает код («полезную нагрузку») в стек, а затем перезаписывает адрес возврата адресом только что записанных им инструкций.
При включенном предотвращении выполнения данных, машина откажется выполнять код на страницах памяти, помеченных «только для данных», включая страницы, содержащие стек. Это не предотвратит размещение полезной нагрузки в стеке, но не позволит перейти на неё, перезаписав адрес возврата.
Атака возврата в библиотеку
Один из видов атак, когда адрес возврата функции в стеке подменяется адресом иной функции в программе, и в последующую часть стека записываются параметры для вызываемой функции. Эта техника позволяет нападающему выполнить какую-либо существующую функцию без необходимости внедрять вредоносный код в программу.
В Astra Linux имеется разделяемая библиотека libc, предоставляющая стандартные функции языка Си и стандарта POSIX. Эту библиотеку использует большинство программ. Атакующий может заставить программу совершить переход по любому адресу, но функции стандартной библиотеки являются наиболее вероятной целью подобных атак, например, функция system()
для выполнения произвольных программ..
Стек с защитой от исполнения лишь частично закрывает данный тип атак, препятствуя запуску произвольного интерпретируемого кода (например, сценариев bash
). Однако вероятность запуска уже существующих легитимных функций остаётся.
Реализация механизма
На уровне модуля безопасности LAM реализован механизм защиты от исполнения областей памяти на стеке. Механизм управляется параметром parsec.execstack
в командной строке загрузчика с допустимыми значениями:
- 0 — включить механизм защиты от исполнения областей памяти на стеке (используется по умолчанию);
- 1 — выключить механизм защиты от исполнения областей памяти на стеке.
При срабатывании механизма запись об ошибке регистрируется в системных журналах:
|
Известные проблемы
Включение механизма защиты от исполнения областей памяти на стеке может привести к отказу прикладного ПО, использующего исполняемый стек в своей работе. В случае выявления такого ПО следует:
- по возможности исключить такое ПО из эксплуатации;
- обратиться к производителю ПО с рекомендацией внести изменения в реализацию, чтобы избежать:
- отказа в обслуживании собственного ПО на ОС Astra Linux при включённом механизме защиты от исполнения областей памяти на стеке;
- организации возможностей для эксплуатации уязвимостей в собственном ПО.
Рекомендации для разработки прикладного ПО под Astra Linux
При разработке прикладного ПО, предназначенного для работы в Astra Linux следует:
- исключить использование параметра компиляции -z execstack. Этот параметр компилятора передается компоновщику программ и означает, что инструкции, расположенные в стеке, могут быть выполнены. Такое поведение считается допустимым для некоторых архитектур и может использоваться в целях оптимизации.