Po pierwsze: bezpieczeństwo. Przewodnik dla twórców oprogramowania
Bezpieczeństwo oprogramowania jest niezwykle ważnym i złożonym zagadnieniem. Proste i zawsze sprawdzające się zasady właściwie nie istnieją. Aby zapewnić systemom IT bezpieczeństwo, trzeba zacząć o nim myśleć już na wstępnym etapie projektowania oprogramowania i zaangażować w ten proces cały zespół, od najwyższego kierownictwa, przez architektów, projektantów, po testerów, a nawet przyszłych użytkowników systemu. Często się okazuje, że świadomość wagi problemów bezpieczeństwa jest w takim zespole niewielka, a wiedza – fragmentaryczna.
Ta książka powstała z myślą o architektach oprogramowania, projektantach, programistach i dyrektorach do spraw technicznych. Zwięźle i przystępnie opisano w niej, jak zadbać o bezpieczeństwo na wczesnym etapie projektowania oprogramowania i jak zaangażować w ten proces cały team. Najpierw zaprezentowano podstawowe pojęcia, takie jak zaufanie, zagrożenia, łagodzenie skutków, bezpieczne wzorce projektowe i kryptografia. Omówiono też szczegółowo proces tworzenia projektu oprogramowania i jego przegląd pod kątem bezpieczeństwa. Wyjaśniono, jakie błędy najczęściej pojawiają się podczas kodowania i w jaki sposób powodują powstawanie luk w zabezpieczeniach. Poszczególne zagadnienia zostały uzupełnione obszernymi fragmentami kodu w językach C i Python.
W książce:
- identyfikacja ważnych zasobów, obszarów ataku i granic zaufania w systemie
- ocena skuteczności różnych technik łagodzenia zagrożeń
- wzorce projektowe ułatwiające zapewnianie bezpieczeństwa
- podatności, w tym XSS, CSRF i błędy związane z pamięcią
- testy bezpieczeństwa
- ocena projektu oprogramowania pod kątem bezpieczeństwa
Troska o bezpieczeństwo jest najlepszą praktyką!
SPIS TREŚCI
Słowo wstępne
Przedmowa
Podziękowania
Wprowadzenie
Kto powinien przeczytać tę książkę?
Jakie tematy są omawiane w książce?
Część I: Koncepcje
Część II: Projektowanie
Część III: Implementacja
Posłowie
Dodatki
Dobra, bezpieczna zabawa
Część I. Koncepcje
1. Podstawy
Zrozumieć bezpieczeństwo
Zaufanie
Obdarzanie zaufaniem
Nie możesz zobaczyć bitów
Kompetencja i niedoskonałość
Poziomy zaufania
Decyzje dotyczące zaufania
Komponenty, którym ufamy w sposób pośredni
Bycie wiarygodnym
Klasyczne zasady
Bezpieczeństwo informacji – C-I-A
Złoty standard
Prywatność
2. Zagrożenia
Perspektywa napastnika
Cztery pytania
Modelowanie zagrożeń
Praca na bazie modelu
Identyfikacja aktywów
Identyfikacja obszarów ataku
Określanie granic zaufania
Identyfikacja zagrożeń
Łagodzenie zagrożeń
Rozważania o ochronie prywatności
Modelowanie zagrożeń w każdym miejscu
3. Łagodzenie
Przeciwdziałanie zagrożeniom
Strukturalne strategie łagodzenia skutków
Minimalizuj obszary ataku
Zawężanie okienka podatności
Zminimalizuj ekspozycję danych
Polityka dostępu i kontrola dostępu
Interfejsy
Komunikacja
Przechowywanie danych
4. Wzorce
Cechy projektu
Ekonomia projektowania
Przejrzysty projekt
Minimalizacja narażenia
Najmniejsze przywileje
Jak najmniej informacji
Bezpieczny z założenia
Listy dozwolonych zamiast List zabronionych
Unikaj przewidywalności
Bezpieczna awaria
Zdecydowane egzekwowanie reguł
Pełna mediacja
Jak najmniej współdzielonych mechanizmów
Nadmiarowość
Wielowarstwowa obrona
Rozdzielanie przywilejów
Zaufanie i odpowiedzialność
Zasada ograniczonego zaufania
Przyjmij odpowiedzialność za bezpieczeństwo
Antywzorce
Reprezentant wprowadzony w błąd
Przepływ zwrotny zaufania
Haczyki innych firm
Komponenty, których nie da się załatać
5. Kryptografia
Narzędzia kryptograficzne
Liczby losowe
Liczby pseudolosowe
Kryptograficznie bezpieczne liczby pseudolosowe
Kody uwierzytelniania komunikatów
Używanie MAC do zapobiegania manipulacjom
Ataki metodą powtórzenia
Bezpieczna łączność z użyciem MAC
Szyfrowanie symetryczne
Jednorazowy bloczek
Zaawansowany standard szyfrowania
Używanie kryptografii symetrycznej
Szyfrowanie asymetryczne
Kryptosystem RSA
Podpisy cyfrowe
Certyfikaty cyfrowe
Wymiana kluczy
Korzystanie z kryptografii
Część II. Projekt
6. Projektowanie z uwzględnieniem bezpieczeństwa
Uwzględnianie bezpieczeństwa w projektowaniu
Zadbaj o wyraźne doprecyzowanie założeń projektowych
Określanie zakresu
Określanie wymagań dotyczących bezpieczeństwa
Modelowanie zagrożeń
Wprowadzanie środków łagodzących
Projektowanie interfejsów
Projektowanie obsługi danych
Uwzględnianie prywatności w projekcie
Planowanie pełnego cyklu życia oprogramowania
Osiąganie kompromisów
Prostota projektu
7. Przeglądy bezpieczeństwa
Logistyka SDR
Po co przeprowadzać SDR?
Kiedy należy przeprowadzić SDR?
Dokumentacja jest niezbędna
Proces SDR
1. Przestudiuj projekt
2. Pytaj
3. Identyfikuj
4. Współpracuj
5. Pisz
6. Śledź dokonywane zmiany
Ocena bezpieczeństwa projektu
Wykorzystanie czterech pytań jako wskazówek
Na co zwracać uwagę
Przegląd związany z prywatnością
Przeglądy aktualizacji
Zarządzanie różnicą zdań
Komunikuj się w taktowny sposób
Studium przypadku: trudny przegląd
Eskalowanie braku porozumienia
Ćwicz, ćwicz, ćwicz
Część III. Implementacja
8. Programowanie z uwzględnieniem aspektów bezpieczeństwa
Wyzwania
Złośliwe działanie
Podatności na ataki są błędami
Łańcuchy podatności na zagrożenia
Błędy i entropia
Czujność
Studium przypadku: GotoFail
Jednolinijkowa podatność
Uwaga na „strzał w stopę”
Wnioski z GotoFail
Podatność na błędy w kodowaniu
Niepodzielność
Ataki związane z pomiarem czasu
Serializacja
Typowi podejrzani
9. Błędy w niskopoziomowym programowaniu
Podatności związane z arytmetyką
Błędy w zabezpieczeniach dla liczb całkowitych o stałej szerokości
Luki w zabezpieczeniach precyzji zmiennoprzecinkowej
Przykład: niedomiar wartości zmiennoprzecinkowych
Przykład: przepełnienie liczby całkowitej
Bezpieczna arytmetyka
Luki w zabezpieczeniach dostępu do pamięci
Zarządzanie pamięcią
Przepełnienie bufora
Przykład: podatność alokacji pamięci
Studium przypadku: Heartbleed
10. Niezaufane dane wejściowe
Walidacja
Poprawność danych
Kryteria walidacji
Odrzucanie nieprawidłowych danych wejściowych
Poprawianie nieprawidłowych danych wejściowych
Podatności w łańcuchach znaków
Problemy z długością
Problemy z kodowaniem Unicode
Podatność na wstrzyknięcia
Wstrzyknięcie SQL
Trawersowanie ścieżek
Wyrażenia regularne
Niebezpieczeństwa związane z językiem XML
Łagodzenie ataków typu wstrzyknięcie
11. Bezpieczeństwo sieci Web
Buduj, korzystając z gotowych frameworków
Model bezpieczeństwa sieciowego
Protokół HTTP
Certyfikaty cyfrowe i HTTPS
Zasada tego samego pochodzenia
Cookies
Często spotykane podatności w sieci Web
Skrypty międzywitrynowe (XSS)
Fałszowanie żądania pomiędzy stronami (CSRF)
Więcej podatności i środków łagodzących
12. Testowanie bezpieczeństwa
Czym jest testowanie bezpieczeństwa?
Testowanie bezpieczeństwa na przykładzie podatności GotoFail
Testy funkcjonalne
Testy funkcjonalne z wykorzystaniem podatności
Przypadki testowe do testowania bezpieczeństwa
Ograniczenia testów bezpieczeństwa
Pisanie przypadków testowych do testów bezpieczeństwa
Testowanie walidacji danych wejściowych
Testowanie podatności na ataki XSS
Testowanie odporności na błędne dane
Testy regresji bezpieczeństwa
Testowanie dostępności
Zużycie zasobów
Badanie progu
Rozproszone ataki typu Denial-of-Service
Najlepsze praktyki w testowaniu zabezpieczeń
Rozwój oprogramowania oparty na testach
Wykorzystanie testów integracyjnych
Testy bezpieczeństwa – nadrabianie zaległości
13. Najlepsze praktyki w tworzeniu bezpiecznych projektów
Jakość kodu
Higiena kodu
Obsługa wyjątków i błędów
Dokumentowanie bezpieczeństwa
Przeglądy kodu pod kątem bezpieczeństwa
Zależności
Wybieranie bezpiecznych komponentów
Zabezpieczanie interfejsów
Nie wymyślaj na nowo koła w bezpieczeństwie
Postępowanie z przestarzałymi zabezpieczeniami
Klasyfikowanie zagrożeń
Oceny DREAD
Tworzenie działających exploitów
Podejmowanie decyzji w triażu
Zabezpieczanie środowiska programistycznego
Oddzielenie prac rozwojowych od produkcji
Zabezpieczanie narzędzi programistycznych
Wypuszczanie produktu na rynek
Posłowie
Wezwanie do działania
Bezpieczeństwo to zadanie każdego z nas
Zaprawiony w bezpieczeństwie
Bezpieczeństwo w przyszłości
Poprawa jakości oprogramowania
Zarządzanie złożonością
Od minimalizowania do maksymalizowania przejrzystości
Zwiększanie autentyczności, zaufania i odpowiedzialności oprogramowania
Dostarczanie na ostatnim kilometrze
Wnioski
A. Przykładowa dokumentacja projektowa
Tytuł: dokument projektowy komponentu rejestrującego prywatne dane
Spis treści
Sekcja 1. Opis produktu
Sekcja 2. Przegląd
2.1. Cel
2.2. Zakres
2.3. Pojęcia
2.4. Wymagania
2.5. Cele poza zakresem projektu
2.6. Nierozstrzygnięte kwestie
2.7. Alternatywne rozwiązania
Sekcja 3. Przypadki użycia
Sekcja 4. Architektura systemu
Sekcja 5. Projekt danych
Sekcja 6. Interfejsy API
6.1. Żądanie Witaj
6.2. Żądanie definicji schematu
6.3. Żądanie dziennika zdarzeń
6.4. Żądanie Żegnaj
Sekcja 7. Projekt interfejsu użytkownika
Sekcja 8. Projekt techniczny
Sekcja 9. Konfiguracja
Sekcja 10. Odwołania
B. Słowniczek
C. Ćwiczenia
D. Ściągi
Opinie
Na razie nie ma opinii o produkcie.