Bezpieczeństwo
nowoczesnych aplikacji internetowych.
Przewodnik po
zabezpieczeniach
Wydawałoby
się, że ze względu na szeroki dostęp do materiałów
poświęconych bezpieczeństwu systemów informatycznych, temat
ten powinien być świetnie znany każdemu inżynierowi. Mimo to media
regularnie donoszą o spektakularnych naruszeniach zabezpieczeń.
Następstwem udanych ataków mogą być nie tylko straty
finansowe i uszczerbek na wizerunku, ale również zagrożenie
bezpieczeństwa narodowego. Zapewnienie wysokiego stopnia bezpieczeństwa
systemu informatycznego wymaga ciągłego uczenia się, aktualizowania i
systematyzowania swojej wiedzy. Tylko w ten sposób mamy
szansę pokonać hakerów w tym niekończącym się wyścigu
zbrojeń.
Książka systematyzuje
wiedzę dotyczącą ataków hakerskich i technik zabezpieczania
przed nimi aplikacji internetowych.
Autor dogłębnie opisuje metody ataków na poziomie kodu i
architektury systemu. Sporo uwagi poświęca eksperckim technikom
prowadzenia rekonesansów, dzięki którym nawet bez
wiedzy o strukturze i kodzie aplikacji można samodzielnie zrozumieć
sposób jej działania i zidentyfikować wrażliwe punkty
systemu. Następnie omawia różne techniki ataków,
począwszy od łamania zwykłych zabezpieczeń, a skończywszy na metodach
obchodzenia zaawansowanych mechanizmów obronnych. Kolejne
rozdziały dotyczą zapobiegania włamaniom do systemu. Jednym z
ciekawszych zagadnień jest ocena kompromisu pomiędzy zapewnieniem
akceptowalnego poziomu bezpieczeństwa a kosztami i wydajnością
użytkowania aplikacji. Poszczególne zagadnienia zostały
ujęte w ciekawy sposób i przedstawione z kilku
różnych punktów widzenia.
W książce między innymi:
- typowe luki bezpieczeństwa
- podstawowe techniki
atakowania aplikacji
- niestandardowe metody
omijania typowych zabezpieczeń
- wdrażanie zabezpieczeń
aplikacji
- najlepsze praktyki
bezpiecznego kodowania w cyklu programistycznym
- poprawa poziomu
bezpieczeństwa aplikacji internetowych
Wstęp
13
1.
Historia
bezpieczeństwa oprogramowania
29
Początki hakerstwa 29
Enigma - ok. 1930 r. 30
Automatyczne łamanie kodu Enigmy - ok. 1940 r. 33
Poznaj Bombę 34
Phreaking telefonów - ok. 1950 r. 36
Technologia antyphreakingowa - ok. 1960 r. 37
Początki hakowania komputerów - ok. 1980 r. 38
Rozwój sieci WWW - ok. 2000 r. 40
Hakerzy w nowoczesnej erze - po ok. 2015 r. 42
Podsumowanie 45
CZĘŚĆ I.
ROZPOZNANIE
2.
Wstęp
do rekonesansu aplikacji internetowych
49
Zbieranie informacji 49
Mapowanie aplikacji internetowej 51
Podsumowanie 53
3.
Struktura
nowoczesnej aplikacji internetowej 55
Nowoczesne aplikacje kontra aplikacje starszego typu 55
API typu REST 57
JavaScript Object Notation 59
JavaScript 61
Zmienne i zakres 62
Funkcje 64
Kontekst 64
Dziedziczenie prototypowe 65
Asynchroniczność 67
Hierarchia DOM przeglądarki 70
Platformy SPA 72
Systemy uwierzytelniania i autoryzacji 73
Uwierzytelnianie 73
Autoryzacja 74
Serwery WWW 74
Bazy danych po stronie serwera 75
Magazyny danych po stronie klienta 76
Podsumowanie 77
4.
Znajdowanie
subdomen 79
Wiele aplikacji na domenę 79
Wbudowane w przeglądarkę narzędzia do analizy sieci 80
Wykorzystanie rekordów publicznych 82
Archiwa silnika wyszukiwania 83
Przypadkowe archiwa 85
Migawki z serwisów społecznościowych 86
Ataki transferu stref 89
Szukanie subdomen metodą brute force 91
Ataki słownikowe 96
5.
Analiza API 99
Wykrywanie punktu końcowego 99
Mechanizmy uwierzytelniania 102
Struktury punktów końcowych 104
Popularne struktury 104
Struktura specyficzna dla aplikacji 105
Podsumowanie 106
6.
Znajdowanie
zewnętrznych zależności 107
Wykrywanie platform po stronie klienta 107
Wykrywanie platform SPA 107
Wykrywanie bibliotek JavaScriptu 109
Wykrywanie bibliotek CSS 111
Wykrywanie platform po stronie serwera 111
Wykrywanie nagłówków 112
Domyślne komunikaty błędów i strony 404 112
Wykrywanie baz danych 114
Podsumowanie 116
7.
Identyfikowanie
słabych punktów w architekturze aplikacji 117
Sygnały świadczące o bezpiecznej lub niezabezpieczonej architekturze 118
Wiele warstw bezpieczeństwa 121
Zapożyczenia i ponowne odkrywanie 122
Podsumowanie 124
8.
Podsumowanie
części I 125
CZĘŚĆ II.
OFENSYWA
9.
Wstęp
do hakowania aplikacji internetowych 129
Sposób myślenia hakera 129
Rozpoznanie stosowane 130
10.
Ataki Cross-Site Scripting (XSS) 133
Wykrywanie i eksploatacja XSS 133
Zapisane ataki XSS 137
Odbite ataki XSS 138
Ataki XSS oparte na hierarchii DOM 140
Ataki XSS oparte na mutacji 143
Podsumowanie 144
11.
Cross-Site Request Forgery (CSRF)
147
Manipulowanie parametrami zapytania 147
Inne dane wysyłane żądaniami GET 151
Ataki CSRF na punkty końcowe POST 152
Podsumowanie 154
12.
XML
External Entity (XXE) 155
Bezpośrednie ataki XXE 155
Pośrednie ataki XXE 158
Podsumowanie 160
13.
Wstrzykiwanie 161
Wstrzykiwanie SQL-a 161
Wstrzykiwanie kodu 164
Wstrzykiwanie polecenia 168
Podsumowanie 171
14.
Denial
of Service (DoS) 173
Ataki DoS wykorzystujące wyrażenia regularne (ReDoS) 173
Logiczne ataki DoS 176
Rozproszone ataki DoS 179
Podsumowanie 180
15.
Ataki
z wykorzystaniem zewnętrznych zależności
181
Metody integracji 183
Gałęzie i rozwidlenia 183
Integracje z własnym hostingiem 184
Integracja z kodem źródłowym 185
Menedżery pakietów 185
JavaScript 186
Java 188
Inne języki 188
Baza danych Common Vulnerabilities and Exposures 189
Podsumowanie 190
16.
Podsumowanie części II 191
CZĘŚĆ III.
OBRONA
17
.
Zabezpieczanie nowoczesnych aplikacji internetowych 195
Defensywna architektura oprogramowania 196
Wyczerpujące inspekcje kodu 196
Wykrywanie luk 197
Analiza luk 198
Zarządzanie lukami 198
Testy regresyjne 199
Strategie łagodzenia ryzyka 199
Rekonesans stosowany i techniki ofensywne 199
18.
Architektura bezpiecznej aplikacji 201
Analizowanie wymagań dotyczących funkcji 201
Uwierzytelnianie i autoryzacja 202
Protokoły Secure Sockets Layer i Transport Layer Security 203
Bezpieczne dane dostępowe 203
Haszowanie danych dostępowych 205
Uwierzytelnianie dwuskładnikowe 207
Dane osobowe i finansowe 208
Wyszukiwanie 209
Podsumowanie 209
19.
Przegląd
kodu pod kątem bezpieczeństwa
211
Jak zacząć inspekcję kodu 212
Archetypowe luki kontra błędy we własnej logice 213
Od czego zacząć inspekcję pod kątem bezpieczeństwa 214
Antywzorce bezpiecznego kodowania 216
Czarne listy 216
Szablonowy kod 217
Antywzorzec domyślnego zaufania 218
Separacja klienta i serwera 218
Podsumowanie 219
20.
Wykrywanie
luk 221
Automatyzacja bezpieczeństwa 221
Analiza statyczna 222
Analiza dynamiczna 223
Testowanie regresji dotyczącej luk 224
Programy odpowiedzialnego ujawniania luk 227
Programy dla łowców błędów 227
Zewnętrzne testy penetracyjne 228
Podsumowanie 229
21.
Zarządzanie
lukami 231
Odtwarzanie luk 231
Ocena dotkliwości luki 232
Common Vulnerability Scoring System 232
CVSS: Base Scoring 233
CVSS: Temporal Scoring 235
CVSS: Environmental Scoring 236
Zaawansowana punktacja luk 237
Poza selekcją i oceną punktową 238
Podsumowanie 238
22.
Obrona
przed atakami XSS 239
Najlepsze praktyki tworzenia kodu odpornego na ataki XSS 239
Czyszczenie danych wpisanych przez użytkownika 241
DOMParser 242
SVG 242
Blob 243
Czyszczenie hiperłączy 243
Kodowanie encji znakowych HTML-a 244
CSS 245
Zasady Content Security Policy stosowane w celu zapobiegania atakom XSS
246
Źródło skryptu 246
Flagi unsafe-eval i unsafe-inline 247
Implementowanie CSP 247
Podsumowanie 248
23.
Obrona przed atakami CSRF 249
Weryfikacja nagłówka 249
Tokeny CSRF 250
Bezstanowe tokeny CSRF 251
Najlepsze praktyki zapobiegające atakom CSRF 252
Bezstanowe żądania GET 252
Łagodzenie ryzyka atakami CSRF na poziomie aplikacji 253
Podsumowanie 255
24.
Obrona
przed atakami XXE 257
Weryfikacja innych formatów danych 257
Zaawansowane ryzyka XXE 259
Podsumowanie 259
25.
Ochrona
przed wstrzykiwaniem 261
Ochrona przed wstrzykiwaniem SQL-a 261
Wykrywanie wstrzykiwania SQL-a 261
Zapytania parametryzowane 263
Metody obrony specyficzne dla baz danych 264
Ogólne metody ochrony przed wstrzykiwaniem 265
Potencjalne cele wstrzykiwania 265
Zasada najmniejszych uprawnień 266
Tworzenie białej listy poleceń 266
Podsumowanie 268
26.
Ochrona przed atakami DoS 269
Ochrona przed atakami DoS na funkcje parsujące wyrażenia regularne 269
Ochrona przed atakami DoS wymierzonymi w logikę 270
Ochrona przed atakami DDoS 271
Łagodzenie skutków ataków DDoS 271
Podsumowanie 272
27.
Zabezpieczanie
zewnętrznych zależności 273
Ocena drzewa zależności 273
Modelowanie drzewa zależności 274
Drzewa zależności w rzeczywistym świecie 274
Analiza automatyczna 275
Techniki bezpiecznej integracji 275
Podział odpowiedzialności 275
Bezpieczne zarządzanie pakietami 276
Podsumowanie 277
28.
Podsumowanie
części III 279
Historia bezpieczeństwa oprogramowania 279
Rekonesans aplikacji internetowych 280
Ofensywa 282
Obrona 283
29.
Podsumowanie
287
296
stron, Format: 16.0x23.0cm, oprawa miękka