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
 14 godzin

Liczba uczestników


cena netto za uczestnika

Opinie uczestników (5)

Propozycje terminów

Powiązane Kategorie