Тема: Поиск уязвимостей в программном коде лабораторных работ с помощью статического анализа
Закажите новую по вашим требованиям
Представленный материал является образцом учебного исследования, примером структуры и содержания учебного исследования по заявленной теме. Размещён исключительно в информационных и ознакомительных целях.
Workspay.ru оказывает информационные услуги по сбору, обработке и структурированию материалов в соответствии с требованиями заказчика.
Размещение материала не означает публикацию произведения впервые и не предполагает передачу исключительных авторских прав третьим лицам.
Материал не предназначен для дословной сдачи в образовательные организации и требует самостоятельной переработки с соблюдением законодательства Российской Федерации об авторском праве и принципов академической добросовестности.
Авторские права на исходные материалы принадлежат их законным правообладателям. В случае возникновения вопросов, связанных с размещённым материалом, просим направить обращение через форму обратной связи.
📋 Содержание
1 ТЕХНОЛОГИИ СТАТИЧЕСКОГО АНАЛИЗА 9
1.1 Синтаксический анализ 10
1.2 Методы статического анализа 13
1.3 Инструменты статического анализа 21
1.4 Выводы по разделу 22
2 РЕАЛИЗАЦИЯ И ПРОЕКТИРОВАНИЕ СТАТИЧЕСКОГО АНАЛИЗАТОРА ДЛЯ ПОИСКА УЯЗВИМОСТЕЙ В ЛАБОРАТОРНЫХ РАБОТАХ 23
2.1 Высокоуровневая архитектура анализатора 24
2.2 Ядро анализатора 26
2.3 Интерфейсы взаимодействия с анализатором 32
2.4 Разработанный статический анализатор 35
2.5 Выводы по разделу 38
ЗАКЛЮЧЕНИЕ 44
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 46
Приложения должны быть в работе, но в данный момент отсутствуют
📖 Введение
Дополнением к тестированию выступают инструменты статического анализа, основанные на различных формальных алгоритмах. Такие инструменты позволяют находить различные классы ошибок, что позволяет повысить общее качество кода.
Допускать ошибки в коде свойственно любым программистам, но особенно часто их допускают неопытные программисты. К этой группе относят студенты, которые только начинают программировать и еще мало знакомы с проблемами, возникающими при реализации программных систем.
В учебные заведения, обучающих программированию, поступают люди с разным уровнем подготовки, для некоторых из них могут быть не известны «лучшие практики» или конвенции, принятые сообществом, поэтому важно сразу научить таких людей писать код с учетом принятых правил, для более простого развития в будущем.
Статический анализ способен отсеять большое количество типовых проблем в коде, что вырабатывает «правильные» практики у студентов и освобождает время у преподавателя на выявление проблем в лабораторных работах.
Так как большинство студентов являются начинающими программистами, то они не используют сложные конструкции языка или паттерны программирования, исходя из этого, важными критериями при анализе кода лабораторных работ, является:
- обработка ошибок;
- контроль пользовательского ввода;
- некорректная работа со стандартными функциями;
- соблюдение конвенций и стиля кодирования.
На данный момент на рынке статических анализаторов C/C++ не так много средств, которые можно использовать для проверки лабораторных работ бесплатно. Поэтому встает вопрос о разработке статического анализатора, который позволит находить типовые ошибки и будет способен гибко конфигурироваться и использоваться программистами любого уровня.
Задачи, которые предстоит решить:
- рассмотреть способы поиска уязвимостей в программном коде;
- разработать анализатор и оболочку к нему в виде плагина для IDE Visual Studio Code;
- реализовать правила для поиска уязвимостей/ошибок;
- протестировать анализатора на реальных лабораторных работах.
✅ Заключение
1. Были рассмотрены методы и инструменты статического анализа, по итогам анализа были выбраны методы статического анализа и инструментарий для реализации синтаксического разбора.
2. Был разработан статический анализатор кода, нацеленный на поиск уязвимостей в лабораторных работах. Он реализует построение графов потока управления и данных, так же предоставляет информацию о типах, объявленных в файлах. Анализатор поддерживает расширение посредством правил. Всего было реализовано 17 правил, которые обнаруживают наиболее часто встречающиеся уязвимости в коде студентов.
3. Анализатор интегрирован в текстовый редактор Visual Studio Code. Плагин позволяет показывать найденные ошибки непосредственно в редакторе кода, а также выводит текстовое описание каждой проблемы.
4. Проведено тестирование разработанного анализатора на тестовой выборке лабораторных работа, написанных студентами 1-го курса ЮУрГУ на языках C/C++. В результате анализатор обнаружил 2066 проблем в коде. Большинство ошибок было связано со стилем (793 срабатывания) и неправильным использованием стандартных методов языка (820 срабатываний).
5. Разработанный анализатор сравнивался с существующими решениями на рынке:
- SonarLint. Разработан SonarSource. Коммерческая лицензия;
- PVS-Studio. Разработан ООО «ПВС». Коммерческая лицензия;
- Cppcheck. Анализатор с открытым исходным кодом. Лицензия GPLv3.
Анализаторы запускались с настройками по умолчанию. Разработанный анализатор выдал больше всего предупреждений, лучше других находил ошибки связанные с неправильными использований методов из стандартных библиотек языка и нарушением стиля. Также анализатора не плохо показал себя при нахождении неоптимального кода и ошибок, уступив только SonarLint. В результате сравнения выяснилось, что каждый анализатор хорошо находит определенные классы уязвимостей, и существующие анализаторы плохо подходят для обнаружения ошибок, которые допускают студенты в лабораторных работах, так как нацелены на использование опытными разработчиками при разработке крупных программных комплексов.



