Plan Szkolenia
Dzień 1
Bezpieczeństwo IT i bezpieczne kodowanie
- Natura bezpieczeństwa
- Terminy związane z bezpieczeństwem IT
- Definicja ryzyka
- Różne aspekty bezpieczeństwa IT
- Wymagania różnych obszarów aplikacji
- Bezpieczeństwo IT vs. bezpieczne kodowanie
-
Od podatności do botnetów i cyberprzestępczości
- Natura błędów bezpieczeństwa
- Powody trudności
- Od zainfekowanego komputera do celowanych ataków
-
Klasyfikacja błędów bezpieczeństwa
- Taksonomia Landwhera
- Siedem Zgubnych Królestw
- OWASP Top Ten 2013
- Porównanie OWASP Top Ten 2003 – 2013
Wprowadzenie do Microsoft® Security Development Lifecycle (SDL)
- Agenda
-
Aplikacje pod atakiem...
- Ewolucja cyberprzestępczości
- Ataki skupiają się na aplikacjach
- Większość podatności znajduje się w mniejszych aplikacjach ISV
-
Początki Microsoft SDL...
- Historia bezpieczeństwa w Microsoft...
- Które aplikacje muszą przestrzegać SDL?
-
Microsoft Security Development Lifecycle (SDL)
- Microsoft Security Development Lifecycle (SDL)
- Wymagania przed SDL: Szkolenie z bezpieczeństwa
- Faza pierwsza: Wymagania
- Faza druga: Projektowanie
- Faza trzecia: Implementacja
- Faza czwarta: Weryfikacja
- Faza piąta: Wydanie – Plan reakcji
- Faza piąta: Wydanie – Ostateczny przegląd bezpieczeństwa
- Faza piąta: Wydanie – Archiwizacja
- Wymaganie po SDL: Reakcja
- Wytyczne procesu SDL dla aplikacji LOB
- Wytyczne SDL dla metodyk Agile
- Bezpieczny rozwój oprogramowania 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 obaw aplikacji
-
Obrona w głąb
- Podstawowa zasada SDL: Obrona w głąb
- Obrona w głąb – przykład
-
Zasada najmniejszych uprawnień
- Najmniejsze uprawnienia – przykład
-
Bezpieczne domyślne ustawienia
- Bezpieczne domyślne ustawienia – przykłady
Zasady bezpiecznej implementacji
- Agenda
- Microsoft Security Development Lifecycle (SDL)
-
Podstawy przepełnienia bufora
- Procesory Intel 80x86 – główne rejestry
- Układ adresów pamięci
- Mechanizm wywoływania funkcji w C/C++ na x86
- Zmienne lokalne 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 exploit
-
Walidacja wejścia
- Koncepcje walidacji wejścia
-
Problemy z liczbami całkowitymi
- Reprezentacja liczb ujemnych
- Przepełnienie liczby całkowitej
- Przepełnienie arytmetyczne – zgadnij wynik!
- Ćwiczenie IntOverflow
- Jaka jest wartość Math.Abs(int.MinValue)?
-
Łagodzenie problemów z liczbami całkowitymi
- Łagodzenie problemów z liczbami całkowitymi
- Unikanie przepełnienia arytmetycznego – dodawanie
- Unikanie przepełnienia arytmetycznego – mnożenie
- Wykrywanie przepełnienia za pomocą słowa kluczowego checked w C#
- Ćwiczenie – Użycie słowa kluczowego checked w C#
- Wyjątki wywołane przez przepełnienia w C#
-
Studium przypadku – Przepełnienie liczby całkowitej w .NET
- Rzeczywista podatność na przepełnienie liczby całkowitej
- Wykorzystanie podatności na przepełnienie liczby całkowitej
-
Podatność na przechodzenie ścieżki
- Łagodzenie podatności na przechodzenie ścieżki
Dzień 2
Zasady bezpiecznej implementacji
-
Iniekcja
- Typowe metody ataków SQL Injection
- Ślepa i czasowa iniekcja SQL
- Metody ochrony przed SQL Injection
- Iniekcja poleceń
-
Uszkodzona autentykacja – zarządzanie hasłami
- Ćwiczenie – Słabość zahashowanych haseł
- Zarządzanie i przechowywanie haseł
- Specjalne algorytmy haszujące do przechowywania haseł
-
Cross-Site Scripting (XSS)
- Cross-Site Scripting (XSS)
- Iniekcja CSS
- Wykorzystanie: iniekcja przez inne tagi HTML
- Zapobieganie XSS
-
Brak kontroli dostępu na poziomie funkcji
- Filtrowanie przesyłanych plików
-
Praktyczna kryptografia
- Zapewnienie poufności za pomocą kryptografii symetrycznej
- Algorytmy szyfrowania symetrycznego
- Szyfry blokowe – tryby działania
- Skrót lub skrót wiadomości
- Algorytmy haszujące
- Kod uwierzytelniający wiadomość (MAC)
- Zapewnienie integralności i autentyczności za pomocą klucza symetrycznego
- Zapewnienie poufności za pomocą szyfrowania kluczem publicznym
- Zasada – posiadanie klucza prywatnego
- Typowe błędy w zarządzaniu hasłami
- Ćwiczenie – Zakodowane na stałe hasła
- Podsumowanie
Zasady bezpiecznej weryfikacji
- Testowanie funkcjonalne vs. testowanie bezpieczeństwa
- Podatności bezpieczeństwa
- Priorytetyzacja
- Testowanie bezpieczeństwa w SDLC
- Kroki planowania testów (analiza ryzyka)
-
Określenie zakresu i gromadzenie informacji
- Interesariusze
- Aktywa
- Powierzchnia ataku
- Cele bezpieczeństwa dla testowania
-
Modelowanie zagrożeń
- Modelowanie zagrożeń
- Profile atakujących
- Modelowanie zagrożeń oparte na drzewach ataków
- Modelowanie zagrożeń oparte na przypadkach nadużycia/wykorzystania
- Przypadki nadużycia/wykorzystania – prosty przykład sklepu internetowego
- Podejście STRIDE per element do modelowania zagrożeń – MS SDL
- Identyfikacja celów bezpieczeństwa
- Diagramowanie – przykłady elementów DFD
- Diagram przepływu danych – przykład
- Enumeracja zagrożeń – STRIDE i elementy DFD MS SDL
- Analiza ryzyka – klasyfikacja zagrożeń
- Model oceny ryzyka zagrożeń DREAD
-
Techniki i narzędzia testowania bezpieczeństwa
- Ogólne podejścia do testowania
- Techniki dla różnych kroków SDLC
-
Przegląd kodu
- Przegląd kodu pod kątem bezpieczeństwa oprogramowania
- Analiza skażenia
- Heurystyki
-
Statyczna analiza kodu
- Statyczna analiza kodu
- Ćwiczenie – Użycie narzędzi do statycznej analizy kodu
-
Testowanie implementacji
- Manualna weryfikacja w czasie rzeczywistym
- Manualne vs. automatyczne testowanie bezpieczeństwa
- Testy penetracyjne
- Testy obciążeniowe
-
Fuzzing
- Automatyczne testowanie bezpieczeństwa – fuzzing
- Wyzwania związane z fuzzingiem
-
Skanery podatności webowych
- Ćwiczenie – Użycie skanera podatności
-
Sprawdzanie i wzmacnianie środowiska
- Common Vulnerability Scoring System – CVSS
- Skanery podatności
- Publiczne bazy danych
-
Studium przypadku – Omijanie uwierzytelnienia formularzy
- Podatność na zakończenie NULL bajtem
- Podatność na omijanie uwierzytelnienia formularzy w kodzie
- Wykorzystanie podatności na omijanie uwierzytelnienia formularzy
Źródła wiedzy
- Źródła bezpiecznego kodowania – zestaw startowy
- Bazy danych podatności
- Wytyczne bezpiecznego kodowania .NET na MSDN
- Ściągawki z bezpiecznego kodowania .NET
- Polecane książki – .NET i ASP.NET
Opinie uczestników (5)
Wielokrotnie podane przykłady dla każdego modułu i doskonała znajomość trenera.
Sebastian - BRD
Szkolenie - Secure Developer Java (Inc OWASP)
Przetłumaczone przez sztuczną inteligencję
Moduł 3: Ataki i wykorzystania w aplikacjach, XSS, iniekcja SQL Moduł 4: Ataki i wykorzystania na serwerach, DoS, BOF
Tshifhiwa - Vodacom
Szkolenie - How to Write Secure Code
Przetłumaczone przez sztuczną inteligencję
Wiedza trenera w dziedzinie przedmiotu była znakomita, a sposób prezentacji sesji, który umożliwiało publiczności podążanie za demonstracjami, naprawdę pomagał w utrwaleniu tej wiedzy w porównaniu z samym siedzeniem i słuchaniem.
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ę