Aktualizacje bezpieczeństwa aplikacji webowych – jak rozsądnie zarządzać podatnościami?

programistamag.pl 2 miesięcy temu

Podsumowanie najważniejszych wniosków z artykułu - w uproszczeniu opisuje na czym opiera się zarządzanie bezpieczeństwem aplikacji webowych:

  • Każda aplikacja firmowa, choćby ta używana wyłącznie wewnątrz organizacji, może stać się celem ataku i wymaga regularnego usuwania luk bezpieczeństwa.
  • Podstawą skutecznej ochrony jest aktualny spis tego, z czego zbudowana jest aplikacja - od prostego spisu np. w formie arkusza Excel, po formalny dokument SBOM
  • Nie każda luka wymaga natychmiastowej reakcji - najważniejsze jest ustalenie kolejności usuwania ryzyk na podstawie wagi zagrożenia i jego realnego wpływu na daną firmę.
  • Bezpieczne wdrażanie aktualizacji opiera się na wcześniejszym gruntownym przetestowaniu zmian usuwających daną podatność na osobnym serwerze testowym, wykonaniu kopii zapasowej danych i realizacji wdrożenia zmian na serwery produkcyjne.
  • Umowa z dostawcą systemu powinna jasno określać, kto za co odpowiada i w jakim czasie reaguje na zgłoszony problem.

Bezpieczna aplikacja webowa to taka, która jest świadomie nadzorowana pod kątem podatności i ryzyk cybernetycznych. W pewnym sensie jest to sztuka, bowiem wymaga godzenia ze sobą sprzecznych interesów danego przedsiębiorstwa. Z jednej strony często mamy presję kierownictwa, by jak najszybciej wdrażać nowe funkcjonalności lub zmiany w firmowych systemach, z drugiej zaś skomplikowany i czasochłonny proces weryfikacji zmian pod względem ewentualnych podatności, ich diagnozowanie, kategoryzowanie i planowanie ich usuwania. Celem jest zawsze to by firmowe systemy działały zapewniając bezpieczeństwo danych oraz niezakłóconą pracę, ciągłość biznesu np. pracę produkcji w fabryce, czy wpływ zamówień klientów w ramach platformy B2B.

Decyzje o wprowadzeniu zmian w aplikacjach często zapadają w pośpiechu, a to prosta droga do błędów lub braku dostępności i awarii. Przemyślane podejście do procesu rozwoju oprogramowania, z uwzględnieniem ryzyk, chroni budżet i ułatwia codzienną pracę zespołów IT. Usuwanie podatności da się zaplanować spokojnie i pragmatycznie - w oparciu o jasne procedury i twarde dane np. płynące z monitoringu aplikacji.

Dlaczego każda firmowa aplikacja webowa wymaga regularnych aktualizacji?

Wielu właścicieli firm zakłada, iż niewielki wewnętrzny portal pracowniczy albo niszowy system B2B jest bezpieczny, bo mało kto o nim wie. Praktyka pokazuje coś innego. Każda usługa, która ma publiczną stronę logowania lub wymienia dane z bazą danych za pośrednictwem sieci publicznej, niemal natychmiast staje się celem automatycznych programów szukających słabych punktów. Z amerykańskiego raportu Verizon Data Breach Investigations Report z roku 2025 wynika, iż wykorzystanie luk w oprogramowaniu stało za mniej więcej co piątym naruszeniem (20%) tj. o jedną trzecią więcej niż rok wcześniej. Co istotne dla mniejszych firm, oprogramowanie szantażujące (ransomware) pojawiło się w 44% wszystkich naruszeń, a aż 88% tych przypadków dotknęło właśnie małych i średnich przedsiębiorstw.

Jednak żeby skutecznie zadbać o bezpieczeństwo, warto wiedzieć, skąd adekwatnie biorą się problemy z bezpieczeństwem. Luki najczęściej kryją się w przestarzałych komponentach typu open source, w dawno nieaktualizowanych narzędziach programistycznych albo w elementach dostarczanych przez zewnętrznych dostawców. Trzeba także uwzględnić, iż aplikacje pisane na zamówienie zawierają autorski kod, w którym - jak w każdej ludzkiej pracy - zdarzają się błędy ułatwiające nieuprawniony dostęp. Mocne zabezpieczenia, takie jak szyfrowanie danych czy logowanie dwuetapowe (2FA), są oczywiście potrzebne, ale bez spojrzenia całościowego na systemy i planowania bieżących przeglądów, nie da się zapewnić ochrony systemów. W takim przypadku można by powiedzieć, iż system bezpieczeństwa firmy ma sam w sobie dziury.

Poniższe zestawienie pokazuje poglądowo, w których częściach typowej aplikacji webowej mogą kryć się luki bezpieczeństwa:

Źródło problemu

Przykładowe ryzyko

Przestarzałe komponenty open source

Możliwość przejęcia sesję użytkownika lub zdalnego uruchomienia kodu na serwerze przez atakującego

Elementy od zewnętrznych dostawców

Niezamierzone udostępnienie danych podmiotowi trzeciemu

Kod pisany na zamówienie lub z wykorzystaniem sztucznej inteligencji

Błędy logiczne w działaniu aplikacji np. umożliwiające dostęp do danych użytkownika innemu użytkownikowi, podatności w formularzach umożliwiające ataki na bazę danych, błędna konfiguracja serwera umożliwiająca dostęp do danych z zewnątrz

Jak skutecznie panować nad bezpieczeństwem aplikacji webowej?

Nie da się dobrze chronić czegoś, czego się dokładnie nie zna i nie potrafi wymienić części składowych. Fundamentem jest więc aktualny spis tego, z czego zbudowana jest aplikacja - uporządkowana lista wszystkich użytych bibliotek, komponentów, wtyczek, narzędzi i elementów, z których złożone jest dane oprogramowanie. W mniejszej firmie taką rolę może z powodzeniem pełnić rzetelnie prowadzony, regularnie aktualizowany arkusz (rejestr zależności lub elementów składowych oprogramowania). Większe organizacje sięgają po bardziej sformalizowaną wersję tego samego pomysłu - tzw. dokument SBOM (Software Bill of Materials), czyli ustandaryzowany, czytelny także dla narzędzi technicznych spis wszystkich składników oprogramowania. Niezależnie od formy, mając taki wykaz, zespół IT odpowiedzialny za bezpieczeństwa bardzo łatwo sprawdzi, czy świeżo wykryta luka w popularnym narzędziu, o której głośno w internecie, w ogóle dotyczy firmowych systemów.

Warto wiedzieć, iż taki spis składników firmowych aplikacji to nie tylko dobra praktyka, ale temat, na który coraz wyraźniej zwraca uwagę unijny regulator. ENISA, czyli agencja Unii Europejskiej do spraw cyberbezpieczeństwa, wprost zaleca prowadzenie SBOM, a przepisy dotyczące bezpieczeństwa łańcucha dostaw - takie jak dyrektywa NIS2 czy regulacja DORA w sektorze finansowym - idą w podobnym kierunku. Dla wielu firm uporządkowany spis tego, z czego zbudowane jest ich oprogramowanie, staje się więc po prostu elementem należytej staranności.

Skuteczne pilnowanie bezpieczeństwa nie polega jednak na ręcznym przeglądaniu list. Dobre podejście przerzuca większość pracy na automatyczne narzędzia, które działają w tle przy tworzeniu i aktualizowaniu aplikacji. Sprawdzają one kod przy każdej zmianie lub cyklicznie np. każdej nocy, a gdy wykryją poważne zagrożenie, wysyłają odpowiedni alert i bardzo często sugerują kolejne kroki postępowania (np. aktualizację do nowszej, “załatanej” wersji danego komponentu czy biblioteki).

Z drugiej strony mamy do czynienia z systemami do monitorowania bieżącej pracy aplikacji webowych i serwerów. Stałe obserwowanie ruchu w systemie pomaga gwałtownie reagować na incydenty np. nagły, dziesięciokrotny wzrost liczby prób logowania może od razu uruchamiać alert dla zespołu IT opiekującego się daną aplikacją.

Kluczowe w tym procesie są:

  • Cykliczne, automatyczne sprawdzanie aplikacji pod kątem nowych luk bezpieczeństwa.
  • Posiadanie i bieżące aktualizowanie spisu komponentów i tzw. "zależności" aplikacji - w formie arkusza lub dokumentu SBOM - który pokazuje, z czego naprawdę działa system.
  • Stałe monitorowanie pracy aplikacji na żywo, z automatycznymi powiadomieniami o nietypowych zdarzeniach i wyjątkach
  • Przegląd zapisów systemowych tzw. logów, umożliwiający wychwytywanie podejrzanych działań np. prób zdobycia większych uprawnień, przeniknięcia do sekcji aplikacji nieprzeznaczonej dla danego typu roli czy użytkownika, itp.

Jak ustalać kolejność łatania lub bezpieczeństwa bez wywoływania paniki w firmie?

Wykrycie poważnej luki potrafi w jednej chwili wstrzymać prace nad nowymi funkcjonalnościami i skoncentrować zespół na szukaniu metod eliminacji podatności. Najczęściej dzieje się tak, gdy firma patrzy wyłącznie na suchą punktację skali CVSS, która ocenia powagę błędu w przedziale od zera do dziesięciu. Podatność z oceną 9 i duża czerwona flaga, potrafi wywołać prawdziwą panikę. Sama ta ocena mówi jednak tylko o teoretycznym zagrożeniu. Wysoki wynik sam w sobie nie usprawiedliwia np. całkowitego wyłączenia narzędzia lub odcięcia użytkowników od możliwości pracy w systemie do czasu wprowadzenia aktualizacji bezpieczeństwa.

Najważniejszą wskazówką dla szefów działów IT powinno być to, jak dana aplikacja jest zbudowana, w jaki dokładnie sposób jest użytkowana i gdzie dokładnie jest wdrożona (serwer publicznie dostępny w sieci internet czy firmowa sieć wewnętrzna). Czym innym jest luka w np. w zewnętrznym mechanizmie obsługi płatności, a czym innym błąd w wewnętrznym module do generowania zestawień w formacie CSV, z którego raz w miesiącu korzysta dwóch pracowników w ramach sieci firmowej. Dobre ustalenie kolejności aktualizacji bezpieczeństwa i napraw polega na ocenie, jak realnie ktoś mógłby wykorzystać daną lukę i jak duża jest na to szansa. Często wymaga to wglądu do całego zestawienia ryzyk i podjęcia rozsądnych kompromisów.

Naprawianie po kolei każdej luki i wypychanie zmian na działający system tylko dlatego, iż punktacja CVSS jest wysoka - bez sprawdzenia, co to oznacza dla firmy - może kończyć się wielogodzinnymi przestojami, a wcale nie podnosi realnego poziomu bezpieczeństwa. Może bowiem dochodzić do sytuacji gdy zaktualizowana ("załatana") wersja danej biblioteki nie jest w pełni kompatybilna z firmową aplikacją.

Jak wdrażać aktualizacje bez przerywania pracy firmy?

Dobrze zaplanowane aktualizacje pozwalają uniknąć sytuacji, w której cała firma lub dział nagle staje w miejscu. Sprawdzony, powtarzalny sposób postępowania z podatnościami i aktualizacjami systemu uodparnia organizację na nieprzyjemne niespodzianki i nieoczekiwane sytuacje. Pierwszym krokiem po wprowadzeniu tzw. łaty czy też aktualizacji bezpieczeństwa jest sprawdzenie zmian na specjalnym serwerze testowym, niezależnym od tzw. systemu produkcyjnego, na którym pracują realni użytkownicy. Dzięki temu można zweryfikować czy zmiany lub nowe elementy konfiguracyjne eliminujące podatność nie spowodują zakłócenia pracy części działającej aplikacji.

Poważniejsze poprawki, które wpływają na sposób działania aplikacji webowej, najlepiej wprowadzać według ustalonego harmonogramu. Wyznaczenie stałych okien na prace serwisowe - zwykle w weekendy lub późnym wieczorem - ogranicza ryzyko, iż ewentualne problemy odczują użytkownicy. Istnieje bowiem “zapas czasu” na ewentualne skorygowanie problemów lub przywrócenie poprzedniej, prawidłowo działającej wersji. Ważne jest też wykonanie pełnej kopii zapasowej tuż przed całą operacją aktualizacji. jeżeli coś pójdzie nie tak, przywrócenie systemu do stanu sprzed zmian jest wtedy dużo łatwiejsze i stwarza mniej ryzyk dla biznesu.

Cały proces można sprowadzić do kilku powtarzalnych kroków, które warto dokładnie ustalić z dostawcą firmowego systemu - np. zespołem aplikacjeweb.pl - następnie zaś i konsekwentnie przestrzegać ustaleń.

Przykładowy proces może wyglądać następująco:

  1. Wyszukanie, pobranie i wprowadzenie konkretnej poprawki bezpieczeństwa od jej twórcy.
  2. Wdrożenie zmian na osobny serwer testowy i sprawdzenie ich przez zespół odpowiedzialny za jakość.
  3. Weryfikacja poprawności działania zaktualizowanej (załatanej) aplikacji, zarówno w sposób zaumatyzowany (testy jednostkowe) jak i manualny (weryfikacja "ręczna").
  4. Wykonanie pełnej kopii zapasowej działającego systemu tuż przed instalacją (dotyczy do także elementów konfiguracyjnych, jeżeli tak owe ulegną zmianie).
  5. Wdrożenie zmian na działający system produkcyjny w uzgodnionym, zatwierdzonym oknie serwisowym.
  6. Uważne obserwowanie pracy aplikacji zaraz po uruchomieniu, żeby upewnić się, iż nie pojawiły się powiązane błędy (tzw. "regresja").

Współpraca z software house'em - jak mądrze podzielić odpowiedzialność?

Budowa firmowej aplikacji web wchodzi w kluczową fazę w chwili, gdy gotowe narzędzie zostaje włączone do adekwatnego użytku produkcyjnego lub przechodzi na własność zamawiającego. W przypadku gdy firmie odpowiedzialnej za przygotowanie systemu powierzony zostaje stały nadzór, najczęściej następuje to w formie zawarcia umowy serwisowej (tzw. "umowy SLA"). Taka umowa powinna jasno opisywać zasady dbania o szeroko rozumianą niezawodność działania aplikacji, bieżący monitoring, a także maksymalny czas, w jakim dostawca zareaguje na zgłoszenie techniczne. Bardzo ważne sa także ustalenia dotyczące postępowania w przypadku wykrycia luk bezpieczeństwa w oprogramowaniu. Ponadto warto aby jasno określić obowiązki obu stron związane z innymi aspektami bezpieczeństwa np. nadawaniem pracownikom ról systemowych, cykliczne przeglądy dostępów, weryfikacje poprawnego wykonania kopii zapasowych, itp. Warto także uwzględnić cykliczny przegląd bezpieczeństwa aplikacji np. połączony z kontrolowaną próbą włamania (tzw. testami penetracyjnymi).

Jasny podział obowiązków zapobiega wzajemnym pretesjom, w sytuacji gdyby doszło do tzw. incydentu cybernetycznego. Wdrożenie metodyki zarządzania ryzykiem w firmie lub po prostu regularne raportowanie i omawianie ryzyk cybernetycznych w gronie kierownictwa firmy pomaga utrzymywać odpowiednią dyscyplinę w zespole i świadomość zagrożeń, także poza działem IT. W przypadku gdy powstają regularne raporty ryzyk mają one dodatkowo tą wartość, iż pozwalają podejmować decyzje o zmianach i usprawnieniach bezpieczeństwa na podstawie konkretnych liczb, faktów i danych, a nie tylko przeczuć.

Jak często robić przegląd bezpieczeństwa i testy penetracyjne?

Nie istnieje jedna adekwatna liczba, wszystko zależy od tego jak wrażliwe dane system przechowuje lub przetwarza i jak intensywnie jest rozwijany tzn. jak dużo zmian lub nowych funkcjonalności jest do niego wprowadzanych w danym czasie.

W przypadku ustabilizowanych systemów firmowych, w publikacjach ekspertów często można znaleźć rekomendację przynajmniej jednego, dokładnego przeglądu bezpieczeństwa danego systemu w ciągu roku.

Trzeba jednak mieć także na uwadze to, iż skuteczne ograniczanie ryzyk cybernetycznych to nie tylko sprawa techniczna, ograniczona do jednego systemu lub aplikacji, ale także szersza kwestia organizacyjna, a zaangażowana i świadoma ryzyk powinna być cała firma.

Materiał zewnętrzny

Idź do oryginalnego materiału