Charakterystyka podstawowych ataków w internecie i jak się przed nimi bronić
Bezpieczeństwo w internecie jest jednym z najważniejszych wyzwań jakie współcześnie stoją przed twórcami stron, serwisów i aplikacji. Odpowiednie ich zabezpieczenie jest najważniejszym zadaniem dla programisty, jednak aby to zadanie zrealizować należy znać i rozumieć zagrożenia i ataki jakie mogą być zastosowane przeciwko rozproszonym systemom sieciowym. W artykule przedstawiona jest krótka charakterystyka najważniejszych zagrożeń i ataków na jakie należy zwrócić uwagę oraz sposoby obrony.
Ogólne zasady, porady i uwagi
Na początek warto przedstawić kilka dobrych rad, które należy przestrzegać tworząc aplikację internetową:
- nigdy nie ufaj przychodzącym danym, zawsze traktować je jako potencjalne zagrożenie – waliduj, sprawdzaj, filtruj
- dane do aplikacji mogą być przekazywane nie tylko za pomocą formularzy – mogą zostać wysłane przez API, mogą być dodane do nagłówków HTTP, mogą również być zaszyte w przyjmowanych obrazkach, itp.
- korzystaj z certyfikatów SSL – bezpieczny protokół HTTPS
- zawsze chroń, koduj i ukrywaj wrażliwe dane – zwłaszcza dane o użytkownikach (a już w szczególności dane finansowe)
- ukrywaj pliki przed dostępem – w katalogu „public” mogą być tylko te pliki do których musi mieć dostęp przeglądarka i żadne inne
- sprawdzaj przesyłane pliki – wielkości, rozszerzenie, można przepuszczać plik przez filtry które sprawdzają poprawność pliku, itp.
- wymuszaj na użytkownikach używania dłuższych i bardziej skomplikowanych haseł
- zawsze hash-uj hasła mocnym algorytmem
- loguj i sprawdzaj wszystkie błędy i podejrzane zachowania użytkowników
- aktualizuj oprogramowanie
Cross-Site Scripting (XSS)
Wysłanie obcego kodu (zazwyczaj JavaScript), tak aby strona lub serwis uruchomiła ten kod.
Zagrożenie: atakujący może mieć dostęp do ciasteczek/sesji użytkownika, może modyfikować wygląd i kod strony i inne.
Atak: zazwyczaj poprzez niezabezpieczone formularze lub elementy strony gdzie można dodać swoją treść do strony.
Obrona:
- walidacja danych przychodzących od użytkownika
- ucieczka wszystkich niechcianych znaków
- nie wyświetlanie danych wysłanych od użytkownika bezpośrednio, bez sprawdzenia
SQL Injection
Wstrzyknięcie obcego kodu SQL do zapytania.
Zagrożenie: atakujący może zmienić dane w bazie w sposób niechciany lub uszkodzić/usunąć dane
Atak: atakujący wysyła zapytanie z kodem SQL licząc na uruchomienie tego kodu na serwerze
Obrona:
- walidacja danych
- ucieczka/bindowanie wszystkich parametrów dodawanych do zapytań bazy danych
Cross Site Request Rorgery (XSRF/CSRF)
Użytkownik może nieświadomie wykonać wrogą operację na rzecz atakującego.
Zagrożenie: ataki te są wymierzone w użytkowników, celem atakującego jest wykorzystanie uprawnień użytkownika do wykonania operacji wymagających zgody użytkownika.
Atak: atak ma na celu skłonić użytkownika zalogowanego do serwisu internetowego do tego, aby uruchomić on odnośnik, którego otwarcie wykona w owym serwisie akcję, do której atakujący nie miałby w przeciwnym razie dostępu.
Obrona:
- hasła jednorazowe zabezpieczające np. formularze i akcje – hasło jest generowane jednorazowo przez serwis i od razu sprawdzane, jeżeli jest niepoprawne to akcja nie zostaje wykonana
- dodanie dodatkowych zabezpieczeń w postaci ponownych autoryzacji, zwłaszcza w przypadku ważnych akcji (np. operacji finansowych)
- ustawienie krótszych sesji i ważności danych
Session Hijacking
Przechwycenie sesji użytkownika.
Zagrożenie: atakujący może przejąć na jakiś czas konto użytkownika.
Obrona: każdorazowo sprawdzanie czy IP i User Agent użytkownika nie zmienia się pomiędzy żądaniami w obrębie jednej sesji.
Distributed Denial of Service (DDoS)
Atak polegający na zablokowaniu działania systemu lub usługi.
Atak: polega głównie na obciążeniu atakowanego systemu poprzez zajęcie wszystkich wolnych zasobów, atak przeprowadzany jest równocześnie z wielu komputerów.
Obrona:
- rozproszenie serwisów, tak aby nie wszystkie były skupione np. na jednym serwerze – jeżeli jeden serwis zostanie zaatakowany, inne nie przestaną działać
- CDN – Contend Delivery Network – rozłożenie ruchu na wiele serwerów, przeniesienie serwisu do chmury
Brute Force Attack, Dictionary Attack
Atak: polega na wysyłaniu różnych kombinacji ciągu (np. hasła), aby ostatecznie ustalić (zgadnąć) jaki ten ciąg jest; do tego celu wykorzystywane jest specjalne oprogramowanie.
Obrona:
- wymuszenie na użytkowników odpowiednie skomplikowanego hasła (długość, wielkie i małe znaki, cyfry, znaki specjalne)
- blokowanie możliwość logowania po kilku nieudanych próbach
- captcha – sprawdzanie czy użytkownik nie jest botem
- two-factor authentication (lub multi-factor authentication) – uwierzytelnienie użytkownika odbywa się kilkoma kanałami, np. za pomocą formularz logowania oraz poprzez podanie kodu weryfikacyjnego wysłanego np. w wiadomości SMS
Phishing Attack
Metoda oszukania użytkowników serwisu, aby otrzymać od nich dane wrażliwe (np. dane logowania lub finansowe).
Atak: polega na wysłanie użytkownikowi wiadomości (drogą mailową lub SMS), w której atakujący próbuje nakłonić ofiarę aby ta udzieliła mu wrażliwych danych.
Obrona: uświadamianie użytkowników serwisu, że pewne informacje nie są do nich przesyłane za pomocą wiadomości e-mail lub SMS.