Как создать программную платформу, наделяющую современные информационные технологии особой надёжностью? В этом очень заинтересована группа исследователей факультета КНиИТ. Создание безопасного компилятора стало темой их научной разработки.
Руководителями и координаторами проекта выступают декан факультета КНиИТ Сергей Владимирович Миронов, заведующая кафедрой технологий программирования Инна Александровна Батраева, доцент кафедры системного анализа и автоматического управления Дмитрий Юрьевич Петров. В тандеме с ними работают магистрант Павел Дунаев и студенты Артемий Гранат и Артём Синкевич.
С 2022 года эта университетская команда сотрудничает с Институтом системного программирования РАН в области исследований по созданию безопасного программного обеспечения, а также с непосредственным заказчиком – ООО «СВД Встраиваемые системы» из Санкт-Петербурга. Все они заинтересованы в надёжности разрабатываемых операционных систем реального времени, всех волнует тема безопасного компилятора, который не пропускает код программы, содержащий ошибки, и предотвращает оптимизации, которые могут привести к непредсказуемому поведению программы или способствовать утечке данных, обрабатываемых этой программой.
Если объяснять популярно, то компилятор – это программа, переводящая написанный на языке программирования текст в набор машинных кодов. С помощью компиляторов компьютеры могут понимать разные языки программирования. По сути, это комплексный «переводчик», который собирает или компилирует программу в исполняемый файл. Исполняемый файл – это набор инструкций для компьютера, которые тот понимает и может выполнить. Для разных языков программирования разработано множество компиляторов.
Сергей Владимирович Миронов:
«Программное обеспечение, которым мы пользуемся, обязательно проходит этап компиляции. Новые языки и системы программирования возникают постоянно, зачастую приходится создавать компиляторы для новых операционных систем, для новых технических требований, поэтому этот процесс никогда не остановится. Собственно, как и технический прогресс. А так как новые компиляторы рождаются постоянно, их все надо проверять на безопасность».
Инна Александровна Батраева:
«Изучение основ теории разработки компиляторов входит в учебные планы студентов, и Павел Дунаев решил применить эти знания в учебном проекте. Работа получилась хорошая, и наш коллега Дмитрий Юрьевич Петров установил связи с Санкт-Петербургской компанией «СВД Встраиваемые системы» и Институтом системного программирования РАН им. В.П. Иванникова. Они активно занимаются разработкой систем в области обеспечения безопасности компиляторов и очень заинтересовались нашими исследованиями.
Когда компилятор переводит текст в машинный код, он проверяет синтаксические ошибки. Но есть ещё и семантические ошибки, которые ведут к искажению текста и совсем неожиданному результату работы. Обычные компиляторы такие ошибки не отслеживают, поэтому может получиться небезопасная ситуация. Классический пример: в математике нельзя делить на ноль, если же мы делаем это на компьютере, всё зависит от компилятора: один ловит ошибку, и программа прекращает работать; другой компилятор выдаёт деление на ноль как бесконечность и использует её дальше. А теперь представьте себе, что бесконечность пошла в бухгалтерский расчёт – то ли бесконечный долг, то ли бесконечная зарплата. А если всё это находится, например, внутри автопилота? Безопасный компилятор должен иметь функционал, который обязательно поймает эту ошибку.
Институт системного программирования РАН как раз этим активно занимается. Его сотрудники разрабатывают программное обеспечение для проверки существующего ПО на безопасность, и в их планах – разработка собственного безопасного компилятора. Всю весну наша команда активно работала над созданием своих способов исследования программ на безопасность, и наши коллеги из Питера предложили нам исследовать на безопасность компилятор, который они сами разработали. Ребята эту работу выполнили, отправили им отчёт, и заказчики остались очень довольны. Сейчас ждём от них следующих заданий.
Я в своей практике занималась тестированием по поиску различных вариантов ошибок, которые в принципе произойти не могут, но всё равно происходят, и могу сказать, что это тяжёлая, кропотливая работа, красивого интерфейса здесь нет. Ребята справились и очень этим горды. И мы ими гордимся тоже!»
Павел Дунаев, студент 2 курса магистратуры:
«Все годы учёбы я интересовался разработкой компиляторов, у меня была увлекательная работа по созданию маленького учебного компилятора.
Есть множество языков программирования, всегда хотелось сделать свой, что не так просто. Но даже если ты его придумал, что дальше? Им нужно как-то пользоваться, а для этого необходимо программное обеспечение. Работе с компиляторами были посвящены мои курсовые, затем дипломная работа. Первое серьёзное впечатление, когда на конференции я увидел большое сообщество людей, объединённых теми же интересами, что и я. Почувствовал значимость того, что ещё предстоит изучить, и обширное поле для деятельности. Коллеги открыли мне глаза, я буквально обрёл новый взгляд на компиляторы как на что-то более сложное, чем это представлялось мне раньше».
Артемий Гранат, студент 4 курса по специальности «Программная инженерия»:
«Я присоединился к работе над проектом, учась на 3 курсе, потому что сфера моих интересов – системное программирование. Прежде чем приступить к поиску нужных решений, изучил теоретические материалы, очень многое почерпнул из них. Операционные системы реального времени встраиваются в станки, в автопилоты, машины, самолёты и т.д. Сделал для себя много открытий, так как раньше не задумывался, чем отличаются такие операционные системы. Свое будущее я собираюсь связать с системным программированием, и знания для специалиста в этой области оказались очень полезными. В рамках этого проекта существуют три класса безопасности (по нарастающей с 3-го класса). Я проверял, соответствует ли предоставленный нам компилятор 3-му и 2-му классу безопасности.
Результатом нашей работы стал доклад на 80 страницах. Мне это очень помогло в учёбе, я получил дополнительные знания по многим предметам. Позже нас пригласили на видеовстречу, где мы рассказали о своих результатах, было задано много вопросов и обозначены темы для будущих исследований».
Бурное обсуждение результатов проекта СГУ по созданию безопасного компилятора было вызвано актуальностью темы, особенно с учётом задач импортозамещения. Сейчас в проектах многих разработчиков – создание своих, российских компиляторов сразу по безопасному функционалу.
Мировое сообщество разрабатывало много компиляторов, их использовали в разных странах, и в какой-то момент стало понятно, что все они сталкиваются с проблемой небезопасных уязвимостей, при которых всегда остаётся риск ошибки, неверного решения. Приходилось их переписывать. Поэтому отечественные разработчики нацелены на такой подход: если уж писать свои компиляторы, то их нужно сразу проверять на функционал надёжности. В проектах питерских и московских коллег вопрос стоит именно так: пока пишем, проверяем, чтобы не нарушить функции безопасности. Это проще, чем потом в авральном режиме переписывать компилятор, который уже пошёл в эксплуатацию.
Беседовала Тамара Корнева, фото Дмитрия Ковшова
Публикации:
Батраева И.А., Миронов С.В., Дунаев П.Д. Библиотека для разработки компиляторов //Труды Института системного программирования РАН. 2022. Т. 34. № 5. С. 77-88.
Батраева И.А., Гранат А.М. Применение технологии фаззинга для тестирования программного кода //Сборник трудов V Международной научно--практической конференции «Современные технологии и автоматизация в технике, управлении и образовании», 2023, т.1, с.222-225.
Mutation-based Fuzzing of Compilers П.Д.Дунаев // XIV научно-практическая конференция «Presenting Academic Achievements to the World» Саратов, СГУ 10-11 апреля 2023.