Details

Title Анализ влияния оптимизаций современных компиляторов на защищенность программного обеспечения: выпускная квалификационная работа бакалавра: направление 10.03.01 «Информационная безопасность» ; образовательная программа 10.03.01_05 «Безопасность компьютерных систем (Интеллектуальная защита от киберугроз)» = Analysis of the effects of modern compilers optimizations on software security
Creators Егоров Григорий Константинович
Scientific adviser Семьянов Павел Валентинович
Organization Санкт-Петербургский политехнический университет Петра Великого. Институт компьютерных наук и кибербезопасности
Imprint Санкт-Петербург, 2026
Collection Выпускные квалификационные работы ; Общая коллекция
Subjects оптимизация ; компиляция ; неопределённое поведение ; безопасность программного обеспечения ; optimization ; compilation ; undefined behavior ; software security
Document type Bachelor graduation qualification work
Language Russian
Level of education Bachelor
Speciality code (FGOS) 10.03.01
Speciality group (FGOS) 100000 - Информационная безопасность
DOI 10.18720/SPBPU/3/2026/vr/vr26-1669
Rights Доступ по паролю из сети Интернет (чтение, печать, копирование)
Additionally New arrival
Record key ru\spstu\vkr\42489
Record create date 8/21/2026

Allowed Actions

Action 'Read' will be available if you login or access site from another network

Action 'Download' will be available if you login or access site from another network

Group Anonymous
Network Internet

Целью работы является систематизация и обобщение данных о влиянии небезопасных компиляторных оптимизаций на безопасность ПО и анализ их актуальности путем тестирования современных популярных компиляторов языков 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.

Network User group Action
ILC SPbPU Local Network All
Read Print Download
Internet Authorized users SPbPU
Read Print Download
Internet Anonymous
  • РЕФЕРАТ
  • 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 Выводы
  • 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
...