Безопасная разработка
5 дней / 40 ак. часов
Безопасное программирование Secure Coding
-
Описание образовательной программы
Безопасное программирование охватывает основные принципы безопасности и уязвимости программного обеспечения, вызванные небезопасным кодированием в рамках SDLC.
На курсе рассматриваются подходы и технологии, направленные на снижение числа ошибок в коде, особенно таких, которые можно использовать как бреши в его безопасности. Также рассматриваются успешные действия agile-команд и лучшие практики от лидеров рынка (Microsoft, Google).
После изучения курса слушатели будут:
Знать: основные понятия и терминологию в области безопасности
Уметь: разрабатывать, проектировать и поддерживать приложения, используя методы обеспечения безопасности в разрабатываемом коде.
Владеть: навыками безопасного программирования и основами анализа и проектирования безопасности
Разработчики, дизайнеры и архитекторы ПО со стажем работы не менее одного года
Модуль 1. Архитектура безопасного C++: стандарты, ревью и анализ кода
- Корпоративные стандарты C++: внедрение Google C++ Style, автоматизация clang- format
- Практики эффективного Code Review: чек-листы, парное программирование, внедрение Pull Request Workflows
- Статический и динамический анализ: интеграция clang-tidy, cppcheck и AddressSanitizer в рабочий процесс
- Документирование архитектурных решений и изменений: md, Changelog, Internal Knowledge Base
- Инструменты командной разработки: настройка CI для проверки безопасности кода
- Практическая сессия: Анализ и рефакторинг существующего кода с помощью автоматизированных и ручных инструментов качества
Модуль 2. Безопасное управление памятью и ресурсами в C++
- Применение паттерна RAII и умных указателей (std::unique_ptr, std::shared_ptr, std::weak_ptr) для предотвращения утечек памяти
- Использование современных контейнеров STL для безопасной работы с динамическими структурами данных
- Диагностика и устранение ошибок работы с памятью: переполнение буфера, double free, use-after-free, race conditions
- Администрирование ресурсов в многопоточной среде: thread safety, использование std::mutex, std::lock_guard
- Валидация пользовательского ввода: предотвращение классических уязвимостей через строгую типизацию и ограничение данных
- Практическая сессия: Поиск и исправление memory leaks, race conditions и других ошибок в лабораторном проекте
Модуль 3. Устойчивость приложений: защита данных, работа с файловой системой и обработка ошибок
- Реализация безопасных методов сериализации и десериализации данных
- Контроль доступа к файловой системе: защита от path traversal, безопасное открытие и сохранение файлов
- Обработка исключений и управление ошибками: проектирование fail-safe приложений
- Интеграция систем логирования (spdlog, Log) с учетом требований безопасности
- Предотвращение арифметических и логических уязвимостей: integer overflow, signed/unsigned mismatch
- Практическая сессия: Разработка и тестирование защищённых функций ввода- вывода и обработки ошибок
Модуль 4. Многопоточность, синхронизация и параллельное программирование в безопасности
- Проектирование потокобезопасных компонентов с использованием std::thread, std::atomic, std::condition_variable
- Профилирование и устранение Deadlock, Livelock и Race Condition с помощью ThreadSanitizer
- Пул потоков (thread pool) и безопасный обмен данными между потоками
- Контролируемая синхронизация доступа к общим ресурсам: Scoped Lock, Reader/Writer Locks
- Модульное тестирование многопоточных компонентов: инструменты и стратегии
- Практическая сессия: Аудит и устранение дефектов синхронизации в учебном многопоточном приложении
Модуль 5. Интеграция тестирования, аудит безопасности и развитие корпоративных практик
- Модульное и интеграционное тестирование безопасности: инструменты GTest, lcov, gcov
- Внедрение покрытия кода и контроль регресса: автоматизация проверки на уязвимости
- Аудит безопасности существующих проектов: чек-листы, рекомендации, разбор уязвимостей CVE
- Организация внутреннего обучения и обмена знаниями по безопасному C++
- Планирование и документирование процесса устранения уязвимостей: incident response, багтрекеры
- Практическая сессия: Итоговая командная работа — аудит, тестирование и защита реального или лабораторного проекта
-
Получаемый документ

-
Цель курса
Формирование знаний и навыков, необходимых для безопасной разработки программного обеспечения, на примере использования C/C++
-
Необходимая подготовка
- Навыки программирования, желательно на C/C++
- Навыки работы без фреймворков
- Понимание концепций функционирования операционных систем


