Приветствуем вас на странице о летней стажировке в ИСП РАН!

Для кого предназначена стажировка? В первую очередь мы ориентируемся на студентов после 1-го курса, кому уже интересно получить практический опыт. Если же вы студент более старших курсов — тоже пишите, руководители смогут подобрать тему и для вас.

Как же можно попасть на стажировку?

  1. Напишите информацию о себе: про ваши знания, навыки, проекты, успехи и достижения, что вас вдохновляет. Укажите ссылку на github (при наличии). Успехи могут быть небольшими, но эта информация поможет руководителям понять, насколько тема соответствует вашим навыкам.
  2. Уточните, какие именно темы вас заинтересовали и почему. Несколько строк ваших мыслей, видение сути проблемы смогут сказать о вас руководителям еще чуточку больше, и вероятно, это окажется ключевой причиной, почему на данную тему выберут именно вас. Не стесняйтесь писать своими словами, откиньте шаблоны и помощь ChatGPT — такие тексты легко определяются и не вызывают интереса. Простыми словами выразить свои мысли — лучшее решение.
  3. Отправьте это письмо специалисту по координации работы со студентами Ярославе Коорт — koort@ispras.ru.
  4. В письме обязательно представьтесь: ФИО, ВУЗ, факультет, курс, ваши контактные данные (телеграм в том числе).
  5. Далее ждите ответа.

Что происходит дальше? Все письма направляются руководителям для ознакомления. После знакомства с письмом вам предложат пройти тестовое задание, по итогу которого будут отобраны кандидаты на летнюю стажировку (условия и сроки стажировки обсуждаются с руководителями).

ТемаОписание задачиДополнительная информацияРуководитель
1.Синтез логических схем по таблицам истинностиТребуется разработать программный модуль, который по заданной таблице истинности булевой функции (возможно, расширенной don’t-care-значениями) синтезирует комбинационную логическую схему, оптимизированную по размеру (area), глубине (delay) или переключательной активности (power). Варианты базисов: {AND, NOT}, {AND, XOR, NOT}, {MAJ, NOT}, {MAJ, XOR, NOT}. Число переменных: 4-10. Применение: ресинтез подсхем в больших интегральных схемах.Язык программирования: C++
Окружение: Linux
Александр Камкин
2.Оптимизация конечно-автоматных схемТребуется разработать программный модуль, позволяющий перекодировать состояния конечного автомата, заданного структурно (на уровне логических вентилей). Варианты кодировок: стандартный двоичный код, унитарный код (one-hot encoding), код Грея. Цель перекодирования: улучшение характеристик схемы (площади, задержки, энергопотребления). Число состояний автомата: единицы-десятки.Язык программирования: C++
Окружение: Linux
Александр Камкин
3.Ретайминг последовательностных схемТребуется разработать программный модуль, позволяющий оптимизировать последовательностную логическую схему, аннотированную задержками элементов, по частоте за счет изменения положения триггеров (не меняя функциональности схемы). Классическая статья: Leiserson, C.E.; Saxe, J.B. (1983). «Optimizing Synchronous Systems». Требование: возможность работы со схемами, состоящими из 1 млн элементов и более.Язык программирования: C++
Окружение: Linux
Александр Камкин
4.Поиск точек эквивалентности логических схемТребуется разработать программный модуль, позволяющий идентифицировать (потенциальные) точки эквивалентности/антиэквивалентности логической схемы (точки, всегда принимающие одинаковые/противоположные значения). Вариант решения: рандомизированная симуляция с какой-нибудь адаптивной стратегий генерацией входных данных. Применение: проверка логической эквивалентности (LEC, Logic Equivalence Checking).Язык программирования: C++
Окружение: Linux
Александр Камкин
5.Декомпиляция class-файлов JavaСтатический анализатор Svace находит ошибки в программах написанных на Java, Kotlin, Scala. При этом анализируется также код из jar-библиотек. Пользователю может быть непонятно описание найденной ошибки, стек-трейс которой проходит через библиотечный класс, поскольку исходный код библиотеки может отсутствать в проекте. Для решения этой проблемы мы планируем декомпилировать jar-библиотеки в исхоный код на Java, после чего сохранить его в артефактах сборки проекта, проходящей под контролем Svace, а также показывать этот код на сервере истории предупреждений, найденных анализатором.Язык программирования: Java, Python. Окружение: Linux / Windows.Алексей Бородин
6.Реализация АСТ анализа для ScalaЯзык Scala является популярным языком, совмещающий парадигмы ООП и функционального программирования. В работе требуется с помощью antlr выполнить разбор программ на языке Scala, с последующим анализом инструментом UAST Svace.Язык программирования: Java. Окружение: Linux / Windows.Алексей Бородин
7.Разработка плагина для IdeaОписание Требуется написать плагин для популярной среды разработки Idea, который будет показывать результаты статического анализатора Svace.
Использование плагина упростит понимание выданных ошибок за счёт работы в привычной среде.
Язык программирования: Java. Окружение: Linux / Windows.Алексей Бородин
8.Поддержка AST анализа языка Rust в статическом анализаторе SvaceАнализатор Svace имеет в свойм составе инструмент UAST (Unified AST), который выполняет статический анализ на основе абстрактных синтаксических деревьев (AST) для поиска ошибок в языках Java, Kotlin, Go, Python и JavaScript. В работе предполагается добавить анализ языка Rust. Основная сложность задачи — специфический синтаксис Rust, который содержит значительной количество сущностей не встречающихся ни в одном из поддерживаемых языков.

В ходе работы потребуется:
1. Изучить особенности синтаксиса Rust.
2. Изучить библиотеки используемые для генерации AST Rust (например syn).
3. Разработать при помощи выбранной библиотеки код на Rust для генерации UAST (для сущностей, которые уже существуют в UAST).
4. Создать дополнительные сущности в UAST для представления синтаксиса уникального для Rust или адаптировать уже существующие для унифицированного представления конструкций, которые похожи на таковые из других языков (match <=> switch, if let <=> instanceof и т.п.)
5. Заставить пару существующих детекторов на основе UAST работать с новыми изменениями.
Язык программирования: Rust, Java. Окружение: Linux / Windows.Алексей Бородин
9.Поиск ошибок при самоприсваивании в языке С++Одной из классических ошибок в языке С++ является определение оператора присваивания, некорректно работающего в случае самоприсваивания. Так как идиома проверки на равенство this и other многими программистами считается избыточной (и, возможно, небезосновательно), подобные ошибки до сих пор часто встречаются даже в промышленном коде. При этом простого указания на ее отсутствие недостаточно в качестве обоснования наличия ошибки. Анализатор Svace уже умеет детектировать отсутствие проверки на самоприсваивание и находить ошибки, связанные с копированием пересекающихся буферов. Однако это не единственный тип возможных ошибок.

Одним из примеров возможных ошибок может быть преждевременное освобождение памяти по указателю this:
A& operator=(A& other) {
free(this->data); // emit warning here…?
this->data = malloc(…);
memmove(this->data, other->data, …); // …or here?
return *this;
}
Задача заключается в разработке нового детектора.
Язык программирования: Java. Окружение: Linux / Windows.Алексей Бородин
10.Разработка нового подхода к анализу кода с использованием больших языковых моделей (LLM)Поиск ошибок в исходном коде с помощью LLM (больших языковых моделей) на основе резюме, сгенерированных LLM по резюме, созданным в процессе анализа svace/sharpchecker.Язык программирования: C#, Python, Окружение: Windows, LinuxВалерий Игнатьев
11.Разработка детектора статического анализатора Svace (SharpChecker)Разработка детектора ошибок на уровне абстрактного синтаксического дерева (АСД) для поиска следующего шаблона ошибки:
Поскольку приоритет операторов ?:, ?? ниже, чем у &&, ||, возможна ошибка в пониманиее программистом работы выражений, сожержащих такие операторы. Рекомендовать добавлять явные скобки или избегать использования.
Пример шаблона:
«a && c ? x : y» означает «(a && c ) ? x : y» а не «a && (c ? x : y)»
Язык программирования: C#, Окружение: WindowsВалерий Игнатьев
12.Разработка детектора статического анализатора Svace (SharpChecker)Разработка детектора ошибок на уровне абстрактного синтаксического дерева (АСД) для поиска востребованных пользователями ошибок в коде на С# на основе существующих в других инструментах, например, [CA2016] Forward the CancellationToken parameter to methods that take one.
Если в функцию можно передать аргумент типа CancellationToken и его нет, а в вызывающей функции он передан в параметр или создается, то выдать соответствующее предупреждение.
Язык программирования: C#, Окружение: WindowsВалерий Игнатьев
13.Разработка детектора статического анализатора Svace (SharpChecker)Разработка детектора ошибок на уровне абстрактного синтаксического дерева (АСД) для поиска следующего шаблона ошибки:
Поскольку приоритет операторов && выше чем ||, возможна ошибка в пониманиее программистом работы выражений, сожержащих такие операторы вместе. Рекомендовать добавлять явные скобки или избегать использования.
Пример шаблона:
«i == 1 || i == 2 && c» означает «i == 1 || (i == 2 && c)» а не «(i == 1|| i == 2)&& c»
Язык программирования: C#, Окружение: WindowsВалерий Игнатьев
14.Разработка детектора статического анализатора Svace (SharpChecker)Разработка детектора ошибок на уровне абстрактного синтаксического дерева (АСД) для поиска следующего шаблона ошибки:
Поскуольку true или false относится к оператору с более высоким приоритетом, возможна ошибка в пониманиее программистом работы выражений, содержащих такие операторы. Рекомендовать добавлять явные скобки или избегать использования.
Пример шаблона:
«x?.y ?? true || c» означает «x?.y ?? (true || c)» а не «(x?.y ?? true ) || c»
Язык программирования: C#, Окружение: WindowsВалерий Игнатьев
15.Разработка детектора статического анализатора Svace (SharpChecker)Разработка детекторов уязвимостей на основе существующего движка анализа помеченных данныхДетекторы задаются на JSON, возможно потребуется модификация движка. Язык программирования: C#, Окружение: WindowsВалерий Игнатьев
16.Исследование и реализация методов статического анализа кода на языке описания аппаратуры SystemVerilogРазработка и реализация статических детекторов («чекеров») для языка SystemVerilog на основе фреймворка для статического анализа SLANG для нахождения несоответствий в цифровом описании логических схем.Язык программирования: С++, Verilog/SystemVerilog.
Окружение: Linux
Рубен Бучацкий
17.Разработка графового компилятора для NPU на основе инфраструктуры MLIRЯзык программирования: С++
Окружение: Linux
Рубен Бучацкий
18.Разработка инструмента для обнаружения состояний гонки времени сборки parmasanДобавление поддержки Ninja и тестирование на открытых проектахЯзык программирования: Си и C++,
окружение: Linux
Владислав Иванишин
19.Построение графа вызовов программы для планировщика направленного фаззинга.Требуется реализовать разрешение неявных вызовов с динамическим обновлением графа вызовов программыЯзык программирования: Rust, C++.
Окружение: Linux
Даниил Куц
20.Построение метрики близости к целевым точкам при направленном фаззингеТребуется реализовать вычисление контекстных весов для базовых блоков в ГПУ и функций в графе вызовов программы на основе покрытия целевых областей кодаЯзык программирования: Rust, C++.
Окружение: Linux
Даниил Куц
21.Выявление нерелевантного кода при направленном фаззингеТребуется реализовать выявление нерелевантного кода на основе анализа достижимого кода и отношения доминированияЯзык программирования: Rust, C++.
Окружение: Linux
Даниил Куц
22.Реализация биндинга для языка Python, для системы анализа трафика.Требуется реализовать биндинг для языка Python существующей системы анализа трафика написанной на C++. Создание биндинга необходимо будет включить в текущий скрипт сборки CMake. Предусмотреть типизацию получаемых функций и классов. Реализовать механизм регистрации callback функций на языке Python, для C++ функций.Язык программирования: C++, Python
Окружение: Linux
Владислав Егоров
23.Реализация lru очереди с ограниченным времени жизни объектовТребуется реализовать least recently updated очередь для временного хранения различных объектов на языке C++. Очередь должна быть потоко-безопасна(идеально как lock-free контейнер). Дополнительным функционал предлагается добавить возможно задания TTL(времени жизни объектов в очереди), с периодической очисткой устаревших данных.Язык программирования: C++
Окружение: Linux
Владислав Егоров
24.Исследование и реализация механизма memory-pool для объектов произвольного размера Имеется уже реализованный memory-pool для объектов фиксированного размера. Все объекты динамического размера(буферы) выделяются стандартными способами(std::alloc). Требуется исследовать возможность реализации механизма memory-pool для таких буферов данныхЯзык программирования: C++
Окружение: Linux
Владислав Егоров
25.BinSide: статический анализ бинарного
кода
– Автоматизированный межпроцедурный поиск дефектов бинарного кода программ;
– Восстановление отладочной информации в исполняемых файлах программ при отсутствии исходного кода;
– Интеграция с инструментами и библиотеками анализа бинарного кода ( в т.ч. Ghidra, Angr.io…);
– Уточнение и дополнение результатов статического анализа информацией собранной в процессе динамического анализа;
– Исследование применимости больших языковых моделей к задачам анализа бинарного кода.
Язык программирования: Java, C++
Окружение: Linux
Артур Акопян
26.Методы семантического анализа
исходного и бинарного кода
– Определение наличия исправлений известных ошибок в бинарном коде и его авторской принадлежности;
– Поиск заданной функциональности в бинарном коде вне зависимости от его архитектуры, целевой системы и реализации;
– Поиск по базе исходного кода с применением описаний, генерируемых нейронными сетями;
– Определение патчей, связанных с устранением критического дефекта, на основе языковых моделей.
Язык программирования: Java, C++
Окружение: Linux
Анна Ильина
27.Средства и методы анализа ПО– Обеспечение масштабируемого анализа от одного исполняемого файла до операционной системы;
– Анализ качества собранного кода с помощью статического анализа, сбора
информации о покрытии кода тестами, определения заимствования
ненадёжного кода, в т.ч. содержащие известные ошибки и проч.;
– Восстановление и анализ взаимосвязей (т.к. заимствование кода,
динамическая компоновка, межпроцессорное взаимодействие) между файлами
внутри операционной системы;
– Поиск перспективных условных переходов;
– Улучшение взаимодействия фаззинга и инструментов динамического символьного выполнения;
– Фаззинг баз данных и генерация корректных запросов;
– Оценка полезности новых входных данных;
– Исследование применимости больших языковых моделей к задачам поиска дефектов.
Язык программирования: C++
Окружение: Linux
Александр Новиков
28.Crusher: Исследование и разработка
методов фаззинга программ
– Разработка методов анализа нейронных сетей с использованием фаззинг тестирования;
– Исследование методов повышения эффективности распределенного фаззинг-тестирования;
– Исследование и разработка методов поиска ошибок на базе динамической бинарной инструментации;
– Применение методов оптимизации для повышения эффективности фаззинга;
– Исследование и разработка методов комбинации статического и динамического анализа;
– Исследование и реализация методов фаззинга устройств интернета вещей;
– Исследование и разработка методов применения фаззинг-тестирования ядра ОС;
– Разработка программного компонента, позволяющего восстанавливать формальные грамматики по корпусу входных данных;
– Исследование и разработка методов осуществления удаленной инструментации для фаззинга встраиваемого ПО;
– Разработка инструмента динамического отображения покрытия при фаззинг-тестировании программы;
– Исследование и разработка методов применения нейронных сетей для повышения эффективности фаззинг-тестирования.
Язык программирования: C++, Java
Окружение: Linux
Максим Мишечкин
29.Crusher: Исследование и разработка
методов динамического анализа сетевых протоколов
– Разработка новых видов инструментации для фаззинга состояний программ, на базе компилятора Clang;
– Разработка методов фаззинга программ, обрабатывающих структурированные данные;
– Разработка методов фаззинга интерпретаторов и JIT компиляторов;
– Исследование и разработка методов фаззинга методами черного ящика;
– Разработка методов извлечения автомата протокола;
– Исследование применимости больших языковых моделей к задачам фаззинга протоколов и парсеров.
Язык программирования: C++
Окружение: Linux
Виталий Акользин
30.Crusher: Символьное выполнение,
эмуляция и фаззинг встроенного ПО
– Развитие инструмента S2E (полносистемная эмуляция, символьное выполнение, параллелизм);
– Разработка методов и инструментов для частичной эмуляции бинарного кода, без эмуляции периферийного оборудования;
– Полносистемная эмуляция в т.ч. с использованием гипервизора и ее применение для тестирования ПО;
– Анализ кода с помощью символьного выполнения при эмуляции;
– Использование и оптимизация снимков состояний при эмуляции («дампы» и «снэпшоты»);
– Интеграция эмуляторов с фаззером и другими инструментами анализа кода.
Язык программирования: C++, Python
Окружение: Linux
Федор Ниськов
31.Анализ безопасности
программно-аппаратных компонентов
беспилотной техники при проведении
исследований в рамках цикла
безопасной разработки
– Доработка инструментов статического и динамического анализа ИСП РАН, упрощающих процесс исследования встраиваемого программного обеспечения данного типа оборудования;
– Выявление дефектов во встраиваемом программном обеспечении данного типа оборудования, при проведении исследований в рамках цикла безопасной разработки;
– Разработка инструментов, позволяющих проводить различные дополнительные типа анализа данного класса оборудования, например для цифровой криминалистики;
– Исследование свойств аппаратной безопасности микроконтроллеров, применяемых в данных типах устройств.
Язык программирования: C++, ASM,
Python
Окружение: Linux
Программы: IdaPro
Денис Стражков
32.Анализ безопасности IOT устройств в
рамках цикла безопасной разработки
– Исследование и разработка методов автоматизации фаззинга сложных объектов оценки;
– Разработка методов фаззинга встраиваемого ПО;
– Поиск и выявление ошибок в ПО.
Язык программирования: C++, ASM,
Python
Окружение: Linux
Программы: IdaPro
Владлен Горчаков
33.Исследование в области автономной
робототехники
– Проектирование управляющих модулей;
– Кинематика и мехатроника;
– Исследование и разработка управляющих программ.
Язык программирования: C++, ASM,
Python
Окружение: Linux
Максим Столяров
34.Коммуникационное оборудование и
системы виртуализации
– Анализ взаимодействия в информационных системах и поиск ошибок в ОС и ПО в рамках цикла безопасной разработки ПО;
– Построение стендов взаимодействия коммуникационного оборудования;
– Построение стендов для исследования сетевых протоколов.
Язык программирования: C++, ASM,
Python
Окружение: Linux
Сергей Химач
35.Компиляторные технологии в фаззинге– Разработка специализированных компиляторных трансформаций для
эффективного фаззинга;
– Разработка методов анализа исходного кода программ с целью повышения
эффективности фаззинга.
Язык программирования: C++, ASM
Окружение: Linux
Даниил Калинин
36.Оптимизация функций стандартной библиотеки для Операционных Систем Реального ВремениТребуется адаптировать быстрый алгоритм печати чисел с плавающей точкой (см. статью «Ryū: fast float-to-string conversion») в операционную систему реального времени стандарта ARINC 653, а также адаптировать тестовый набор и применить его для сравнительного анализа производительности реализаций функции печати.Язык программирования: С, ASM
Окружение: Linux / macOS
Виталий Чепцов
37.Исследование и разработка методов автоматической трассировки стекаТребуется доработать библиотеку автоматической трассировки стека в Операционной Системе Реального Времени стандарта ARINC 653, в частности:
— Реализовать разрешение имён символов с помощью отладочной информации в формате DWARF (с целью повышения читаемости сообщений об ошибках);
— Реализовать трассировку стека с применением сканирования стека (для архитектуры ARMv7-M).
Язык программирования: Python, С, ASM (язык ассемблера ARMv7-M)
Окружение: Linux / macOS
Виталий Чепцов
38.Разработка методов архитектурно-зависимой и платформо-зависимой оптимизации компонентов в Операционных Системах Реального Времени стандарта ARINC 653Требуется ускорить механизм переключения адресных пространств в Операционной Системе Реального Времени стандарта ARINC 653 для процессоров PowerPC e500 и PowerPC 476fp. Предлагается:
— Формировать TLB-записи в бинарном формате на этапе сборки;
— Применить для хранения TLB-записей быструю внутреннюю память.
Язык программирования: Python, С, ASM (язык ассемблера PowerPC)
Окружение: Linux / macOS
Виталий Чепцов
39.Проектирование и разработка драйверов для Операционных Систем Реального Времени стандарта ARINC 653Разработка драйвера (один на выбор):
— Драйвер контроллера Flash-памяти для эмулируемой и аппаратной версий платформы i.MX6;
— Драйвер контроллера PCI для эмулируемой версии платформы i.MX6;
— Драйвер системного таймера для аппаратной платформы на базе архитектуры MIPS64;
— Другие драйвера (UART, I2C, SPI, Flash, PCI, Ethernet, …) для эмулируемых и аппартных платформ.
Язык программирования: Python, С
Окружение: Linux / macOS
Виталий Чепцов
40.Реализация TLS на RISC-V, AArch64, PowerPCТребуется реализовать поддержку ключевого слова _Thread_local из стандарта языка C11 на целевых архитектурах RISC-V (32-bit), AArch64, PowerPC. В реализации нельзя использовать динамическую память, т.е. аллокация всех переменных должна быть статической. Количество потоков известно заранее. Потоки могут перезапускаться, т.е. необходима повторная инициализация переменных в runtime по необходимости.Язык программирования: C, ASM, Python
Окружение: Linux / macOS
Виталий Чепцов
41.Портирование компонентов libc++ во встраиваемую ОСРВСтандарт языка С++ формулирует требования к окружению времени исполнения (исключения, аллокация динамической памяти), а также к функциям стандартной библиотеки. Например, ISO/IEC 14882:2020(E), часть 22, задаёт требования к функционалу стандартных шаблонных контейнеров в C++.
Требуется:
— Адаптировать стандартные шаблонные контейнеры libc++ в библиотеку встраиваемой ОСРВ, а также другие компоненты, необходимые для их работы.
— Адаптировать регрессионный тестовый набор и провести тестирование реализации на соответствие стандарту языка C++.
Язык программирования: C, C++, Python
Окружение: Linux / macOS
Виталий Чепцов
42.Разработка безопасного стекового аллокатора во встраиваемой ОСРВТребуется разработать безопасную реализацию стекового аллокатора памяти для встраиваемой ОСРВ.
Требуемые свойства аллокатора:
— Наличие конфигурируемого защитного кода, проверяющего метаданные аллокатора (освобождается столько же памяти, сколько было выделено);
— По возможности, применение формально верифицированных алгоритмов.
Язык программирования: C, Python
Окружение: Linux / macOS
Виталий Чепцов
43.Разработка структуры данных конфигурационного дерева для ОСРВ стандарта ARINC 653Требуется перепроектировать и реализовать структуру данных конфигурационного дерева для Операционной Системы Реального Времени стандарта ARINC 653, а также адаптировать к нему всю кодовую базу драйверов ОСРВ.
Требования к реализации:
— Поддержка типов, поддерживаемых в текущей реализации конфигурационного дерева;
— Предоставление интерфейса обработки ошибок формата конфигурационного дерева;
— Поддержка абстрактных бинарных объектов.
Язык программирования: C, Python
Окружение: Linux / macOS
Виталий Чепцов
44.Добавление поддержки проектов MicroPython в ОСРВ стандарта ARINC 653Для предоставления окружения разработки ПО низкой степени критичности требуется адаптировать реализацию интерпретатора минимального подмножества языка Python.
Описание проекта MicroPython:
https://github.com/micropython/micropython
Язык программирования: Python, C
Окружение: Linux / macOS
Виталий Чепцов
45.Автоматическая подготовка рабочего окружения разработчика прикладного ПО для ОСРВ стандарта ARINC 653При поставке дистрибутива ОСРВ разработчикам прикладного ПО также передаётся набор бинарно собранных инструментов. Среди них — Python c предзагруженными пакетами.
Требуется настроить автоматическое построение зависимостей pip-пакетов для автоматизации процесса сборки бинарной поставки инструмента сборки проекта в бортовой ОСРВ.
Язык программирования: Python
Окружение: Linux / macOS
Виталий Чепцов
46.Обработка секций исполняемых файлов формата ELF в бортовой ОСРВКомпилятор использует секцию .rodata для хранения констант, которые заведомо не должны быть изменяемыми. Факт неизменяемости гарантируется соответсвующей настройкой блока управления памятью (MMU), осуществляемой операционной системой.
Требуется добавить сквозную поддержку обработки секции .rodata в систему сборки бортовой ОСРВ.
Язык программирования: C, Python
Окружение: Linux / macOS
Виталий Чепцов