Serwery obsługujące aplikacje internetowe zazwyczaj muszą być dostępne publicznie, co niestety czyni je podatnymi na różnorodne zagrożenia.
Wiele z tych niebezpieczeństw jest łatwych do przewidzenia i uniknięcia, lecz istnieją też takie, które mogą nas zaskoczyć. Aby zminimalizować ryzyko wystąpienia tych drugich, przedstawiamy listę kluczowych wskazówek, które pomogą zapewnić maksymalny poziom bezpieczeństwa serwerów aplikacji webowych.
Zanim przejdziemy do konkretnych zaleceń, warto podkreślić, że serwer aplikacji internetowej nie działa w izolacji. Jest on centralnym elementem infrastruktury, umożliwiającym hosting i obsługę aplikacji. Zatem, aby skutecznie go zabezpieczyć, należy uwzględnić wszystkie otaczające go komponenty i chronić całe środowisko aplikacji.
Podstawowe środowisko do hostingu i uruchamiania aplikacji internetowych składa się z systemu operacyjnego (np. Linux, Windows), oprogramowania serwera WWW (np. Apache, Nginx) oraz serwera bazy danych. Jeżeli którykolwiek z tych elementów zostanie naruszony, napastnicy mogą uzyskać dostęp i przeprowadzić dowolne szkodliwe działania.
Pierwszą i podstawową zasadą w kwestii ochrony takiego środowiska jest zapoznanie się z wytycznymi bezpieczeństwa i najlepszymi praktykami dla każdego z wymienionych składników. Mając to na uwadze, przeanalizujmy zbiór uniwersalnych reguł bezpieczeństwa, które mają zastosowanie do większości środowisk aplikacji webowych.
Zapora sieciowa bez tajemnic
Można łatwo popaść w samozadowolenie i pomyśleć: „Świetnie, mam już zaporę sieciową, która chroni moją sieć”. Jednak warto zachować ostrożność.
Zapora sieciowa dba o granice sieci, blokując dostęp osobom nieuprawnionym, ale niestety pozostawia otwarte drzwi dla atakujących, którzy mogą przedostać się do serwera aplikacji internetowej.
Jak to możliwe?
To proste: zapora sieciowa musi dopuszczać ruch przychodzący na portach 80 i 443 (odpowiednio HTTP i HTTPS) i nie ma możliwości weryfikacji, kto lub co przesyła dane przez te porty.
Aby skutecznie chronić aplikację, potrzebna jest zapora aplikacji internetowych (WAF). WAF analizuje ruch sieciowy i blokuje wszelkie próby wykorzystania luk w zabezpieczeniach, takie jak ataki XSS (cross-site scripting) czy wstrzykiwanie kodu. Działa ona na podobnej zasadzie jak program antywirusowy: szuka znanych wzorców w przesyłanych danych i blokuje podejrzane żądania.
Aby WAF był skuteczny, jego baza danych musi być regularnie aktualizowana o nowe wzorce zagrożeń. Problem z obroną przed atakami opartymi na sygnaturach polega na tym, że aplikacja internetowa może być jednym z pierwszych celów nowego zagrożenia, którego WAF jeszcze nie rozpoznaje.
Z tego powodu aplikacja internetowa potrzebuje dodatkowych warstw ochrony, wykraczających poza możliwości zapory sieciowej.
Skanowanie w poszukiwaniu specyficznych luk
Nie należy zakładać, że serwer aplikacji jest wolny od błędów tylko dlatego, że tak twierdzi skaner bezpieczeństwa sieci.
Skanery sieciowe nie są w stanie wykryć wszystkich luk w zabezpieczeniach aplikacji. Aby je zidentyfikować i usunąć, konieczne jest przeprowadzenie serii testów i audytów, takich jak testy penetracyjne, skanowanie black-box i audyt kodu źródłowego. Żadna z tych metod nie jest idealna, dlatego najlepiej zastosować ich jak najwięcej, aby wyeliminować jak największą liczbę potencjalnych słabych punktów.
Przykładowo, skanery bezpieczeństwa, takie jak Invicti, pomagają upewnić się, że do środowiska produkcyjnego nie przedostanie się żaden potencjalnie niebezpieczny kod. Mogą jednak występować luki logiczne, które można wykryć jedynie poprzez manualny audyt kodu. Audyt manualny, pomimo wysokich kosztów, jest metodą podatną na błędy. Dobrym pomysłem na przeprowadzenie tego rodzaju audytu bez nadmiernego obciążania budżetu jest włączenie go do procesu rozwoju, szczególnie poprzez edukację programistów.
Edukacja programistów
Programiści często zakładają, że ich aplikacje będą działać w idealnych warunkach, gdzie zasoby są nieograniczone, użytkownicy nie popełniają błędów, a nikt nie ma złych intencji. Niestety, w pewnym momencie muszą skonfrontować się z problemami realnego świata, zwłaszcza w kwestiach bezpieczeństwa.
Podczas tworzenia aplikacji internetowych, programiści muszą znać i wdrażać mechanizmy bezpieczeństwa, aby upewnić się, że aplikacje są wolne od luk. Te mechanizmy powinny być częścią przewodnika po najlepszych praktykach, którego zespół programistyczny musi przestrzegać.
Audyt jakości oprogramowania służy do weryfikacji zgodności z najlepszymi praktykami. Dobre praktyki i audyty to jedyny sposób na wykrycie luk logicznych, takich jak np. przekazywanie niezaszyfrowanych parametrów w adresie URL, które atakujący mogą łatwo zmodyfikować.
Wyłączenie niepotrzebnych funkcji
Zakładając, że aplikacja internetowa jest maksymalnie wolna od błędów, a farma serwerów jest dobrze zabezpieczona, zobaczmy, co jeszcze można zrobić na samym serwerze, aby go chronić przed atakami.
Podstawową i rozsądną zasadą jest zmniejszenie liczby potencjalnie wrażliwych punktów wejścia. Jeśli napastnicy mogą wykorzystać którykolwiek ze składników serwera WWW, cały serwer staje się zagrożony.
Należy sporządzić listę wszystkich otwartych portów i uruchomionych usług lub demonów na serwerze, a następnie zamknąć, wyłączyć lub odinstalować te, które nie są niezbędne. Serwer nie powinien być wykorzystywany do celów innych niż hostowanie aplikacji internetowych, więc warto przenieść wszystkie dodatkowe funkcje na inne serwery w sieci.
Oddzielne środowiska dla programowania, testowania i produkcji
Programiści i testerzy potrzebują uprawnień w środowiskach, w których pracują, a których nie powinni mieć na aktywnym serwerze aplikacji. Nawet jeżeli ślepo im ufamy, ich hasła mogą zostać przejęte przez osoby niepowołane.
Oprócz haseł i uprawnień, w środowiskach programistycznych i testowych zazwyczaj znajdują się backdoory, pliki dziennika, kod źródłowy lub inne informacje debugowania, które mogą ujawnić poufne dane, takie jak nazwy użytkowników i hasła do bazy danych. Proces wdrażania aplikacji internetowej powinien być wykonywany przez administratora, który musi upewnić się, że żadne wrażliwe dane nie zostaną ujawnione po zainstalowaniu aplikacji na serwerze produkcyjnym.
Ta sama zasada podziału musi być stosowana do danych aplikacji. Testerzy i programiści preferują pracę na prawdziwych danych, ale nie jest dobrym pomysłem przyznawanie im dostępu do produkcyjnej bazy danych, ani nawet jej kopii. Oprócz oczywistych obaw związanych z prywatnością, baza danych może zawierać parametry konfiguracyjne, które ujawniają wewnętrzne ustawienia serwera — takie jak adresy endpointów czy nazwy ścieżek.
Aktualizowanie oprogramowania serwera
Chociaż wydaje się to oczywiste, jest to jedno z najczęściej zaniedbywanych zadań. Firma SUCURI wykazała, że 59% aplikacji CMS było nieaktualnych, a co za tym idzie, podatnych na ataki.
Każdego dnia pojawiają się nowe zagrożenia, a jedynym sposobem, aby uchronić przed nimi swój serwer, jest instalowanie najnowszych poprawek zabezpieczeń.
Wcześniej wspomnieliśmy, że zapory sieciowe i skanery bezpieczeństwa nie są wystarczające do zapobiegania atakom na aplikacje internetowe. Są one jednak niezbędne do ochrony serwera przed typowymi zagrożeniami cyberbezpieczeństwa, takimi jak ataki DDoS. Upewnij się, że te aplikacje są zawsze aktualne i skutecznie chronią Twoją działalność.
Ograniczenie dostępu i uprawnień
Kluczowym elementem bezpieczeństwa jest utrzymywanie ruchu zdalnego dostępu – takiego jak RDP i SSH – zaszyfrowanego i tunelowanego. Dobrą praktyką jest również stworzenie listy adresów IP, z których dozwolony jest zdalny dostęp, upewniając się, że wszelkie próby logowania z innych adresów IP są blokowane.
Administratorzy czasami przyznają kontom usług wszystkie możliwe uprawnienia, ponieważ wiedzą, że dzięki temu „wszystko będzie działać”. Nie jest to jednak dobra praktyka, ponieważ atakujący mogą wykorzystać luki w tych usługach, aby przeniknąć do serwera. Jeżeli usługi działają z uprawnieniami administratora, mogą przejąć kontrolę nad całym serwerem.
Dobre wyważenie bezpieczeństwa i praktyczności wymaga, aby każde konto – zarówno konta logowania, jak i konta usług – miało tylko te uprawnienia, które są niezbędne do wykonywania przypisanych mu zadań i nic więcej.
Na przykład, można zdefiniować różne konta administratora do wykonywania odrębnych zadań: jedno do tworzenia kopii zapasowych, inne do czyszczenia plików dziennika, jeszcze inne do zmiany konfiguracji usług, itd. To samo dotyczy kont bazy danych: aplikacja zazwyczaj potrzebuje jedynie uprawnień do odczytu i zapisu danych, a nie do tworzenia czy usuwania tabel. W związku z tym powinna działać na koncie z uprawnieniami ograniczonymi do wymaganych operacji.
Kontrola logów serwera
Pliki dziennika są istotnym elementem bezpieczeństwa.
Administratorzy powinni regularnie je monitorować w celu wykrycia podejrzanego zachowania, zanim zdąży ono wyrządzić jakiekolwiek szkody. Analizując pliki dziennika, można odkryć wiele cennych informacji, które pomogą w lepszej ochronie aplikacji. W przypadku ataku pliki dziennika mogą pokazać, kiedy i jak się rozpoczął, co ułatwia kontrolę szkód.
Trzeba również posiadać zautomatyzowaną procedurę usuwania starych plików dziennika lub nieaktualnych informacji, aby zapobiec wykorzystaniu całego dostępnego miejsca na dysku serwera.
Dodatkowa wskazówka: Bądź na bieżąco
W Internecie dostępnych jest wiele bezpłatnych i przydatnych informacji, które można wykorzystać na korzyść swojej aplikacji internetowej. Nie przegap żadnego wpisu na renomowanych blogach poświęconych bezpieczeństwu (takich jak ten) i bądź na bieżąco z wydarzeniami w branży bezpieczeństwa i sieci.
Poradniki, kursy, filmy i książki są również cennym źródłem wiedzy. Poświęć godzinę lub dwie tygodniowo na śledzenie nowości w branży – dzięki temu będziesz mieć pewność, że robisz wszystko, aby zabezpieczyć swoje aplikacje.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.