Podręcznik
1. Wprowadzenie
Temat bezpieczeństwa aplikacji internetowych jest bardzo rozległy. Obejmuje zagadnienia związane zarówno z funkcjonowaniem podstawowych narzędzi takich jak przeglądarki internetowe, serwery treści, protokoły sieciowe jak i wykorzystanie różnych języków programowania w kontekście treści, które przetwarzają. W ramach tego wykładu przyjrzymy się wyłącznie wycinkowi tej tematyki skupiając się na klasycznych problemach, z którymi musi zmierzyć się każdy programista aplikacji internetowych. Przyglądając się problematyce wydajności aplikacji skupimy się wyłącznie na sieciowych jej aspektach nie zagłębiając się w architekturę aplikacji internetowej. Przedstawione przykłady obrazują istotę omawianych tematów, jednak dla czytelności zostały znacznie uproszczone.
Naszym przewodnikiem będzie raport OWASP Top Ten [1], który stanowi dobre podsumowanie najczęściej występujących problemów w aplikacjach internetowych. Podsumowuje on „popularność” podatności w okresie zbierania danych do publikacji, co jednocześnie przekłada się na wiedzę o świadomości programistów aplikacji. Nie wyczerpuje on jednak wszystkich możliwych zagadnień związanych z bezpieczeństwem aplikacji sieciowych, stąd zachęcamy do zapoznania się z załączoną w bibliografii literaturą.
W ostatnich latach zagadnienia bezpieczeństwa aplikacji internetowych nabrały nowego znaczenia. W ramach zmieniającego się otoczenia prawnego, wprowadzenia przepisów RODO (Ogólne rozporządzenie o ochronie danych) [2] i wynikających z tego zobowiązań aspekt poprawnej konstrukcji aplikacji internetowych stał się bardzo istotny. Podstawowym polem na jakim koncentrują się grupy przestępcze przestało być włamywanie się do systemów dla samego faktu dokonania tego. Aktualnym trendem jest kradzież danych przechowywanych w systemach informatycznych dostępnych w sieci (w tym aplikacji internetowych) a następnie próby wymuszenia okupu za ich niepublikowanie. Proceder stał się źródłem zarobku i rozmiar tego „rynku” szacuje się (za Allied Market Research [3]) na 17 miliardów dolarów w 2021 roku z perspektywą wzrostu rzędu 17% rocznie.
Z punktu widzenia bezpieczeństwa idealną aplikacją internetową jest taka, która nie zawiera aktywnych elementów które mogą zostać wykorzystane do przejęcia kontroli oraz nie zawiera żadnych zewnętrznych zasobów, nad którymi autor nie ma kontroli. W praktyce założenie takie spełniają statyczne strony internetowe ze zweryfikowanym zasobami (skrypty, obrazy) serwowane z jednego miejsca. Takie podejście umożliwia tworzenie nie wymagających konserwacji stron o prostej, informacyjnej funkcji, ale w praktyce oczekujemy czegoś więcej.
Podstawowe cele jakie należy sobie postawić przy tworzeniu dowolnej aplikacji internetowej to przede wszystkim zaufanie i poprawność zarządzania danymi. Aby spełnić takie, na pozór proste, założenia należy zadbać o:
- szyfrowanie danych w trakcie przesyłania dla zapewnienia poufności,
- uwierzytelnienie użytkowników dla zapewnienia zaufania,
- autoryzację dostępu do zasobów dla prywatności,
- weryfikację przetwarzanych danych pod kątem nieprawidłowej, złośliwej treści,
- zaufanie do kodu źródłowego aplikacji i wykorzystywanych komponentów,
- log audytu dla zapewnienia historii zmian.
Już powyższe zestawienie wymagań wskazuje jak wiele rzeczy może się nie udać. Z formalnego punktu widzenia narzędziem wspomagającym proces tworzenia bezpiecznej aplikacji internetowej jest analiza ryzyka związanego z aplikacją zgodnie z wytycznymi w serii norm ISO 27000 i wdrożenie systemu zarządzania ryzykiem informatycznym. Podstawowym celem zarządzania ryzykiem jest znalezienie kompromisu pomiędzy ryzykiem wystąpienia zdarzenia, jego skutkami i kosztami przeciwdziałania. Sam proces zarządzania ryzykiem jest procesem ciągłym w myśl schematu:
Oprócz norm ISO wytyczne można znaleźć w materiałach publikowanych przez organizacje zajmujące się tą tematyką – wytyczne NIST (National Institute of Standards and Technology) z serii 800 [4], UK Cyber Essentials [5], BSI IT-Grundschutz [6] czy też wytyczne Underwriters Laboratory serii UL 2900 [7].
Nim przyjrzyjmy się kolejno różnym aspektom podatności aplikacji internetowych zapamiętajmy podstawową zasadę:
Każdy interfejs API czy skrypt po stronie części front-end-owej może stać się wektorem ataku.