Дипломная работа на тему "ТЮМГУ | Разработка онлайн-курса по теме «безопасное программирование на С++»"

Работа на тему: Разработка онлайн-курса по теме «безопасное программирование на С++»
Оценка: отлично.
Оригинальность работы на момент публикации 50+% на антиплагиат.ру.
Ниже прилагаю все данные для покупки.
https://studentu24.ru/list/suppliers/Anastasiya1---1326

Описание работы

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ» ИНСТИТУТ МАТЕМАТИКИ И КОМПЬЮТЕРНЫХ НАУК
Кафедра информационной безопасности

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА
бакалаврская работа
РАЗРАБОТКА ОНЛАЙН-КУРСА ПО ТЕМЕ «БЕЗОПАСНОЕ ПРОГРАММИРОВАНИЕ НА С++»

10.03.01 «Информационная безопасность»

Тюмень 2023

РЕФЕРАТ
Выпускная квалификационная работа 88 с., 1 кн., 2 рис., 6 табл., 8 лист., 50 источн.
ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ, БЕЗОПАСНОЕ
ПРОГРАММИРОВАНИЕ, С++, ОНЛАЙН-КУРС, ОБУЧЕНИЕ
ПРОГРАММИРОВАНИЮ
Объектом исследования является безопасное программирование на C++.
Предметом исследования является обучение безопасному программированию на C++.
Цель работы – разработка онлайн-курса по теме «Безопасное программирование на C++» для начинающих разработчиков.
Методы исследования: теоретические (анализ теоретической базы, классификация ошибок в программном коде), эмпирические (анализ проектов с открытым исходным кодом на наличие ошибок).
Результатом работы является онлайн-курс по теме «Безопасное программирование на C++». Который может внести вклад в обучение начинающих разработчиков, а именно в понимание того, какие существуют современные инструменты и способы повышения безопасности кода, как избежать ошибок, которые могут привести к уязвимостям.

СОДЕРЖАНИЕ
ВВЕДЕНИЕ 5
1 Особенности безопасного программирования на C++ 8
1.1 Отчет Microsoft о зафиксированных уязвимостях 8
1.2 Стандартизация C++ 8
1.3 Распространенные ошибки в коде 9
1.3.1 Переполнение буфера 9
1.3.2 Использование после освобождения 11
1.3.3 Утечка памяти 12
1.3.4 Двойное освобождение памяти 13
1.3.5 Целочисленное переполнение 14
1.3.6 Состояние гонки 15
1.3.7 Использование неинициализированных переменных 16
1.3.8 Несоответствие типов 16
1.4 Инструменты повышения безопасности кода 16
1.4.1 Сборщик мусора 16
1.4.2 Умные указатели 17
1.4.3 Использование контейнеров 18
1.4.4 Compile-time проверки 18
1.4.5 Защита от состояния гонки 19
1.4.6 Инициализация полей класса 21
1.5 Стандарты и рекомендации 21
1.6 Статический анализ кода 22
1.6.1 Компилятор GCC 23
1.6.2 Clang Static Analyzer 23
1.6.3 Cppcheck 23
1.6.4 PVS-Studio 24
1.6.5 Clang-tidy 24
1.7 Выводы по главе 1 25
2 Анализ проектов с открытым исходным кодом 26
2.1 Цель проведения анализа 26
2.2 Проведение анализа 26
2.3 Результаты анализа 27
2.4 Определение взаимосвязи ошибок в коде 28
2.5 Выводы по главе 2 29
3 Разработка онлайн-курса 30
3.1 Цели и задачи онлайн-курса 30
3.2 Процесс прохождения онлайн-курса 30
3.3 Содержание онлайн-курса 31
3.4 Размещение онлайн-курса на сервисе Stepik 31
3.5 Выводы по главе 3 33
4 Апробация 34
4.1 Модуль «Введение» 34
4.2 Модуль «Безопасный код» 35
4.3 Модуль «Инструменты повышения безопасности» 36
4.4 Выводы по главе 4 36
ЗАКЛЮЧЕНИЕ 37
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 39
ПРИЛОЖЕНИЕ А Учебные материалы онлайн-курса 44

ВВЕДЕНИЕ
Безопасность какой-либо информационной системы не всегда зависит от политик безопасности, аутентификации или шифрования. Чтобы скомпрометировать систему, иногда достаточно использовать ошибку в коде. Такие ошибки в большинстве случаев не мешают нормальному функционированию системы, но злоумышленник может использовать их для того, чтобы вызвать неопределённое поведение программы и, как следствие, нарушить безопасность системы.
Синтаксис C++ позволяет легко совершить ошибку. Язык создавался как расширение к языку программирования C, не имеющему механизмов защиты от дефектов в коде [1]. Эти языки перекладывают управление памяти на разработчиков. При этом 70% критических уязвимостей, по отчетам Google и Microsoft, были вызваны небезопасной работой с памятью в коде на C и C++ [2][3].
По данным исследования Positive Technologies, 72% зафиксированных уязвимостей в веб-приложениях вызваны ошибками, допущенными при написании исходного кода [4].
Существуют другие языки программирования, которые обеспечивают лучшую безопасность, но они является менее эффективными. Основная цель C++ – быть максимально быстрым, это во многом достигается за счет принципа нулевых накладных расходов. Это крайне важно для приложений, где важна максимальная производительность, например, во встроенных системах с ограниченными вычислительными ресурсами, в суперкомпьютерах, где более быстрый код позволяет выполнять более масштабные операции, или в центрах обработки данных, куда поступает большое количество запросов. Быстрый код также более экономичен, выполнение вычислений за меньшее время с меньшими ресурсами приводит к меньшему потреблению энергии. Встроенные и мобильные системы могут дольше работать от аккумуляторов, а крупные центры обработки данных экономят деньги на электричестве и охлаждении.

Когда большинство крупных клиентов предпочитают заказывать приложения у компаний с большим опытом и знаниями, то малые организации с ограниченным бюджетом обращаются к разработчикам-новичкам. Однако многие из них в угоду срокам и доходу игнорируют правила безопасного программирования. Поэтому для любого C++ разработчика, особенно начинающего, важно уметь писать безопасный код для качественной работы. Целью данной работы является разработка онлайн-курса по теме
«Безопасное программирование на C++» для начинающих разработчиков.
В результате анализа существующих онлайн-курсов и подобных учебных материалов по направлению безопасного программирования на C++ для начинающих разработчиков, был сделан вывод, что такие курсы практические отсутствуют в свободном доступе. Большая часть подобных материалов предназначена для опытных специалистов либо требует адаптации для быстрого изучения.
Для достижения поставленной цели потребовалось решение следующих задач:
? провести обзор существующих онлайн-курсов, проанализировать их достоинства и недостатки;
? определить взаимосвязь ошибок в коде и наличия уязвимостей;
? изучить особенности безопасного программирования на C++;
? проанализировать наличие уязвимостей в проектах с открытым исходным кодом;
? определить содержание онлайн-курса;
? разработать учебные материалы для онлайн-курса;
? разместить курс на сервисе онлайн-образования;
? провести апробацию разработанного онлайн-курса.
Объект исследования: безопасное программирование на C++.
Предмет исследования: обучение безопасному программированию на C++.
Практическая значимость работы заключается в том, что ее результат может внести вклад в обучение начинающих разработчиков, а именно в понимание того, какие существуют современные инструменты и способы повышения безопасности кода, как избежать ошибок, которые могут привести к уязвимостям. Помимо этого, результат работы принесет пользу работодателям и потенциальным клиентам разработчиков, так как знание основ безопасного программирования необходимо для качественного выполнения работы.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. A History of C++: 1979? 1991 - Bjarne Stroustrup.
2. Memory safety - The Chromium Projects.
3. A proactive approach to more secure code - MSRC Blog.
4. Уязвимости и угрозы веб-приложений в 2020–2021 гг.
5. Дэвидсон Д.Г., Грегори К. Красивый C++: 30 главных правил чистого, безопасного и быстрого кода. — СПб.: Питер, 2023. — 368 с.
6. ISO/IEC 14882:2020 Programming languages — C++.
7. ISO/IEC DIS 14882 - Programming languages — C++.
8. CWE-121: Stack-based Buffer Overflow.
9. Сикорд Р. Безопасное программирование на C и C++, 2-е изд. — М.: ООО «ИД Вильямс», 2015. — 496 с.
10. Intel® Control-flow Enforcement Technology.
11. Новая атака BlindSide позволяет обходить ASLR - Security Lab.
12. Morris worm — он был первым – Habr.
13. Cybersecurity Modules: Security Injections|Cyber4All @Towson.
14. CWE-416: Use After Free.
15. CWE-401: Missing Release of Memory after Effective Lifetime.
16. CWE-415: Double Free.
17. CWE-190: Integer Overflow or Wraparound.
18. Проблема 2038 года: что делать, когда кончится время?
19. CWE-362: Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition').
20. CWE-457: Use of Uninitialized Variable.
21. N2670: Minimal Support for Garbage Collection and Reachability- Based Leak Detection (revised).
22. std::unique_ptr.
23. std::shared_ptr.
24. std::weak_ptr.
25. std::vector.
26. std::deque.
27. std::set.
28. Объявление static_assert (начиная с C++11).
29. Спецификатор constexpr (начиная с C++11).
30. Заголовочный файл стандартной библиотеки <type_traits>.
31. std::lock_guard.
32. Standard library header <atomic> (C++11).
33. Coding Standards.
34. isocpp/ CppCoreGuidelines: The C++ Core Guidelines.
35. microsoft/GSL: Guidelines Support Library.
36. SEI CERT C++ Coding Standard.
37. cpp-best-practices/ cppbestpractices.
38. Warning Options (Using the GNU Compiler Collection (GCC)).
39. Static Analyzer Options (Using the GNU Compiler Collection (GCC)).
40. Static analysis in GCC 10.
41. Clang Static Analyzer.
42. Cppcheck - A tool for static C/C++ code analysis.
43. PVS-Studio – статический анализатор кода.
44. Extra Clang Tools 17.0.0git documentation.
45. About – GitHub.
46. Сведения об API GitHub - Документация по GitHub.
47. Пакет параметров (начиная с C++11).
48. Безопасная разработка и уязвимости программного кода.
49. Основы С++.
50. Stepik — образовательная платформа и маркетплейс курсов.

НЕ НАШЛИ, ЧТО ИСКАЛИ? МОЖЕМ ПОМОЧЬ.

СТАТЬ ЗАКАЗЧИКОМ