Компиляторные технологии


Об отделе

Работа отдела сконцентрирована в областях параллельного программирования, новых технологий компиляции, обеспечении безопасности систем и данных, в сферах анализа исходного и бинарного кода, а также сетевого трафика. Почти все сотрудники окончили Московский государственный университет им. М.В. Ломоносова (МГУ) или Московский физико-технический институт (МФТИ). Все они начинали свою профессиональную деятельность в группе будучи студентами. В коллективе отдела присутствуют аспиранты (около 5 человек ежегодно) и студенты (около 30 человек ежегодно) МГУ и МФТИ. Помимо научно-образовательной деятельности сотрудники отдела занимаются работой над контрактными проектами.

Основные направления деятельности

  • Анализ бинарного кода.
  • Анализ исходного кода с целью выявления дефектов.
  • Параллельное и распределенное программирование.
  • Методы оптимизации компиляторов для современных платформ

Темы исследовательских проектов для студентов

Анализ сетевого трафика

Методы и алгоритмы выделения и анализа данных в сетевом трафике:

    • Классификация и анализ P2P-трафика на примере протоколов Bittorrent;
    • Изучение и разработка декларативного языка описания протоколов;
    • Классификация и анализ прокси-серверов;
    • Исследование и разработка алгоритмов классификации трафика.

Развитие инфраструктуры универсальной системы анализа трафика:
    • Разработка универсального API и компоненты (например, «извлечение передаваемых файлов»);
    • Разработка системы автоматического масштабирования по входному потоку;
    • Разработка эффективной системы хранения образцов трафика с настраиваемой индексацией.
Разбор и анализ прикладных протоколов HTTP/2 (Google Search) и WebDav (Yandex Disk).

Регулярные выражения, конечные автоматы, деревья, графы и их применение к задачам анализа:
    • Анализ автоматов состояний протоколов;
    • Построение и анализ графов взаимодействия;
    • Выявление цепочек событий в сетевом трафике.
Прикладной анализ шифрованного трафика:
    • Анализ цепочек сертификатов и ЭЦП;
    • Детальный анализ алгоритмов рукопожатия и обмена ключами;
    • Обнаружение и идентификация туннелей;
    • Поведенческий анализ.

Статический анализ исходного кода

Анализ программ на различных языках программирования (kotlin, C с ассемблерными вставками).

Автоматическое исправление исходного кода на основе предупреждений, выданных статическим анализатором.

Методы группировки похожих предупреждений об ошибках.

Девиртуализация вызовов Java/C++ методов.

Разработка AST-детекторов ошибок в компиляторах clang, javac, kotlin.

Разработка детекторов ошибок использования неинициализированной памяти и целочисленных переполнений.

Поиск ошибок и уязвимостей:

    • Валидация результатов анализа помеченных данных с помощью символьного выполнения.

Анализ критичности программных дефектов

Методы автоматизированной оценки критичности программных дефектов:

    • Подход к генерации ROP программ, основанный на алгоритмах машинного обучения;
    • Поиск, определение семантики ROP гаджетов и их комбинация в цепочки, выполняющие произвольные вычисления;
    • Обобщение алгоритмов генерации ROP программ для широкого набора целевых архитектур (JOP и др.).
Методы автоматизации обратной инженерии:
    • Метод анализа атак повторного использования кода.
Обеспечение безопасности программного обеспечения:
    • Разработка и реализация методов предотвращения эксплуатации уязвимостей на уровне компиляторов и операционных систем.

Фаззинг и анализ бинарного кода

Фаззинг сетевых протоколов с учётом состояний, фаззинг прошивок микроконтроллеров.

Статический анализ бинарного кода (разработка методов анализа помеченных данных, а также разработка методов поиска и исправления ошибок в бинарном коде на базе анализа известных эксплойтов).

Динамическая символьная интерпретация бинарного кода (для широкого набора целевых архитектур; с целью увеличения покрытия фаззинга).