Новость из категории: Информация » IT

Ошибки сегментации и безопасность: средства защиты, способы их обхода и слова-канарейки

Содержание:
1. Модель памяти процесса и атаки на переполнение буфера, стек;
2. Куча;
3. Средства защиты, способы их обхода и слова-канарейки (Вы читаете данный раздел);
4. «Канарейки» в glibc и NX-бит;
5. Коммерческая сторона и конкуренты;
Средства защиты и способы их обхода

Ошибки сегментации и безопасность: средства защиты, способы их обхода и слова-канарейки

Переполнение буфера - очень распространенная проблема, встречающаяся во множестве приложений, созданных самыми разными разработчиками. Нельзя уповать на то, что все программисты вдруг перестанут делать такие ошибки. Также пока не предвидится появления надежных средств обнаружения проблемных мест в приложениях. Возможным решением является использование языков с автоматическим управлением памятью (типа Java, Perl, Python, семейства .NET и им подобных), где за соблюдением границ всех переменных следит соответствующий интерпретатор. Но разработчики не спешат отказываться от C/C++ и полностью переходить на подобные технологии - на то есть веские причины, но их обсуждение выходит за рамки этой статьи.

В общем, глобального избавления от первоисточника проблем и устранения всех ошибок в приложениях не предвидится. Но правка кода проблемных приложений - не единственный способ обезопасить ОС и другие программы. За десятилетия развития операционных систем было предложено несколько подходов к решению проблем переполнения на общесистемном уровне. Рассмотрим наиболее распространенные из них.

Слова-канарейки

Одним из популярных и доступных способов предотвратить эксплуатацию уязвимостей, связанных с переполнением буфера в стеке при вызове функций, является использование «слов-канареек» («oanary words»). Способ заключается в записи некоторого специального значения в ячейку памяти, следующую за буфером, который может быть модифицирован в ходе работы функции. Перед возвратом из функции, система осуществляет проверку целостности этого значения. В случае если буфер переполнился, «канарейка» перезапишется каким-то другим значением (конечно, есть шанс, что новое значение совпадет с предыдущим, но вероятность этого крайне мала).

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

В Linux использовать подобную защиту достаточно просто - для этого в компиляторах GCC предусмотрены опции -fstack-protector и -fstack-protector-all, создающие «канареек» для всех потенциально опасных функций приложения. Если приложение собрано с такими опциями, то при обнаружении переполнения буфера оно будет остановлено с ошибкой вида:
*** stack smashing detected ***: program terminated

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

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

Рейтинг статьи

Оценка
5/5
голосов: 1
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх