Po pierwsze: bezpieczeństwo. Przewodnik dla twórców oprogramowania - ebook
Po pierwsze: bezpieczeństwo. Przewodnik dla twórców oprogramowania - ebook
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
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-9433-9 |
Rozmiar pliku: | 4,3 MB |