
Co znajdziesz w tym artykule?
- 1 Co to jest test penetracyjny (pentest)?
- 2 Dlaczego testy penetracyjne są ważne?
- 3 Rodzaje testów penetracyjnych
- 3.1 Testy aplikacji webowych (pentest aplikacji WWW)
- 3.2 Testy infrastruktury sieciowej (pentest sieci i systemów)
- 3.3 Testy aplikacji mobilnych
- 3.4 Testy bezpieczeństwa interfejsów API
- 3.5 Testy środowisk chmurowych (cloud pentesting)
- 3.6 Testy środowisk Active Directory (AD)
- 3.7 Inne rodzaje testów (socjotechnika, fizyczne włamania)
- 4 Modele testów penetracyjnych: Black Box, Grey Box, White Box
- 5 Metodyki i standardy testów penetracyjnych
- 6 Proces testu penetracyjnego (etapy pentestu)
- 7 Narzędzia wykorzystywane w pentestach
- 8 Checklisty pentestera
- 9 Podsumowanie
- 10 Bibliografia
Co to jest test penetracyjny (pentest)?
Test penetracyjny (ang. penetration test, potocznie pentest) to kontrolowany, celowy atak symulowany na system informatyczny, aplikację lub sieć, przeprowadzany w celu oceny bezpieczeństwa tego systemu. Innymi słowy, jest to zaplanowane “hakowanie” własnej infrastruktury – etyczny atak wykonywany za zgodą właściciela systemu.
Celem pentestu jest praktyczne sprawdzenie aktualnego stanu zabezpieczeń: wykrycie luk w zabezpieczeniach (podatności) oraz ocena, na ile system odporny jest na realne próby włamania. Pentester (osoba wykonująca test penetracyjny) analizuje system z perspektywy potencjalnego włamywacza – wykorzystuje te same techniki i narzędzia, co prawdziwy atakujący, starając się znaleźć słabe punkty zabezpieczeń.
W odróżnieniu od prawdziwego ataku hakerskiego, pentest odbywa się legalnie i w kontrolowanych warunkach. Warunkiem przeprowadzenia testu penetracyjnego jest zgoda właściciela systemu oraz jasno zdefiniowany zakres testu – działania pentestera są ograniczone do ustalonych celów i adresów. Kluczową cechą odróżniającą test penetracyjny od przestępczego włamania jest właśnie autoryzacja – pentester działa na podstawie umowy i zgodnie z prawem, a po zakończeniu testów przygotowuje raport opisujący znalezione podatności wraz z zaleceniami ich usunięcia. Pentester ma obowiązek przeprowadzić test tak, aby nie wyrządzić szkód (np. nie skasować danych) i po wszystkim przekazać wszelkie uzyskane informacje z powrotem klientowi.
Warto podkreślić, że pentest to nie to samo co audyt bezpieczeństwa. Audyt bezpieczeństwa polega na formalnym sprawdzeniu zgodności konfiguracji systemu z określoną normą lub standardem i zwykle ogranicza się do przeglądu dokumentacji oraz ustawień konfiguracyjnych. Natomiast test penetracyjny to praktyczna próba ataku – skupia się na rzeczywistym stanie bezpieczeństwa systemu i wykazuje, czy i jak da się do systemu faktycznie włamać. Pentest weryfikuje bezpieczeństwo w działaniu, nie tylko na papierze.
Dlaczego testy penetracyjne są ważne?
W obecnych czasach zaawansowane ataki hakerskie i ciągle pojawiające się nowe podatności stanowią poważne zagrożenie dla firm i organizacji. Testy penetracyjne pełnią kluczową rolę w proaktywnym podejściu do cyberbezpieczeństwa. Oto najważniejsze powody, dla których regularne pentesty są tak istotne:
- Identyfikacja słabych punktów: Pentesty pozwalają odkryć wcześniej nieznane luki w zabezpieczeniach aplikacji, systemów i sieci, zanim wykorzystają je prawdziwi napastnicy. Wykrycie podatności daje organizacji szansę na załatanie słabych punktów zanim staną się one przyczyną poważnego incydentu bezpieczeństwa.
- Ocena skuteczności zabezpieczeń: Symulowany atak pokazuje, czy wdrożone mechanizmy ochronne (zapory, systemy wykrywania włamań, polityki haseł itp.) faktycznie działają zgodnie z założeniami. Pentester sprawdza, które zabezpieczenia udało się obejść – dzięki czemu można ocenić realną skuteczność obecnych środków bezpieczeństwa i w razie potrzeby ulepszyć je lub poprawić konfigurację.
- Spełnienie wymogów regulacyjnych: W wielu branżach testy penetracyjne są wymagane lub przynajmniej mocno zalecane przez standardy i regulacje (np. PCI-DSS w sektorze płatności kartami, ISO 27001, ustawy o ochronie danych). Regularne przeprowadzanie pentestów pomaga spełnić te wymogi i uzyskać wymagane certyfikacje, potwierdzając że organizacja dba o bezpieczeństwo swoich systemów.
- Ograniczenie ryzyka incydentów: Wykrycie i usunięcie podatności przed rzeczywistym atakiem znacząco zmniejsza ryzyko udanego włamania. Dzięki pentestom można uniknąć kosztownych strat finansowych i wizerunkowych – potencjalny wyciek danych czy przestój systemów spowodowany atakiem może kosztować firmę o wiele więcej niż inwestycja w testy bezpieczeństwa. Lepiej “zostać zhakowanym” kontrolowanie przez własny zespół niż przez prawdziwego przestępcę.
- Zwiększanie świadomości i doskonalenie zespołu: Testy penetracyjne dostarczają cennych informacji nie tylko kierownictwu, ale i zespołom IT oraz deweloperom. Raport z pentestu wskazuje obszary do poprawy, co pomaga administratorom i programistom uczyć się na błędach i wdrażać najlepsze praktyki bezpieczeństwa. Dzięki temu personel IT zdobywa praktyczną wiedzę o najnowszych zagrożeniach i technikach ataków, co przekłada się na wyższy poziom bezpieczeństwa na co dzień.
Podsumowując, pentesty są niezastąpionym narzędziem prewencyjnym. Dają one realny obraz tego, jak skuteczne są nasze zabezpieczenia w konfrontacji z rzeczywistym atakiem. Zaleca się przeprowadzanie testów penetracyjnych regularnie (np. co rok lub po większych zmianach w systemach) oraz za każdym razem, gdy wprowadzane są nowe istotne rozwiązania lub usługi w infrastrukturze IT. Regularne pentesty pozwalają wykryć podatności zanim zrobią to cyberprzestępcy – a wiadomo, że lepiej zapobiegać włamaniom niż później leczyć ich skutki.
Rodzaje testów penetracyjnych
Zakres testu penetracyjnego może obejmować różne obszary infrastruktury i technologii – pentesty nie są jednolite. Poniżej przedstawiamy główne rodzaje pentestów pogrupowane według rodzaju testowanego systemu lub środowiska:
Testy aplikacji webowych (pentest aplikacji WWW)
Aplikacje webowe (np. serwisy internetowe, sklepy online, portale) to jeden z najczęstszych celów pentestów. Pentest aplikacji webowej polega na sprawdzeniu bezpieczeństwa aplikacji WWW pod kątem typowych ataków sieciowych i błędów programistycznych. Pentester analizuje zarówno kod źródłowy aplikacji, jak i jej działanie “z zewnątrz”, aby wykryć luki takie jak m.in.: SQL Injection (wstrzykiwanie zapytań SQL do bazy danych), XSS (Cross-Site Scripting – wykonywanie złośliwego kodu JavaScript w przeglądarce ofiary), CSRF (Cross-Site Request Forgery – wymuszenie akcji przez niezalogowanego użytkownika) czy podatności w mechanizmach uwierzytelniania i sesji.
Podczas testu aplikacji webowej wykorzystuje się zarówno automatyczne skanery bezpieczeństwa, jak i ręczne testy. Pentester może użyć proxy testowego (np. Burp Suite) do przechwytywania i modyfikacji ruchu HTTP, aby spróbować różnych ataków. Analizowane są formularze, punkty wejścia danych, mechanizmy logowania, obsługa błędów – wszystko, co może zostać wykorzystane przez atakującego.
Praktyczny przykład (SQL Injection): Załóżmy, że aplikacja ma URL: http://sklep.pl/produkty.php?id=5. Pentester podejrzewa, że parametr id jest podatny na wstrzyknięcie SQL. Wysyła więc ręcznie zmodyfikowane zapytanie, np. za pomocą narzędzia curl:
$ curl "http://sklep.pl/produkty.php?id=5' OR '1'='1"
Powyższy request dodaje do oryginalnego zapytania warunek ' OR '1'='1, który zawsze jest prawdziwy. Jeśli aplikacja jest podatna, może zwrócić nie jeden produkt o ID=5, ale wszystkie produkty albo nawet wszystkie rekordy z powiązanej tabeli. Przykładowo w odpowiedzi HTML pentester może zobaczyć listę wielu produktów lub użytkowników, co świadczy o udanym ataku SQLi. W logach serwera pojawi się np. wpis (fragment logu HTTP pokazujący podejrzane zapytanie z '1'='1):
192.168.50.10 - - [16/Nov/2025:21:00:00 +0100] "GET /produkty.php?id=5%27%20OR%20%271%27=%271 HTTP/1.1" 200 4623 "-" "curl/7.68.0"
Taki wpis logu pokazuje, że ktoś (pentester) próbował w parametrze id użyć ciągu zawierającego ' OR '1'='1 – co jest klasycznym znakiem ataku SQL Injection. Jeśli aplikacja nie była odpowiednio zabezpieczona (np. brak sanityzacji danych wejściowych), atak mógł się powieść i pentester uzyska dostęp do danych, do których normalnie nie powinien mieć dostępu (np. do bazy klientów sklepu). Na podstawie takich prób pentester identyfikuje luki i raportuje je, zanim zdąży je wykorzystać realny napastnik.
Pentesty webowe skupiają się także na innych podatnościach opisanych m.in. przez OWASP Top 10 (lista 10 najpowszechniejszych kategorii luk bezpieczeństwa aplikacji webowych). Należą do nich np. błędy uwierzytelniania, brak autoryzacji do funkcji, ujawnianie wrażliwych danych, nieprawidłowa walidacja wejścia itp. W ramach testu pentester sprawdza, czy aplikacja jest odporna na każdy z tych typów ataku, próbując je wykonać w kontrolowany sposób.
Testy infrastruktury sieciowej (pentest sieci i systemów)
Infrastruktura sieciowa oraz systemy serwerowe to kolejny klasyczny obszar testów penetracyjnych. Pentest infrastruktury obejmuje sprawdzenie bezpieczeństwa sieci firmowej, serwerów, urządzeń sieciowych (routery, firewalle, przełączniki, punkty dostępowe Wi‑Fi) oraz innych elementów infrastruktury IT. Celem jest wykrycie luk konfiguracyjnych i podatności, które mogłyby pozwolić atakującemu na uzyskanie nieautoryzowanego dostępu do zasobów wewnętrznych firmy lub zakłócenie działania usług.
Pentester zaczyna od rekonesansu sieci – ustalenia, jakie hosty i urządzenia są aktywne oraz jakie usługi (porty) są dostępne. Wykorzystuje do tego m.in. skanery portów jak Nmap. Na podstawie adresów IP i domen wewnętrznych pentester wykonuje skanowanie w poszukiwaniu otwartych portów i informacji o uruchomionych usługach. Przykładowo, polecenia Nmap:
$ nmap -Pn -p- 192.168.1.100 # skanuj wszystkie porty na hoście 192.168.1.100
$ nmap -sV -O 192.168.1.100 # wykryj wersje usług (-sV) i system operacyjny (-O)
$ nmap -sn 192.168.1.0/24 # host discovery (ping sweep) w podsieci /24
Takie skanowanie ujawni, jakie porty (np. 22/SSH, 80/HTTP, 445/SMB itp.) są dostępne na poszczególnych maszynach oraz jakie usługi i wersje oprogramowania tam działają. Następnie pentester ocenia podatności tych usług – np. poprzez sprawdzenie wersji oprogramowania pod kątem znanych błędów (CVEs) lub użycie skanerów podatności (Nessus, OpenVAS itp.). Skaner podatności automatycznie wykrywa znane luki w zidentyfikowanych usługach (np. niezałatane krytyczne błędy w systemie operacyjnym lub serwerze baz danych).
W ramach pentestu infrastruktury istotne jest sprawdzenie takich aspektów jak: poprawność konfiguracji sieci (segmentacja sieci, filtrowanie ruchu przez firewalle), brak zbędnych otwartych portów i usług, używanie silnych haseł na urządzeniach sieciowych, aktualność systemów (wgrane łatki bezpieczeństwa), zabezpieczenia protokołów (np. wyłączenie starych, podatnych protokołów jak SMBv1, Telnet na rzecz SSH itp.) oraz odporność na ataki typu DoS.
Pentester może również przeprowadzić testy siłowe (brute-force) haseł do usług sieciowych, o ile są w zakresie – np. próbować zgadnąć hasła SSH, RDP, baz danych czy paneli administracyjnych, szczególnie jeśli wykryto konta z domyślnymi nazwami. Wykorzystuje się do tego narzędzia takie jak Hydra lub Medusa. Przykładowo, test łamania hasła SSH dla użytkownika “admin” można przeprowadzić komendą Hydra:
$ hydra -l admin -P hasla.txt ssh://192.168.1.100
Narzędzie to spróbuje kolejnych haseł z listy hasla.txt. Jeśli trafimy na właściwe (np. admin:admin123), w konsoli pojawi się komunikat potwierdzający udane logowanie:
[22][ssh] host: 192.168.1.100 login: admin password: admin123
W ten sposób pentester sprawdza, czy słabe/standardowe hasła nie pozwalają dostać się do krytycznych systemów. Podczas testów infrastruktury często okazuje się, że np. administrator zostawił domyślne hasło na routerze lub urządzeniu NAS, co stanowi łatwą furtkę dla atakującego – pentest pomaga takie sytuacje wykryć.
Pentesty infrastruktury obejmują również bezpieczeństwo sieci Wi-Fi w firmie (czy np. sieć bezprzewodowa jest odpowiednio szyfrowana i odseparowana, czy nie da się poprzez Wi-Fi dostać do sieci wewnętrznej tak jak w przykładzie z hotelową siecią w artykule Netii). Innym elementem jest testowanie systemów operacyjnych i serwerów – pentester po uzyskaniu dostępu do sieci spróbuje wykorzystać podatności systemowe (np. słynny EternalBlue dla Windows SMB) lub błędne konfiguracje (np. brak ograniczeń uprawnień, możliwość zdalnego wykonania kodu przez usługę). Jeśli uda mu się “zhackować” jedną maszynę, często spróbuje pivotingu, czyli poruszania się dalej po sieci z tej przejętej maszyny, aby sprawdzić, jak głęboko w infrastrukturę może się wedrzeć atak (np. z komputera w sieci DMZ do serwerów baz danych w sieci wewnętrznej).
Regularne testy penetracyjne sieci i systemów pozwalają administratorom zamknąć nieużywane porty, wyłączyć zbędne usługi, poprawić konfigurację i załatać krytyczne podatności zanim zostaną wykorzystane. W efekcie infrastruktura staje się znacznie trudniejszym celem dla potencjalnego hakera.
Testy aplikacji mobilnych
Coraz więcej firm tworzy aplikacje mobilne (na Android, iOS) powiązane ze swoimi usługami – one również podlegają pentestom. Pentest aplikacji mobilnej obejmuje analizę bezpieczeństwa aplikacji na smartfon/tablet zarówno od strony kodu (analiza pliku aplikacji, np. .APK) jak i komunikacji z serwerem. Tester bada, czy aplikacja nie przechowuje wrażliwych danych w niezabezpieczony sposób w pamięci telefonu (np. hasła zapisane jawnie w plikach), czy używa szyfrowania komunikacji z serwerem, czy jest odporna na modyfikacje (tzw. testy odporności na reverse engineering i modyfikację aplikacji). Sprawdza się również backend aplikacji mobilnej – często mobilka korzysta z API webowego, które trzeba przetestować podobnie jak klasyczną aplikację web (o testach API w następnym punkcie).
Przykładowe podatności w aplikacjach mobilnych to m.in.: brak szyfrowania danych lokalnych (co umożliwia atakującemu z dostępem do urządzenia odczyt np. tokenów sesyjnych), podatność na tzw. injectable flaws w interakcji z systemem (np. możliwość uruchomienia nieautoryzowanych komend na zrootowanym urządzeniu przez aplikację), czy ominięcie mechanizmów uwierzytelnienia (np. inżynieria wsteczna pozwalająca na obejście logowania). Testy mobilne często bazują na standardzie OWASP MASVS (Mobile Application Security Verification Standard), który definiuje poziomy zabezpieczeń dla aplikacji mobilnych.
Testy bezpieczeństwa interfejsów API
Współczesne aplikacje korzystają z usług typu API (Application Programming Interface) – czyli interfejsów programistycznych dostępnych zazwyczaj przez protokoły web (HTTP/HTTPS, np. REST API, GraphQL). Pentest API skupia się na sprawdzeniu, czy poszczególne endpointy API mają właściwe zabezpieczenia. Typowe błędy to brak autoryzacji dostępu do niektórych funkcji (np. API pozwala na pobranie danych innego użytkownika, bo nie sprawdza tokena), podatność na injections (np. NoSQL/SQL Injection w parametrach JSON), brak limitów (co umożliwia ataki brute-force lub DoS), czy ujawnianie poufnych informacji w odpowiedziach.
Pentester testuje API zwykle korzystając z takich narzędzi jak Postman lub skrypty curl/HTTPie, a także automatyczne skanery API. Sprawdza, czy da się ominąć kontrolę uprawnień – np. zmieniając ID obiektu w żądaniu (test IDOR, Insecure Direct Object Reference), czy da się dodać własne parametry do JSON-a aby uzyskać niepożądane efekty. Dla usług typu GraphQL pentest obejmuje np. testy introspekcji (czy schemat API nie ujawnia zbyt wiele) i ataki na zapytania.
Przykład: Aplikacja mobilna banku korzysta z API endpointu /api/getBalance?user=JAN. Jeśli pentester, będąc zalogowany jako inny użytkownik, zmieni parametr na user=ADAM, a serwer nadal zwróci saldo Adama – to poważna podatność (brak autoryzacji, tzw. BOLA/IDOR). Takie rzeczy są wychwytywane podczas pentestu API. Warto wspomnieć, że istnieje OWASP API Security Top 10, lista top 10 zagrożeń specyficznych dla API – pentesterzy API kierują się nią, by pokryć wszystkie typowe wektory ataku.
Testy środowisk chmurowych (cloud pentesting)
Coraz więcej infrastruktury przenosi się do chmury (AWS, Azure, GCP i inne). Pentest chmury polega na sprawdzeniu poprawności konfiguracji usług chmurowych oraz odporności na ataki specyficzne dla środowisk cloud. Obejmuje to np.: testy mechanizmów IAM (Identity and Access Management) – czy uprawnienia kont i ról w chmurze są dobrze ustawione (zasada najmniejszych uprawnień), czy nie istnieją klucze API lub hasła pozostawione w kodzie/konfiguracji dostępnej publicznie (np. w repozytorium GitHub), czy usługi w chmurze (maszyny wirtualne, bazy danych, funkcje bezserwerowe) nie mają luk konfiguracyjnych.
Przykładowe zagadnienia pentestu chmury: wykrywanie publicznie dostępnych zasobów, które nie powinny być publiczne (np. otwarte buckety S3 z wrażliwymi danymi), sprawdzanie, czy aplikacje w chmurze nie komunikują się po http niezabezpieczonym, testy ataków typu SSRF w kontekście chmury (czy z aplikacji można wywołać np. metadane instancji chmurowej, uzyskując tym samym klucze dostępu). Narzędzia jak ScoutSuite, Prowler czy Pacu pomagają zautomatyzować audyt konfiguracji chmurowej pod kątem znanych zagrożeń.
Pentester chmurowy stara się uzyskać dostęp do panelu chmurowego lub do zasobów przez wykorzystanie błędów – bo przejęcie konta w chmurze często umożliwia “przejęcie” całej infrastruktury firmy. Dlatego testuje się też procedury reagowania chmury – np. czy wykrywane są próby wielokrotnego logowania, czy MFA (uwierzytelnienie wieloskładnikowe) jest włączone na kontach uprzywilejowanych. Wraz z rosnącą popularnością kontenerów i Kubernetes (oraz innych orkiestratorów) pojawia się również obszar pentestów kontenerów – często łączony z pentestem chmury, bo np. klastry Kubernetes działają w chmurze. Testowanie kontenerów polega na sprawdzeniu, czy aplikacje w kontenerach nie mają podatności pozwalających na ucieczkę z kontenera (container escape), czy klaster K8s jest poprawnie zabezpieczony (uwierzytelnianie do API servera, ograniczenie uprawnień w namespace’ach, brak otwartych dashboardów itp.).
Testy środowisk Active Directory (AD)
W dużych organizacjach niemal zawsze działa usługa Active Directory firmy Microsoft, zarządzająca domeną Windows (kontami użytkowników, komputerów, uprawnieniami). Pentest AD to specyficzny rodzaj testu wewnętrznego, skupiający się na możliwości skompromitowania kontrolera domeny oraz przejęcia kontroli nad domeną. Pentester symuluje tutaj często atak od wewnątrz – zakładając, że np. atakujący uzyskał już dostęp do sieci lokalnej (poprzez malware lub socjotechnikę) i chce eskalować uprawnienia w domenie.
Testy AD obejmują np. wyszukiwanie błędnych konfiguracji domeny: konta z łatwymi hasłami, konta z wyłączonym wymuszeniem zmiany hasła, delegacje uprawnień, relacje zaufania między domenami. Pentester używa narzędzi takich jak BloodHound do mapowania grafu zależności w AD (wyszukuje ścieżki typu użytkownik X może przejąć grupę Y przez podatność Z). Wykonywane są ataki specyficzne dla AD, np. Kerberoasting (wyciąganie hashy haseł serwisowych z biletów Kerberos), ataki typu Pass-the-Hash (wykorzystanie hashy LM/NTLM do uwierzytelnienia), ataki na protokół LDAP i inne. Znane exploity jak PrinterBug, Zerologon czy ataki typu Golden Ticket (fałszowanie biletów TGT Kerberos po zdobyciu hasha krbtgt) również wchodzą w grę.
Celem pentestu AD jest sprawdzenie, czy mając dostęp do zwykłego konta w domenie (lub nawet tylko do komputera podłączonego do domeny), da się w rozsądnym czasie uzyskać prawa administratora domeny. Jeśli tak – konsekwencje są krytyczne, bo atakujący mógłby wtedy kontrolować całą infrastrukturę Windows firmy. Wynikiem takiego testu są rekomendacje dotyczące wzmocnienia polityk haseł, segmentacji sieci, wprowadzenia zasad Least Privilege (mniej użytkowników z adminem domeny), włączenia mechanizmów obronnych (LAPS, monitoring logów domeny, itp.).
Inne rodzaje testów (socjotechnika, fizyczne włamania)
Poza wyżej wymienionymi technicznymi pentestami, warto wspomnieć o testach, które skupiają się nie na systemach, a na czynniku ludzkim lub fizycznych zabezpieczeniach. Ataki socjotechniczne (phishing, vishing, pretexting itp.) również mogą być przeprowadzane w formie kontrolowanej – np. firma może zlecić test socjotechniczny, w którym pentesterzy próbują nakłonić pracowników do ujawnienia informacji lub uruchomienia złośliwego oprogramowania (np. rozsyłając spreparowane e-maile phishingowe). Taki test mierzy świadomość bezpieczeństwa personelu i podatność firmy na ataki typu oszustwa przez telefon czy email. Choć socjotechnika często wykracza poza czysto techniczny pentest, bywa elementem szerszych red teaming – kompleksowych testów bezpieczeństwa, które mogą łączyć ataki techniczne i socjotechniczne.
Istnieją też testy fizyczne zabezpieczeń – np. próby fizycznego włamania do serwerowni, przejścia przez ochronę z podrobionym identyfikatorem, sprawdzenie efektywności kamer i zamków. Takie testy weryfikują bezpieczeństwo obiektów. Zwykle stanowią osobną kategorię poza typowym zakresem pentestów IT, jednak w ramach całościowego sprawdzenia bezpieczeństwa organizacji również mogą być wykonywane (oczywiście za pełną zgodą – pentester włamujący się do biura też musi mieć formalne pozwolenie, inaczej narusza prawo!).
Podsumowując, zakres pentestu musi być jasno określony z góry. Może obejmować tylko jeden aspekt (np. samą aplikację webową), a może być szeroki (infrastruktura + aplikacje + ludzie). Klient wraz z zespołem pentestowym ustala, co dokładnie będzie testowane i w jakim zakresie, aby test był efektywny i zgodny z potrzebami.
Modele testów penetracyjnych: Black Box, Grey Box, White Box
Pentesty klasyfikuje się nie tylko według obszaru, ale także pod względem zakresu informacji i dostępu, jaki posiada zespół testujący przed rozpoczęciem prac. W praktyce wyróżniamy trzy podstawowe modele: Black Box, Grey Box i White Box. Różnią się one poziomem wiedzy o testowanym systemie, jaką dysponuje pentester. Każdy model ma inne zastosowania i wpływa na przebieg testu:
- Pentest Black Box (czarna skrzynka) – pentester nie otrzymuje od klienta żadnych informacji poza podstawowymi danymi identyfikującymi cel (np. adres IP lub URL aplikacji). Nie zna wewnętrznych szczegółów systemu, nie ma dostępu do kodu źródłowego ani dokumentacji. Taki test najbardziej przypomina rzeczywisty atak zewnętrznego hakera, który sam musi zdobyć wszystkie informacje od zera. Zaletą podejścia black box jest realizm – testuje on system w sposób, w jaki widzi go obcy napastnik. Wadą jest czasochłonność i potencjalnie niższa skuteczność w wykrywaniu niektórych głębszych problemów. Pentester może poświęcić dużo czasu na footprinting i fazę odkrywania informacji, czasem skupiając się na ślepych zaułkach (np. łamanie hasła do strony logowania, które być może i tak nie da dostępu do krytycznych danych). Mimo to testy black box dają bardzo cenny obraz zewnętrznej ekspozycji systemu – pokazują, co jest widoczne i dostępne dla atakującego z internetu.
- Pentest Grey Box (szara skrzynka) – podejście pośrednie, gdzie pentester dostaje częściowe informacje o systemie. Na przykład klient może udostępnić zwykłe konto użytkownika w testowanej aplikacji, dokumentację API albo zarys architektury systemu, ale bez zdradzania wszystkich szczegółów. Grey box to kompromis – daje testującemu pewną wiedzę (dzięki czemu może szybciej zlokalizować potencjalne problemy, które znany mu przeciętny użytkownik mógłby znaleźć), ale jednocześnie pentester w wielu aspektach nadal musi zachowywać się jak zewnętrzny atakujący. Przykład: test web aplikacji w modelu grey box może polegać na tym, że pentester posiada konto o roli “user” i na tej podstawie próbuje eskalować uprawnienia (to symuluje np. atak niezadowolonego pracownika lub kogoś, kto przejął zwykłe konto). Model grey box jest dość popularny, bo zwiększa efektywność testu – pentester mniej czasu traci na podstawowe rozpoznanie, a może skupić się na głębszej analizie zabezpieczeń.
- Pentest White Box (biała skrzynka) – pentester otrzymuje od klienta pełną wiedzę o systemie. Może mieć dostęp do kodu źródłowego aplikacji, szczegółowej dokumentacji, diagramów architektury, a nawet do uprzywilejowanych kont systemowych. W skrajnym przypadku white box zamienia się wręcz w code review bezpieczeństwa czy konfig review, gdyż tester może analizować wszystko “od środka”. Zaletą jest najbardziej kompletny zasięg testu – można zajrzeć w każdy zakamarek aplikacji/systemu i potencjalnie wykryć subtelne błędy, które trudno dostrzec z zewnątrz. Wadą jest mniejsze odwzorowanie rzeczywistego scenariusza ataku – atakujący rzadko kiedy zna kod źródłowy aplikacji. Ponadto tester mający pełną wiedzę może nie zauważyć pewnych niezgodności między dokumentacją a faktycznym stanem (bo ufa dokumentacji). Niemniej test white box bywa niezastąpiony przy analizie bezpieczeństwa krytycznego kodu (np. audyt bezpieczeństwa przed wdrożeniem nowej aplikacji) lub gdy celem jest maksymalne pokrycie testami.
W praktyce, wybór modelu zależy od celu pentestu i budżetu. Testy black box sprawdzają zewnętrzną odporność i są dobre np. dla testów infrastruktury z perspektywy anonimowego atakującego z internetu. Grey box często stosuje się dla aplikacji webowych – klient daje konto testowe, bo zależy mu np. na sprawdzeniu uprawnień i logiki aplikacji, co trudno zrobić zupełnie z zewnątrz. White box jest stosowany, gdy chcemy bardzo dokładnie prześwietlić system (np. krytyczne systemy bankowe) lub gdy test ma ograniczony czas – dostarczając testerom więcej informacji, liczymy że szybciej znajdą luki. Każdy z modeli wymaga odmiennych przygotowań (np. przy white box klient musi dostarczyć dużo materiałów i dostępów przed testem).
Niezależnie od modelu, zawsze obowiązuje zasada uzyskania formalnej zgody i wytyczenia zakresu. Nawet w black box, gdzie teoretycznie tester “nic nie wie”, klient i tak musi wskazać cele (np. adresy IP do ataku) i podpisać z testerami stosowne dokumenty (umowa, NDA). Model dotyczy tylko zakresu wiedzy, nie zwalnia z ustaleń formalnych.
Metodyki i standardy testów penetracyjnych
Profesjonalne zespoły pentesterskie opierają swoje działania na uznanych metodykach bezpieczeństwa. Metodyka to zbiór wytycznych jak przeprowadzić pentest, aby był on skuteczny, powtarzalny i zgodny z dobrymi praktykami (oraz wymogami formalnymi). Istnieje kilka standaryzowanych metodyk prowadzenia testów penetracyjnych, opisujących niezbędne czynności, podział na etapy, kwestie prawne i raportowanie. Najpopularniejsze z nich to:
- OWASP (Open Web Application Security Project) – metodyka dedykowana testom aplikacji webowych. OWASP dostarcza m.in. OWASP Web Security Testing Guide (WSTG) – obszerny podręcznik opisujący krok po kroku, jakie testy należy wykonać na aplikacji webowej (np. testy uwierzytelniania, sesji, walidacji danych, błędów itp.). OWASP publikuje także listy Top 10 najgroźniejszych podatności, co stanowi priorytety podczas pentestu. Dla aplikacji mobilnych istnieje analogiczny standard OWASP MASVS (Mobile App Security Verification Standard), określający wymogi bezpieczeństwa i zalecane testy dla aplikacji na smartfony. Metodyki OWASP są powszechnie uznane i stosowane – wielu pentesterów opiera plan testu na checklistach OWASP, aby niczego nie pominąć.
- PTES (Penetration Testing Execution Standard) – standard organizacji pentestu, często stosowany przy testach infrastruktury sieciowej. PTES definiuje 7 głównych faz testu penetracyjnego (od zgód formalnych po raportowanie) i daje ogólne wytyczne, co powinno zostać wykonane w każdej fazie. Metodyka PTES kładzie nacisk na czynności wstępne (negocjacje, zakres, legalność), a w fazie ataku skupia się na aspektach technicznych testów infrastruktury (skanowanie, enumeracja usług, ataki na hosty, przegląd zabezpieczeń sieci). Wykorzystanie PTES pomaga uporządkować proces testowy – nawet jeśli konkretne techniki się zmieniają, ogólny szkielet testu pozostaje spójny.
- OSSTMM (Open Source Security Testing Methodology Manual) – kompleksowa metodyka testów bezpieczeństwa, obejmująca nie tylko IT, ale i elementy fizyczne, ludzi itd. OSSTMM definiuje tzw. RAV (Risk Assessment Values) i mierzalne wyniki testów bezpieczeństwa. Choć jest to rozbudowany framework, bywa używany jako uzupełnienie, szczególnie gdy klient wymaga formalnego podejścia do oceny ryzyka.
- NIST – amerykański NIST wydał kilka dokumentów dotyczących testów bezpieczeństwa, np. NIST SP 800-115 (Technical Guide to Information Security Testing). Zawiera on wytyczne odnośnie metod testowania zabezpieczeń systemów rządowych/korporacyjnych, w tym również testów penetracyjnych. Standardy NIST są ogólne, ale cenione – mogą być wykorzystywane jako podstawa polityki testów bezpieczeństwa w organizacji.
- Inne: Istnieją również bardziej wyspecjalizowane standardy jak ISSAF, standardy branżowe (np. PCI Penetration Testing Guidance dla sektora płatniczego) czy firmowe metodologie wypracowane przez doświadczone zespoły. Ważne, by w ramach organizacji pentestowej istniała procedura – zestaw checklist i dobrych praktyk, które pentesterzy realizują za każdym razem. Dzięki temu test jest rzetelny, a klient ma pewność, że np. kwestie prawne (zgody, ograniczenie działań destrukcyjnych, poufność danych) są uregulowane.
Metodyki zwykle nie narzucają konkretnych narzędzi czy exploitów, a raczej opisują proces i obszary do sprawdzenia. Przykładowo, OWASP WSTG powie, że należy wykonać test manipulacji parametrami zapytań, ale nie mówi czy użyć do tego Burpa czy własnego skryptu – to pozostaje w gestii pentestera. Kluczowe jest, że stosując uznaną metodykę, pentesterzy nie zapominają o ważnych elementach testu. Ponadto wiele metodyk uwzględnia wymagania prawne i etyczne – np. PTES i NIST zaczynają od etapu formalnego uzgodnienia zakresu, podpisania dokumentów i określenia zasad gry. Dzięki temu zarówno testerzy, jak i klient są zabezpieczeni (tester nie pozwoli sobie np. na atak poza scope, a klient ma jasność, co się dzieje).
Podczas przygotowania do testu warto uzgodnić, jaką metodyką będzie się kierować zespół. Często bywa to mix – np. “stosujemy OWASP przy testach aplikacji i ogólne PTES dla całości procesu”. Niektóre firmy posiadają własne polityki testów penetracyjnych bazujące na tych standardach.
Proces testu penetracyjnego (etapy pentestu)
Przeprowadzenie testu penetracyjnego można podzielić na szereg etapów, które następują po sobie w logicznej kolejności. Dokładny podział faz może różnić się w zależności od metodyki (np. czy wyróżniamy osobno fazę utrzymania dostępu, czy łączymy rekonesans ze skanowaniem itd.), jednak ogólny przebieg pentestu wygląda następująco:
- Planowanie i przygotowanie – Zanim jakiekolwiek “hakowanie” się rozpocznie, zespół pentestowy musi wraz z klientem przeprowadzić fazę planowania. Obejmuje ona: ustalenie oczekiwań klienta, zakresu testów (dokładne cele: jakie adresy IP, jakie aplikacje, które moduły, czy testy mają być z/bez uwierzytelnienia itd.), określenie celu pentestu (np. “uzyskać dostęp do danych finansowych” albo po prostu “przegląd bezpieczeństwa infrastruktury”). W tej fazie omawia się także model testu (black/grey/white box), harmonogram (kiedy test ma być wykonany, ile potrwa) oraz zasady komunikacji i eskalacji incydentów. Niezwykle ważne są kwestie formalne: przed startem pentestera i klienta musi wiązać umowa regulująca zakres odpowiedzialności oraz pisemna zgoda na testy (tzw. „Rules of Engagement”). Często podpisuje się NDA (umowę o poufności) chroniącą wrażliwe informacje klienta. W tej fazie uzgadnia się również, czy i jakie działania są niedozwolone podczas testu (np. czy dopuszczalne są ataki DoS, czy test ma być przeprowadzany poza godzinami pracy, by nie zakłócać działania systemów produkcyjnych, itp.). Po dopełnieniu formalności pentesterzy przygotowują swoje środowisko i narzędzia – konfigurują stanowiska testowe, upewniają się, że mają wszelkie dostępy początkowe (np. konta testowe, jeśli to grey/white box), i można przejść do faz technicznych.
- Rekonesans (wywiad informacyjny) – Jest to pierwsza techniczna faza ataku, polegająca na zebraniu jak największej ilości informacji o celu. W pentestach zewnętrznych rekonesans obejmuje OSINT (Open Source Intelligence), czyli tzw. “biały wywiad” – przeszukiwanie publicznych źródeł informacji o firmie i systemie. Pentester sprawdza np.: publiczne wpisy DNS (rekordy domen, subdomeny), rejestry Whois domen i adresów IP, informacje o używanych technologiach (np. nagłówki serwera WWW ujawniające wersję oprogramowania), wyszukuje w Google wzmianek o firmie, potencjalnych wycieków danych (np. czy hasła pracowników nie wypłynęły gdzieś w sieci). Narzędzia takie jak theHarvester, Maltego, Shodan mogą zautomatyzować część zadań wywiadowczych. W przypadku pentestu wewnętrznego, rekonesans może oznaczać np. podłączenie się do sieci i mapowanie jej – wykrywanie dostępnych adresów IP, nazw hostów, usług sieciowych (np. serwerów plików, drukarek, kontrolerów domeny). Pentesterzy korzystają z skanowania ping (np.
nmap -snjak w przykładzie wyżej) by wykryć aktywne hosty, sprawdzają informacje dostępne w sieci lokalnej (np. czy działa protokół mDNS/LLMNR ujawniający nazwy urządzeń, czy można podsłuchać ruch broadcast itp.). Rekonesans bywa podzielony na pasywny (bez bezpośredniego kontaktu z celem – np. tylko OSINT zewnętrzny) i aktywny (już angażujący system docelowy – np. skanowanie portów). Granica między rekonesansem a kolejnym etapem bywa płynna, ale można przyjąć, że rekonesans kończy się w momencie, gdy pentester ma listę potencjalnych wektorów ataku i punktów wejścia, które chce dalej zbadać. - Skanowanie i analiza podatności – Druga faza to szczegółowe skanowanie portów, usług i podatności na zidentyfikowanych systemach. Jeśli w rekonesansie ustalono listę aktywnych hostów, teraz pentester skanuje je narzędziami typu Nmap (lub Masscan dla bardzo dużych sieci) w celu enumeracji otwartych portów i wersji usług. Wyniki skanowania pozwalają stworzyć mapę sieci/aplikacji: np. host A ma port 80 (HTTP Apache 2.4) i 3306 (MySQL), host B ma port 445 (Windows SMB) itd. Następnie używane są skanery podatności (Nessus, OpenVAS, Nexpose lub choćby nmap scripts NSE) do automatycznego wykrycia znanych luk. Taki skaner porównuje wersje oprogramowania z bazą exploitów – np. wykrywa, że serwer SMB na hoście B ma brak aktualizacji MS17-010 (co oznacza podatność EternalBlue), albo że serwer WWW Apache jest w wersji podatnej na atak Directory Traversal. Skaner generuje raport z listą znalezionych potencjalnych podatności i ich oceną krytyczności. Pentester weryfikuje te wyniki (skanery czasem dają false-positive, więc trzeba ręcznie potwierdzić). Analiza podatności to również ręczne szukanie misconfiguracji: np. test czy na serwerze WWW nie ma brakującego pliku index (tzw. directory listing) – co umożliwia przeglądanie katalogów; sprawdzenie, czy aplikacja nie posiada znanych backdoorów lub czy w interfejsach API nie ma domyślnych kluczy. W przypadku aplikacji web, ta faza to również tzw. fuzzing – automatyczne wstrzykiwanie różnych payloadów w parametry, by wywołać błąd (np. czy w polu tekstowym kodu produktu aplikacja nie zwróci błędu wskazującego na SQL Injection). Narzędzia jak OWASP ZAP mogą automatycznie przeskanować aplikację web pod kątem typowych błędów. Celem fazy skanowania/analizy jest zidentyfikowanie listy podatności, które warto spróbować wykorzystać w kolejnej fazie. Pentester ocenia, które luki są realne i które mogą poprowadzić do uzyskania dostępu – czyli priorytetyzuje cele ataku.
- Eksploatacja (atak właściwy) – To najbardziej “hakerska” faza, w której pentester przechodzi od znajdowania luk do aktywnych prób ich wykorzystania. Mając listę potencjalnych podatności (np. otwarty port z usługą podatną na buffer overflow, możliwość SQL Injection, słabe hasło do konta itd.), tester przygotowuje odpowiednie exploity lub wektory ataku i uruchamia je przeciwko celom. Eksploatacja może przybrać różne formy w zależności od typu podatności:
- Dla podatności sieciowych/systemowych: użycie gotowych exploitów lub napisanie własnych. Często korzysta się z frameworku Metasploit, który zawiera setki gotowych modułów exploitujących znane luki. Np. jeśli skaner wykrył podatność MS17-010 (Windows SMB), pentester odpala exploit EternalBlue z Metasploita, wskazuje adres ofiary i uruchamia atak. Jeśli exploit zadziała, pentester uzyskuje shell na atakowanej maszynie (zdalny dostęp do systemu) – co jest równoznaczne z przejęciem tej maszyny. Inny przykład: podatny serwer FTP z anonimowym dostępem – pentester może spróbować wgrać na niego plik złośliwy, albo wykorzystać błąd overflow w serwerze FTP żeby wykonać kod. Eksploatacja obejmuje też atak siłowy haseł (jeśli nie było to zabronione) – np. uruchomienie Hydra tak jak wcześniej, żeby wejść na konto admina. Gdy któreś hasło “strzeli”, pentester loguje się i jest w środku.Dla podatności aplikacyjnych: tu eksploatacja może oznaczać np. wywołanie komendy systemowej przez lukę RCE (Remote Code Execution) w aplikacji web. Przykład: jeśli aplikacja ma podatność Command Injection (w polu formularza można wpisać
; uname -ai aplikacja zwróci informacje systemowe), pentester spróbuje eskalować to do pełnego dostępu – np. wstrzykując komendę tworzącą połączenie zwrotne (reverse shell) do maszyny pentestera. Dla SQL Injection eksploatacja to np. wyciągnięcie zawartości bazy danych. Pentester może użyć narzędzia Sqlmap, by zautomatyzować ekstrakcję danych z podatnej aplikacji (np. pobrać listę użytkowników i zahashowane hasła). Dla XSS – eksploatacja to sprawdzenie, czy da się wykonać złośliwy skrypt, który np. ukradnie ciasteczko sesyjne zalogowanego użytkownika.Dla podatności logicznych: np. brak autoryzacji – eksploatacja polega na dostępie do danych, do których nie powinno się mieć dostępu. Pentester wchodzi na poufną stronę (np. panel admina) bez logowania albo używa konta o niższych uprawnieniach do wykonania akcji admina. Jeśli się uda – luka jest potwierdzona.
- Dla podatności sieciowych/systemowych: użycie gotowych exploitów lub napisanie własnych. Często korzysta się z frameworku Metasploit, który zawiera setki gotowych modułów exploitujących znane luki. Np. jeśli skaner wykrył podatność MS17-010 (Windows SMB), pentester odpala exploit EternalBlue z Metasploita, wskazuje adres ofiary i uruchamia atak. Jeśli exploit zadziała, pentester uzyskuje shell na atakowanej maszynie (zdalny dostęp do systemu) – co jest równoznaczne z przejęciem tej maszyny. Inny przykład: podatny serwer FTP z anonimowym dostępem – pentester może spróbować wgrać na niego plik złośliwy, albo wykorzystać błąd overflow w serwerze FTP żeby wykonać kod. Eksploatacja obejmuje też atak siłowy haseł (jeśli nie było to zabronione) – np. uruchomienie Hydra tak jak wcześniej, żeby wejść na konto admina. Gdy któreś hasło “strzeli”, pentester loguje się i jest w środku.Dla podatności aplikacyjnych: tu eksploatacja może oznaczać np. wywołanie komendy systemowej przez lukę RCE (Remote Code Execution) w aplikacji web. Przykład: jeśli aplikacja ma podatność Command Injection (w polu formularza można wpisać
- Zakończenie, raport i rekomendacje – Ostatnia faza to sformalizowane zakończenie testu. Po przeprowadzeniu wszystkich zaplanowanych działań pentester wykonuje czynności porządkujące: usuwa z systemów wszelkie pozostawione pliki, tylne furtki, testowe konta itp., aby przywrócić środowisko do stanu wyjściowego (lub stanu zastanego, o ile ten stan już był nieoptymalny). Jest to odpowiednik “zacierania śladów” przez prawdziwego atakującego, ale w pentestach chodzi raczej o zostawienie systemu w nienaruszonym stanie. Testerzy często proszą klienta o restart usług/serwerów, które mogły zostać niestabilne po exploitach, lub przekazują listę zmian, które wprowadzili (np. “założyliśmy użytkownika test, teraz go kasujemy”). Najważniejszym rezultatem jest jednak raport z testu penetracyjnego. Raport stanowi oficjalne podsumowanie wszystkich ustaleń: zawiera listę znalezionych podatności, ich ocenę ważności (np. krytyczna/wysoka/średnia/niska), dowody ich istnienia (zrzuty ekranu, logi, przykładowe wyciągnięte dane), opis zastosowanych metod i narzędzi oraz rekomendacje naprawcze. Raport zwykle dzieli się na dwie części:
- Część menedżerska (podsumowanie dla kadry zarządzającej) – w przystępny, nie-techniczny sposób wyjaśnia ogólny poziom bezpieczeństwa i najważniejsze podatności, często z oceną ryzyka. Może zawierać tabelki, wykresy, ranking ryzyk.Część techniczna (szczegółowa) – skierowana do administratorów, devopsów, deweloperów. Zawiera każdą wykrytą podatność z technicznym opisem i krokami do reprodukcji, a także zalecenia jak ją usunąć (np. “zaktualizować bibliotekę X do wersji Y”, “włączyć logowanie nieudanych prób logowania i blokadę konta” itp.).
Uwaga: W trakcie rzeczywistego ataku haker starałby się ukryć swoje działania. W pentestach aspekt stealth (ukrywania się) nie zawsze jest priorytetem, chyba że jest to pentest w formie red teamu (gdzie testuje się też czujność zespołu SOC). Standardowy pentest zazwyczaj jest jawny dla firmy (dział IT wie o nim), więc pentester nie musi unikać wykrycia za wszelką cenę – często wręcz logi z testu są później analizowane przez dział bezpieczeństwa, by ulepszyć mechanizmy wykrywania intruzów. Jednak zdarza się, że organizacja życzy sobie testu “w ciemno” dla swojej sekcji bezpieczeństwa – wtedy pentesterzy próbują działać bardziej dyskretnie (np. limitują intensywność skanów, używają szyfrowanej komunikacji tunelowanej itp.). To wszystko należy ustalić w fazie planowania.
Narzędzia wykorzystywane w pentestach
Pentesterzy w swojej pracy posługują się bogatym arsenałem narzędzi – od prostych skryptów po rozbudowane platformy do testowania zabezpieczeń. Narzędzia pomagają zautomatyzować żmudne czynności (np. skanowanie tysięcy portów) i wykonać złożone ataki. Poniżej wymienione są najważniejsze kategorie narzędzi pentesterskich wraz z przykładami:
Skanery sieciowe i portów:
- Nmap – najpopularniejsze narzędzie do skanowania portów i mapowania sieci. Pozwala wykryć hosty, otwarte porty i usługi, a także wersje oprogramowania i system operacyjny targetu. To absolutny podstawowy “radar” pentestera.
- Masscan – ultraszybki skaner portów (może przeszukać cały internet pod kątem jednego portu w kilka minut). Przydatny w testach na bardzo dużą skalę.
- Wireshark – analizator ruchu sieciowego. Pozwala “podsłuchiwać” i analizować pakiety w sieci (np. odszyfrować słabe protokoły, przechwycić niezaszyfrowane hasła). Niezastąpiony przy testach sieciowych i diagnostyce ruchu.
Narzędzia do rekonesansu (OSINT):
- theHarvester – zbiera publiczne informacje o domenie/firmie: e-maile, nazwy hostów, wycieki, konta w social media.
- Shodan – wyszukiwarka urządzeń podłączonych do internetu. Pentester używa Shodan, by znaleźć np. publiczne kamery, serwery, IoT należące do firmy, które są widoczne globalnie.
- Maltego – narzędzie do wizualizacji powiązań OSINT (ludzi, domen, adresów) – pomaga w zaawansowanym wywiadzie.
- Nmap + skrypty NSE – Nmap posiada skrypty do wykrywania informacji (np. banner grabbing, whois, dns-bruteforce), co bywa użyte w rekonesansie.
Skanery podatności:
- Nessus – komercyjny skaner podatności sieciowych i systemowych. Baza tysięcy znanych podatności, które skaner wykrywa na podstawie wersji usług. Raportuje luki od brakujących patchy Windows po słabe hasła do SNMP.
- OpenVAS – otwartoźródłowy odpowiednik Nessusa (fork projektu Nessus sprzed lat).
- Nikto – proste narzędzie skanujące serwery WWW pod kątem znanych błędów konfiguracyjnych, nieaktualnych wersji oprogramowania web itp.
- OWASP ZAP – skaner aplikacji webowych. Może automatycznie przetestować aplikację web (spider + ataki na parametry) pod kątem OWASP Top 10. Działa też jako proxy do manualnego testowania.
- Burp Suite (Community/Pro) – rozbudowane narzędzie do testów aplikacji web. Zawiera skaner (w wersji Pro), repeater, intruder (do automatyzacji ataków fuzzingowych) i wiele innych funkcji. Większość pentesterów web używa Burpa jako głównego narzędzia do ręcznego testowania (przechwytuje i modyfikuje zapytania HTTP, automatyzuje ataki XSS, SQLi, itp.).
Frameworki exploitów i testów:
- Metasploit Framework – najbardziej znany framework do tworzenia i uruchamiania exploitów. Zawiera ogromny zbiór gotowych exploitów na różne usługi (Windows, Linux, sieciowe) oraz payloadów (kody wykonywane po udanym exploicie, np. otwierające shell). Pentester korzysta z Metasploita aby szybko zaadaptować istniejący exploit do swojego celu, zamiast pisać wszystko od zera.
- Canvas, Core Impact – komercyjne frameworki do exploitacji, alternatywy dla Metasploit, zawierające często unikalne, prywatne exploity. Rzadziej używane ze względu na koszt, ale niektórzy dostawcy pentestów ich używają.
- Impacket – zestaw skryptów Python do ataków na protokoły Windows/AD (np. wykonywanie zdalne WMI, ataki pass-the-hash, wyciąganie biletów Kerberos). Bardzo przydatny przy pentestach Active Directory.
Narzędzia do ataku na hasła:
- John the Ripper – popularny cracker haseł do łamania hashy offline. Gdy pentester wykradnie hashe (np. z bazy danych lub z systemu Windows), używa Johna lub Hashcata aby spróbować odgadnąć hasła metodą słownikową lub brute-force przy użyciu GPU.
- Hydra – już wspomniany wcześniej, do ataków online (protokoły takie jak SSH, FTP, HTTP-Auth, SQL, RDP itd.). Pozwala szybko sprawdzić wiele kombinacji haseł na żywym systemie.
- SecLists – to nie narzędzie a repozytorium list haseł (i nie tylko), które wykorzystuje się z powyższymi. Zawiera potężne słowniki najczęściej używanych haseł, imion, fraz do fuzzingu itp.
Narzędzia do specjalistycznych testów:
- Aircrack-ng – zestaw narzędzi do testowania zabezpieczeń sieci Wi-Fi. Umożliwia przechwytywanie handshake’ów, łamanie kluczy WEP/WPA, ataki na sieci bezprzewodowe (deauth, fake AP). Jeśli pentest obejmuje Wi-Fi – to podstawowy toolkit.
- SQLmap – automat do wyszukiwania i eksploatacji SQL Injection. Podajesz URL i parametry, a SQLmap próbuje różnych technik SQLi (union-based, boolean-based, time-based) i może wyciągnąć całą bazę, jeśli znajdzie lukę. Ogromna oszczędność czasu przy testach podatności SQL.
- Responder – narzędzie do atakowania protokołów sieciowych Windows (LLMNR, NBT-NS spoofing). Przydatne wewnątrz sieci – potrafi skłonić komputery Windows do uwierzytelnienia do fałszywego serwera i w ten sposób zebrać hashe NTLM (często pierwsza rzecz w pentestach AD).
- BloodHound – narzędzie do analizy grafu Active Directory. Zbiera informacje o użytkownikach, grupach, maszynach i pokazuje potencjalne ścieżki ataku (np. użytkownik A może RDP do maszyny B jako admin, na której jest klucz do konta C, które jest domenowym adminem – voila). Stało się standardem przy testach AD.
- Fuzzery i narzędzia specyficzne: W zależności od potrzeb pentester może użyć np. wfuzz lub ffuf do fuzzingu (automatyczne wstrzykiwanie list słów w parametry, szukanie ukrytych katalogów itp.), Gobuster/Dirbuster do szukania ukrytych ścieżek URL, APKTool do inżynierii wstecznej aplikacji mobilnych, nmap z NSE do specyficznych rzeczy (np. skrypt nmap smtp-enum-users sprawdzający użytkowników na serwerze poczty). Lista narzędzi jest bardzo długa i ciągle rośnie – ważne, by dobierać narzędzie odpowiednie do zadania.
Warto zaznaczyć, że Kali Linux – specjalistyczna dystrybucja systemu Linux – zawiera większość powyższych narzędzi preinstalowanych. Dlatego wielu pentesterów korzysta z Kali lub podobnych (ParrotSec, BlackArch) jako systemu operacyjnego do pracy.
Niezależnie od narzędzia, należy używać ich etycznie i ostrożnie. Wszelkie powyższe programy należy uruchamiać tylko przeciwko systemom, na których test mamy pozwolenie. Nieautoryzowane użycie tych narzędzi jest nielegalne i może prowadzić do poważnych konsekwencji prawnych. Profesjonalny pentester wie co robi – każde narzędzie zostawia ślady, generuje ruch sieciowy, potencjalnie może spowodować zakłócenia. Dlatego kluczem jest doświadczenie i rozwaga: narzędzia to tylko pomoc, myślenie i tak wykonuje człowiek.
Checklisty pentestera
Poniżej przedstawiamy dwie krótkie checklisty podsumowujące kluczowe zadania przy pentestach – pierwsza dotyczy przygotowania i aspektów formalnych, druga skupia główne techniczne obszary, które warto sprawdzić podczas testu penetracyjnego.
Checklist przygotowania do testu penetracyjnego (aspekty formalne i organizacyjne):
- Zakres i cel: Zdefiniuj dokładnie zakres testu (jakie adresy IP, aplikacje, moduły, czy testujemy wewnętrznie/zewnętrznie, czy uwzględniamy socjotechnikę itp.). Ustal i zapisz cel pentestu (np. “próba uzyskania dostępu do danych finansowych” albo “ocena bezpieczeństwa całej sieci korporacyjnej”).
- Zgody i legalność: Uzyskaj pisemną zgodę od właściciela systemów na przeprowadzenie testów. Podpisz umowę regulującą warunki pentestu oraz NDA o zachowaniu poufności danych. Upewnij się, że wszystkie strony rozumieją, co wolno, a czego nie wolno podczas testu (np. testy DoS, czy dozwolone, okno czasowe testów itp.).
- Model i dostęp wstępny: Ustal model pentestu (black/grey/white). Jeśli to grey/white box – zapewnij dostęp do wymaganych informacji: np. konta testowe, dokumentacja, kody źródłowe, klucze API, architektura systemu. Sprawdź przed startem, czy dane dostępy działają.
- Harmonogram i komunikacja: Zsynchronizuj plan pentestu z kalendarzem klienta. Ustal datę/godzinę rozpoczęcia i zakończenia testów. Wyznacz osoby kontaktowe po obu stronach – do zgłaszania krytycznych incydentów lub pytań (np. “Ataki będą wykonywane nocą między 22:00-6:00, kontakt alarmowy po stronie klienta: tel. ABC w razie awarii”).
- Środowisko testowe: Uzgodnij, czy testy odbywają się na produkcji czy w środowisku testowym. Jeśli na produkcji – przygotuj plan minimalizowania wpływu (np. nie wykonywać testów w godzinach szczytu, nie atakować serwerów krytycznych bez dodatkowych ustaleń). Jeśli w testowym – upewnij się, że jest ono aktualne i odzwierciedla produkcję.
- Backup i bezpieczeństwo danych: Zasugeruj klientowi wykonanie backupu ważnych systemów przed testem (na wypadek nieprzewidzianych skutków). Ustal sposób przekazywania wrażliwych danych znalezionych podczas testu (np. hasła, dane osobowe) – zazwyczaj kanał szyfrowany lub osobiście. Zobowiąż się do odpowiedniego zabezpieczenia danych z testu po swojej stronie (szyfrowane dyski, usunięcie danych po raporcie itp.).
- Ustalenie kryteriów zakończenia: Określ, co oznacza sukces w teście (np. czy zdobycie jednego konta admina kończy test ataku, czy próbujemy dalej). To ważne, aby nie “przekombinować” – czasem lepiej przerwać atak gdy już mamy dowód podatności, by nie ryzykować stabilności systemu.
- Przygotowanie narzędzi: Sprawdź swój sprzęt i oprogramowanie przed testem. Upewnij się, że narzędzia są aktualne, skrypty działają, masz odpowiednie uprawnienia (np. root na swojej maszynie), a środowisko (np. VPN do klienta) jest skonfigurowane. Przygotuj listy słownikowe, scenariusze testów, checklisty OWASP itp., aby w trakcie pentestu pracować już z gotowymi zasobami.
Checklist technicznych obszarów do sprawdzenia podczas pentestu (lista kontrolna potencjalnych podatności):
- Otwarte porty i usługi: Przeprowadź pełne skanowanie portów wszystkich hostów w zakresie. Zidentyfikuj każdą otwartą usługę – czy wszystkie powinny być dostępne? Sprawdź szczególnie usługi administracyjne (SSH, RDP, panel WWW) wystawione na zewnątrz – czy są konieczne?
- Aktualność oprogramowania: Zweryfikuj wersje kluczowych systemów (system operacyjny, serwer WWW, baza danych, middleware). Porównaj z bazą znanych podatności – czy nie są dostępne exploity na daną wersję? Jeśli tak, priorytetowo przetestuj te exploity. Upewnij się, że krytyczne łatki bezpieczeństwa są wgrane (np. brak starych podatnych wersji OpenSSL, Apache Struts itp.).
- Konfiguracja i ustawienia bezpieczeństwa: Sprawdź konfiguracje pod kątem standardowych błędów: czy domyślne hasła zostały zmienione (np. admin/admin w panelu, sa bez hasła w SQL)? Czy usługi są poprawnie odseparowane (np. baza danych nie dostępna z internetu)? Czy używane są bezpieczne protokoły (SSH zamiast Telnetu, HTTPS zamiast HTTP, wyłączone SMBv1, tylko szyfrowane kanały)? Czy mechanizmy typu CSP, HSTS w aplikacjach web są zaimplementowane?
- Uwierzytelnianie i autoryzacja: Przetestuj mechanizmy logowania: czy są odporne na brute-force (konto blokuje się po X próbach? jest CAPTCHA?), czy hasła mają wymaganą złożoność? Spróbuj scenariuszy typu Privilege Escalation w aplikacjach – zaloguj się jako zwykły użytkownik i sprawdź, czy możesz dostać się do funkcji admina (bez interfejsu lub przez zmiany parametrów). Zbadaj, czy tokeny sesyjne są chronione (httponly, secure flag) i czy nie można ich przewidzieć.
- Walidacja danych wejściowych: W każdej aplikacji sprawdź pola wejściowe (formularze, parametry URL, nagłówki) pod kątem podatności na injection. Spróbuj wstrzyknąć znaki specjalne:
' " < > { } etc., komendy SQL, skrypty<script>`. Zobacz, jak system reaguje – brak jakiejkolwiek walidacji i pojawienie się twojego payloadu w odpowiedzi lub w bazie to sygnał podatności. Zwróć uwagę na upload plików – czy można wgrać złośliwy plik (np. .php) i czy zostanie on wykonany na serwerze? - Błędy i wyjątki: Spowoduj kontrolowane błędy (np. wpisz niepoprawny ID w URL, który może wywołać wyjątek w aplikacji). Obserwuj komunikaty – czy aplikacja nie ujawnia stack trace’a lub wrażliwych informacji (np. o strukturze bazy danych)? Takie informacje mogą pomóc w dalszym ataku.
- Bezpieczeństwo komunikacji: Sprawdź, czy wszędzie tam, gdzie przesyłane są dane wrażliwe, używany jest szyfrowany protokół (TLS). Jeśli aplikacja umożliwia połączenia po HTTP (nieszyfrowane), zanotuj to jako problem. Zbadaj konfigurację SSL/TLS serwerów (np. za pomocą sslscan) – czy nie akceptują starych, podatnych szyfrów, czy certyfikaty są poprawne.
- Mechanizmy ochronne: Oceń obecność i skuteczność mechanizmów bezpieczeństwa: czy jest WAF i czy blokuje twoje podstawowe ataki? Czy system IPS/IDS odciął twoje skanowanie portów? Czy w logach (jeśli masz wgląd) widać alerty? Brak mechanizmów detekcji – odnotuj jako ryzyko (atak może pozostać niezauważony). Jeśli są mechanizmy – spróbuj je obejść w rozsądny sposób (np. zmiana user-agenta, powolniejsze tempo ataku) i sprawdź, czy dalej działają.
- Procesy i reakcja: Choć to wykracza poza czysto techniczny test, zanotuj, czy w trakcie pentestu ktoś z zespołu klienta zareagował (np. czy dostałeś zapytanie “czy wy to robicie, bo widzimy ruch?”). Brak reakcji może wskazywać, że prawdziwy atak też by przeszedł niezauważony. Uwzględnij to ewentualnie w rekomendacjach (np. szkolenie zespołu, lepszy monitoring).
Powyższa lista nie jest wyczerpująca, ale daje obraz, jak szeroki wachlarz rzeczy należy zweryfikować. Pentesterzy często korzystają z własnych checklist dopasowanych do typu systemu – np. oddzielna lista kontrolna dla testów web (oparta na OWASP Top 10), oddzielna dla testów sieci (listy usług do sprawdzenia), jeszcze inna dla testów Wi-Fi itd. Systematyczność jest kluczem – odhaczenie każdego punktu listy pomaga upewnić się, że niczego nie pominiemy.
Podsumowanie

Test penetracyjny jest jednym z najważniejszych działań zapewniających bezpieczeństwo systemów IT w praktyce. Pozwala on spojrzeć na infrastrukturę oczami hakera, ale w kontrolowanych warunkach i bez szkodliwych intencji. Dzięki pentestom organizacje mogą wyprzedzić atakującego – znaleźć i usunąć luki zanim zrobi to ktoś o złych zamiarach. W niniejszym przewodniku wyjaśniliśmy, na czym polega pentest, jakie są jego rodzaje, etapy oraz jakimi narzędziami posługują się pentesterzy. Poznałeś również przykłady rzeczywistych ataków (SQL Injection, przejęcie systemu przez exploit, łamanie haseł itp.), co pokazuje, że pentesting to dziedzina bardzo praktyczna i techniczna.
Pamiętaj, że bezpieczeństwo to proces ciągły – pojedynczy pentest daje obraz stanu systemu w danym momencie. Aby utrzymać wysoki poziom ochrony, zaleca się regularne testy (np. roczne) oraz testowanie za każdym razem, gdy wprowadzasz istotne zmiany w systemach lub nowe aplikacje. Warto też łączyć testy penetracyjne z innymi działaniami, takimi jak audyty konfiguracyjne, przeglądy kodu źródłowego czy szkolenia z bezpieczeństwa dla pracowników – razem tworzy to wielowarstwowe podejście do cyberbezpieczeństwa.
Na koniec, etyka i prawo: pentesty wykonujemy wyłącznie za zgodą i na zlecenie – nieautoryzowane próby włamań są przestępstwem. Dlatego jeśli zainteresowałeś się pentestingiem, ćwicz w legalny sposób i na własnych zasobach lub przygotowanych platformach.
Spróbuj samodzielnie: Teraz, gdy masz podstawową wiedzę, zachęcamy do praktyki we własnym zakresie (oczywiście etycznie i legalnie!). Oto kilka pomysłów:
- Postaw na własnym komputerze prostą aplikację do celów testowych – np. zainstaluj znaną podatną aplikację DVWA (Damn Vulnerable Web Application) lub OWASP Juice Shop. Spróbuj wykryć w nich podatności opisane w OWASP Top 10 (SQLi, XSS itp.) za pomocą narzędzi takich jak Burp Suite czy OWASP ZAP. To świetny poligon do nauki ataków web w bezpiecznym środowisku.
- Poćwicz skanowanie swojej własnej sieci domowej. Użyj Nmap, aby przeskanować adresy swojej sieci lokalnej (np. 192.168.0.0/24) – zobaczysz urządzenia podłączone (router, laptop, telefon) i otwarte porty. Analizuj wyniki – czy potrzebujesz np. otwartego portu telnet w drukarce? Możesz spróbować zmienić konfigurację, by zamknąć zbędne usługi. Uwaga: skanuj tylko swoją sieć, nie cudzą!
- Zarejestruj się na platformach typu Hack The Box, TryHackMe czy VulnHub, które oferują wirtualne środowiska do legalnego hackingu. Znajdziesz tam maszyny wirtualne z celowymi podatnościami – Twoim zadaniem będzie je znaleźć i wykorzystać, zdobywając np. uprawnienia administratora. To doskonały sposób, by zastosować zdobytą wiedzę w praktyce i zmierzyć się z coraz trudniejszymi wyzwaniami.
- Przeglądaj oficjalne materiały OWASP – np. zapoznaj się z OWASP Testing Guide, który szczegółowo opisuje techniki testowania zabezpieczeń aplikacji, oraz z projektami takimi jak OWASP Cheat Sheets (zwięzłe poradniki zarówno dla developerów jak i pentesterów). Dzięki temu pogłębisz rozumienie metod testowania i dowiesz się, jak wygląda standard pentestów od strony społeczności ekspertów.
Pentesting to dziedzina, która wymaga ciągłego doskonalenia i nauki – krajobraz zagrożeń zmienia się nieustannie. Każdy znaleziony podczas pentestu błąd to cenna lekcja, która czyni system bezpieczniejszym. Mamy nadzieję, że ten przewodnik pomógł Ci zrozumieć, czym jest test penetracyjny, jak się go wykonuje i dlaczego odgrywa on tak ważną rolę w świecie bezpieczeństwa IT. Powodzenia na drodze do zostania pentesterem lub po prostu w zabezpieczaniu własnych systemów przed tymi, którzy mogliby chcieć je złamać!
Bibliografia
- https://en.wikipedia.org/wiki/Penetration_test
- https://www.cloudflare.com/learning/security/glossary/what-is-penetration-testing/
- https://www.ibm.com/think/topics/penetration-testing
- https://owasp.org/www-project-web-security-testing-guide/
- https://owasp.org/www-project-web-security-testing-guide/latest/3-The_OWASP_Testing_Framework/1-Penetration_Testing_Methodologies
- https://deepstrike.io/blog/penetration-testing-methodology
- https://www.qiminfo.ch/en/pentest/
- https://haxoris.com/testing-methodologies/wstg
- https://www.truesec.com/security/penetration-testing
- https://securityintelligence.com/posts/penetration-testing-know-your-enemy/
- https://www.crowdstrike.com/cybersecurity-101/penetration-testing/
- https://www.crowdstrike.com/cybersecurity-101/red-team-vs-blue-team/
- https://owasp.org/www-project-top-ten/
- https://owasp.org/www-community/attacks/SQL_Injection
- https://owasp.org/www-community/attacks/Path_Traversal
- https://owasp.org/www-project-amass/
- https://attack.mitre.org/
- https://attack.mitre.org/tactics/TA0001/
- https://attack.mitre.org/tactics/TA0002/
- https://attack.mitre.org/tactics/TA0003/
- https://attack.mitre.org/tactics/TA0004/
- https://attack.mitre.org/tactics/TA0005/
- https://attack.mitre.org/tactics/TA0006/
- https://attack.mitre.org/tactics/TA0007/
- https://attack.mitre.org/tactics/TA0008/
- https://attack.mitre.org/tactics/TA0009/
- https://attack.mitre.org/tactics/TA0010/
- https://attack.mitre.org/tactics/TA0011/
- https://attack.mitre.org/tactics/TA0012/
- https://www.kali.org/tools/nmap/
- https://nmap.org/book/man.html
- https://portswigger.net/burp
- https://sqlmap.org/
- https://www.metasploit.com/
- https://www.shodan.io/
- https://www.kali.org/tools/theharvester
- https://cve.mitre.org/
- https://nvd.nist.gov/
- https://www.ibm.com/reports/data-breach