8 podstawowych wskazówek, jak zabezpieczyć serwer aplikacji internetowych

W większości przypadków serwery aplikacji internetowych muszą być publicznie dostępne, co oznacza, że ​​są narażone na wszelkiego rodzaju zagrożenia.

Wiele z tych zagrożeń jest przewidywalnych i łatwych do uniknięcia, podczas gdy inne są nieznane i mogą Cię zaskoczyć. Aby zminimalizować możliwość tego drugiego przypadku, oferujemy listę niezbędnych wskazówek, jak zapewnić maksymalne bezpieczeństwo serwerów aplikacji internetowych.

Zanim zaczniesz z listą wskazówek, musisz zrozumieć, że serwer aplikacji internetowej nie jest wyspą. Serwer jest centralnym elementem farmy aplikacji internetowych, który umożliwia hosting i obsługę aplikacji internetowej. Dlatego, aby zabezpieczyć, należy wziąć pod uwagę wszystkie komponenty, które go otaczają i zabezpieczyć całe środowisko aplikacji webowych.

Podstawowe środowisko do hostingu i uruchamiania aplikacji internetowych obejmuje system operacyjny (Linux, Windows), oprogramowanie serwera WWW (Apache, Nginx), serwer bazy danych. Jeśli którykolwiek z tych składników zostanie włamany, osoby atakujące mogą uzyskać dostęp i wykonać wszystkie złośliwe działania, jakie chcą.

Pierwszą i podstawową wskazówką dotyczącą zabezpieczenia środowiska takiego jak opisane powyżej jest zapoznanie się z wytycznymi dotyczącymi bezpieczeństwa i listą najlepszych praktyk dla każdego z komponentów. Mając to na uwadze, przejrzyjmy szereg zdroworozsądkowych wytycznych dotyczących bezpieczeństwa, które mają zastosowanie do prawie każdego środowiska aplikacji internetowych.

Zapora zdemistyfikowana

Możesz pokusić się o szybkie sprawdzenie tego elementu, myśląc: „Szczęśliwy, mam już zaporę sieciową chroniącą moją sieć”. Ale lepiej trzymaj konie.

Zapora sieciowa może dbać o granice sieci, utrzymując złych ludzi z dala, a dobrych, ale na pewno pozostawia szeroko otwarte drzwi dla atakujących, którzy mogliby włamać się do serwera aplikacji internetowych.

Jak?

Proste: zapora sieciowa musi przynajmniej zezwalać na ruch przychodzący na portach 80 i 443 (czyli HTTP i HTTPS) i nie wie, kto lub co przechodzi przez te porty.

To, czego potrzebujesz, aby chronić swoją aplikację, to zapora aplikacji sieci Web (WAF), która w szczególności analizuje ruch sieciowy i blokuje wszelkie próby wykorzystania luk w zabezpieczeniach, takich jak skrypty między witrynami lub wstrzykiwanie kodu. WAF działa jak typowy program antywirusowy i antymalware: wyszukuje znane wzorce w strumieniu danych i blokuje je, gdy wykryje złośliwe żądanie.

Aby być skutecznym, WAF musi stale aktualizować swoją bazę danych o nowe wzorce zagrożeń, aby móc je blokować. Problem z zapobieganiem atakom opartym na sygnaturach polega na tym, że aplikacja internetowa może być jednym z pierwszych celów nowego zagrożenia, o którym WAF jeszcze nie wie.

Z tych powodów aplikacja internetowa wymaga dodatkowych warstw ochrony oprócz zapory sieciowej.

Skanuj w poszukiwaniu luk w zabezpieczeniach sieci

Ponownie, nie myśl, że twój serwer aplikacji internetowych jest wolny od luk tylko dlatego, że tak mówi twój skaner bezpieczeństwa sieci.

Skanery sieciowe nie mogą wykryć luk w zabezpieczeniach aplikacji. Aby wykryć i wyeliminować te luki, musisz poddać aplikacje serii testów i audytów, takich jak testy penetracyjne, skanowanie czarnej skrzynki i audyt kodu źródłowego. Żadna z tych metod nie jest jednak kuloodporna. Najlepiej byłoby wykonać ich jak najwięcej, aby wyeliminować wszystkie luki.

Na przykład skanery bezpieczeństwa, takie jak Invicti, upewnij się, że żaden kod, który można wykorzystać, nie przedostanie się do środowiska produkcyjnego. Ale mogą istnieć logiczne luki, które można wykryć tylko za pomocą ręcznego audytu kodu. Ręczny audyt, oprócz wysokich kosztów, jest metodą ludzką, a przez to podatną na błędy. Dobrym pomysłem na przeprowadzenie tego rodzaju audytu bez marnowania dużej ilości pieniędzy jest uwzględnienie go w procesie rozwoju, głównie poprzez edukację programistów.

Edukuj swoich programistów

Deweloperzy mają tendencję do myślenia, że ​​ich aplikacje działają w idealnych światach, gdzie zasoby są nieograniczone, użytkownicy nie popełniają błędów i nie ma ludzi o bezwzględnych intencjach. Niestety w pewnym momencie muszą zmierzyć się z problemami ze świata rzeczywistego, zwłaszcza dotyczącymi bezpieczeństwa informacji.

Tworząc aplikacje internetowe, programiści muszą znać i wdrażać mechanizmy bezpieczeństwa, aby upewnić się, że są wolne od luk. Te mechanizmy bezpieczeństwa powinny być częścią przewodnika po najlepszych praktykach, którego musi przestrzegać zespół programistów.

Audyt jakości oprogramowania służy do zapewnienia zgodności z najlepszymi praktykami. Najlepsze praktyki i audyt to jedyne sposoby wykrywania luk logicznych, takich jak (na przykład) przekazywanie niezaszyfrowanych i widocznych parametrów wewnątrz adresu URL, które atakujący może łatwo zmienić, aby zrobić to, czego chce.

Wyłącz niepotrzebną funkcjonalność

Zakładając, że aplikacje internetowe są jak najbardziej wolne od błędów, a farma internetowa jest zabezpieczona, zobaczmy, co można zrobić na samym serwerze, aby chronić go przed atakami.

Podstawowa, zdroworozsądkowa wskazówka to zmniejszenie liczby potencjalnie wrażliwych punktów wejścia. Jeśli atakujący mogą wykorzystać dowolny ze składników serwera WWW, cały serwer WWW może być zagrożony.

Zrób listę wszystkich otwartych portów i uruchomionych usług lub demonów na serwerze i zamknij, wyłącz lub wyłącz niepotrzebne. Serwer nie powinien być używany do żadnych innych celów niż uruchamianie aplikacji internetowych, więc rozważ przeniesienie wszystkich dodatkowych funkcji na inne serwery w Twojej sieci.

Używaj oddzielnych środowisk do programowania, testowania i produkcji

Deweloperzy i testerzy potrzebują uprawnień w środowiskach, w których pracują, których nie powinni mieć na aktywnym serwerze aplikacji. Nawet jeśli ślepo im ufasz, ich hasła mogą łatwo wyciekać i wpaść w niechciane ręce.

Poza hasłami i uprawnieniami, 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 bazy danych. Proces wdrażania aplikacji webowej powinien wykonywać administrator, który musi upewnić się, że żadne poufne informacje nie zostaną ujawnione po zainstalowaniu aplikacji na serwerze live.

Ta sama koncepcja segregacji musi być zastosowana do danych aplikacji. Testerzy i programiści zawsze wolą pracować z prawdziwymi danymi, ale nie jest dobrym pomysłem przyznawanie im dostępu do produkcyjnej bazy danych, a 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 punktów końcowych lub nazwy ścieżek, żeby wymienić tylko kilka.

Aktualizuj oprogramowanie serwera

Choć może się to wydawać oczywiste, jest to jedno z najczęściej pomijanych zadań. Firma SUCURI stwierdziła, że ​​59% aplikacji CMS było nieaktualnych, co jest narażone na ryzyko.

Każdego dnia pojawiają się nowe zagrożenia, a jedynym sposobem, aby zapobiec ich zagrożeniu dla Twojego serwera, jest instalowanie najnowszych poprawek zabezpieczeń.

Wspomnieliśmy wcześniej, że zapory sieciowe i sieciowe skanery bezpieczeństwa nie są wystarczające do zapobiegania atakom na aplikacje internetowe. Są jednak niezbędne do ochrony serwera przed typowymi zagrożeniami cyberbezpieczeństwa, takimi jak ataki DDoS. Upewnij się więc, że takie aplikacje są zawsze aktualne i skutecznie chronią Twoją aplikację biznesową.

Ogranicz dostęp i uprawnienia

Podstawowym środkiem bezpieczeństwa jest utrzymywanie ruchu zdalnego dostępu — takiego jak RDP i SSH — szyfrowanego i tunelowanego. Dobrym pomysłem jest również utrzymywanie ograniczonej listy adresów IP, z których dozwolony jest zdalny dostęp, upewniając się, że wszelkie próby zdalnego logowania z dowolnego innego adresu 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ż osoby atakujące mogą wykorzystać luki w usługach, aby przeniknąć do serwera. Jeśli te usługi działają z uprawnieniami administratora, mogą przejąć cały serwer.

Dobra równowaga między bezpieczeństwem a praktycznością wymaga, aby każde konto — zarówno konta logowania, jak i konta usług — miało uprawnienia potrzebne do wykonywania swojej pracy i nic więcej.

Na przykład, możesz zdefiniować różne konta dla administratora do wykonywania różnych zadań: jedno do tworzenia kopii zapasowych, inne do czyszczenia plików dziennika, inne do zmiany konfiguracji usług i tak dalej. To samo dotyczy kont baz danych: aplikacja zwykle potrzebuje tylko uprawnień do odczytu i zapisu danych, a nie do tworzenia lub usuwania tabel. Dlatego powinien działać z kontem z uprawnieniami ograniczonymi do wykonywania zadań, które musi wykonać.

Miej oko na logi serwera

Pliki dziennika są tam nie bez powodu.

Administratorzy powinni regularnie je monitorować, aby wykryć podejrzane zachowanie, zanim wyrządzi ono jakiekolwiek szkody. Analizując pliki dziennika, możesz odkryć wiele informacji, które pomogą Ci lepiej chronić aplikację. Jeśli dojdzie do ataku, pliki dziennika mogą pokazać, kiedy i jak się rozpoczął, pomagając w lepszej kontroli szkód.

Musisz również mieć zautomatyzowaną procedurę usuwania starych plików dziennika lub usuwania nieaktualnych informacji, aby zapobiec wykorzystaniu całej dostępnej przestrzeni dyskowej na serwerze.

Dodatkowa wskazówka: bądź na bieżąco

W Internecie znajduje się wiele bezpłatnych i przydatnych informacji, które możesz wykorzystać z korzyścią dla swojej aplikacji internetowej. Nie przegap żadnego nowego wpisu na renomowanych blogach poświęconych bezpieczeństwu (takich jak ten) i bądź na bieżąco z tym, co dzieje się w branży bezpieczeństwa i sieci.

Poradniki, kursy, filmy i książki są również źródłem przydatnej wiedzy. Ćwicz spędzanie jednej lub dwóch godzin tygodniowo tylko po to, aby być na bieżąco z nowościami branżowymi — dzięki temu będziesz mieć pewność, że postępujesz właściwie, aby zabezpieczyć swoje aplikacje.