- Oprogramowanie
Bezpieczeństwo aplikacji webowych — jak odpowiednio zabezpieczyć serwery?
Dostęp do technologii umożliwiający coraz bardziej kreatywne formy ataków wymusza na programistach ciągłe dbanie o bezpieczeństwo aplikacji webowych. Na co zwrócić uwagę i jak przygotować serwer pod instalację aplikacji?
Bezpieczeństwo aplikacji internetowych związane jest nie tylko ze stosowaniem aktualnego szyfrowania, wymaganiem odpowiedniego uwierzytelniania, czy stałym dbaniem o jakość aplikacji. To również regularne łatanie wykrytych luk i opracowanie całościowej strategii bezpieczeństwa, pozwalającej na szybkie reagowanie. Dlaczego jest to tak ważne?
Spis treści
Powszechne luki w bezpieczeństwie aplikacji webowych
Skrypty między witrynami (XSS) — XSS to luka w zabezpieczeniach, która umożliwia hakerowi wstrzyknięcie skryptów po stronie klienta do strony sieci Web w celu uzyskania bezpośredniego dostępu do ważnych informacji, podszywania się pod użytkownika lub nakłaniania go do ujawnienia ważnych informacji.
Wstrzyknięcie SQL — Jest to metoda, za pomocą której atakujący wykorzystuje luki w sposobie, w jaki baza danych wykonuje zapytania wyszukiwania. Atakujący używają SQL, aby uzyskać dostęp do nieautoryzowanych informacji, modyfikować lub tworzyć nowe uprawnienia użytkownika, lub w inny sposób manipulować poufnymi danymi. Do konsekwencji ataku należy np. nieautoryzowane przeglądanie list, usuwanie tabel, czy nieautoryzowany dostęp administracyjny.
Ataki typu „odmowa usługi” (DoS) i rozproszona odmowa usługi (DDoS) — za pomocą różnych wektorów atakujący mogą przeciążać serwer docelowy lub otaczającą go infrastrukturę różnymi rodzajami ruchu związanego z atakami. Gdy serwer nie jest już w stanie efektywnie przetwarzać przychodzących żądań, zaczyna wolno działać i ostatecznie odmawia obsługi żądań przychodzących od legalnych użytkowników.
Fałszowanie żądań między witrynami (CSRF) — atak, który może skutkować niezamówionym transferem środków, zmianą haseł lub kradzieżą danych. Występuje, gdy złośliwa aplikacja internetowa powoduje, że przeglądarka użytkownika wykonuje niepożądane działanie w witrynie, w której użytkownik jest zalogowany. Gdy konto użytkownika zostanie naruszone, osoba atakująca może wydobyć, zniszczyć lub zmodyfikować ważne informacje.
Naruszenie danych — jest to ogólny termin odnoszący się do ujawnienia wrażliwych lub poufnych informacji i może nastąpić w wyniku złośliwych działań, lub przez pomyłkę. Zakres tego, co uważa się za naruszenie danych, jest dość szeroki i może odnosić się do kilku cennych rekordów aż do milionów odsłoniętych kont użytkowników.
Co możesz zrobić, aby zapewnić maksymalne bezpieczeństwo aplikacji webowych?
Istnieje kilka metod, które możesz wdrożyć, aby w pełni zadbać o bezpieczeństwo aplikacji webowych. Poniżej prezentujemy najważniejsze z nich.
1. Zabezpieczenie dostępu do serwera
Jedną z podstawowych rzeczy, o które powinieneś zadbać, jest zablokowanie zewnętrznego dostępu do serwera. Zdalny dostęp powinien być szyfrowany, a ochrona serwera powinna opierać się na co najmniej kilku poziomach zabezpieczeń (w szczególności warto zadbać o zabezpieczenie dostępu do portów takich usług jak SSH czy portów bazy danych).
W jaki sposób zwiększyć bezpieczeństwo aplikacji internetowej?
- Ogranicz dostęp do określonych adresów IP i skonfiguruj firewall — dostęp do poszczególnych usług jak SSH, MySQL powinien być ograniczony (najlepiej używać VPN). Jeśli aplikacja internetowa posiada panel administratora, dostęp do logowania również należy ograniczyć.
Zaporę aplikacji internetowej możesz skonfigurować z poziomu dostawcy chmury (na rynku znajdziesz sporo produktów tego typu, a najpopularniejsze z nich to m.in. AWS i DigitalOcean) lub bezpośrednio na serwerze.
Prawidłowo skonfigurowana zezwala na ruch wyłącznie z określonych aplikacji i serwerów i zapobiega inicjowaniu przez bazę danych połączeń wychodzących.
- Używaj kluczy SSH — logowanie za pomocą kluczy SSH jest znacznie bezpieczniejsze niż dostęp z użyciem hasła. Rozważ więc całkowite wyłączenie możliwości logowania za pomocą hasła.
- Określ liczbę błędnych logowań — jeśli nie masz możliwości zastosowania wspomnianych wyżej zabezpieczeń lub konieczny jest dostęp do aplikacji z wielu miejsc (i nie masz możliwości skorzystania z VPN), zabezpiecz liczbę prób logowania do aplikacji. Jeśli korzystasz z serwera na Linuksie, możesz wykorzystać do tego aplikację Fail2Ban. Takie rozwiązanie warto wdrożyć również do zwiększenia bezpieczeństwa aplikacji webowej z panelem logowania jako formę ochrony przed atakami typu brute force.
2. Cloudflare jako ochrona przed DDoS
Skoro mowa o firewallu, warto skorzystać z takich usług jak Cloudflare, znacznie zwiększających bezpieczeństwo aplikacji webowych poprzez automatyzację reakcji na zagrożenie. Wśród korzyści oferowanych przez usługę znajdują się m.in. ukrywanie adresów IP, możliwość blokowania odwiedzających według krajów, redukcja liczby botów chodzących po aplikacji. Kolejną zaletą jest blokowanie ataków DDoS, mających na celu przeciążenie zasobów przez ogromną liczbę wysyłanych zapytań.
Co więcej, Cloudflare oferuje też darmowy certyfikat SSL. Nawet jeśli nie korzystasz z rozwiązań typu Cloudflare, również powinieneś zadbać o wdrożenie SSL do swojej aplikacji — używanie HTTPS jest podstawą, dzięki czemu podczas przesyłu zablokowane jest odczytanie wprowadzanych danych pomiędzy przeglądarką użytkownika a serwerem.
3. Aktualizacja aplikacji webowej
Potencjalne luki w kodzie są kolejnym czynnikiem zmniejszającym bezpieczeństwo aplikacji webowych, a ciągły rozwój technologiczny sprzyja tworzeniu nowych luk w zabezpieczeniach. Według danych opublikowanych w raporcie Web Application Vulnerabilities and Threats: Statistics for 2019, 82% luk było zlokalizowanych głównie w kodzie aplikacji.
Ważne jest więc zadbanie o jakość kodu i testowanie go pod kątem typowych luk w zabezpieczeniach, aby uniknąć potencjalnych ataków. Aby zminimalizować ryzyko, zawsze korzystaj z aktualnych wersji danego języka programowania czy frameworku oraz unikaj niebezpiecznych funkcji danego języka (np. eval czy exec w PHP). Skutecznymi sposobami są też przeprowadzenie code review oraz uruchomienie testów penetracyjnych przed wypuszczeniem aplikacji.
4. Monitoring aplikacji webowej i serwerów
Monitoring aplikacji internetowej oraz serwera, na którym się znajduje, pozwala na wykrywanie anomalii i niepożądanych akcji. Tutaj przydadzą się narzędzia pozwalające na zbieranie logów aplikacji w jednym miejscu, takie jak ELK Stack, logz.io czy Datadog. Aplikacje te pozwalają nie tylko na agregowanie logów, ale też na automatyczną ocenę stopnia zagrożenia na podstawie wykonywanych akcji, np. w przypadku wykrycia nagłego wzrostu liczby logowań do serwisu.
Poza monitorowaniem samej aplikacji webowej niezbędny jest też monitoring serwera, pozwalający na sprawdzanie jego stanu i parametrów, wykrycie podejrzanych logowań czy wysłanie informacji o kończącym się miejscu. Analizę wskaźników wydajności i ustawienie alarmów mailowych czy SMS-owych ułatwiają takie narzędzia jak Zabbix czy Datadog. Poniżej znajdziesz przykłady obszarów, które możesz monitorować:
- obciążenie serwera,
- niepożądany stan lub anomalie,
- liczba aktywnych użytkowników (wykrywanie wzrostu aktywności botów),
- liczba prób logowania i odwiedzin strony.
5. Regularne kopie zapasowe
Bezpieczeństwo aplikacji internetowych bez backupu nie istnieje. Powinieneś więc tworzyć kopie zapasowe baz danych, kodu aplikacji czy plików wgrywanych przez użytkowników aplikacji tak często, jak to możliwe. Rozważ też trzymanie kopii zapasowych w chmurze, pozwalającej na przechowywanie nieograniczonej liczby poprzednich wersji plików.
Mając na uwadze wycieki danych w ostatnich latach w firmach takich jak Facebook czy Uber, widzimy, że zagrożenie utraty danych jest spore, mimo pozornie najlepszych zabezpieczeń (zobacz mapę cyberataków w czasie rzeczywistym). Powinieneś być więc przygotowany na różne scenariusze, bowiem nie tylko atak hakerski zagraża ważnym danym — co jeśli pracownik usunie ważny plik? Regularne tworzenie kopii baz danych pozwoli na zminimalizowanie takiego ryzyka.
Bezpieczeństwo aplikacji webowych pod kontrolą
Wielu zagrożeń można uniknąć, a stosowanie powyższych praktyk może zminimalizować ryzyko ataków czy wycieku danych. Pamiętaj jednak, że nawet najlepiej przygotowane serwery i wielowarstwowe podejście do zabezpieczeń nie gwarantują pełnego bezpieczeństwa aplikacji.
Warto skorzystać z nowoczesnych rozwiązań jak np. AWS, proponujących zestaw funkcji samodzielnie zarządzających serwerem, co znacznie odciąża twoje zasoby. Bez względu na to jednak, czy wybierzesz gotową usługę, czy postawisz na samodzielne ustawienie zabezpieczeń, zawsze trzymaj rękę na pulsie i kontroluj co dzieje się z Twoją aplikacją.
Bądź więc na bieżąco z najnowszymi zagrożeniami dla środowiska aplikacji oraz sposobami sprawnego usuwania ewentualnych luk, aby uniknąć nieprzyjemnych niespodzianek. Niezbędne jest więc stałe dbanie o stan aplikacji i serwera, wykonywanie częstych aktualizacji i obserwowanie trendów — wszystko, co pozwoli na zminimalizowanie ryzyka.
Zbudujemy dla Ciebie funkcjonalną aplikację webową dbając w pełni o jej bezpieczeństwo. Skontaktuj się z nami i opowiedz nam o swoim projekcie >>>