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
constexprinoexceptdla 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::atomici 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 lekcyjnychWycena 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ę