Safe C++

Cele szkolenia

Po ukończeniu kursu uczestnicy będą potrafili:

  • Stosować nowoczesną składnię języka C++ i idiomy ograniczające ryzyko
  • Używać narzędzi analizy statycznej i dynamicznej, sanitizerów oraz fuzzerów do wykrywania i naprawy defektów
  • Projektować API i moduły z jasnymi kontraktami dotyczącymi własności, czasu życia i współbieżności
  • Migrować wybrane komponenty kodu do bezpieczniejszych wersji
  • Przeprowadzać przeglądy kodu pod względem bezpieczeństwa i pisać testy weryfikujące granice bezpieczeństwa
  • Wykorzystywać funkcje C++26, które zwiększają bezpieczeństwo w projektach C++

Plan szkolenia

Kluczowe pojęcia bezpieczeństwa

  • Bezpieczeństwo pamięci a bezpieczeństwo typów
  • Taksonomia Undefined behavior (UB)
  • Typowe rodzaje ataków (use‑after‑free, buffer overflow, integer overflow)
  • Identyfikacja, klasyfikacja i priorytetyzacja słabych punktów kodu

Nowoczesne wzorce C++ dla bezpieczeństwa

  • Czas życia obiektów, reguły aliasowania, relokacja i semantyka przenoszenia, unikanie wiszących referencji, bezpieczne użycie kontenerów
  • RAII i deterministyczne zarządzanie zasobami; inteligentne wskaźniki i menadżery zasobów
  • Semantyka wartości w nowoczesnym C++ (semantyka przenoszenia, perfect forwarding)
  • std::optional, std::variant, std::span
  • Zastępowanie raw pointers i ręcznego zarządzania pamięcią bezpieczniejszymi abstrakcjami
  • Projektowanie API promującego semantykę wartości
  • Znaczenie constexpr i noexcept dla bezpieczeństwa programów
  • Stosowanie wzorców zapobiegających use‑after‑free i wiszącym referencjom

Bezpieczeństwo współbieżności

  • Data races - detekcja przy pomocy TSan
  • Explicit locking - muteksy i strategie blokad
  • Operacje atomowe: std::atomic i model pamięci C++11
  • API bezpieczne dla wątków, unikanie UB w kontekstach współbieżnych
  • Projektowanie modułów bezpiecznych wątkowo

Undefined Behavior i programowanie defensywne

  • Typowe źródła UB - przepełnienie liczb całkowitych ze znakiem, dostęp poza zakresem, nieprawidłowe rzutowania
  • Kontrole defensywne, programowanie kontraktowe, asercje oraz kod przyjazny sanitizerom
  • Wykrywanie i eliminowanie UB

Narzędzia i analiza automatyczna

  • Analizatory statyczne (clang‑tidy, Cppcheck)
  • Ostrzeżenia kompilatora i flagi utwardzania
  • Sanitizery (ASan, UBSan, MSan, TSan)
  • Integracja narzędzi z CI

Fuzzing i testy dynamiczne

  • Omówienie koncepcji fuzzingu
  • Fuzzery libFuzzer i AFL oraz ich integracja
  • Pisanie testów fuzzujących
    • Projektowanie wejść, izolowanie komponentów i instrumentacja
  • Corpus management - rodzaje danych wejściowych i strategie ich generowania
  • Analiza błędów fuzzingu, reprodukcja i raportowanie
  • Techniki testów dynamicznych uzupełniające fuzzing: sanitizery, kontrola runtime

Projektowanie bezpiecznych API i bibliotek

  • Projektowanie bezpiecznego API
  • Jawny transfer własności
  • Strategie obsługi błędów
  • Safe defaults w C++
  • Wersjonowanie i kwestie ABI

Strategie migracji i interoperacyjność

  • Stopniowe utwardzanie kodu legacy
  • Wrappery i adaptery
  • Używanie Safe C++ w krytycznych ścieżkach

Przeglądy kodu i modelowanie zagrożeń

  • Check lista dla code review
  • Modelowanie zagrożeń dla naruszeń pamięci
  • Analiza post‑mortem

Wymagania

Opanowane podstawy C++ (typy, klasy, RAII, szablony, podstawy STL).

Czas trwania

3 dni po 8 godzin lekcyjnych
Wycena szkolenia zamkniętego

Szkolenie zamknięte w siedzibie Klienta.

Klient zapewnia salę szkoleniową i sprzęt.

Zapytaj o termin i cenę
Wycena szkolenia zdalnego

Szkolenie zamknięte w siedzibie Klienta.

Szkolenie live online. Warsztaty z trenerem.

Zapytaj o termin i cenę
Terminy szkoleń otwartych

Brak terminu?

Zgłoś zainteresowanie szkoleniem