RUS  ENG
Полная версия
ЖУРНАЛЫ // Труды института системного программирования РАН // Архив

Труды ИСП РАН, 2021, том 33, выпуск 4, страницы 195–210 (Mi tisp622)

Эта публикация цитируется в 1 статье

Предотвращение уязвимостей, возникающих в результате оптимизации кода с неопределенным поведением

Р. В. Баев, Л. В. Скворцов, Е. А. Кудряшов, Р. А. Бучацкий, Р. А. Жуйков

Институт системного программирования им. В.П. Иванникова РАН

Аннотация: С развитием оптимизирующих компиляторов стали возникать случаи появления уязвимостей в программах во время оптимизации. Это связано с тем, что зачастую программисты используют конструкции с неопределенным поведением, опираясь на свое представление о том, в какой код такие конструкции транслировались знакомым им компилятором для определенной архитектуры. В то же время компилятор, руководствующийся стандартом языка, вправе проводить оптимизации так, как будто бы таких конструкций в коде не может существовать. В этой статье описываются подходы к обнаружению и устранению уязвимостей в программах, рассматривается применимость этих подходов для случая уязвимостей, появляющихся вследствие оптимизации, в условиях, когда возможность изменения исходного кода ограничена или отсутствует. В статье предлагается концепция безопасного компилятора, т.е. компилятора, обеспечивающего отсутствие внесения уязвимостей в программу во время оптимизации, и описывается реализация такого компилятора на базе компилятора GCC. Для безопасного компилятора приводится разделение реализованного функционала на три уровня защиты и описание применимости этих уровней, показывается применимость безопасного компилятора на практике, а также оценивается изменение производительности получаемой программы.

Ключевые слова: компилятор, уязвимость, неопределенное поведение.

DOI: 10.15514/ISPRAS-2021-33(4)-14



© МИАН, 2024