Cyberbezpieczeństwo • Ethical Hacking • Pentesting • Bezpieczeństwo aplikacji i infrastruktury IT
Testy penetracyjne (penetration testing, pentesting) są kontrolowanym procesem weryfikacji bezpieczeństwa systemów informatycznych, którego celem jest ustalenie, czy rzeczywiste słabości konfiguracji, oprogramowania, architektury lub procedur operacyjnych mogą doprowadzić do naruszenia poufności, integralności albo dostępności danych.
Profesjonalny pentest nie polega wyłącznie na uruchomieniu skanera podatności. Wymaga analizy powierzchni ataku, formułowania hipotez, kontrolowanej walidacji wykrytych słabości, oceny możliwych skutków biznesowych oraz przygotowania zaleceń, które pozwolą skutecznie ograniczyć ryzyko.
W tym opracowaniu przechodzimy przez osiem kluczowych obszarów: od podstaw metodyki, przez narzędzia i testowanie aplikacji WWW, aż po ocenę ryzyka, raportowanie oraz retesty. Przykłady praktyczne odnoszą się do własnych systemów i autoryzowanych laboratoriów testowych.
1. Czym są testy penetracyjne i czym różnią się od skanowania podatności?
1.1. Cel i zakres testów penetracyjnych
Pentest ma odpowiedzieć na trzy zasadnicze pytania:
- Czy istnieje podatność? Czy system zawiera błąd techniczny, niewłaściwą konfigurację lub lukę w kontroli dostępu?
- Czy podatność można wykorzystać w określonych warunkach? Czy istnieje realistyczna ścieżka prowadząca od słabości do nieautoryzowanego dostępu lub innego naruszenia bezpieczeństwa?
- Jakie są konsekwencje? Jakie zasoby, dane, konta lub procesy biznesowe mogą zostać zagrożone?
Przykładowo serwer WWW może udostępniać nieaktualną wersję biblioteki. Sam numer wersji nie przesądza jeszcze o podatności w danym wdrożeniu. Trzeba ustalić, czy biblioteka jest faktycznie używana, czy dotyczy jej określony warunek podatności oraz czy konfiguracja i zabezpieczenia kompensacyjne zmieniają realny poziom ryzyka.
Podobnie otwarty port TCP nie jest automatycznie luką bezpieczeństwa. Może być konieczny do działania usługi. Znaczenie ma to, czy usługa powinna być osiągalna z danego segmentu sieci, czy wymaga uwierzytelnienia i czy jest odpowiednio utwardzona.
1.2. Pentest a skanowanie podatności
| Kryterium | Skanowanie podatności | Test penetracyjny |
|---|---|---|
| Główny cel | Wykrywanie znanych słabości | Weryfikacja możliwości naruszenia bezpieczeństwa |
| Sposób działania | Automatyczne kontrole i sygnatury | Automatyzacja połączona z analizą ekspercką |
| Wynik | Lista potencjalnych podatności | Zweryfikowane ustalenia i scenariusze ryzyka |
| Fałszywe alarmy | Mogą występować często | Są ograniczane przez walidację |
| Kontekst biznesowy | Zwykle ograniczony | Istotny element oceny |
| Zakres | Często szeroki i powtarzalny | Zdefiniowany cel i reguły testu |
| Efekt końcowy | Priorytetyzacja poprawek | Ocena odporności oraz rekomendacje naprawcze |
Oba podejścia są komplementarne. Skanowanie pozwala szybko zidentyfikować szeroką grupę potencjalnych problemów, natomiast pentest sprawdza, które z nich mają istotne znaczenie w konkretnym środowisku.
1.3. Rodzaje podatności wykrywanych podczas pentestów
W praktyce testy mogą obejmować kilka warstw:
- Warstwa sieciowa: niepotrzebnie wystawione usługi, słabe reguły ACL, błędy segmentacji, niewłaściwie zabezpieczone protokoły administracyjne.
- Warstwa systemowa: błędne uprawnienia, niebezpieczne konfiguracje, nieaktualne komponenty, nadmierne uprawnienia procesów.
- Warstwa aplikacyjna: SQL injection, błędy kontroli dostępu, XSS, SSRF, niebezpieczne deserializacje i błędy obsługi sesji.
- Warstwa tożsamości: słabe mechanizmy uwierzytelniania, błędy resetowania haseł, nieprawidłowa konfiguracja MFA i błędne przypisanie ról.
- Warstwa operacyjna: nadmierne uprawnienia kont serwisowych, ujawnione sekrety, niebezpieczne procesy wdrożeniowe i niedostateczne monitorowanie.
Szczególnie istotne są podatności wynikające z połączenia kilku pozornie mało groźnych słabości. Przykładowo publicznie dostępny panel administracyjny, brak MFA i słaba kontrola prób logowania mogą łącznie stworzyć znacznie większe ryzyko niż każda z tych cech oceniana osobno.
1.4. Podstawowe standardy i ramy metodyczne
Profesjonalne testy powinny opierać się na rozpoznawalnej metodyce:
- OWASP Web Security Testing Guide (WSTG) – przewodnik testowania bezpieczeństwa aplikacji WWW.
- OWASP ASVS – wymagania weryfikacyjne dla bezpieczeństwa aplikacji.
- PTES (Penetration Testing Execution Standard) – ramy organizacji procesu testów penetracyjnych.
- NIST SP 800-115 – wytyczne dotyczące testowania bezpieczeństwa informacji i oceny zabezpieczeń.
- CVSS – system oceny technicznej dotkliwości podatności, który należy uzupełniać analizą ryzyka w konkretnym środowisku.
Standard nie zastępuje planowania testu. Zakres, dopuszczalne techniki, warunki przerwania i zasady postępowania z danymi muszą być określone przed rozpoczęciem działań.
1.5. Zasady autoryzacji i bezpieczeństwa testów
Przed rozpoczęciem należy określić:
- Właściciela systemu i osobę zatwierdzającą test.
- Adresy IP, domeny, aplikacje i środowiska objęte zakresem.
- Systemy wyłączone z testu, w tym zasoby podmiotów trzecich.
- Dozwolone techniki i ograniczenia dotyczące obciążenia.
- Okno testowe, kanał kontaktu awaryjnego i procedurę przerwania.
- Zasady ochrony danych, przechowywania dowodów oraz ich usunięcia po zakończeniu.
- Warunki raportowania incydentu wykrytego podczas testów.
W przypadku hostingu współdzielonego szczególnie ważne jest rozróżnienie własnej witryny od infrastruktury operatora i innych klientów. Zgoda na testowanie aplikacji nie musi oznaczać zgody na testowanie całej platformy hostingowej.
2. Rodzaje testów: black box, grey box i white box
Podział na black box, grey box i white box opisuje przede wszystkim poziom informacji udostępnionych testerowi przed rozpoczęciem badania, a nie poziom zaawansowania technik.
Black box — test z minimalną wiedzą
Tester otrzymuje cel i zakres, ale nie dostaje wewnętrznej dokumentacji, kodu źródłowego ani uprzywilejowanych danych dostępowych. Bada system z perspektywy zewnętrznego napastnika.
Grey box — test z ograniczoną wiedzą
Tester otrzymuje przykładowo konto zwykłego użytkownika, opis architektury lub dokumentację API. Może badać problemy, które ujawniają się dopiero po zalogowaniu.
White box — test z szeroką wiedzą
Tester ma dostęp do kodu źródłowego, konfiguracji, dokumentacji technicznej, a czasem również do informacji o infrastrukturze i kont testowych o różnych uprawnieniach.
2.1. Black box — zewnętrzna perspektywa ataku
W teście black box pierwszym zadaniem jest ustalenie rzeczywistej powierzchni ataku. Obejmuje to domeny, publiczne punkty końcowe, dostępne usługi i mechanizmy uwierzytelniania, ale wyłącznie w granicach zatwierdzonego zakresu.
Przykładowe obszary analizy:
- jakie usługi są publicznie osiągalne;
- czy interfejsy administracyjne są dostępne z Internetu;
- czy informacje ujawniane przez błędy i nagłówki HTTP ułatwiają identyfikację technologii;
- czy aplikacja umożliwia dostęp do danych bez odpowiedniego uwierzytelnienia;
- czy ograniczenia prób logowania i odzyskiwania konta działają prawidłowo.
Ograniczenie: brak dostępu do informacji wewnętrznych może spowodować, że część podatności pozostanie niewykryta. Black box nie jest automatycznie bardziej realistyczny ani bardziej kompletny od pozostałych metod — odpowiada po prostu na inne pytania.
2.2. Grey box — badanie działania aplikacji po zalogowaniu
Grey box jest często bardzo efektywny w testowaniu aplikacji biznesowych, paneli klienta, systemów CMS i API.
Tester może dysponować dwoma kontami testowymi o odmiennych uprawnieniach. Dzięki temu bada, czy aplikacja prawidłowo egzekwuje autoryzację na poziomie poszczególnych obiektów, a nie tylko całych ekranów.
Przykładowy problem: użytkownik A może odczytać własne zamówienie, a użytkownik B — swoje. Jeżeli zmiana identyfikatora zamówienia w żądaniu pozwala użytkownikowi A uzyskać dostęp do zamówienia B, występuje potencjalny błąd kontroli dostępu na poziomie obiektu, klasyfikowany często jako BOLA (Broken Object Level Authorization).
Test powinien wykorzystywać przygotowane dane syntetyczne i potwierdzać, że dostęp do cudzego obiektu jest faktycznie blokowany. Nie ma potrzeby odczytywania rzeczywistych danych innych klientów.
2.3. White box — analiza z dostępem do implementacji
White box pozwala przejść od obserwacji zachowania systemu do analizy mechanizmu, który to zachowanie powoduje.
W zależności od zakresu można sprawdzać:
- walidację danych wejściowych;
- budowanie zapytań do bazy danych;
- kontrolę uprawnień w warstwie usług i repozytoriów;
- obsługę wyjątków i ujawnianie danych w logach;
- zarządzanie sekretami i tokenami;
- zależności programistyczne oraz ich podatności;
- konfigurację środowisk, kontenerów i pipeline’ów CI/CD.
Dostęp do kodu ułatwia wykrycie ścieżek, których nie da się łatwo wywołać z interfejsu użytkownika. Nie dowodzi jednak samodzielnie, że błąd jest osiągalny w produkcji. Wyniki należy korelować z konfiguracją wdrożenia i zachowaniem aplikacji.
2.4. Jak dobrać rodzaj testu?
| Sytuacja | Zalecane podejście |
|---|---|
| Ocena zewnętrznej ekspozycji usług | Black box |
| Sprawdzenie separacji danych użytkowników | Grey box |
| Audyt własnej aplikacji rozwijanej wewnętrznie | White box + testy dynamiczne |
| Ocena bezpieczeństwa API | Grey box + analiza kontraktu i kodu |
| Ocena całego procesu wytwarzania oprogramowania | White box + przegląd CI/CD |
| Sprawdzenie odporności przed wdrożeniem | Połączenie metod, dobrane do ryzyka |
W praktyce najwięcej wartości daje często podejście hybrydowe: test zewnętrzny identyfikuje ekspozycję, test uwierzytelniony sprawdza logikę biznesową, a analiza kodu wyjaśnia przyczynę wykrytych problemów.
3. Metodyka testów penetracyjnych — od rozpoznania do raportu
Test penetracyjny powinien przebiegać według kontrolowanego, powtarzalnego procesu. Dzięki temu wyniki można odtworzyć, porównać po wdrożeniu poprawek i wykorzystać do oceny dojrzałości zabezpieczeń.
Cykl testu penetracyjnego
01
Planowanie i autoryzacja
Zakres, cele, ograniczenia, reguły zaangażowania.
02
Rozpoznanie
Inwentaryzacja zasobów i identyfikacja powierzchni ataku.
03
Skanowanie i enumeracja
Usługi, technologie, konfiguracje i potencjalne słabości.
04
Analiza i walidacja
Weryfikacja hipotez bez zbędnego ryzyka dla systemu.
05
Ocena wpływu
Ustalenie możliwych skutków i ścieżek eskalacji ryzyka.
06
Raportowanie
Dowody, ocena ryzyka, przyczyny i plan naprawczy.
07
Retest
Sprawdzenie poprawek i regresji bezpieczeństwa.
3.1. Etap pierwszy — planowanie i reguły zaangażowania
Zanim tester wyśle pierwsze żądanie do badanego systemu, musi określić granice działań. W praktyce przygotowuje się dokument Rules of Engagement (RoE), czyli zasady prowadzenia testu.
Dokument powinien zawierać:
- listę domen, adresów IP, aplikacji i interfejsów API;
- środowisko objęte testem: produkcyjne, testowe lub laboratoryjne;
- zakres testów uwierzytelnionych i nieautoryzowanych;
- dopuszczalne techniki i ograniczenia automatyzacji;
- zasady testów obciążeniowych, jeśli zostały osobno zatwierdzone;
- osoby kontaktowe, okno serwisowe i procedurę awaryjną;
- zasady przechowywania danych i materiałów dowodowych;
- warunki uznania testu za zakończony.
Należy także ustalić, czy badanie obejmuje integracje z zewnętrznymi usługami, dostawcami płatności, CDN, pocztą elektroniczną lub systemami tożsamości. Zasoby podmiotów trzecich wymagają odpowiednich uprawnień do testowania.
Kryterium jakości: tester powinien móc jednoznacznie wykazać, że każde istotne działanie mieściło się w zatwierdzonym zakresie.
3.2. Etap drugi — rozpoznanie powierzchni ataku
Powierzchnia ataku to wszystkie elementy systemu, przez które potencjalny napastnik może oddziaływać na jego zasoby. Obejmuje nie tylko porty sieciowe, lecz także formularze, endpointy API, panele administracyjne, mechanizmy odzyskiwania konta, integracje i procesy automatyzacji.
Rozpoznanie powinno odpowiedzieć na następujące pytania:
- Jakie zasoby należą do organizacji i są objęte testem?
- Jakie usługi są osiągalne z poszczególnych segmentów sieci?
- Jakie technologie i komponenty tworzą system?
- Które funkcje wymagają uwierzytelnienia?
- Jakie granice zaufania występują pomiędzy komponentami?
- Które zasoby zawierają dane krytyczne?
W przypadku aplikacji WWW mapa powierzchni ataku może obejmować:
- główną witrynę oraz subdomeny;
- panele administracyjne i logowania;
- publiczne endpointy REST i GraphQL;
- funkcje uploadu plików;
- wyszukiwarki, formularze i mechanizmy importu;
- integracje OAuth i SSO;
- zadania cron oraz interfejsy serwisowe;
- środowiska staging, development i kopie testowe.
Samo odkrycie subdomeny nie dowodzi, że należy ona do zakresu testu. Własność zasobu i uprawnienie do jego badania muszą zostać potwierdzone.
3.3. Etap trzeci — skanowanie i enumeracja
Enumeracja polega na ustaleniu szczegółów usług i mechanizmów, które są dostępne w danym środowisku. Na tym etapie można wykorzystać skanery portów, narzędzia do analizy HTTP, kontrolery konfiguracji TLS oraz skanery podatności.
Wyników automatycznych nie należy interpretować bez kontekstu.
Przykładowo skaner może wykryć starą wersję serwera. Aby ustalić znaczenie wyniku, trzeba sprawdzić:
- czy wykrycie wersji jest wiarygodne;
- czy komponent jest objęty konkretnym CVE;
- czy podatność dotyczy używanego modułu i konfiguracji;
- czy dostawca nie zastosował poprawki wstecznej;
- czy istnieją warunki wstępne wykorzystania podatności;
- czy mechanizmy kompensacyjne zmieniają ekspozycję.
W środowiskach produkcyjnych enumerację należy prowadzić z kontrolowaną intensywnością. Nadmierna równoległość, agresywne testy protokołów lub duża liczba żądań mogą zakłócić pracę usług.
3.4. Etap czwarty — analiza i walidacja podatności
Każde ustalenie powinno przejść weryfikację. Warto rozróżnić:
- Wykrycie: narzędzie wskazało potencjalny problem.
- Potwierdzenie: istnieją dowody, że problem występuje w badanym systemie.
- Ocena możliwości wykorzystania: ustalono, w jakich warunkach problem może zostać wykorzystany.
- Ocena wpływu: określono skutki dla danych, uprawnień lub dostępności.
Przykładowo komunikat o potencjalnym SQL injection nie jest wystarczającym dowodem. Tester powinien zweryfikować, czy różnica w odpowiedzi rzeczywiście wynika z niebezpiecznego przetwarzania danych, a nie np. z błędu walidacji, cache lub niestabilności backendu.
Walidacja powinna być możliwie mało inwazyjna. Nie należy pobierać rzeczywistych danych klientów, usuwać rekordów ani wykonywać nieodwracalnych operacji tylko po to, aby udowodnić istnienie podatności.
3.5. Etap piąty — analiza ścieżek ataku
Pojedyncza podatność może mieć ograniczony wpływ, ale kilka słabości może utworzyć łańcuch prowadzący do poważnego naruszenia bezpieczeństwa.
Przykładowy, hipotetyczny łańcuch ryzyka:
- Publicznie dostępny endpoint ujawnia zbyt dużo informacji.
- Użytkownik o niskich uprawnieniach może odczytać nieprawidłowo chroniony obiekt.
- Ten sam błąd występuje w funkcji udostępniającej dokumenty.
- System nie rejestruje dostępu do tych obiektów w sposób umożliwiający skuteczną detekcję.
Ocena powinna uwzględniać zarówno podatności techniczne, jak i możliwość wykrycia zdarzenia przez mechanizmy monitorowania.
Nie zawsze konieczne jest doprowadzenie do pełnej kompromitacji systemu. Często wystarczy bezpiecznie udokumentowany dowód naruszenia granicy uprawnień, aby wykazać ryzyko i przygotować zalecenia naprawcze.
3.6. Etap szósty — raportowanie i komunikacja
Raport powinien być zrozumiały dla dwóch grup odbiorców:
- kierownictwa, które podejmuje decyzje dotyczące akceptacji ryzyka i finansowania poprawek;
- zespołu technicznego, który musi odtworzyć problem i go naprawić.
Każde ustalenie powinno zawierać identyfikator, tytuł, poziom ryzyka, opis, warunki wystąpienia, dowody, potencjalne skutki i zalecenia.
W raporcie trzeba odróżnić brak wykrytych podatności od potwierdzenia bezpieczeństwa. Wynik negatywny oznacza jedynie, że w określonym zakresie i przy zastosowanych metodach nie potwierdzono danego problemu.
3.7. Etap siódmy — retest i zamknięcie ustaleń
Retest sprawdza, czy wdrożona poprawka usuwa przyczynę problemu, a nie tylko maskuje objawy.
Prawidłowy retest obejmuje:
- odtworzenie pierwotnego scenariusza;
- potwierdzenie, że nieautoryzowana operacja jest blokowana;
- sprawdzenie poprawnego działania legalnego przypadku użycia;
- weryfikację logowania i alertowania, jeśli były częścią zalecenia;
- kontrolę potencjalnej regresji w sąsiednich funkcjach;
- aktualizację statusu ustalenia.
Ustalenie można oznaczyć jako naprawione, częściowo naprawione, nienaprawione lub nieweryfikowalne. Ten ostatni status jest istotny, jeśli zmienił się zakres albo środowisko nie jest już dostępne.
4. Narzędzia pentestera — zastosowania, ograniczenia i interpretacja wyników
Profesjonalny warsztat pentestera obejmuje narzędzia do enumeracji sieci, testowania HTTP, analizy aplikacji, diagnostyki protokołów, przeglądu kodu i raportowania.
4.1. Nmap — rozpoznanie usług sieciowych
Nmap służy do wykrywania hostów, otwartych portów i usług. Pozwala również analizować wybrane właściwości usług i konfiguracji sieciowych.
Przykład podstawowego skanowania własnego laboratorium:
nmap -sT -sV --top-ports 100 192.0.2.10
Co oznaczają parametry?
-sT— skanowanie TCP z użyciem połączeń systemowych.-sV— próba identyfikacji wersji usług.--top-ports 100— kontrola 100 najczęściej spotykanych portów.192.0.2.10— przykładowy adres dokumentacyjny, nie rzeczywisty cel testu.
Adresy z zakresu 192.0.2.0/24 są przeznaczone do dokumentacji i przykładów. W rzeczywistym badaniu należy podstawić adres autoryzowanego hosta.
Typowy wynik może wskazać porty 22/TCP, 80/TCP i 443/TCP. Interpretacja nie powinna kończyć się na nazwach usług. Trzeba określić, czy dany port powinien być osiągalny z Internetu, jakie uwierzytelnianie stosuje usługa oraz czy dostęp jest ograniczony do wymaganych źródeł.
Ważne rozróżnienie:
open— usługa przyjmuje połączenia na badanym porcie;closed— host jest osiągalny, ale port nie ma nasłuchującej usługi;filtered— filtracja uniemożliwia jednoznaczne ustalenie stanu.
Nmap nie potwierdza samodzielnie, że otwarty port stanowi podatność. Jest narzędziem rozpoznawczym.
4.2. Burp Suite — analiza komunikacji HTTP
Burp Suite jest platformą do testowania bezpieczeństwa aplikacji WWW. Umożliwia przechwytywanie i analizowanie żądań HTTP, modyfikowanie parametrów, badanie odpowiedzi oraz porównywanie zachowania aplikacji dla różnych danych wejściowych.
Podstawowy proces pracy:
- Uruchomienie lokalnego proxy testowego.
- Skonfigurowanie przeglądarki testowej.
- Przechwycenie żądania do aplikacji.
- Analiza metody HTTP, ścieżki, parametrów, nagłówków i ciasteczek.
- Weryfikacja, czy aplikacja egzekwuje oczekiwane reguły bezpieczeństwa.
- Zapisanie minimalnego dowodu potwierdzającego ustalenie.
Przykładowe żądanie:
GET /api/orders/1042 HTTP/1.1
Host: app.example.test
Accept: application/json
Cookie: session=<TEST_SESSION>
Tester powinien sprawdzić, czy identyfikator 1042 odnosi się do obiektu dostępnego aktualnie zalogowanemu użytkownikowi. W przygotowanym laboratorium można porównać odpowiedź z odpowiedzią uzyskaną dla obiektu należącego do drugiego konta testowego.
Należy ocenić nie tylko kod statusu HTTP, ale również treść odpowiedzi, skutki uboczne i zachowanie logiki biznesowej. Status 200 OK nie zawsze oznacza nieautoryzowany dostęp, a 403 Forbidden nie dowodzi automatycznie, że wszystkie ścieżki dostępu są prawidłowo zabezpieczone.
4.3. OWASP ZAP — testowanie aplikacji WWW
OWASP ZAP to otwartoźródłowe narzędzie do analizy bezpieczeństwa aplikacji internetowych.
Można je wykorzystać do:
- przeglądu komunikacji HTTP;
- pasywnego wykrywania problemów z nagłówkami i konfiguracją;
- identyfikacji znanych wzorców ryzyka;
- kontrolowanego testowania aplikacji w środowisku laboratoryjnym;
- automatyzacji powtarzalnych kontroli w procesie CI/CD.
Skanowanie pasywne analizuje obserwowaną komunikację bez celowego wysyłania do aplikacji dodatkowych żądań atakujących. Testy aktywne mogą natomiast modyfikować dane wejściowe i wywoływać nieoczekiwane zachowania.
Ważne ograniczenie: automatyczny skaner nie rozumie w pełni kontekstu biznesowego. Może nie wykryć błędów kontroli dostępu, które zależą od relacji pomiędzy użytkownikiem, rekordem i rolą, albo może zgłosić problem, którego nie da się potwierdzić w danej konfiguracji.
4.4. Metasploit — weryfikacja znanych podatności
Metasploit Framework jest frameworkiem wykorzystywanym w autoryzowanych testach bezpieczeństwa do sprawdzania znanych podatności i kontrolowanej walidacji scenariuszy ataku.
Wynik takiego testu zależy od kilku warunków:
- zgodności wersji i konfiguracji celu z wymaganiami modułu;
- dostępności usługi oraz możliwości dotarcia do niej;
- spełnienia warunków wstępnych podatności;
- obecności poprawek, zabezpieczeń systemowych i mechanizmów ochronnych;
- poprawności konfiguracji samego testu.
Nieudana próba nie dowodzi, że system jest bezpieczny. Może oznaczać, że podatność nie występuje, ale również że scenariusz był nieodpowiedni albo środowisko nie spełniało warunków testu.
W środowisku produkcyjnym należy zachować szczególną ostrożność. Niektóre moduły mogą zmieniać stan systemu, destabilizować usługę lub uruchamiać kod. Zakres i skutki użycia muszą być wcześniej zatwierdzone.
4.5. Wireshark — analiza ruchu sieciowego
Wireshark pozwala analizować pakiety sieciowe i zachowanie protokołów. Jest przydatny w diagnostyce TLS, DNS, TCP, komunikacji aplikacyjnej oraz problemów z segmentacją sieci.
Przykładowe filtry wyświetlania:
dns
tcp.flags.syn == 1
tls.handshake.type == 1
http.request
Filtry pomagają zawęzić widok do określonego rodzaju komunikacji. Nie są mechanizmem blokowania ruchu ani dowodem podatności samym w sobie.
W analizie należy uwzględnić, że:
- przechwycenie może nie obejmować całej komunikacji;
- szyfrowany ruch TLS zwykle nie ujawnia treści aplikacyjnej bez odpowiednich materiałów deszyfrujących;
- ruch widoczny na jednym interfejsie nie reprezentuje całej topologii sieci;
- dane w plikach PCAP mogą zawierać tokeny, dane osobowe lub inne informacje wrażliwe.
Dlatego pliki przechwyceń powinny być przechowywane i udostępniane zgodnie z zasadami ochrony dowodów.
4.6. Które narzędzie wybrać?
| Cel | Narzędzie | Najważniejsze ograniczenie |
|---|---|---|
| Inwentaryzacja usług | Nmap | Nie określa samodzielnie ryzyka biznesowego |
| Analiza żądań WWW | Burp Suite | Wymaga interpretacji zachowania aplikacji |
| Automatyzacja kontroli WWW | OWASP ZAP | Nie zastępuje testów logiki biznesowej |
| Walidacja znanych scenariuszy | Metasploit | Nieodpowiedni moduł może dać mylący wynik lub zaszkodzić systemowi |
| Analiza protokołów | Wireshark | Widoczność ograniczona do dostępnego przechwycenia |
Najważniejszą kompetencją nie jest liczba zainstalowanych narzędzi, lecz umiejętność sformułowania hipotezy, poprawnego przeprowadzenia testu i zinterpretowania dowodów.
5. Testy bezpieczeństwa aplikacji WWW, WordPressa i API
Aplikacje internetowe stanowią szczególnie istotny obszar testów penetracyjnych, ponieważ łączą publicznie dostępny interfejs, logikę biznesową, mechanizmy uwierzytelniania, bazę danych i często wiele integracji zewnętrznych.
Właściwym punktem odniesienia dla tego obszaru jest katalog zagrożeń OWASP Top 10 oraz szczegółowe procedury OWASP Web Security Testing Guide.
5.1. Kontrola dostępu — IDOR, BOLA i eskalacja uprawnień
Kontrola dostępu określa, jakie operacje może wykonywać dany podmiot na określonych zasobach. W prawidłowo zaprojektowanej aplikacji nie wystarczy sprawdzić, czy użytkownik jest zalogowany — trzeba również sprawdzić, czy ma uprawnienia do konkretnego obiektu i operacji.
Przykład: system CRM umożliwia odczyt klienta za pomocą endpointu:
GET /api/customers/5821 HTTP/1.1
Host: crm.example.test
Aplikacja może poprawnie uwierzytelniać użytkownika, a jednocześnie nie sprawdzać, czy rekord 5821 należy do jego organizacji.
To typowy scenariusz błędu kontroli dostępu na poziomie obiektu, znany jako BOLA. Termin IDOR (Insecure Direct Object Reference) jest często używany do opisu podobnej sytuacji, w której manipulacja referencją do zasobu prowadzi do nieautoryzowanego dostępu.
Metodyka bezpiecznej weryfikacji:
- Przygotuj dwa konta testowe z odmiennymi uprawnieniami.
- Utwórz syntetyczne obiekty przypisane do każdego konta.
- Wykonaj dozwoloną operację na obiekcie właściciela.
- W odizolowanym środowisku sprawdź próbę dostępu do obiektu drugiego konta.
- Zweryfikuj, czy aplikacja blokuje odczyt i modyfikację.
- Sprawdź logi serwera i potwierdź, że nie nastąpiła zmiana stanu danych.
Test należy powtórzyć dla różnych metod HTTP oraz funkcji, jeśli należą do zakresu: odczytu, edycji, eksportu i usuwania. Kontrola dostępu powinna być realizowana po stronie serwera, niezależnie od tego, czy interfejs użytkownika ukrywa przycisk lub pole formularza.
5.2. SQL injection — błędy w budowaniu zapytań
SQL injection występuje, gdy niezaufane dane wejściowe wpływają na strukturę wykonywanego zapytania SQL zamiast być traktowane wyłącznie jako dane.
Przykładowy niebezpieczny wzorzec w PHP:
$sql = "SELECT id, email FROM users
WHERE email = '" . $_GET['email'] . "'";
W tym przykładzie wartość parametru email jest bezpośrednio dołączana do tekstu zapytania. Jeżeli nie jest właściwie zabezpieczona, może zmienić interpretację składni SQL.
Preferowanym rozwiązaniem jest parametryzacja:
$stmt = $pdo->prepare(
'SELECT id, email FROM users WHERE email = :email'
);
$stmt->execute([
'email' => $email
]);
W drugim wariancie sterownik przekazuje wartość parametru oddzielnie od struktury zapytania, co zapobiega traktowaniu danych wejściowych jako fragmentu składni SQL w tym kontekście.
Należy jednak pamiętać, że parametryzacja nie zastępuje wszystkich kontroli. Dynamiczne nazwy tabel, kolumn i kierunki sortowania często wymagają jawnej listy dozwolonych wartości, ponieważ nie wszystkie elementy składni SQL można bezpośrednio parametryzować.
Co powinien obejmować test?
- identyfikację parametrów wpływających na zapytania;
- sprawdzenie sposobu budowania zapytań w kodzie;
- kontrolowaną walidację zachowania na danych testowych;
- analizę obsługi błędów i logowania;
- potwierdzenie, że naprawa dotyczy wszystkich odpowiednich ścieżek kodu.
Komunikat błędu bazy danych może być wskazówką, ale nie jest samodzielnym dowodem możliwości wykorzystania SQL injection.
5.3. Cross-Site Scripting — XSS
XSS to klasa podatności, w której dane kontrolowane przez użytkownika zostają niebezpiecznie umieszczone w kontekście wykonywalnym przeglądarki.
Wyróżnia się trzy podstawowe rodzaje:
- Stored XSS: niebezpieczne dane są zapisywane, a następnie wyświetlane innym użytkownikom.
- Reflected XSS: dane z żądania trafiają do odpowiedzi i są interpretowane przez przeglądarkę.
- DOM-based XSS: podatność wynika z niebezpiecznej obsługi danych przez kod JavaScript po stronie klienta.
Przykładowy ryzykowny fragment:
resultElement.innerHTML = userProvidedText;
Jeżeli userProvidedText zawiera niezaufane dane, przeglądarka może potraktować ich część jako znaczniki HTML, a w niektórych kontekstach również jako kod.
Jeśli celem jest wyświetlenie zwykłego tekstu, bezpieczniejszym wyborem jest:
resultElement.textContent = userProvidedText;
W przypadku konieczności renderowania dozwolonego HTML należy używać sprawdzonego sanitizera i określić, które elementy oraz atrybuty są dopuszczalne.
Weryfikacja XSS powinna uwzględniać kontekst wyjścia: HTML, atrybut HTML, URL, JavaScript lub CSS. Jedna metoda kodowania nie zabezpiecza prawidłowo wszystkich tych kontekstów.
Nagłówek CSP (Content Security Policy) może ograniczyć skutki niektórych błędów, lecz nie zastępuje prawidłowego kodowania wyjścia i sanitizacji.
5.4. Uwierzytelnianie, sesje i mechanizmy odzyskiwania konta
W tej części testu analizuje się cały cykl życia tożsamości:
- rejestrację konta;
- logowanie i obsługę błędów uwierzytelniania;
- MFA i odzyskiwanie dostępu;
- zmianę hasła i adresu e-mail;
- unieważnianie sesji;
- rotację tokenów;
- wylogowanie z poszczególnych urządzeń.
W aplikacjach wykorzystujących ciasteczka sesyjne należy zweryfikować ustawienia Secure, HttpOnly i SameSite, a także sposób generowania, odnawiania i unieważniania identyfikatorów sesji.
Każda z tych właściwości ma inne znaczenie:
Secureogranicza wysyłanie ciasteczka do połączeń HTTPS.HttpOnlyblokuje bezpośredni odczyt ciasteczka przez standardowe API JavaScript.SameSitewpływa na wysyłanie ciasteczka w kontekście żądań międzywitrynowych.
Żadna z tych flag nie zastępuje kontroli uprawnień po stronie serwera. Warto również pamiętać, że SameSite nie eliminuje automatycznie wszystkich scenariuszy CSRF.
Szczególnie ważne testy obejmują unieważnienie starych sesji po zmianie hasła, prawidłowe sprawdzanie jednorazowości tokenów resetujących oraz ochronę przed ponownym wykorzystaniem tokenu po jego unieważnieniu.
5.5. CSRF — wymuszanie niepożądanych operacji
Cross-Site Request Forgery polega na doprowadzeniu do wykonania niepożądanej operacji przez przeglądarkę użytkownika, który ma aktywną sesję w podatnej aplikacji.
Ryzyko zależy od sposobu uwierzytelniania, ustawień ciasteczek i charakteru operacji. Typowe zabezpieczenia obejmują:
- tokeny anty-CSRF powiązane z sesją;
- weryfikację nagłówka
Originlub odpowiednio kontrolowanegoReferer; - odpowiednie ustawienia
SameSite; - wymaganie ponownego potwierdzenia przy operacjach wrażliwych;
- niewykorzystywanie metod GET do zmiany stanu.
Test powinien sprawdzić, czy operacje zmieniające stan wymagają właściwych zabezpieczeń, czy tokeny są walidowane po stronie serwera i czy aplikacja nie akceptuje ich nieprawidłowych lub brakujących wartości.
5.6. SSRF — niebezpieczne żądania po stronie serwera
Server-Side Request Forgery występuje wtedy, gdy aplikacja umożliwia użytkownikowi wpływanie na adres, pod który serwer wykonuje żądanie, bez wystarczającej kontroli celu.
Przykładowe funkcje narażone na takie ryzyko:
- pobieranie obrazów z URL;
- import danych z zewnętrznych źródeł;
- generowanie podglądu strony;
- webhooki;
- integracje pobierające pliki;
- funkcje diagnostyczne łączące się z innymi usługami.
Problem staje się szczególnie poważny, jeśli serwer może dotrzeć do zasobów niedostępnych z Internetu, np. wewnętrznych paneli administracyjnych lub usług infrastrukturalnych.
Zabezpieczenia powinny obejmować walidację schematu i hosta, listy dozwolonych celów, ograniczenie ruchu wychodzącego, ponowną weryfikację po przekierowaniach oraz blokowanie adresów wewnętrznych i specjalnych zakresów IP. Kontrola powinna uwzględniać także rozwiązywanie DNS i ryzyko zmiany adresu między walidacją a nawiązaniem połączenia.
Sama lista blokowanych domen może być niewystarczająca, jeżeli aplikacja dopuszcza alternatywne reprezentacje adresów, przekierowania lub nietypowe protokoły.
5.7. Bezpieczeństwo uploadu plików
Funkcje przesyłania plików są częstym źródłem problemów związanych z walidacją danych i uprawnieniami.
Należy sprawdzić:
- czy serwer weryfikuje rzeczywisty typ pliku, a nie tylko deklarację klienta;
- czy rozszerzenia są walidowane względem listy dozwolonych formatów;
- czy nazwy plików są normalizowane i pozbawiane niebezpiecznych ścieżek;
- czy limity wielkości i liczby plików są egzekwowane po stronie serwera;
- czy pliki są przechowywane poza katalogiem wykonywalnym;
- czy pobieranie wymaga właściwej autoryzacji;
- czy mechanizmy skanowania i kwarantanny działają zgodnie z wymaganiami.
Szczególne znaczenie ma separacja przechowywania od wykonywania. Nawet poprawnie rozpoznany plik może stwarzać ryzyko, jeśli zostanie zapisany w miejscu, w którym serwer interpretuje go jako wykonywalny kod.
5.8. Testy bezpieczeństwa WordPressa
W kontekście HackerStop.pl i serwisów opartych na WordPressie audyt powinien obejmować więcej niż sam rdzeń CMS.
A. Rdzeń, motywy i wtyczki
Należy zinwentaryzować wersję WordPressa, PHP, aktywne motywy, wtyczki i ich zależności. Każdy komponent trzeba oceniać pod kątem znanych podatności oraz rzeczywistego sposobu użycia.
Nie należy uznawać każdej starej wtyczki za podatną ani każdej aktualizacji za wystarczające rozwiązanie wszystkich problemów. Warto weryfikować źródło komponentu, status utrzymania, historię poprawek i zgodność wersji.
B. Role i uprawnienia
Należy sprawdzić, czy role administrator, editor, author, contributor i subscriber mają tylko wymagane możliwości.
W kodzie wtyczek szczególne znaczenie mają kontrole capability, np.:
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( 'Brak uprawnień.' );
}
To jedynie uproszczony przykład kontroli dostępu. Właściwa zdolność powinna być dobrana do wykonywanej operacji. Trzeba też sprawdzić, czy kontrola występuje w każdym istotnym handlerze, a nie wyłącznie w kodzie wyświetlającym panel.
C. Nonce i operacje zmieniające stan
WordPress udostępnia mechanizmy nonce, które pomagają chronić operacje przed określonymi scenariuszami CSRF. Nonce nie jest jednak mechanizmem autoryzacji. Kod powinien osobno sprawdzać uprawnienia użytkownika i poprawność nonce.
D. REST API i AJAX
Testy powinny objąć endpointy REST API, akcje AJAX oraz operacje wykonywane przez zaplecze. Należy sprawdzić, czy callbacki weryfikują uprawnienia, czy dane są walidowane i sanitizowane oraz czy odpowiedzi nie ujawniają zbędnych informacji.
E. Konfiguracja i dane wrażliwe
Warto ocenić ochronę wp-config.php, kopii zapasowych, logów, plików eksportu, sekretów API i danych dostępowych do bazy. Publiczne kopie zapasowe mogą ujawnić znacznie więcej niż standardowy ekran logowania.
F. Automatyzacja aktualizacji i monitoring
Mechanizm aktualizacji powinien zapewniać kontrolę wersji, możliwość odtworzenia poprzedniego stanu i weryfikację działania witryny po wdrożeniu. Na serwisie produkcyjnym warto testować aktualizacje najpierw w środowisku staging, zwłaszcza gdy obejmują duże zmiany PHP lub krytyczne wtyczki.
5.9. Testowanie API REST i GraphQL
API należy oceniać na poziomie uwierzytelniania, autoryzacji, walidacji wejścia, ograniczeń zasobów i logiki biznesowej.
Najważniejsze klasy problemów obejmują:
- BOLA — nieprawidłowa kontrola dostępu do obiektów;
- BFLA — nieprawidłowa kontrola dostępu do funkcji;
- nadmierne ujawnianie właściwości obiektów;
- błędną walidację danych wejściowych;
- niewłaściwe zarządzanie tokenami;
- brak ograniczeń częstotliwości żądań;
- niebezpieczne operacje masowe;
- brak limitów wielkości odpowiedzi i kosztownych zapytań.
W GraphQL warto dodatkowo ocenić dostępność introspekcji, limity głębokości i złożoności zapytań oraz kontrolę uprawnień na poziomie resolverów. Wyłączenie introspekcji może ograniczyć ilość informacji ujawnianych w niektórych wdrożeniach, ale samo w sobie nie zabezpiecza API.
W przypadku operacji masowych trzeba sprawdzić, czy klient nie może nadpisać pól, które powinny być kontrolowane wyłącznie przez serwer, takich jak rola, status płatności czy identyfikator właściciela. To obszar często określany jako mass assignment lub niebezpieczne przypisywanie właściwości.
6. Przykładowy scenariusz testu w laboratorium
Poniższy scenariusz pokazuje, jak można przeprowadzić ograniczony test kontroli dostępu w aplikacji posiadającej własne konto użytkownika i zasoby przypisane do tego konta.
6.1. Cel testu
Cel: zweryfikowanie, czy użytkownik A nie może odczytać zasobu należącego do użytkownika B przez zmianę identyfikatora obiektu w żądaniu API.
Zakres:
- aplikacja testowa;
- dwa przygotowane konta;
- dwa syntetyczne rekordy;
- jeden endpoint odczytu;
- brak rzeczywistych danych klientów;
- brak testów obciążeniowych i destrukcyjnych.
6.2. Przygotowanie środowiska
Przygotuj dwa konta:
| Konto | Zasób | Oczekiwany dostęp |
|---|---|---|
test-user-a | record-a | Odczyt własnego rekordu |
test-user-b | record-b | Odczyt własnego rekordu |
Upewnij się, że aplikacja ma przygotowane logi żądań oraz że testowe dane można łatwo usunąć po zakończeniu.
6.3. Test funkcjonalny
Najpierw zaloguj się jako użytkownik A i wykonaj prawidłowe żądanie do własnego zasobu. Zapisz:
- metodę i ścieżkę;
- kod statusu;
- identyfikator zwróconego rekordu;
- istotne nagłówki;
- czas wykonania i identyfikator korelacyjny, jeśli jest dostępny.
Następnie, w ramach autoryzowanego testu, sprawdź próbę odczytu syntetycznego rekordu użytkownika B.
Oczekiwane zachowanie: serwer odrzuca próbę dostępu lub stosuje inną, świadomie zaprojektowaną politykę, która nie ujawnia chronionych danych.
Nie należy opierać wniosku wyłącznie na kodzie statusu. Odpowiedź nie może zawierać danych chronionego rekordu, a próba nie może wywołać niepożądanej zmiany stanu.
6.4. Analiza wyników
Możliwe wyniki:
- Oczekiwany: użytkownik A nie uzyskuje dostępu do rekordu B.
- Negatywny: aplikacja zwraca dane rekordu B użytkownikowi A.
- Niejednoznaczny: odpowiedź wskazuje na odmowę, ale logi lub zachowanie aplikacji nie pozwalają ustalić, czy autoryzacja jest poprawnie egzekwowana.
W przypadku wyniku negatywnego należy ustalić, w której warstwie występuje błąd: kontrolerze API, warstwie usług, zapytaniu do bazy danych czy konfiguracji tenantów. Poprawka powinna wynikać z tożsamości i uprawnień użytkownika, a nie z założenia, że identyfikatory zasobów są trudne do odgadnięcia.
6.5. Zalecana poprawka
Logika aplikacji powinna pobierać zasób w kontekście uprawnień zalogowanego użytkownika. Przykładowo warstwa danych może filtrować rekordy po identyfikatorze właściciela lub identyfikatorze organizacji.
Schematycznie:
SELECT id, name
FROM records
WHERE id = :record_id
AND owner_id = :authenticated_user_id;
To przykład uproszczony. W aplikacji wielodostępnej należy uwzględnić także granice organizacji, role, delegowane uprawnienia i wymagania logiki biznesowej.
6.6. Retest
Po poprawce powtórz oba przypadki:
- Użytkownik A odczytuje własny rekord.
- Użytkownik A próbuje odczytać rekord B.
- Użytkownik B odczytuje własny rekord.
- Zespół weryfikuje logowanie odmów i brak wycieku danych.
Dobra poprawka nie tylko blokuje nieautoryzowany dostęp, ale również zachowuje prawidłowe działanie uprawnionych operacji.
7. Raport z testów penetracyjnych — CVSS, wpływ podatności i zalecenia naprawcze
Raport jest najważniejszym produktem końcowym pentestu. To na jego podstawie właściciel systemu podejmuje decyzje o priorytetach naprawczych, akceptacji ryzyka i inwestycjach w zabezpieczenia.
Raport powinien przedstawiać nie tylko listę błędów, lecz także ich przyczyny, możliwe konsekwencje oraz sposób weryfikacji naprawy.
7.1. Struktura profesjonalnego raportu
01
Streszczenie zarządcze
Najważniejsze ryzyka, ich wpływ na organizację i priorytety działań.
02
Zakres i metodyka
Badane zasoby, daty, rodzaje testów, ograniczenia i wyłączenia.
03
Podsumowanie wyników
Liczba ustaleń według poziomu ryzyka i statusu weryfikacji.
04
Szczegółowe ustalenia
Dowody, warunki wystąpienia, wpływ, przyczyna i rekomendacja.
05
Plan naprawczy
Priorytety, odpowiedzialność, zależności i terminy.
06
Retest i zamknięcie
Wyniki ponownej weryfikacji oraz pozostałe ryzyka.
7.2. CVSS — jak oceniać techniczną dotkliwość podatności?
CVSS (Common Vulnerability Scoring System) jest standardem służącym do oceny technicznej dotkliwości podatności. W wersji CVSS 4.0 podstawowa ocena uwzględnia między innymi warunki ataku, wymagane uprawnienia, interakcję użytkownika i wpływ na bezpieczeństwo zasobów.
Wartości wyników podstawowych są zwykle interpretowane następująco:
| Wynik CVSS | Klasyfikacja |
|---|---|
| 0,0 | Brak dotkliwości |
| 0,1–3,9 | Niska |
| 4,0–6,9 | Średnia |
| 7,0–8,9 | Wysoka |
| 9,0–10,0 | Krytyczna |
CVSS nie jest jednak kompletną oceną ryzyka biznesowego. Wynik nie mówi samodzielnie, czy podatny komponent zawiera dane krytyczne, czy system jest publicznie dostępny ani jakie straty może spowodować incydent.
W raporcie należy zatem odróżniać:
- dotkliwość techniczną — jak poważna jest podatność według metodyki CVSS;
- ryzyko operacyjne — jakie jest prawdopodobieństwo i skutek wykorzystania w konkretnym środowisku;
- priorytet naprawy — jak szybko organizacja powinna zareagować, uwzględniając ekspozycję, dostępne zabezpieczenia i znaczenie biznesowe zasobu.
Przykładowo podatność krytyczna w nieużywanym systemie testowym, odizolowanym od sieci, może wymagać innej kolejności działań niż podatność o niższej ocenie CVSS w publicznie dostępnym systemie przetwarzającym dane klientów. Nie oznacza to, że pierwszą można zignorować — oznacza konieczność oceny kontekstu.
7.3. Przykład kompletnego ustalenia
PT-001 — Nieprawidłowa kontrola dostępu do API
Wysoki priorytet
Przykład hipotetyczny — nie jest wynikiem rzeczywistego testu.
Opis problemu
Endpoint API zwraca rekord na podstawie jego identyfikatora, ale nie sprawdza, czy zalogowany użytkownik ma prawo dostępu do tego rekordu.
Warunki wystąpienia
Użytkownik posiada prawidłową sesję, zna identyfikator innego rekordu i może wywołać endpoint.
Potencjalny wpływ
Nieautoryzowany odczyt danych, naruszenie poufności oraz możliwe naruszenie separacji klientów.
Przyczyna techniczna
Warstwa serwerowa sprawdza uwierzytelnienie, ale pomija autoryzację na poziomie konkretnego obiektu.
Zalecenie naprawcze
Wdrożyć kontrolę uprawnień po stronie serwera dla każdego żądania odczytu i modyfikacji. Pobierać obiekty w kontekście użytkownika lub jego organizacji. Dodać testy automatyczne obejmujące próby dostępu między kontami.
Kryterium retestu
Użytkownik A może odczytać własny rekord, ale nie uzyskuje dostępu do syntetycznego rekordu użytkownika B. Test obejmuje wszystkie odpowiednie endpointy oraz operacje zmieniające stan.
7.4. Jak przygotować dowody techniczne?
Dobre ustalenie powinno być odtwarzalne przez uprawniony zespół bez konieczności ponownego przeprowadzania całego pentestu.
Dowody mogą obejmować:
- fragment żądania i odpowiedzi HTTP;
- zrzut ekranu z widocznym kontekstem;
- istotne wpisy logów;
- identyfikator żądania korelacyjnego;
- wersję testowanego komponentu;
- wynik kontrolowanego testu;
- odnośnik do odpowiedniego fragmentu kodu;
- czas wystąpienia zdarzenia i warunki testu.
Należy ograniczać ilość danych w dowodach. Tokeny sesyjne, hasła, klucze API, dane osobowe i inne sekrety trzeba usuwać lub maskować. Materiał dowodowy nie powinien sam stawać się nowym źródłem wycieku.
7.5. Priorytetyzacja poprawek
Praktyczny plan naprawczy powinien uwzględniać nie tylko poziom podatności, lecz także możliwość ograniczenia ryzyka.
| Priorytet | Przykładowa sytuacja | Działanie |
|---|---|---|
| P0 — awaryjny | Aktywne naruszenie bezpieczeństwa lub potwierdzona krytyczna ekspozycja | Natychmiastowa reakcja, ograniczenie ekspozycji i procedura incydentowa |
| P1 — pilny | Poważna podatność w publicznej usłudze z realną ścieżką wykorzystania | Pilna poprawka lub skuteczne zabezpieczenie kompensacyjne |
| P2 — wysoki | Istotny błąd wymagający określonych warunków | Zaplanowana naprawa w krótkim terminie |
| P3 — normalny | Problem o ograniczonym wpływie lub wymagający dodatkowych warunków | Naprawa w zwykłym cyklu utrzymania |
| P4 — planowy | Usprawnienia utwardzające i zmniejszające powierzchnię ataku | Włączenie do planu rozwoju zabezpieczeń |
Powyższa tabela jest przykładowym modelem operacyjnym, a nie uniwersalną normą terminów. Organizacja powinna określić własne SLA dla napraw na podstawie profilu ryzyka, wymagań prawnych i znaczenia systemów.
8. Retesty i weryfikacja skuteczności wdrożonych poprawek
Zamknięcie podatności nie powinno opierać się wyłącznie na deklaracji programisty lub administratora. Konieczne jest sprawdzenie, czy problem został usunięty i czy poprawka nie wprowadziła nowych błędów.
8.1. Trzy poziomy weryfikacji
Poziom 1 — test pierwotnego przypadku
Odtworzenie dokładnie tego samego scenariusza, który doprowadził do wykrycia podatności. Jeżeli test dotyczył nieautoryzowanego odczytu rekordu, należy ponownie wykonać próbę w tych samych warunkach.
Poziom 2 — test granicznych przypadków
Sprawdzenie wariantów, które mogły zostać pominięte w pierwotnej poprawce. Dla kontroli dostępu może to obejmować różne role, organizacje, typy rekordów oraz metody HTTP.
Poziom 3 — test regresyjny
Weryfikacja, czy legalne operacje nadal działają prawidłowo. Zabezpieczenie nie powinno polegać na zablokowaniu całej funkcji, jeżeli wymaganiem jest bezpieczny dostęp dla uprawnionych użytkowników.
8.2. Weryfikacja poprawki a przegląd kodu
Test dynamiczny pokazuje zachowanie działającego systemu. Przegląd kodu pozwala natomiast sprawdzić, czy kontrola bezpieczeństwa została wdrożona we właściwym miejscu i czy nie istnieją alternatywne ścieżki omijające zabezpieczenie.
Najlepszy rezultat uzyskuje się przez połączenie obu metod:
- przegląd kodu potwierdza usunięcie przyczyny;
- test dynamiczny potwierdza oczekiwane zachowanie wdrożonej aplikacji;
- testy regresyjne potwierdzają, że nie uszkodzono innych funkcji.
8.3. Przykładowa checklista retestu
Lista kontrolna retestu
0/7Odtworzono pierwotny przypadek podatności.Sprawdzono wszystkie objęte poprawką endpointy.Zweryfikowano konta i role o różnych uprawnieniach.Potwierdzono brak nieautoryzowanego odczytu lub modyfikacji.Sprawdzono logowanie zdarzeń bezpieczeństwa.Przeprowadzono testy regresyjne funkcji biznesowych.Zaktualizowano status ustalenia i dokumentację dowodową.
Wyczyść listę
8.4. Retest to nie pełny pentest
Retest koncentruje się na znanych wcześniej ustaleniach i ich naprawie. Nie zastępuje pełnego badania bezpieczeństwa po dużych zmianach architektury, migracji platformy, przebudowie mechanizmów uwierzytelniania lub wdrożeniu nowych integracji.
Zakres ponownego badania powinien odpowiadać skali zmian. Jeżeli poprawka wymagała modyfikacji wspólnego mechanizmu autoryzacji, warto rozszerzyć test na wszystkie komponenty korzystające z tego mechanizmu.
9. Dodatkowe zagadnienia, które warto uwzględnić w profesjonalnym pentestingu
Aby artykuł na HackerStop.pl był kompletny, warto rozszerzyć klasyczny zakres testów o bezpieczeństwo środowisk chmurowych, kontenerów, procesów CI/CD oraz mechanizmów wykrywania incydentów.
9.1. Segmentacja sieci i bezpieczeństwo infrastruktury
Testy powinny sprawdzać, czy podział na segmenty sieci rzeczywiście ogranicza komunikację zgodnie z wymaganiami architektury.
Istotne obszary to:
- reguły firewall i ACL;
- dostęp administracyjny z Internetu;
- separacja środowisk produkcyjnych i testowych;
- dostęp do baz danych wyłącznie z wymaganych źródeł;
- konfiguracja VPN i systemów zdalnego dostępu;
- konta serwisowe i uprawnienia między systemami;
- monitoring połączeń między segmentami.
Sama obecność zapory nie dowodzi prawidłowej segmentacji. Należy sprawdzić, czy reguły działają zgodnie z założeniami i czy nie istnieją niepotrzebne wyjątki.
9.2. Kontenery i CI/CD
W środowiskach opartych na Dockerze, Kubernetesie lub automatycznych pipeline’ach warto ocenić:
- uprawnienia procesów w kontenerach;
- używanie kont użytkowników uprzywilejowanych;
- zarządzanie sekretami;
- konfigurację obrazów bazowych;
- kontrolę zależności i pochodzenia artefaktów;
- uprawnienia runnerów CI/CD;
- separację środowisk i tokenów wdrożeniowych;
- możliwość nieautoryzowanej modyfikacji procesu budowania.
Szczególnie niebezpieczna jest sytuacja, w której przejęcie jednego konta automatyzacji umożliwia modyfikację kodu, budowanie artefaktów i wdrażanie ich do produkcji bez niezależnej kontroli.
9.3. Testowanie zabezpieczeń i monitoringu
Pentest może również sprawdzić, czy systemy ochronne reagują na kontrolowane zdarzenia testowe.
Przykładowo zespół może zweryfikować, czy:
- nieudane próby uwierzytelnienia są rejestrowane;
- nieautoryzowany dostęp do zasobu generuje odpowiedni wpis;
- alerty trafiają do właściwego systemu;
- logi zawierają kontekst potrzebny do analizy;
- mechanizmy detekcji nie generują nadmiernej liczby fałszywych alarmów.
Nie należy zakładać, że wykrycie podatności automatycznie oznacza możliwość wykrycia jej wykorzystania. Bezpieczeństwo techniczne i zdolność operacyjnego reagowania to powiązane, ale różne obszary.
9.4. Bezpieczne zarządzanie materiałami testowymi
Podczas pentestu mogą powstać pliki PCAP, zrzuty ekranów, eksporty HTTP, logi i inne dowody. Materiały te powinny podlegać kontrolom:
- ograniczony dostęp do zespołu testowego;
- szyfrowanie podczas przechowywania i przesyłania;
- maskowanie danych wrażliwych;
- kontrola integralności materiałów;
- określony termin retencji;
- bezpieczne usunięcie po zakończeniu projektu.
Profesjonalny pentest powinien minimalizować zarówno ryzyko badanego systemu, jak i ryzyko związane z samym procesem testowania.
10. Podsumowanie — jak wdrożyć testy penetracyjne w organizacji?
Testy penetracyjne są skuteczne wtedy, gdy stanowią część ciągłego procesu zarządzania bezpieczeństwem, a nie jednorazową czynność wykonywaną przed audytem lub wdrożeniem.
Najważniejsze zasady:
- Zdefiniuj zakres i autoryzację. Bez jasnych granic nie da się bezpiecznie przeprowadzić testu.
- Zidentyfikuj powierzchnię ataku. Nie ograniczaj się do portów — analizuj również API, konta, integracje i procesy automatyzacji.
- Łącz narzędzia z analizą ekspercką. Skaner generuje hipotezy, a tester weryfikuje ich znaczenie.
- Badaj logikę biznesową. Wiele poważnych problemów wynika z błędnej kontroli dostępu, a nie z nieaktualnego oprogramowania.
- Dokumentuj dowody. Każde ustalenie powinno być możliwe do odtworzenia i zweryfikowania.
- Priorytetyzuj naprawy na podstawie ryzyka. Uwzględniaj ekspozycję, warunki wykorzystania i znaczenie chronionych zasobów.
- Przeprowadzaj retesty. Potwierdź usunięcie przyczyny i brak regresji.
- Wykorzystuj wyniki do doskonalenia procesów. Uzupełniaj testy o bezpieczne konfiguracje, testy automatyczne, przeglądy kodu i monitoring.
Warto pamiętać, że żaden pojedynczy pentest nie gwarantuje pełnego bezpieczeństwa systemu. Jego wartość polega na ograniczeniu niepewności, ujawnieniu rzeczywistych słabości i dostarczeniu organizacji konkretnych, sprawdzalnych działań naprawczych.

