Сборники трудов ИСП РАН


Когда защита стека в компиляторах не срабатывает?

П. Довгалюк (НовГУ, Великий Новгород, Россия)
В. Макаров (НовГУ, Великий Новгород, Россия)

Аннотация

Основная часть уязвимостей в программах вызвана переполнением буфера. Чтобы предотвратить переполнение буфера и уменьшить ущерб от него используется безопасное программирование, аудит исходного кода, аудит бинарного кода, статические и динамические особенности кодогенерации. В современных компиляторах реализованы механизмы защиты, работающие на этапе компиляции и на этапе выполнения скомпилированной программы: переупорядочивание переменных, копирование аргументов и встраивание стековой канарейки. В статье описывается исследование, посвященное поиску недостатков в этих механизмах. Мы протестировали компиляторы MSVC, gcc и clang и обнаружили, что два из них содержат ошибки, позволяющие эксплуатировать переполнение буфера при определенных условиях.

Ключевые слова

переполнение буфера, стековая канарейка, gcc, msvc, clang

Издание

Труды Института системного программирования РАН, том 28, вып. 5, 2016, стр. 55-72.

ISSN 2220-6426 (Online), ISSN 2079-8156 (Print).

DOI: 10.15514/ISPRAS-2016-28(5)-3

Полный текст статьи в формате pdf (на английском) Вернуться к содержанию тома