Углубляем архитектурную защиту

Статья разработчика KasperskyOS на Хабре о том, как мы усилили защиту от переполнения стека
Углубляем архитектурную защиту

На Хабре вышла новая публикация от нашей коллеги Марии Недяк, разработчика криптографических сервисов в команде KasperskyOS. В статье она делится опытом усиления одного из ключевых механизмов защиты в операционных системах — stack canary, или по-русски «стековой канарейки».

Source: Midjourney

Что такое стековая канарейка — и зачем она нужна

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

Название stack canary — неслучайное. Как канарейки в шахтах предупреждали о скоплении опасного газа, так и стековая канарейка сигнализирует системе о попытке вмешательства. Суть механизма в том, что в стек перед локальными переменными помещается специальное значение. Если оно изменилось — значит, стек был перезаписан, и программа должна быть немедленно остановлена.

Почему этого недостаточно — и как это ломают

Как отмечает Мария, несмотря на простоту и эффективность, сам по себе механизм stack canary не является «пуленепробиваемым». Если злоумышленнику удаётся узнать значение канарейки или получить к нему доступ, атаку можно замаскировать. В статье подробно разобраны реальные сценарии, когда такие попытки удавались — за счёт ошибок в логике хранения значений, слабой энтропии или уязвимостей в сторонних библиотеках.

Пример — поведение стандартной библиотеки glibc в системах Linux: там канарейка может находиться в области памяти, доступной на чтение и запись, что создаёт риски утечки или подмены значений. Даже системный вызов fork, часто используемый в серверных приложениях, при неправильном применении может «сломать» защиту.

Как мы усилили защиту в KasperskyOS

В KasperskyOS к безопасности архитектурных механизмов мы подходим максимально строго. В своей статье Мария рассказывает, как наша команда усилила стековую канарейку, чтобы сделать атаки на стек максимально трудозатратными — и по возможности нецелесообразными для злоумышленника.

Во-первых, мы переместили значение канарейки в защищённую область памяти data.rel.ro, которая доступна только для чтения после инициализации. Это снижает риск её подмены или повреждения в процессе выполнения программы.

Во-вторых, была реализована уникальность канарейки для каждой функции (так называемая per-function canary), а само значение канарейки модифицируется с использованием регистра ebp (техникой XOR). Такая реализация делает украденное значение бесполезным за пределами конкретной функции, даже если оно стало известно злоумышленнику.

Кроме того, KasperskyOS изначально не поддерживает системный вызов fork, который, как показывает практика, усложняет защиту от угадывания и повторного использования канарейки.

Почему это важно

Защита от переполнения стека — один из важнейших элементов устойчивости операционной системы к уязвимостям нулевого дня. Развитие и усиление такого базового механизма демонстрирует внимание нашей команды к деталям и принципу «безопасность по умолчанию».
Публикация Марии — это не только технический разбор уязвимости и методов противодействия, но и практическое руководство по созданию надежной архитектуры защиты. Она показывает, с какими вызовами сталкиваются разработчики ОС сегодня — и какие инструменты они применяют для того, чтобы угрозы оставались только в теории.

Если вы хотите глубже погрузиться в тему защиты от переполнения стека, особенностей хранения канареек в разных ОС и реализации защиты в KasperskyOS — читайте полную статью на Хабре. Она будет интересна всем, кто работает в системной разработке, информационной безопасности или просто любит разбираться в тонкостях низкоуровневой защиты.

Углубляем архитектурную защиту

На Хабре вышла новая публикация от нашей коллеги Марии Недяк, разработчика криптографических сервисов в команде KasperskyOS. В статье она делится опытом усиления одного из ключевых механизмов защиты в операционных системах — stack canary, или по-русски «стековой канарейки».

Source: Midjourney

Что такое стековая канарейка — и зачем она нужна

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

Название stack canary — неслучайное. Как канарейки в шахтах предупреждали о скоплении опасного газа, так и стековая канарейка сигнализирует системе о попытке вмешательства. Суть механизма в том, что в стек перед локальными переменными помещается специальное значение. Если оно изменилось — значит, стек был перезаписан, и программа должна быть немедленно остановлена.

Почему этого недостаточно — и как это ломают

Как отмечает Мария, несмотря на простоту и эффективность, сам по себе механизм stack canary не является «пуленепробиваемым». Если злоумышленнику удаётся узнать значение канарейки или получить к нему доступ, атаку можно замаскировать. В статье подробно разобраны реальные сценарии, когда такие попытки удавались — за счёт ошибок в логике хранения значений, слабой энтропии или уязвимостей в сторонних библиотеках.

Пример — поведение стандартной библиотеки glibc в системах Linux: там канарейка может находиться в области памяти, доступной на чтение и запись, что создаёт риски утечки или подмены значений. Даже системный вызов fork, часто используемый в серверных приложениях, при неправильном применении может «сломать» защиту.

Как мы усилили защиту в KasperskyOS

В KasperskyOS к безопасности архитектурных механизмов мы подходим максимально строго. В своей статье Мария рассказывает, как наша команда усилила стековую канарейку, чтобы сделать атаки на стек максимально трудозатратными — и по возможности нецелесообразными для злоумышленника.

Во-первых, мы переместили значение канарейки в защищённую область памяти data.rel.ro, которая доступна только для чтения после инициализации. Это снижает риск её подмены или повреждения в процессе выполнения программы.

Во-вторых, была реализована уникальность канарейки для каждой функции (так называемая per-function canary), а само значение канарейки модифицируется с использованием регистра ebp (техникой XOR). Такая реализация делает украденное значение бесполезным за пределами конкретной функции, даже если оно стало известно злоумышленнику.

Кроме того, KasperskyOS изначально не поддерживает системный вызов fork, который, как показывает практика, усложняет защиту от угадывания и повторного использования канарейки.

Почему это важно

Защита от переполнения стека — один из важнейших элементов устойчивости операционной системы к уязвимостям нулевого дня. Развитие и усиление такого базового механизма демонстрирует внимание нашей команды к деталям и принципу «безопасность по умолчанию».
Публикация Марии — это не только технический разбор уязвимости и методов противодействия, но и практическое руководство по созданию надежной архитектуры защиты. Она показывает, с какими вызовами сталкиваются разработчики ОС сегодня — и какие инструменты они применяют для того, чтобы угрозы оставались только в теории.

Если вы хотите глубже погрузиться в тему защиты от переполнения стека, особенностей хранения канареек в разных ОС и реализации защиты в KasperskyOS — читайте полную статью на Хабре. Она будет интересна всем, кто работает в системной разработке, информационной безопасности или просто любит разбираться в тонкостях низкоуровневой защиты.

Консультация по решению

Остались вопросы или требуется дополнительная информация по решению? Оставьте заявку на консультацию, и мы с вами свяжемся!

Задать вопрос

Отвечаем на самые популярные вопросы о KasperskyOS и решениях на ее основе

Перейти в FAQ
Мы используем файлы cookie, чтобы сделать работу с сайтом удобнее.
Продолжая находиться на сайте, вы соглашаетесь с этим. Подробную информацию о файлах cookie можно прочитать здесь.