📄Работа №215565

Тема: Поиск уязвимостей в программном коде лабораторных работ с помощью статического анализа

📝
Тип работы Дипломные работы, ВКР
📚
Предмет программирование
📄
Объем: 35 листов
📅
Год: 2022
👁️
Просмотров: 6
Не подходит эта работа?
Закажите новую по вашим требованиям
Узнать цену на написание
ℹ️ Настоящий учебно-методический информационный материал размещён в ознакомительных и исследовательских целях и представляет собой пример учебного исследования. Не является готовым научным трудом и требует самостоятельной переработки.

📋 Содержание

ВВЕДЕНИЕ 7
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. В результате сравнения выяснилось, что каждый анализатор хорошо находит определенные классы уязвимостей, и существующие анализаторы плохо подходят для обнаружения ошибок, которые допускают студенты в лабораторных работах, так как нацелены на использование опытными разработчиками при разработке крупных программных комплексов.

Нужна своя уникальная работа?
Срочная разработка под ваши требования
Рассчитать стоимость
ИЛИ

📕 Список литературы

1 Ахо, А. Компиляторы, принципы, технологии и инструменты / А. В. Ахо, Р. Сети, Д. Д. Ульман. – Москва: Издательский дом «Вильямс», 2003. – 768 с.
2 Карпов, А. Статический анализ и регулярные выражения [сайт]. URL: https://pvs-studio.com/ru/blog/posts/cpp/0087/(дата обращения: 10.10.2021).
3 Карпов, А. Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей: [сайт]. URL: https://pvs- studio.com/ru/blog/posts/cpp/0592/(дата обращения: 10.10.2021).
4 Сообщения PVS–Studio // Документация PVS–Studio: [сайт]. – 2021. URL: https://pvs-studio.com/ru/docs/warnings/(дата обращения: 10.10.2021).
5 Хопкрофт, Д. Введение в теорию автоматов, языков и вычислений / Д. Хопкрофт, Э. Р. Мотвани, Д. Ульман. – Москва: Издательский дом «Вильямс», 2008. – 528 с.
6 Ayewah, N. Using Static Analysis to Find Bugs / N. Ayewah, W. Pugh, D. Hovemeyer, J. D. Morgenthaler, J. Penix // IEEE Software. – 2008. V. 25, № 5. – P. 22–29.
7 Baldoni, R. A Survey of Symbolic Execution Techniques / R. Baldoni, E. Coppa, D. C. D’elia, C. Demetrescu, I. Finocchi // ACM Computing Surveys. – 2018. V. 51, № 50. – P. 1–39.
8 Cognitive complexity // Метрика сложности алгоритмов SonarSource: [сайт]. URL: https://www.sonarsource.com/resources/cognitive-complexity/(дата обращения: 07.01.2022).
9 Cortesi, A. Widening and narrowing operators for abstract interpretation / A. Cortesi, M. Zanioli // Computer Languages, Systems & Structures. – 2011. № 37. – P. 24–42.
10 Cppcheck // Лицензия Cppcheck: [сайт]. – 2021. URL: https:// github.com/danmar/cppcheck(дата обращения: 10.10.2021).
11 Cppcheck a tool for static C/C++ code analysis // Сайт проекта Cppcheck: [сайт]. URL: https://cppcheck.sourceforge.io/(дата обращения: 10.10.2021).
12 Cppcheck ListOfChecks // Список правил Cppcheck: [сайт] URL: https://sourceforge.net/p/cppcheck/wiki/ListOfChecks/ (дата обращения:
10.10.2021).
13 CWE-478: Missing Default Case in Switch Statement: [сайт]. URL: https://cwe.mitre.org/data/definitions/478(дата обращения: 17.05.2022).
14 CWE-544: Missing Standardized Error Handling Mechanism: [сайт]. URL: https://cwe.mitre.org/data/definitions/544(дата обращения: 17.05.2022).
15 CWE-841: Improper Enforcement of Behavioral Workflow: [сайт]. URL: https://cwe.mitre.org/data/definitions/841(дата обращения: 17.05.2022).
16 Design overview // Архитектура библиотеки libuv: [сайт]. URL: http://docs.libuv.org/en/v1.x/design.html(дата обращения: 17.05.2022).
17 Emanuelsson, P. A Comparative Study of Industrial Static Analysis Tools / P. Emanuelsson, U. Nilsson // Theoretical Computer Science. – 2008. V. 217. – P. 5–21.
18 ESLint. Architecture // Модульная архитектура ESLint: [сайт]. URL: https://eslint.org/docs/developer-guide/architecture/(дата обращения: 17.05.2022).
19 ESLint. Find and fix problems in your JavaScript code // сайт проекта ESlint: [сайт]. URL: https://eslint.org/(дата обращения: 17.05.2022).
20 Extension API // VS Code документация по разработке расширений: [сайт]. URL: https://code.visualstudio.com/api(дата обращения: 17.05.2022).
21 grammars-v4 // грамматика для стандарта языка С++14: [сайт]. URL: https://github.com/antlr/grammars-v4/tree/master/cpp(дата обращения: 17.05.2022).
22 Jest // Документация фреймворка Jest: [сайт]. URL: https://jestjs.io/(дата обращения: 17.05.2022).
23 MISRA. The 'default' label should be either the first or the last label of a «switch» statement: [сайт]. URL: https://pvs-studio.com/ru/docs/warnings/v2518/
(дата обращения: 17.05.2022).
24 Ortin, F. An empirical evaluation of Lex/Yacc and ANTLR parser generation tools / F. Ortin, J. Quiroga, O. Rodriguez-Prieto, M. Garcia // PLOS ONE. – 2022. – P. 1–4.
25 OWASP // Уязвимости Top 10 – 2021 OWASP: [сайт]. URL:
https://owasp.org/Top10/(дата обращения: 17.05.2022).
26 Parr, T. Adaptive LL(*) Parsing: The Power of Dynamic Analysis / T. Parr, S. Harwell, K. Fisher // OOPSLA. – 2014. – P. 1–5.
27 Sonar Rules C++ static code analysis // Список правил SonarLint: [сайт]. URL: https://rules.sonarsource.com/cpp(дата обращения: 10.10.2021).
28 Source Code Analysis Tools // Список инструментов статического анализа от OWASP (SAST tools): [сайт]. URL: https://owasp.org/www- community/Source_Code_Analysis_Tools(дата обращения: 15.02.2022).
29 State of Software Security v12 // Отчет Veracode о найденных уязвимостях в коде: [сайт]. URL: https://www.veracode.com/state-of-software- security-report(дата обращения: 15.02.2022).
30 TypeScript Documentation // Документация языка TypeScript: [сайт]. URL: https://www.typescriptlang.org/docs/(дата обращения: 17.05.2022).

🛒 Оформить заказ

Работу высылаем в течении 5 минут после оплаты.

©2026 Cервис помощи студентам в выполнении работ