Детальная информация
| Название | Анализ влияния оптимизаций современных компиляторов на защищенность программного обеспечения: выпускная квалификационная работа бакалавра: направление 10.03.01 «Информационная безопасность» ; образовательная программа 10.03.01_05 «Безопасность компьютерных систем (Интеллектуальная защита от киберугроз)» = Analysis of the effects of modern compilers optimizations on software security |
|---|---|
| Авторы | Егоров Григорий Константинович |
| Научный руководитель | Семьянов Павел Валентинович |
| Организация | Санкт-Петербургский политехнический университет Петра Великого. Институт компьютерных наук и кибербезопасности |
| Выходные сведения | Санкт-Петербург, 2026 |
| Коллекция | Выпускные квалификационные работы ; Общая коллекция |
| Тематика | оптимизация ; компиляция ; неопределённое поведение ; безопасность программного обеспечения ; optimization ; compilation ; undefined behavior ; software security |
| Тип документа | Выпускная квалификационная работа бакалавра |
| Язык | Русский |
| Уровень высшего образования | Бакалавриат |
| Код специальности ФГОС | 10.03.01 |
| Группа специальностей ФГОС | 100000 - Информационная безопасность |
| DOI | 10.18720/SPBPU/3/2026/vr/vr26-1669 |
| Права доступа | Доступ по паролю из сети Интернет (чтение, печать, копирование) |
| Дополнительно | Новинка |
| Ключ записи | ru\spstu\vkr\42489 |
| Дата создания записи | 21.08.2026 |
Разрешенные действия
–
Действие 'Прочитать' будет доступно, если вы выполните вход в систему или будете работать с сайтом на компьютере в другой сети
Действие 'Загрузить' будет доступно, если вы выполните вход в систему или будете работать с сайтом на компьютере в другой сети
| Группа | Анонимные пользователи |
|---|---|
| Сеть | Интернет |
Целью работы является систематизация и обобщение данных о влиянии небезопасных компиляторных оптимизаций на безопасность ПО и анализ их актуальности путем тестирования современных популярных компиляторов языков C и C++. Объектом исследования являются небезопасные компиляторные оптимизации и их влияние на свойства безопасности кода, формируемого в результате компиляции. Задачи, решаемые в ходе исследования: 1. Провести обзор существующих научных работ и публикаций, посвящённых влиянию компиляторных оптимизаций на безопасность программного обеспечения. 2. Проанализировать основные подходы к оптимизации в популярных компиляторах и описать, как эти подходы могут отражаться на безопасности генерируемого кода. 3. Выделить небезопасные оптимизации и проанализировать их влияние на безопасность программного обеспечения. 4. На примере специально подготовленных фрагментов кода проверить актуальность известных небезопасных оптимизаций для современных популярных компиляторов. В ходе работы проведён аналитический обзор архитектур компиляторов GCC, Clang/LLVM и MSVC, классификация оптимизаций и исследование научных работ в области влияния компиляторных оптимизаций на безопасность программного обеспечения. Были выделены три класса небезопасных оптимизаций: удаление «мёртвого» кода, оптимизации на основе неопределённое поведение и оптимизации, нарушающие свойство выполнения кода за постоянное время. Актуальность данных проблем была проверена в современных компиляторах GCC 16.1, Clang/LLVM 22.1.0 и MSVC v19.50 на архитектуре x86-64 с помощью разработанного набора минимально воспроизводимых примеров. Результаты экспериментов подтвердили актуальность проблемы небезопасных компиляторных оптимизаций: во всех трёх исследованных компиляторах включение оптимизаций привело к появлению уязвимостей в результирующем коде. Результаты работы могут быть использованы разработчиками ПО для снижения рисков внесения оптимизирующими компиляторами уязвимостей в результирующий код.
The purpose of the study is to systematize and generalize data showing effects of unsafe compiler optimizations on software security and conduct their relevance analysis by testing modern С and С++ compilers. The subject of the research is compiler optimization methods and their effects on the security of produced software. The research set the following goals: 1. Conduct an overview of existing research and publications concerning the effects of compiler optimizations on software security. 2. Analyse main optimization approaches in common compilers, describing their potential effects on produced code. 3. Identify unsafe optimization methods, analyse their effects on software security. 4. Check the relevance of acknowledged unsafe optimizations using code fragments prepared specifically for the task. During the work an analytical review of GCC, Clang/LLVM and MSVC compiler architectures was carried out, optimizations were classified and the research concerning studies on compiler optimizations on software security was conducted. Three classes of unsafe optimizations were identified: sensitive data cleanup elimination, undefined behavior-based optimizations and optimizations breaking constant time properties. The relevance of these problems was proved in modern GCC 16.1, Clang/LLVM 22.1.0 and MSVC v19.50 compilers on x86-64 architecture using a set of minimally reproducible code samples. The results of these experiments confirmed the relevance of the problem of the unsafe compiler optimizations: in all three cases the compilers demonstrated vulnerabilities emerging after the optimizations were enabled. The results of this work can be used by software developers in order to lower the risks of optimizing compilers introducing vulnerabilities to the resulting code.
| Место доступа | Группа пользователей | Действие |
|---|---|---|
| Локальная сеть ИБК СПбПУ | Все |
|
| Интернет | Авторизованные пользователи СПбПУ |
|
| Интернет | Анонимные пользователи |
|
- РЕФЕРАТ
- ABSTRACT
- СОДЕРЖАНИЕ
- Определения, обозначения и сокращения
- Введение
- 1 Теоретические основы компиляторных оптимизаций и их влияния на безопасность ПО
- 1.1 Архитектура и основные этапы работы современных оптимизирующих компиляторов
- 1.1.1 Основные этапы процесса компиляции
- 1.1.2 Формальная корректность и правило «as-if»
- 1.1.3 Архитектура GCC
- 1.1.4 Архитектура Clang/LLVM
- 1.1.5 Архитектура MSVC
- 1.1.6 Сравнительный анализ архитектур GCC, Clang/LLVM и MSVC
- 1.2 Уровни оптимизации в популярных компиляторах
- 1.3 Анализ существующих научных исследований
- 1.3.1 Исследования конфликта между корректностью и безопасностью
- 1.3.2 Исследования неопределенного поведения и его роли в компиляторных оптимизациях
- 1.3.3 Изучение проблемы очистки чувствительных данных
- 1.3.4 Нарушение свойства постоянного времени выполнения и атаки по времени
- 1.3.5 Эмпирические исследования
- 1.3.6 Текущее состояние проблемы и перспективы
- 1.4 Методика и инструменты экспериментального исследования
- 1.4.1 Цели и задачи экспериментов
- 1.4.2 Использованные компиляторы, версии и целевая архитектура
- 1.4.3 Инструменты анализа результатов
- 1.4.4 Ограничения экспериментальной методики
- 1.5 Набор минимально воспроизводимых примеров
- 1.6 Выводы
- 1.1 Архитектура и основные этапы работы современных оптимизирующих компиляторов
- 2 Исследование оптимизации удаления «мёртвого» кода и её влияния на очистку чувствительных данных
- 2.1 Семантический конфликт и «естественное решение»
- 2.2 Формальное определение «мертвого» кода
- 2.3 Алгоритм поиска «мертвого» кода
- 2.4 Методы противодействия удалению операций очистки памяти
- 2.5 Результаты тестирования
- 2.6 Выводы
- 3 Исследование оптимизаций, использующих неопределенное поведение
- 3.1 Влияние неопределённого поведения на генерацию кода
- 3.2 Классификация оптимизаций, использующих неопределённое поведение
- 3.3 Влияние на механизмы безопасности
- 3.4 Алгоритм работы компилятора при наличии неопределённого поведения
- 3.5 Результаты тестирования
- 3.6 Выводы
- 4 Исследование оптимизаций, нарушающих свойство постоянного времени выполнения
- 4.1 Оптимизации, создающие условия для атак по сторонним каналам
- 4.2 Концепция постоянного времени выполнения и её нарушение компиляторными оптимизациями
- 4.3 Проблема сохранения постоянного времени выполнения кода при компиляции
- 4.4 Тестируемые паттерны программирования с постоянным временем выполнения
- 4.5 Результаты тестирования
- 4.6 Выводы
- Заключение
- Список использованных источников
- Приложение. Исходный код MRE-DSE