Zalecenia dotyczące bezpieczeństwa zarządzanych aplikacji internetowych
Zapewnienie cyberbezpieczeństwa aplikacji internetowych jest ważnym aspektem w dzisiejszym cyfrowym świecie. Szczególnie w sektorze ochrony zdrowia, gdzie przetwarzane są dane wrażliwe, a podmioty sektora świadczą krytyczne usługi z zakresu ochrony zdrowia i życia. Dlatego przygotowaliśmy zalecenia, które dotyczą tego tematu.
Czym są aplikacje internetowe?
Aplikacje internetowe (inaczej: WEB APP) to oprogramowanie, które działa na serwerze i jest dostępne dla użytkowników za pośrednictwem przeglądarki internetowej. W przeciwieństwie do tradycyjnych aplikacji desktopowych, nie wymaga instalacji na komputerze użytkownika. Dzięki temu są elastyczne i łatwo dostępne. Przykładami mogą być portale internetowe, systemy do telemedycyny oraz systemy rejestracji online. Ich wszechobecność sprawia, że są nieodłącznym elementem współczesnej działalności, a jednocześnie często nie zdajemy sobie sprawy, że korzystamy z tego typu rozwiązań.
Dlaczego cyberbezpieczeństwo jest kluczowe dla aplikacji webowych?
Wraz z postępem cyfryzacji rośnie także skala cyberzagrożeń. Dotyczy to wszystkich narzędzi, w tym aplikacji webowych. Stają się one celem ataków, ponieważ często przechowują i przetwarzają wrażliwe dane użytkowników. Brak odpowiednich zabezpieczeń może prowadzić do poważnych konsekwencji, w tym utraty danych, naruszenia prywatności, strat finansowych, a nawet do przerwania ciągłości działania jednostki. W kontekście ochrony zdrowia, cyberataki mogą mieć w skrajnych przypadkach tragiczne skutki, prowadząc do zakłóceń w dostępie do dokumentacji medycznej, opóźnień w leczeniu, a nawet bezpośredniego zagrożenia życia pacjentów. Zapewnienie cyberbezpieczeństwa jest zatem konieczne.
Zalecenia w zakresie cyberbezpieczeństwa aplikacji webowych
Architektura i projektowanie bezpieczeństwa
- Ograniczenie powierzchni ataku – wyłącz nieużywane usługi, porty i funkcje aplikacji, a w razie możliwości ogranicz dostęp do krytycznych elementów np. paneli administracyjnych lub poczty z poziomu internetu.
- Wdrożenie Web Application Firewall (WAF) – skonfiguruj WAF do blokowania typowych ataków (np. SQL Injection, XSS) oraz analizy ruchu w czasie rzeczywistym.
- Zabezpieczenie rozwiązań API – stosuj limity zapytań, weryfikuj format oraz wartości żądań i wymagaj autoryzacji dla wszystkich żądań.
- Separacja środowisk – wydziel osobne środowiska dla rozwoju, testów i produkcji. Dzięki temu zminimalizujesz ryzyko przypadkowej modyfikacji danych produkcyjnych.
- Metody HTTP – ogranicz niepowołane użycie metod takich jak: PUT, DELETE, TRACE.
Uwierzytelnianie i kontrola dostępu
- Uwierzytelnianie wieloskładnikowe – wymagaj 2FA/MFA dla wszystkich kont z dostępem do wrażliwych danych lub paneli administracyjnych. Uwzględniaj też możliwość 2FA/MFA w rozwiązaniach, które planujesz wdrożyć.
- Silne polityki haseł – wymuszaj minimalną długość hasła (co najmniej 16 znaków). Weryfikuj hasła poprzez sprawdzanie ich hashy względem słowników zawierających najpopularniejsze hasła. Blokuj możliwość użycia, jeżeli ich hashe znajdują się na tych listach.
- Zasada najmniejszego uprzywilejowania (PoLP) – nadawaj użytkownikom tylko te uprawnienia, które są niezbędne do wykonywania ich zadań.
- Role-Based Access Control (RBAC) – zdefiniuj role (np. admin, użytkownik, gość) oraz nadawaj uprawnienia na bazie zdefiniowanych grup. Unikaj nadawania pojedynczych uprawnień dla poszczególnych kont.
- Weryfikacja dostępu do danych – sprawdzaj poprawność żądań oraz uprawnienia przy każdym żądaniu, nawet po uwierzytelnieniu.
- Zarządzanie dostępem na podstawie atrybutów – wykorzystuj atrybuty kontekstowe (lokalizacja, adres IP, czas) do wykrywania oraz blokowania podejrzanych zachowań.
Sesje użytkownika
- Zarządzanie sesjami – generuj losowe identyfikatory sesji, unieważniaj je po wylogowaniu i ogranicz ich czas życia w zależności od potrzeby.
- Wysyłanie sesji - nie przekazuj identyfikatorów sesji w parametrach URL.
- Zabezpieczenie sesji – upewnij się, że ustawiono atrybuty „Secure” oraz „HTTPOnly” dla sesji bazujących na ciasteczkach.
Obsługa błędów oraz monitorowanie
- Komunikaty błędów – nie udostępniaj nadmiarowych informacji w przypadku błędu aplikacji/serwera oraz innych komunikatów, zachowując szczegóły w logach.
- Agregacja logów – magazynuj logi w scentralizowanym odrębnym miejscu z ograniczonym dostępem.
- Powiadamianie o atakach – konfiguruj alerty dla nietypowych zdarzeń. Pozwoli to m.in. wykrywać próby ataków na konta użytkowników lub wykorzystania powszechnych klas podatności m.in. SQL Injection, XSS.
Konfiguracja wewnętrzna oraz testowanie
- Segmentacja sieci – wydziel strefy bezpieczeństwa (np. DMZ, backend) oraz kontroluj i ograniczaj ruch między nimi za pomocą firewalli oraz innych urządzeń sieciowych.
- Testowanie bezpieczeństwa - stosuj benchmarki oraz testy bezpieczeństwa dla systemów operacyjnych, baz danych oraz innych aplikacji i usług.
- Domyślne ustawienia – upewnij się, że domyślne poświadczenia zostały zastąpione nowymi, unikalnymi wartościami. Funkcje debugowania i podobne ustawienia nie powinny być dostępne dla standardowych użytkowników, chyba że jest to absolutnie niezbędne do prawidłowego działania aplikacji.
Zarządzanie i aktualizacja
- Inwentaryzacja oprogramowania – ustal jakie technologie, biblioteki oraz oprogramowania są wykorzystywane.
- Aktualizacje bezpieczeństwa – monitoruj informacje o błędach bezpieczeństwa, które dotyczą używanego oprogramowania oraz stosuj mechanizmy minimalizujące ryzyko do czasu aktualizacji podatnych aplikacji.
- Używanie zaufanego oprogramowania – weryfikuj oraz używaj pakietów oraz repozytoriów tylko z zaufanych źródeł. Uważaj na ataki próbujące imitować popularne biblioteki oraz pakiety.
- Pliki strony – okresowo skanuj pliki oraz weryfikuj zapytania, które są wysyłane w trakcie interakcji z aplikacją.
- Pliki systemowe – upewnij się, że ograniczono dostęp do plików zawierających konfigurację aplikacji oraz innych wrażliwych danych.
- Dostęp administracyjny – ogranicz dostęp do panelu administracyjnego oraz serwera z poziomu Internetu.
Bezpieczeństwo komunikacji
- Protokoły TLS/SSL – stosuj bezpieczne protokoły szyfrujące – TLS 1.2/1.3, unikaj przestarzałych rozwiązań: SSL i TLS 1.0/1.1.
- Szyfrowanie komunikacji wewnętrznej – stosuj szyfrowanie w komunikacji wewnętrznej z wykorzystaniem m.in. mTLS.
- Protokół HTTP – skonfiguruj wymuszenie użycia szyfrowania poprzez przekierowanie na HTTPS.
Bezpieczeństwo danych w spoczynku
- Przechowywanie haseł – używaj obecnie uznane za bezpieczne algorytmy haszujące (np. Argon2, Bcrypt).
- Dane medyczne – upewnij się, że informacje takie jak dane medyczne są przechowywane w bezpieczny, zaszyfrowany sposób.
Podstawowe formy ochrony przed atakami
- SQL Injection – zastępuj konkatenację znaków, wbudowanymi i przetestowanymi rozwiązaniami (np. za pomocą Prepared Statements).
- XSS – weryfikuj dane, które może przesłać lub zmodyfikować użytkownik. Enkoduj dane wyjściowe (HTML Entity Encoding).
- CSRF – skonfiguruj nagłówki (np. X-Requested-With) i tokeny synchronizatorów.
- Brute-Force – ogranicz możliwość wielu nieudanych prób logowania poprzez rozwiązania typu CAPTCHA, blokadę adresu IP oraz kont, do których atakujący próbuje się logować.
- DoS/DDoS – rozważ wdrożenie rozwiązania antyDDoS, redundancję kluczowych urządzeń oraz wdrożenie zapasowego łącza.
- Przejęcie sesji – wprowadź mechanizmy wykrywające przejęcie sesji (np. zmianę adresu IP lub nagłówka user-agent).
- Sanityzacja plików – sprawdzaj typ MIME, rozmiar oraz skanuj antywirusowo wszystkie przesyłane pliki.
- Walidacja formatów danych – stosuj wyrażenie regularne (tzw. regex) dla adresów email, numerów telefonów i identyfikatorów.
- Ograniczenie rozmiaru żądań – konfiguruj maksymalny rozmiar przesyłanych danych (np. max 10 MB dla formularzy lub plików również po dekompresji).
- Nagłówki bezpieczeństwa HTTP – włącz oraz skonfiguruj nagłówki takie jak: HSTS, X-Content-Type-Options, Content-Security-Policy, X-Frame-Options, X-XSS-Protection, Referrer Policy.
