Plan Szkolenia
Dzień 1
Bezpieczeństwo IT i bezpieczne programowanie
- Zasada bezpieczeństwa
- Terminy związane z bezpieczeństwem IT
- Definicja ryzyka
- Różne aspekty bezpieczeństwa IT
- Wymagania różnych obszarów zastosowania
- Bezpieczeństwo IT vs. bezpieczne programowanie
-
Od luk w bezpieczeństwie do botnetów i cyberzbrodni
- Zasada luk w bezpieczeństwie
- Powody trudności
- Od zainfekowanego komputera do celowych ataków
-
Klasyfikacja luk w bezpieczeństwie
- Taksonomia Landwehra
- Siedem Pernicious Kingdoms
- OWASP Top Ten 2013
- Porównanie OWASP Top Ten 2003 – 2013
Wprowadzenie do Microsoft® Security Development Lifecycle (SDL)
- Program
-
Aplikacje pod atakiem...
- Ewolucja cyberzbrodni
- Ataki skupiają się na aplikacjach
- Większość luk w bezpieczeństwie występuje w mniejszych aplikacjach ISV
-
Pochodzenie Microsoft SDL...
- Linia czasu bezpieczeństwa w Microsoft...
- Które aplikacje są wymagane do przestrzegania SDL?
-
Microsoft Security Development Lifecycle (SDL)
- Microsoft Security Development Lifecycle (SDL)
- Wymagania przed SDL: Szkolenie zabezpieczeniowe
- Etap Pierwszy: Wymagania
- Etap Drugi: Projektowanie
- Etap Trzeci: Implementacja
- Etap Czwarty: Weryfikacja
- Etap Piąty: Wydanie – Plan reakcji na incydent
- Etap Piąty: Wydanie – Ostateczna Rewizja Bezpieczeństwa
- Etap Piąty: Wydanie – Archiwizacja
- Wymagania po SDL: Reakcja na incydent
- Wskazówki procesu SDL dla aplikacji LOB
- Wskazówki SDL dla metodologii Agile
- Bezpieczne programowanie wymaga poprawy procesów
Zasady bezpiecznego projektowania
-
Powierzchnia ataku
- Redukcja powierzchni ataku
- Powierzchnia ataku – przykład
- Analiza powierzchni ataku
- Redukcja powierzchni ataku – przykłady
-
Prywatność
- Prywatność
- Zrozumienie zachowań i zaniepokojeniem aplikacji
-
Obrona w głębokości
- Podstawowe zasada SDL: Obrona w głębokości
- Obrona w głębokości – przykład
-
Zasada najmniejszych uprawnień
- Najmniejsze uprawnienia – przykład
-
Bezpieczne domyślne ustawienia
- Bezpieczne domyślne ustawienia – przykłady
Zasady bezpiecznej implementacji
- Program
- Microsoft Security Development Lifecycle (SDL)
-
Podstawy przepełnienia buforów
- Procesory Intel 80x86 – główne rejestry
- Układ adresu pamięci
- Mechanizm wywoływania funkcji w C/C++ na x86
- Lokalne zmienne i ramka stosu
-
Przepełnienie stosu
- Przepełnienie bufora na stosie
- Ćwiczenia – wprowadzenie
- Ćwiczenie BOFIntro
- Ćwiczenie BOFIntro – określenie układu stosu
- Ćwiczenie BOFIntro – prosty atak
-
Walidacja wejść
- Koncepcje walidacji wejść
-
Problemy z liczbami całkowitymi
- Reprezentacja ujemnych liczb całkowitych
- Przepełnienie liczby całkowitej
- Przepełnienie arytmetyczne – zgadnij wynik!
- Ćwiczenie IntOverflow
- Co jest wartością Math.Abs(int.MinValue)?
-
Zmniejszanie problemów z liczbami całkowitymi
- Zmniejszanie problemów z liczbami całkowitymi
- Unikanie przepełnienia arytmetycznego – dodawanie
- Unikanie przepełnienia arytmetycznego – mnożenie
- Wykrywanie przepełnień przy użyciu słowa kluczowego checked w C#
- Ćwiczenie – Używanie słowa kluczowego checked w C#
- Wyjątki wywoływane przez przepełnienia w C#
-
Studium przypadku – Przepełnienie liczby całkowitej w .NET
- Rzeczywisty problem z przepełnieniem liczby całkowitej
- Wykorzystanie luki w przepełnieniu liczby całkowitej
-
Wrażliwość na przechodzenie po ścieżce plików (path traversal)
- Zmniejszanie wrażliwości na przechodzenie po ścieżce plików
Dzień 2
Zasady bezpiecznej implementacji
-
Iniekcja
- Typowe metody ataków SQL Injection
- Ślepa i czasowa iniekcja SQL
- Metody ochrony przed atakami SQL Injection
- Iniekcja poleceń
-
Uszkodzona autoryzacja – zarządzanie hasłami
- Ćwiczenie – Słabość skrótów hasłowych
- Zarządzanie i przechowywanie haseł
- Specjalistyczne algorytmy hashujące do przechowywania haseł
-
Cross-Site Scripting (XSS)
- Cross-Site Scripting (XSS)
- Iniekcja CSS
- Wykorzystanie: iniekcja poprzez inne tagi HTML
- Ochrona przed XSS
-
Brak kontroli dostępu na poziomie funkcji
- Filtracja przekazywanych plików
-
Praktyczna kryptografia
- Zapewnianie poufności za pomocą szyfrów symetrycznych
- Algorytmy szyfrujące symetryczne
- Szyfry blokowe – tryby działania
- Hash lub skrót wiadomości
- Algorytmy hashujące
- Message Authentication Code (MAC)
- Zapewnianie integralności i autentyczności za pomocą klucza symetrycznego
- Zapewnianie poufności za pomocą szyfrów asymetrycznych
- Reguła kciuka – posiadanie prywatnego klucza
- Typowe błędy w zarządzaniu hasłami
- Ćwiczenie – Zaszyfrowane hasła
- Podsumowanie
Zasady bezpiecznej weryfikacji
- Testowanie funkcjonalne vs. testowanie bezpieczeństwa
- Wady bezpieczeństwa
- Priorytetyzacja
- Testowanie bezpieczeństwa w cyklu życia oprogramowania (SDLC)
- Etapy planowania testów (analiza ryzyka)
-
Zakres i gromadzenie informacji
- Stakeholderzy
- Aktywa
- Powierzchnia ataku
- Cele bezpieczeństwa do testowania
-
Modelowanie zagrożeń
- Modelowanie zagrożeń
- Profile atakujących
- Modelowanie zagrożeń na podstawie drzew ataków
- Modelowanie zagrożeń na podstawie przypadków nadużywania/misuse cases
- Przypadki nadużywania – prosty przykład sklepu internetowego
- STRIDE per element approach do modelowania zagrożeń – MS SDL
- Identyfikacja celów bezpieczeństwa
- Diagramowanie – przykłady elementów DFD
- Diagram przepływu danych – przykład
- Wyliczanie zagrożeń – STRIDE i elementy DFD w MS SDL
- Analiza ryzyka – klasyfikacja zagrożeń
- Model rangowania zagrożeń/risków DREAD
-
Techniki i narzędzia testowania bezpieczeństwa
- Ogólne podejścia do testowania
- Techniki dla różnych etapów SDLC
-
Rewizja kodu źródłowego
- Rewizja kodu dla bezpieczeństwa oprogramowania
- Analiza zanieczyszczeń (taint analysis)
- Heurystyki
-
Statyczna analiza kodu źródłowego
- Statyczna analiza kodu źródłowego
- Ćwiczenie – Użycie narzędzi do statycznej analizy kodu
-
Testowanie implementacji
- Ręczne weryfikacje w czasie wykonywania
- Testowanie ręczne vs. automatyczne testowanie bezpieczeństwa
- Testowanie penetracyjne (penetration testing)
- Testy stresowe (stress tests)
-
Fuzzing
- Automatyczne testowanie bezpieczeństwa – fuzzing
- Wyzywające aspekty fuzzing-u
-
Skanery luk w zabezpieczeniach sieci web
- Ćwiczenie – Użycie skanera luk w zabezpieczeniach
-
Sprawdzanie i wzmacnianie środowiska
- System oceny wady (CVSS) – Common Vulnerability Scoring System
- Skanery luk w zabezpieczeniach
- Publiczne bazy danych
-
Studium przypadku – Bypass uwierzytelniania formularza (Forms Authentication)
- Wada zerowania bajta NULL
- Luka w zabezpieczeniach kodu dla uwierzytelniania formularza (Forms Authentication)
- Wykorzystanie biegu bypass-u uwierzytelniania formularza
Źródła wiedzy
- Źródła bezpiecznego programowania – starter kit
- Bazy luk w zabezpieczeniach
- Wytyczne dotyczące bezpiecznego programowania .NET na MSDN
- Cheatsheety dotyczące bezpiecznego programowania .NET
- Polecamy książki – .NET i ASP.NET
Opinie uczestników (5)
Wiele przykładów dla każdego modułu i duża wiedza trenera.
Sebastian - BRD
Szkolenie - Secure Developer Java (Inc OWASP)
Przetłumaczone przez sztuczną inteligencję
Moduł3 Ataki i exploity na aplikacje, XSS, SQL wstrzyknięcie Moduł4 Ataki i exploity na serwery, DOS, BOF
Tshifhiwa - Vodacom
Szkolenie - How to Write Secure Code
Przetłumaczone przez sztuczną inteligencję
Wiedza trenera na temat przedmiotu była wysoce pozioma, a sposób przeprowadzania sesji, który umożliwiał uczestnikom podążanie za prezentacjami, naprawdę pomógł zconsolidować tę wiedzę, porównywalnie do prostego siedzenia i słuchania.
Jack Allan - RSM UK Management Ltd.
Szkolenie - Secure Developer .NET (Inc OWASP)
Przetłumaczone przez sztuczną inteligencję
Zakres wiedzy, jaki został poruszony. Na pewno nie wszystko udało się w dogłębny sposób wytłumaczyć, ale to pewnie kwestia czasu. Szkolenie trwa 3 dni. W ciągu tych 3 dni poruszone zostały różne zagadnienia, które po szkoleniu można bardziej zbadać. Szkolenie jak najbardziej na plus. Dużo wiedzy, zagadnień w skuulowanej formie.
Pawel Sitarz - Icotera sp. z o.o.
Szkolenie - C/C++ Secure Coding
Nic nie było doskonałe.
Zola Madolo - Vodacom
Szkolenie - Android Security
Przetłumaczone przez sztuczną inteligencję