POLISH

Bezpieczeństwo aplikacji webowych

Book information

ISBN
8395485328, 9788395485329
Language
polish
Format
PDF
Filesize
51 MB (53077047 bytes)
Pages
798\798
Topic
Computers Security
Time added
2022-01-22 23:16:26

Description

Autorzy Wstęp Dlaczego aplikacje webowe? Co można powiedzieć o ich bezpieczeństwie? Największy problem z bezpieczeństwem aplikacji WWW? Czy istnieją metody sprawdzenia poziomu bezpieczeństwa naszych aplikacji? Podziękowania Prawne aspekty ofensywnego bezpieczeństwa IT Wstęp Prawo, czyli właściwie co? Ochrona informacji i dostępu do systemów informatycznych Przełamywanie lub omijanie zabezpieczeń Dostęp do systemu bez omijania zabezpieczeń Podsłuch komputerowy Ingerencja w dane lub w pracę systemu informatycznego Naruszanie integralności danych Zakłócanie przetwarzania danych lub pracy systemu Sabotaż Narzędzia Próba ograniczenia karalności, czyli lex bug bounty Stan wyższej konieczności Kilka uwag końcowych Podstawy protokołu HTTP Wstęp Podstawowa komunikacja HTTP Metody HTTP URL czy URI? Nagłówki HTTP Czy nagłówki są absolutnie wymagane? Wartości przekazywane do aplikacji protokołem HTTP Nagłówki żądania HTTP URL POST: application/x-www-form-urlencoded POST: multipart/form-data Ciasteczka Podsumowanie Burp Suite Community Edition – wprowadzenie do obsługi proxy HTTP Wstęp Wyznaczamy cel Czym jest Burp Suite? Alternatywy i dlaczego Burp? Pobranie i uruchomienie Burp Suite Community Edition Konfiguracja środowiska pracy Przystępujemy do pracy Modyfikowanie zapytań HTTP Przechwytywanie odpowiedzi Repeater – powtórz to jeszcze raz Intruder – automatyzacja i oszczędność czasu Comparer – wskaż różnice Decoder – radzimy sobie z „dziwnym” ciągiem znaków Sequencer – analiza entropii i nie tylko Połączenie nie jest bezpieczne – HTTPS Dopasuj i zamień Socksproxy – proxy w proxy Rozwiązywanie nazw i brak uprawnień Skróty klawiszowe Wtyczki – jeszcze więcej możliwości! Gdy coś przebiega niezgodnie z planem Podsumowanie Protokół HTTP/2 – czyli szybciej, ale czy również bezpieczniej? Wstęp Porównanie komunikacji z HTTP/1.1 Wykorzystanie protokołu TCP Podstawy komunikacji HTTP/2 Bezpieczeństwo Obowiązkowy TLS? Złożoność protokołu Znane podatności raz jeszcze WAF/IDS Co dalej? Narzędzia Podsumowanie Nagłówki HTTP w kontekście bezpieczeństwa Wstęp Jak możemy sprawdzić aktualne nagłówki dla konkretnej strony? Wybrane nagłówki HTTP a ich wpływ na bezpieczeństwo HTTP Strict-Transport-Security (HSTS) Wdrożenie Referrer-Policy Wdrożenie X-Content-Type-Options Wdrożenie Feature-Policy Wdrożenie X-Frame-Options Wdrożenie Nagłówki w służbie omijania zabezpieczeń i filtrów (m.in. WAF) Podsumowanie Chrome DevTools w służbie bezpieczeństwa aplikacji webowych Wstęp Narzędzia Analiza kodu HTML Analiza mechanizmów przechowywania danych (Cookies, Storage) Statyczna analiza kodu JavaScript Debugger JavaScript Wykonywanie kodu JavaScript z użyciem snippetów (Snippets) Punkty wejścia i wykonania kodu (sources oraz execution sinks) Podsumowanie Bezpieczeństwo haseł statycznych Wstęp Metody uwierzytelniania Hasła statyczne Hasła jednorazowe Protokół wyzwanie–odpowiedź Przechowywanie haseł statycznych Funkcje skrótu i ich właściwości Kryptograficzna funkcja skrótu Message Digest Kryptograficzna funkcja skrótu SHA Problem szybkości Sól i pieprz Key stretching Wszystko w jednym – funkcje PBKDF Studium przypadku – Battlefield Heroes Studium przypadku – Dropbox Ataki zdalne (online) Ataki lokalne (offline) Kompromis czasowo-pamięciowy i tęczowe tablice Receptury Polecane zasoby w sieci Rekonesans aplikacji webowych (poszukiwanie celów) Wstęp Cel inwentaryzacji Lokalizacja serwerów webowych na zadanym zakresie adresów IP Poszukiwanie aktywne nmap Poszukiwanie pasywne VirusTotal/PassiveTotal Censys/Zoomeye/Shodan Inne narzędzia Rekonesans poddomen Aktywne zapytania do DNS Amass – metoda słownikowa i pozyskiwanie danych z zewnętrznych źródeł DNS zone transfer DNSSEC Pasywne pozyskiwanie informacji o poddomenach PassiveTotal VirusTotal Google/Bing/Yandex Certificate Transparency logs Projekt Sonar – historyczne wpisy Forward DNS oraz Reverse DNS SecurityTrails CSP Źródła stron HTML/JS/CSS Aplikacje mobilne Domeny wirtualne Automatyzacja rekonesansu Domeny powiązane z bazowymi Builtwith ViewDNS.info Podsumowanie Ukryte katalogi i pliki jako źródło informacji o aplikacjach internetowych Wstęp Systemy kontroli wersji Podstawowe informacje o obiektach Git Plik .gitignore Subversion (SVN) Katalogi i pliki konfiguracyjne środowisk programistycznych JetBrains IDE – PHPStorm, WebStorm, PyCharm, IntelliJ IDEA NetBeans IDE Pliki konfiguracyjne narzędzi deweloperskich Pliki konfiguracyjne specyficzne dla Node.js czy JavaScript: bower.json oraz package.json Plik konfiguracyjny .gitlab-ci.yml (GitLab CI/CD) Plik Ruby on Rails: database.yml Plik macOS .DS_Store Odkrywaj ukryte foldery oraz pliki z gotowym słownikiem dla swojego ulubionego narzędzia Podsumowanie Podatność Cross-Site Scripting (XSS) Wstęp Czym jest XSS oraz typy podatności XSS Skutki XSS Konteksty XSS Konteksty DOM XSS Funkcje typu eval Funkcje przyjmujące kod HTML Funkcje przyjmujące adres URL XSS nie tylko w HTML XSS a dopuszczanie fragmentów HTML Ochrona przed XSS Enkodowanie danych Systemy szablonów z automatycznym enkodowaniem Ochrona przed DOM XSS Filtrowanie HTML Upload plików Content-Security-Policy Filtry anty-XSS w przeglądarkach XSS a popularne biblioteki JS Dynamiczne budowanie szablonów Bezpośrednie podstawianie HTML Pułapka kontekstu URL-owego Frameworki a DOM XSS Podsumowanie Content Security Policy (CSP) Czym jest CSP i przed czym chroni Składnia CSP Dyrektywy CSP Dyrektywy *-src Dyrektywa script-src Dyrektywa base-uri Dyrektywy block-all-mixed-content i upgrade-insecure-requests Dyrektywa form-action Dyrektywa frame-ancestors Dyrektywa plugin-types Dyrektywa report-uri Dyrektywa sandbox Raportowanie Sposoby obejścia CSP Obejście przez JSONP Obejście przez frameworki JS Kiedy warto, a kiedy nie warto stosować CSP? Przykładowe polityki CSP Podsumowanie Same-Origin Policy i Cross-Origin Resource Sharing (CORS) Wstęp Same-Origin Policy (SOP) Przykład 1 Przykład 2 Przykład 3 Cross-Origin Resource Sharing (CORS) Przykład podobny do trzeciego ze wstępu Przykład podobny do drugiego ze wstępu Obiekty XMLHttpRequest2 Model pierwszy – zapytania proste (Simple Requests) Model drugi – zapytania nie-takie-proste (Not-So-Simple Requests) Przesyłanie danych uwierzytelniających w CORS Implementacja mechanizmu CORS po stronie serwera Wady CORS Alternatywy dla CORS JSONP postMessage Serwer proxy WebSockets Flash i crossdomain.xml Sposoby obejścia Same-Origin Policy Obejścia CORS Zbyt szerokie uprawnienia: * (gwiazdka) w odpowiedzi Zbyt szerokie uprawnienia: „odbijanie” originu Błędy implementacji „null” origin Nadmierne zaufanie do stron trzecich CORS i Cache Poisoning Inne przykłady obejścia SOP Przykład 1 Przykład 2 Przykład 3 Przykład 4 Przykład 5 Obejścia dla deweloperów Podsumowanie Polecane zasoby w sieci Podatność Cross-Site Request Forgery (CSRF) Wstęp Przykład 1. CSRF realizowany w tej samej domenie. Nieautoryzowane utworzenie nowego konta administracyjnego, metoda GET Przykład 2. CSRF realizowany pomiędzy różnymi domenami. Nieautoryzowane usunięcie konta administratora, metoda GET CSRF a Same-Origin Policy Przykład 3. CSRF realizowany pomiędzy różnymi domenami. Bankowość elektroniczna, metoda POST CSRF a inne niż GET/POST metody HTTP Przykład 4. CSRF w połączeniu z innymi podatnościami – urządzenia sieciowe Przykład 5. Podatność wieloetapowa – przejęcie dostępu do systemu WordPress Metody ochrony przed CSRF Losowe tokeny SameSite Ekran logowania Nowe podatności wprowadzone przez ochronę przeciwko CSRF Podsumowanie Podatność Server-Side Template Injection (SSTI) Wstęp Silniki szablonów Server-Side Template Injections – Velocity Teoria, metodyka, narzędzia Identyfikacja podatności Identyfikacja silnika Eksploitacja Narzędzia i przykład zastosowania – Freemarker Zapobieganie i obrona Rezygnacja z szablonów (przynajmniej częściowo) Użycie bezpiecznych silników Sandboxing Hardening Podsumowanie Polecane zasoby w sieci Podatność Server-Side Request Forgery (SSRF) Wstęp Przykłady Możliwe skutki wykorzystania podatności Częste miejsca występowania podatności SSRF Podstawy Pliki XML XXE Document type definition (DTD) XInclude SVG/XLink XSLT Formaty pakietów biurowych Inne formaty plików Dowolne formaty MP4 Biblioteki Mechanizm uploadu Inne miejsca Protokoły inne niż HTTP wykorzystywane w SSRF Wstęp HTTPS PHAR Gopher Inne protokoły Częste błędy w filtrach anty-SSRF Filtry blacklist Filtry whitelist Metody ochrony Podsumowanie Podatność SQL Injection Wstęp Czym jest SQL Injection Sposoby wykorzystania SQL Injection UNION-based ERROR-based BLIND (content based) BLIND (time based) Stacked queries Skutki wykorzystania SQL Injection Wydobycie dowolnych danych z bazy Omijanie ekranu logowania Modyfikacja/usuwanie danych Przykład 1. Zmiana hasła administratora: UPDATE Przykład 2. Ścieżka dostępu Przykład 3. Wykonanie kodu PHP Odczyt plików z dysku Zapis plików na dysku Wykonywanie poleceń systemu operacyjnego Jak szukać SQL Injection? Second-order SQL Injection Metody ochrony przed SQL Injection Zapytania parametryzowane Walidacja typów danych Stosowanie systemów klasy ORM Hardening bazy danych Podsumowanie Podatność Path Traversal Wstęp Logika podatności Zagrożenia Ujawnienie nadmiarowych informacji Ujawnienie plików konfiguracyjnych Zdalne wykonanie kodu Szersze spojrzenie na problem Przykłady podatności GlassFish Server ColoradoFTP 1.3 Testowanie Automatyzacja Omijanie filtrów Ochrona Blokowanie ataku poprzez podmianę tekstu Modelowanie zagrożeń Podsumowanie Code Injection i Command Injection – przegląd wektorów ataku w aplikacjach webowych Wstęp Czym jest Code Injection oraz Command Injection? Wektory ataków Formalność – Eval Klasyka: Local File Inclusion i Remote File Inclusion Podatności w mechanizmie wgrywania plików Uruchamianie zewnętrznego oprogramowania – Command Injection Panele administracyjne Cross-Site Scripting a Code Injection Tryb debug a serwer produkcyjny Od SQL Injection do RCE XSLT WebDAV Podatności w bibliotekach Przegląd podatności Drobne błędy Czy to już wszystko? Skutki Wykradanie danych Eskalacja Jakby tego było mało – webshelle i tylne furtki Podsumowanie Uwierzytelnianie, zarządzanie sesją, autoryzacja Wstęp Teoria i podstawowe pojęcia Błędne pojęcia Identyfikacja Uwierzytelnianie Zarządzanie sesją Autoryzacja Błędy bezpieczeństwa Rodzaje mechanizmów uwierzytelniania Sposób klasyczny (zapytanie oraz ciasteczka HTTP) HTTP Basic Authentication OpenID Connect Klucze API Uwierzytelnianie certyfikatem Kerberos oraz NTLM Uwierzytelnianie Nie ma HTTPS, nie ma poświadczeń Brak uwierzytelnienia Po co wyważać, skoro można obejść – omijanie uwierzytelnienia Poświadczenia podane na tacy Praca po stronie serwera Enumeracja użytkowników Automatyzacja ataku, czyli ataki brute-force Zabezpieczenia tak dobre, że aż złe – jak skutecznie bronić się przed atakami siłowymi Jak nie drzwiami, to oknem Reset hasła Niebezpieczne pytania bezpieczeństwa Podaj hasło jeszcze raz – krytyczne akcje Higiena przechowywania haseł Polityka bezpieczeństwa haseł Logowanie zdarzeń Zarządzanie sesją Wymyślanie koła na nowo Regenerowanie sesji Session Fixation Obsługa równoległych sesji Strzec jak oka w głowie Odpowiednia złożoność Odpowiedni czas życia Unieważnianie sesji ID sesji jako fingerprint ID sesji jako zagrożenie Kłopotliwa funkcja „zapamiętaj mnie” Autoryzacja Brak autoryzacji oraz autoryzacja na warstwie interfejsu Podejmowanie decyzji i eskalacja uprawnień Problem globalnych identyfikatorów Centralizacja Rozliczalność oraz niezaprzeczalność Krytyczne operacje Wybór modelu autoryzacji Zasada najmniejszego uprzywilejowania Co można zrobić lepiej Uwierzytelnianie dwuskładnikowe Poszerzanie wiedzy Podsumowanie Polecane zasoby w sieci Pułapki w przetwarzaniu plików XML Wstęp Podstawy XML – encje i encje parametryczne Billion laughs Quadratic blowup XXE (XML eXternal Entity) Inne podatności XML Podsumowanie Bezpieczeństwo API REST Wstęp Czym jest API REST? Metody HTTP Brak ścisłej formalizacji użycia metod Nadpisywanie metod Rekonesans API Przykład Dokumentacja Wykonanie metody API na wiele różnych sposobów Frameworki Struts REST Plugin Spring Data REST Spring OAuth RESTEasy Jackson Databind Tryb debug Jakie formaty danych akceptuje nasze API? JSON XML YAML Bezpośrednia deserializacja Jakiego formatu danych oczekuję w odpowiedzi? Problemy z kluczami API Bezpieczeństwo webhooks Uwierzytelnienie i autoryzacja Problem z uwierzytelnieniem, a następnie z autoryzacją Reset hasła Dostęp do panelu administracyjnego Kradzież środków z jednego z największych banków w Indiach Dostęp do wewnętrznego API Podsumowanie Niebezpieczeństwa JSON Web Token (JWT) Wstęp Definicja Kolejny przykład JWT i pierwsze problemy bezpieczeństwa Kolec pierwszy: nadmierna komplikacja Kolec drugi: none Kolec trzeci: łamanie hasła do HMAC Kolec czwarty: gdzie algorytmów sześć, tam nie ma bezpieczeństwa Kolec piąty: choć może należałoby mu się pierwszeństwo Kolec szósty: czy szyfrowanie JWT może w ogóle działać? Kolec siódmy: dekodowanie/weryfikacja – co za różnica? Kolec ósmy: przechwycenie dowolnego tokena = przejęcie dostępu do API? Kolec dziewiąty: replay JWT Kolec dziesiąty: ataki czasowe na podpis Kolec jedenasty: mnogość bibliotek Alternatywa do JWT? Czy JWT może być bezpieczne? Podsumowanie Polecane zasoby w sieci Zalety i wady OAuth 2.0 z perspektywy bezpieczeństwa Wstęp Czym jest OAuth 2.0? Wykorzystywana terminologia Zasada działania OAuth Korzyści wynikające ze stosowania OAuth Krok w tył – czym OAuth nie jest Pozostałe metody pozyskiwania tokena Implicit Grant Client Credentials Resource Owner Credentials Refresh token Jaką metodę pozyskiwania tokena wybrać? Co może pójść nie tak Brak szyfrowanego kanału komunikacji Serwer autoryzujący Problematyczne przekierowania Stary znajomy – CSRF Granulacja uprawnień Klient Tokeny oraz kody dostępu Consent screen OAuth i phishing Biblioteki i gotowe rozwiązania Aplikacje mobilne Cookies Brak izolacji Krok w tył Złe nawyki Własne URI PKCE Alternatywa dla WebViews oraz Custom URI Aplikacje natywne Różnice w stosunku do OAuth 1.0 oraz kontrowersje Modelowanie zagrożeń Podsumowanie Bezpieczeństwo protokołu WebSocket Wstęp Co to jest i jak działa protokół WebSocket? Prosty klient Zagrożenia Same-Origin Policy Niepoprawne zarządzanie uwierzytelnieniem oraz sesją Ominięcie autoryzacji Wstrzyknięcia i niepoprawna obsługa danych Wyczerpanie zasobów serwera Tunelowanie ruchu Szyfrowany kanał komunikacji Gotowe rozwiązania Testowanie Modelowanie zagrożeń Podsumowanie Polecane zasoby w sieci Flaga SameSite – jak działa i przed czym zapewnia ochronę? Wstęp Podstawy – przeglądarki, ciasteczka i sesja Nadużycie SameSite na ratunek Polityka Lax – nawigacja „top-level” oraz bezpieczne metody HTTP Bilans zysków i strat Podsumowanie: lek na całe zło? Niebezpieczeństwa deserializacji w PHP Wstęp Jak wygląda serializacja w PHP? Podatność PHP Object Injection Trening – wykorzystanie Object Injection w Guzzle Praktyczne wykorzystanie Object Injection Ochrona przed podatnością Podsumowanie Niebezpieczeństwa deserializacji w Pythonie (moduł pickle) Wstęp Jak działa moduł pickle? Złośliwe użycie pickle Sposoby ochrony Podsumowanie Niebezpieczeństwa deserializacji w .NET Wstęp Środowisko programistyczne Json.Net XmlSerializer Case Studies Breeze (CVE-2017-9424) DotNetNuke Platform (CVE-2017-9822) Microsoft SharePoint (CVE-2019-0604) Niebezpieczeństwa deserializacji w Javie Wstęp Podstawy – teoria Mechanizm serializacji/deserializacji Niebezpieczna deserializacja Automatyczne wykonanie metod Klasy „interesujące” i „dostępne” Program deserializuje dane od użytkownika Podatność deserializacji w języku Java Apache commons-collections gadget chain Analiza Podatność deserializacji w języku Java – praktyka Case Study: prosta aplikacja Natywna serializacja a DoS Rekurencyjne zbiory (java.util.Set) Analiza Modyfikacja zserializowanych danych i błąd przepełnienia pamięci Analiza Inne formaty serializacji Biblioteka XStream Jak się zabezpieczyć przed deserializacją niezaufanych danych? Rozwiązanie #0: obfuskacja Rozwiązanie #1: brak serializacji Eliminacja serializacji natywnej Rozwiązanie #2: blokowanie gadżetów Blacklisting i whitelisting Java Serialization Filter Rozwiązanie #3: kryptografia Analiza Rozwiązanie bonusowe: monitoring Monitorowanie przesyłania zserializowanych obiektów Monitorowanie wyjątków Podsumowanie Wprowadzenie do programów bug bounty Wstęp Programy bug bounty Rys historyczny Jak się do tego zabrać? Budowanie warsztatu Udział w konkursach i programy bughunterskie W jaki sposób zgłosić błąd? Dokumentacja programu Zasady punktacji Zgłoszenie znalezionej podatności Modelowy raport Cykl życia błędu, czyli co się dzieje po przesłaniu raportu Jak wybrać program? Na miarę możliwości Rozpoznana technologia Wnikliwa analiza zasad obowiązujących w programie Zakres testu Prawa i obowiązki programów Profesjonalizacja Podsumowanie

Similar books