Każda grupa laboratoryjna wybiera dokładnie jedno zadanie z poniższego zestawu dziesięciu studiów przypadków do kompleksowego opracowania w formie pisemnego referatu inżynierskiego. Prace realizowane są w zespołach liczących od dwóch do trzech studentów, a czas przeznaczony na realizację laboratorium wynosi 180 minut. Zadania na ocenę 4.0 łączą analizę organizacyjno-prawną z praktycznym wykorzystaniem bezpłatnego oprogramowania narzędziowego, konfiguracji wiersza poleceń oraz weryfikacji reguł bezpieczeństwa w systemach operacyjnych Linux, Windows oraz RouterOS. Od studentów wymaga się przeprowadzenia burzy mózgów, zbadania wzajemnych zależności pomiędzy komponentami systemu oraz wypracowania całościowego, spójnego rozwiązania technicznego. Efektem pracy grupy musi być dojrzałe sprawozdanie techniczne, wykazujące nie tylko zrozumienie teorii, lecz także umiejętność doboru i przetestowania konkretnych narzędzi audytorskich i konfiguracyjnych.
Z laboratorium każda grupa przygotowuje jedno łączne sprawozdanie w formacie dokumentu PDF o objętości od sześciu do ośmiu stron znormalizowanego tekstu inżynierskiego. Dokument musi rozpoczynać się od strony tytułowej zawierającej pełną nazwę uczelni, nazwę przedmiotu, imiona i nazwiska członków grupy wraz z numerami albumów, kierunek studiów, numer grupy dziekańskiej oraz rok akademicki. Bezpośrednio pod stroną tytułową należy wkleić pełną, niezmienioną treść wybranego do realizacji zadania laboratoryjnego. Układ merytoryczny pracy musi obligatoryjnie obejmować wstęp wprowadzający w tematykę, szczegółowe rozwinięcie problemu inżynierskiego oraz wyczerpujące podsumowanie z wnioskami. W części analitycznej wymagany jest szczegółowy opis zidentyfikowanych zagrożeń, formalna matryca ryzyka (prawdopodobieństwo x skutek) oraz uzasadnienie wyboru proponowanych reguł polityki bezpieczeństwa. W części praktycznej sprawozdanie musi zawierać logiczny schemat działania i połączeń, wykaz wykorzystanych bezpłatnych narzędzi i serwisów WWW, a także przetestowane pliki konfiguracyjne oraz zrzuty poleceń CLI wraz z ich rzeczywistymi wynikami. Sprawozdanie musi w sposób jednoznaczny i bezdyskusyjny dowodzić, że zespół samodzielnie i poprawnie zrealizował zadanie oraz zrozumiał wpływ poszczególnych parametrów na bezpieczeństwo całego systemu informatycznego. W referacie należy podać spis wykorzystanych źródeł, w tym aktów prawnych (RODO, ustawa o KSC), norm serii ISO/IEC 27001 i 27005 oraz oficjalnych wytycznych CSIRT NASK i NIST. Obrona sprawozdania odbywa się w trakcie zajęć poprzez ustne wystąpienie członków grupy i merytoryczną dyskusję nad przyjętymi rozwiązaniami technicznymi.
Kon1 Rodzaje i źródła zagrożeń dla systemów teleinformatycznych. Metody i środki ochrony. Kon2 Warunki zapewnienia poufności i integralności informacji. Bezpieczeństwo serwerów WWW.
Celem zadania jest zaprojektowanie, wdrożenie i przetestowanie zaawansowanej konfiguracji utwardzonego serwera WWW Nginx obsługującego krytyczny portal korporacyjny. Studenci poznają zasady eliminacji wycieków informacji o infrastrukturze (Server Token Hiding), bezpiecznego zarządzania buforami w celu zapobiegania atakom odmowy usługi (Slowloris / Buffer Overflow) oraz implementacji kompletu nowoczesnych nagłówków bezpieczeństwa HTTP. Projekt obejmuje konfigurację nagłówków: HSTS (HTTP Strict Transport Security) z preloadem, Content-Security-Policy (CSP Level 3), X-Frame-Options, X-Content-Type-Options, Referrer-Policy oraz Permissions-Policy.
W części analitycznej studenci badają podatności na ataki typu Clickjacking, MIME-Sniffing oraz wycieki danych wrażliwych w nagłówku Referer. W części praktycznej przeprowadzają audyt poprawności wdrożenia nagłówków za pomocą narzędzi cURL, testssl.sh oraz serwisu securityheaders.com, dążąc do uzyskania najwyższej oceny bezpieczeństwa A+.
Regionalny Portal Obsługi Klienta EnigmaEnergy S.A. obsługuje e-faktury, płatności online oraz zawieranie umów na dostawę energii elektrycznej dla ponad 200 000 odbiorców. Podczas rutynowego audytu zgodności z normą ISO/IEC 27001 wykazano, że serwer produkcyjny Nginx wysyłał pełne nagłówki wersji (Server: nginx/1.14.2 (Ubuntu)), co ułatwiało automatycznym botom dobór celowanych exploitów.
Ponadto aplikacja nie posiadała skonfigurowanego nagłówka HSTS, co umożliwiło audytorom przeprowadzenie demonstracyjnego ataku SSL Stripping w otwartej sieci Wi-Fi i zredukowanie połączenia klienta do nieszyfrowanego protokołu HTTP. Brak nagłówka X-Frame-Options pozwolił na osadzenie panelu logowania EnigmaEnergy wewnątrz niewidocznej ramki <iframe> na fałszywej stronie internetowej i przeprowadzenie ataku Clickjacking, w którym użytkownicy nieświadomie zatwierdzali zgodę na zmianę taryfy.
Zarząd spółki nakazał natychmiastowe utwardzenie konfiguracji serwerów brzegowych oraz zablokowanie wszelkich potencjalnych wektorów ataków po stronie przeglądarki klienta. Nowy standard musi uniemożliwić jakiekolwiek osadzanie portalu w ramkach, wymusić szyfrowanie HTTPS z preloadem na 2 lata oraz zablokować dostęp przeglądarki do kamery, mikrofonu i geolokalizacji za pośrednictwem nagłówka Permissions-Policy.
Grupa laboratoryjna przyjmuje zadanie administratorów bezpieczeństwa WWW. Studenci muszą przygotować produkcyjny plik konfiguracyjny Nginx, wyłączyć zbędne moduły, skonfigurować restrykcyjne nagłówki bezpieczeństwa oraz przetestować odporność serwera za pomocą zapytań cURL i zewnętrznych audytorów nagłówków.
Sprawozdanie musi zawierać dokładną analizę wpływu każdego nagłówka na zachowanie przeglądarki, zrzuty odpowiedzi HTTP przed i po utwardzeniu oraz potwierdzenie uzyskania ratingu A+ w audycie bezpieczeństwa nagłówków.
Pamiętajcie, że w serwerze Nginx dodanie dyrektywy `add_header` w bloku podrzędnym (np. wewnątrz `location`) powoduje całkowite wyczyszczenie i nadpisanie wszystkich nagłówków `add_header` zdefiniowanych w blokach nadrzędnych (`server` lub `http`). Aby tego uniknąć, najlepszą praktyką inżynierską jest stworzenie osobnego pliku (np. `/etc/nginx/snippets/security-headers.conf`) i dołączanie go dyrektywą `include` we wszystkich wymaganych lokalizacjach.
Poniżej przedstawiono kompletny, produkcyjny plik nagłówków bezpieczeństwa dla serwera Nginx oraz weryfikację za pomocą cURL:
Weryfikacja odpowiedzi serwera za pomocą polecenia cURL z poziomu konsoli audytora:
Próba osadzenia serwera w ramce <iframe> na obcej stronie kończy się zablokowaniem w przeglądarce:
Poniższa lista zawiera propozycje zagadnień i wniosków technicznych, które warto uwzględnić w sprawozdaniu z tego zadania:
Przykładowe wnioski (wzór do sprawozdania): Wdrożenie kompleksowego zestawu nagłówków bezpieczeństwa w konfiguracji serwera Nginx pozwoliło na podniesienie oceny w audycie Mozilla Observatory ze skrajnie niebezpiecznego poziomu F do maksymalnej noty A+. Zastosowanie polityki Content Security Policy opartej na kryptograficznych tokenach jednorazowych skutecznie zablokowało wykonywanie wstrzykiwanych skryptów XSS bez zakłócania działania zaufanych bibliotek aplikacji. Wprowadzenie dyrektywy HSTS z okresem ważności dwóch lat oraz flagami includeSubDomains i preload trwale zabezpieczyło użytkowników przed atakami obniżenia wersji protokołu. Wyłączenie ujawniania wersji serwera oraz zablokowanie osadzania strony w obcych ramkach za pomocą dyrektywy frame-ancestors wyeliminowało ryzyko precyzyjnego profilowania podatności i ataków Clickjacking. Wdrożona konfiguracja stanowi wzorcową realizację zaleceń OWASP Secure Headers Project i spełnia wymogi bezpieczeństwa transmisji danych określone w normie ISO/IEC 27001.
Kon1 Rodzaje i źródła zagrożeń dla systemów teleinformatycznych. Metody i środki ochrony. Kon2 Warunki zapewnienia integralności i poufności informacji. Zapory aplikacji internetowych (WAF).
Celem zadania jest zaprojektowanie, instalacja, konfiguracja i dokładne dostrojenie (Tuning) zapory aplikacji internetowych (Web Application Firewall - WAF) ModSecurity v3 z oficjalnym zestawem reguł OWASP Core Rule Set (CRS v3.3/v4.0). Studenci badają zasady inspekcji ruchu HTTP w modelu odwrotnego proxy (Reverse Proxy WAF), analizując działanie reguł wykrywających ataki SQL Injection, Cross-Site Scripting (XSS), Local/Remote File Inclusion (LFI/RFI), zdalne wykonywanie kodu (RCE) oraz skanery podatności.
Kluczowym elementem ćwiczenia jest rozwiązanie powszechnego problemu fałszywych alarmów (False Positives), które w środowiskach produkcyjnych mogą blokować legalnych użytkowników. Studenci uczą się analizować dzienniki audytowe (ModSecurity Audit Log), modyfikować progi anomalii (Anomaly Scoring Mode) oraz tworzyć precyzyjne reguły wykluczające (Rule Exclusions) dla specyficznych endpointów aplikacji.
Platforma przetargowa ZamowieniaPubliczne24 Sp. z o.o. obsługuje elektroniczne składanie ofert handlowych dla urzędów miast i gmin. W ostatnim kwartale portal stał się celem zmasowanych ataków przeprowadzanych przez botnety, obejmujących próby wstrzykiwania zapytań SQL, przesyłanie powłok webowych (Web Shell) oraz skanowanie w poszukiwaniu luk w oprogramowaniu WordPress i modułach PHP.
Zarząd spółki podjął decyzję o zainstalowaniu zapory WAF ModSecurity przed klastrem serwerów aplikacji. Jednakże bezpośrednio po włączeniu domyślnej konfiguracji OWASP CRS w trybie blokowania doszło do paraliżu systemu: WAF zaczął masowo odrzucać legalne oferty przetargowe przesyłane w formacie XML/JSON, błędnie klasyfikując fragmenty opisów technicznych jako próby ataków XSS lub LFI (fałszywe alarmy).
Dyrektor IT wstrzymał działanie WAF i nakazał przeprowadzenie profesjonalnego procesu strojenia w trybie monitorowania (DetectionOnly), zidentyfikowanie przyczyn fałszywych alarmów oraz napisanie reguł wykluczeń przed ponownym przełączeniem w tryb aktywnego blokowania (On).
Grupa laboratoryjna przyjmuje rolę inżynierów bezpieczeństwa aplikacji. Zadaniem zespołu jest wdrożenie silnika ModSecurity zintegrowanego z serwerem Nginx/Apache, załadowanie zestawu reguł OWASP CRS, skonfigurowanie progów punktacji anomalii (Inbound Anomaly Score Threshold), zasymulowanie realnych ataków oraz legalnego ruchu generującego błędy, a następnie stworzenie precyzyjnych reguł wykluczeń eliminujących fałszywe alarmy.
Sprawozdanie musi zawierać konfigurację wstępną, analizę wpisów z dziennika audytowego modsec_audit.log, reguły wykluczające oraz dowody skutecznego blokowania ataków z jednoczesnym przepuszczaniem legalnego ruchu biznesowego.
Nigdy nie wyłączaj całej reguły CRS (np. `SecRuleRemoveById 942100`), jeśli powoduje ona fałszywy alarm w jednym formularzu. Wyłączenie całej reguły otwiera lukę w bezpieczeństwie w całej aplikacji. Prawidłową techniką jest wykluczenie sprawdzania konkretnego parametru (np. `SecRuleUpdateTargetById 942100 "!ARGS:tresc_ogloszenia"`), co zachowuje pełną ochronę pozostałych parametrów.
Poniżej przedstawiono przykładową konfigurację wykluczeń reguł w ModSecurity eliminującą fałszywe alarmy dla panelu ofert:
Inspekcja wpisu w dzienniku audytowym ModSecurity w formacie JSON dokumentującego zablokowanie prawdziwego ataku RCE:
Weryfikacja działania WAF po przełączeniu w tryb blokowania za pomocą polecenia cURL:
Poniższa lista zawiera propozycje zagadnień i wniosków technicznych, które warto uwzględnić w sprawozdaniu z tego zadania:
Przykładowe wnioski (wzór do sprawozdania): Integracja silnika ModSecurity v3 z oficjalnym zestawem reguł OWASP Core Rule Set zapewniła skuteczną ochronę warstwy aplikacyjnej przed zautomatyzowanymi wektorami ataków z listy OWASP Top 10. Przeprowadzone testy penetracyjne wykazały, że model oceny anomalii natychmiast blokuje zaawansowane ładunki SQL Injection i próby trawersowania ścieżek z kodem błędu HTTP 403 Forbidden. Kluczowym etapem wdrożenia okazało się wykluczenie reguł powodujących fałszywe alarmy w formularzach edycji bogatego tekstu CMS, co osiągnięto za pomocą precyzyjnych dyrektyw SecRuleRemoveById. Pomiar narzutu wydajnościowego wykazał wzrost opóźnienia odpowiedzi średnio o zaledwie 3,8 ms, co stanowi w pełni akceptowalny koszt w zamian za uzyskaną warstwę obrony w głąb. Wdrożenie zapory WAF pozwoliło organizacji na spełnienie krytycznego wymogu 6.4.1 standardu bezpieczeństwa płatności kartowych PCI DSS v4.0.
Kon1 Rodzaje i źródła zagrożeń dla systemów teleinformatycznych. Metody i środki ochrony. Kon4 Bezpieczeństwo protokołów komunikacyjnych i sieci komputerowych. Protokół TLS i kryptografia asymetryczna.
Celem zadania jest zaprojektowanie, zaimplementowanie i przetestowanie zaawansowanej, bezpiecznej konfiguracji warstwy kryptograficznej TLS (Transport Layer Security) w serwerze Apache HTTP Server, spełniającej współczesne wytyczne NIST SP 800-52 Rev. 2 oraz profil Mozilla Modern TLS. Studenci analizują architekturę protokołu TLS 1.3 w zestawieniu z TLS 1.2, poznając zalety eliminacji przestarzałych mechanizmów (usunięcie podatnych szyfrów blokowych CBC, wymiany kluczy RSA bez utajniania w przód, negocjacji kompresji podatnej na ataki CRIME).
Projekt obejmuje wdrożenie kryptografii opartej na krzywych eliptycznych (ECDHE z krzywymi X25519 i secp256r1), konfigurację certyfikatów z podpisami ECDSA/RSA, włączenie mechanizmu OCSP Stapling (zszywanie odpowiedzi statusu unieważnienia certyfikatu) oraz eliminację ataków typu Downgrade Attack. Zwieńczeniem zadania jest audyt serwera za pomocą narzędzi testssl.sh oraz uzyskanie najwyższego ratingu A+ w teście Qualys SSL Labs.
Dom Maklerski Bessa & Hossa S.A. obsługuje internetową platformę transakcyjną do handlu akcjami i obligacjami na Giełdzie Papierów Wartościowych. Klienci logują się za pośrednictwem przeglądarek internetowych i aplikacji webowej Apache. Podczas audytu technicznego zleconego przez Komisję Nadzoru Finansowego (KNF) stwierdzono, że serwery transakcyjne nadal dopuszczały negocjację przestarzałych protokołów TLS 1.0 i TLS 1.1 oraz akceptowały zestawy szyfrów z algorytmem 3DES i trybem CBC, podatne na ataki kryptoanalityczne BEAST oraz Sweet32.
Ponadto weryfikacja unieważnienia certyfikatów opierała się na klasycznym odpytywaniu serwerów OCSP przez przeglądarkę klienta, co powodowało opóźnienia w nawiązywaniu połączeń oraz naruszało prywatność użytkowników (ujawnianie adresu IP klienta operatorowi urzędu certyfikacji CA). Serwer nie korzystał z mechanizmu Perfect Forward Secrecy dla części połączeń, co stwarzało ryzyko odszyfrowania historycznego ruchu w przypadku przyszłego wycieku klucza prywatnego.
KNF wyznaczyła 14-dniowy termin na wyeliminowanie podatności kryptograficznych pod rygorem nałożenia kary administracyjnej i wstrzymania działalności maklerskiej. Zarząd spółki polecił administratorom natychmiastowe przejście na standard TLS 1.3 i TLS 1.2 z wyłącznym wsparciem dla bezpiecznych szyfrów AEAD.
Zespół studentów ma za zadanie zrekonfigurować moduł mod_ssl w serwerze Apache, wyłączyć wszystkie protokoły poniżej TLS 1.2, skonfigurować preferencję szyfrów ECDHE-ECDSA/RSA z algorytmami AES-GCM i ChaCha20-Poly1305, uruchomić lokalne buforowanie i zszywanie odpowiedzi OCSP (OCSP Stapling) oraz przetestować konfigurację narzędziem testssl.sh.
Sprawozdanie musi zawierać pełne listingi konfiguracji ssl.conf, analizę matematyczną wybranych krzywych eliptycznych oraz zrzut z audytu testssl.sh wykazujący brak jakichkolwiek podatności na znane ataki kryptograficzne (Heartbleed, POODLE, DROWN, ROBOT, Logjam).
W protokole TLS 1.3 architektura negocjacji szyfrów uległa fundamentalnej zmianie. Zestawy szyfrów (Cipher Suites) w TLS 1.3 definiują wyłącznie algorytm szyfrowania symetrycznego (np. AES-256-GCM) oraz funkcję skrótu dla HKDF (np. SHA384). Algorytm wymiany klucza nie jest już częścią nazwy szyfru, ponieważ TLS 1.3 dopuszcza wyłącznie bezpieczną wymianę kluczy opartą na efemerycznym protokole Diffie-Hellmana (DHE / ECDHE), co gwarantuje Perfect Forward Secrecy z definicji.
Poniżej przedstawiono przykładową, utwardzoną konfigurację Apache HTTP Server (mod_ssl) zgodną ze standardem Mozilla Modern:
Weryfikacja nawiązania bezpiecznej sesji TLS 1.3 za pomocą konsoli OpenSSL s_client:
Weryfikacja obecności zszytej odpowiedzi OCSP (OCSP Staple) chroniącej prywatność użytkowników:
Poniższa lista zawiera propozycje zagadnień i wniosków technicznych, które warto uwzględnić w sprawozdaniu z tego zadania:
Przykładowe wnioski (wzór do sprawozdania): Restrykcyjna rekonfiguracja modułu SSL serwera Apache pozwoliła na wyeliminowanie przestarzałych protokołów TLS 1.0/1.1 i szyfrów podatnych na ataki kryptoanalityczne, osiągając maksymalną ocenę A+ w audycie Qualys SSL Labs. Ograniczenie dopuszczalnych zestawów szyfrów do nowoczesnych algorytmów TLS 1.3 zagwarantowało bezwzględne zachowanie właściwości doskonałego utajniania w przód (Perfect Forward Secrecy). Zastosowanie certyfikatów z kluczami na krzywych eliptycznych (ECDSA secp384r1) znacząco zredukowało obciążenie procesora podczas negocjacji połączenia w porównaniu z tradycyjnymi kluczami RSA. Wdrożenie technologii OCSP Stapling wyeliminowało opóźnienia związane z zewnętrznymi zapytaniami klientów do serwerów CA oraz usunęło ryzyko ujawnienia historii przeglądania użytkowników dostawcom certyfikatów. Zoptymalizowany handshake 1-RTT przyniósł wymierny zysk wydajnościowy, podnosząc komfort korzystania z portalu bankowego przy zachowaniu najwyższych rygorów bezpieczeństwa.
Kon1 Rodzaje i źródła zagrożeń dla systemów teleinformatycznych. Metody i środki ochrony. Kon3 Autoryzacja i uwierzytelnianie w systemach komputerowych. Zarządzanie stanem i sesją w protokole HTTP.
Celem zadania jest zbadanie mechanizmów kontroli stanu i zarządzania sesją w bezstanowym protokole HTTP oraz zaprojektowanie rygorystycznej polityki bezpieczeństwa sesji dla bankowej aplikacji internetowej. Studenci poznają anatomię ataków na sesję użytkownika: fiksacji sesji (Session Fixation), przejęcia aktywnego tokena sesyjnego (Session Hijacking), fałszowania żądań międzywitrynowych (CSRF) oraz podsłuchu w nieszyfrowanym kanale. Projekt analizuje krytyczne znaczenie atrybutów ciasteczek: HttpOnly, Secure oraz SameSite (None, Lax, Strict).
W części programistyczno-konfiguracyjnej studenci implementują mechanizm natychmiastowej rotacji identyfikatora sesji (Session ID Regeneration) po pomyślnym uwierzytelnieniu, bezwzględne unieważnianie sesji po wylogowaniu po stronie serwera, mechanizm automatycznego wygaszania bezczynnej sesji (Idle Timeout = 15 minut) oraz maksymalnego czasu życia sesji (Absolute Timeout). Zadanie uczy również wiązania sesji z fingerprintem klienta.
Spółdzielcza Kasa Oszczędnościowo-Kredytowa 'Skarbiec' uruchomiła nową wersję serwisu bankowości elektronicznej dla klientów indywidualnych. Aplikacja została zaimplementowana w technologii PHP z domyślnym mechanizmem obsługi sesji PHPSESSID. Podczas audytu bezpieczeństwa przeprowadzonego przez zespół Ethical Hackerów zidentyfikowano szereg krytycznych błędów w architekturze sesyjnej.
Po pierwsze, aplikacja akceptowała identyfikator sesji przekazany bezpośrednio w parametrze adresu URL (np. https://bank.skarbiec.pl/logowanie?PHPSESSID=123456). Pozwalało to napastnikowi na wysłanie ofierze spreparowanego linku, a po zalogowaniu się ofiary identyfikator sesji nie ulegał zmianie (Session Fixation). Napastnik, znając z góry ustalony identyfikator, uzyskiwał natychmiastowy dostęp do rachunku bankowego ofiary.
Po drugie, ciasteczko sesyjne nie posiadało atrybutu HttpOnly ani SameSite, co w połączeniu z drobną luką XSS umożliwiało kradzież poświadczeń. Po trzecie, kliknięcie przycisku 'Wyloguj' powodowało jedynie usunięcie ciasteczka w przeglądarce klienta, podczas gdy po stronie serwera plik sesji pozostawał w pełni aktywny i ważny przez kolejne 24 godziny.
Zarząd SKOK podjął decyzję o natychmiastowym wstrzymaniu dostępu do nowego systemu do czasu usunięcia wszystkich wad projektowych. Zlecono zespołowi audytorów (grupie laboratoryjnej) opracowanie nowej, pancernej procedury zarządzania sesjami.
Studenci muszą odtworzyć podatność fiksacji sesji w środowisku laboratoryjnym, zaimplementować bezpieczną konfigurację php.ini / serwera aplikacyjnego, wdrożyć funkcję session_regenerate_id(true) przy każdej zmianie kontekstu uprawnień, skonfigurować ciasteczka z prefiksem __Host- oraz zaprojektować procedurę czyszczenia sesji w pamięci Redis/bazy danych po wylogowaniu.
Stosowanie prefiksu `__Host-` w nazwie ciasteczka (np. `__Host-SID`) jest nowoczesnym mechanizmem obronnym wspieranym przez wszystkie współczesne przeglądarki. Ciasteczko z tym prefiksem zostanie zaakceptowane przez przeglądarkę wyłącznie wtedy, gdy: 1) pochodzi z bezpiecznego połączenia HTTPS, 2) posiada atrybut `Secure`, 3) nie zawiera atrybutu `Domain` (jest przypisane ściśle do bieżącego hosta, co chroni przed atakami z poziomu podatnych poddomen), oraz 4) posiada ścieżkę `Path=/`.
Poniżej przedstawiono przykładową implementację bezpiecznej inicjalizacji i rotacji sesji w języku PHP:
Weryfikacja nagłówka Set-Cookie zwróconego po zalogowaniu za pomocą polecenia cURL:
Próba odczytania ciasteczka sesyjnego przez złośliwy skrypt JavaScript kończy się fiaskiem:
Poniższa lista zawiera propozycje zagadnień i wniosków technicznych, które warto uwzględnić w sprawozdaniu z tego zadania:
Przykładowe wnioski (wzór do sprawozdania): Eksperymentalne badanie podatności mechanizmu sesyjnego wykazało, że brak regeneracji tokena po poprawnym logowaniu umożliwia bezproblemowe przejęcie tożsamości użytkownika za pomocą techniki Session Fixation. Zaimplementowanie natychmiastowej rotacji identyfikatora sesji wraz z unieważnieniem poprzedniego deskryptora całkowicie zneutralizowało ten groźny wektor zagrożenia. Opatrzenie ciasteczka sesyjnego atrybutami HttpOnly, Secure oraz SameSite=Strict wyeliminowało możliwość kradzieży tokena przez złośliwe skrypty JavaScript i zapobiegło jego dołączaniu do żądań międzywitrynowych. Dodatkowe zastosowanie prefiksu __Host-SessionID zabezpieczyło aplikację przed atakami polegającymi na wstrzykiwaniu spreparowanych ciasteczek ze słabiej zabezpieczonych subdomen organizacji. Wdrożenie sztywnego limitu bezczynności na poziomie 15 minut oraz maksymalnego czasu trwania sesji równego 8 godzin spełniło rygorystyczne wymagania KNF dla bankowości elektronicznej.
Kon1 Rodzaje i źródła zagrożeń dla systemów teleinformatycznych. Metody i środki ochrony. Kon3 Autoryzacja i uwierzytelnianie w systemach komputerowych. Ochrona przed atakami słownikowymi.
Celem zadania jest zaprojektowanie, przetestowanie i wdrożenie wielopoziomowej architektury ochrony interfejsów uwierzytelniania aplikacji webowej przed zautomatyzowanymi atakami siłowymi (Brute-Force), atakami słownikowymi oraz atakami wykorzystującymi wycieki baz danych (Credential Stuffing). Studenci analizują wektory ataków rozproszonych przeprowadzanych przez botnety rotujące adresy IP, badają wpływ ataków na obciążenie procesora i bazy danych oraz poznają metody odróżniania pomyłek legalnych użytkowników od aktywności złośliwych skryptów.
W części technicznej zadanie obejmuje konfigurację limitowania przepustowości żądań HTTP na poziomie serwera WWW Nginx (moduł ngx_http_limit_req_module z algorytmem Leaky Bucket), wdrożenie mechanizmu dynamicznego blokowania adresów IP na poziomie zapory jądra za pomocą demona Fail2ban, analizę kodów odpowiedzi HTTP (429 Too Many Requests) oraz implementację opóźnień progresywnych (Tarpitting / Exponential Backoff).
Portal pracowniczy i platforma e-learningowa Uczelni Medycznej MedEdu gromadzi konta ponad 15 000 studentów, wykładowców i pracowników administracji. Panel logowania (/auth/login) stał się celem zmasowanego ataku typu Credential Stuffing: przestępcy weszli w posiadanie bazy milionów haseł z ostatnich wycieków publicznych i uruchomili wielowątkowe boty sprawdzające, którzy użytkownicy MedEdu użyli takiego samego hasła w uczelnianym systemie.
Serwer Nginx oraz baza danych PostgreSQL zostały przeciążone setkami równoległych zapytań POST na sekundę, co doprowadziło do paraliżu platformy w trakcie trwania sesji egzaminacyjnej. Ponieważ serwer nie posiadał żadnych limitów częstotliwości zapytań ani mechanizmów blokady adresów IP, napastnicy zdołali przejąć dostęp do 87 kont studenckich i wykładowczych.
Rektor uczelni powołał zespół kryzysowy w celu natychmiastowego zabezpieczenia panelu logowania przed jakimikolwiek zautomatyzowanymi atakami masowymi, bez utrudniania pracy legalnym użytkownikom.
Zadaniem grupy laboratoryjnej jest wdrożenie dwuetapowej tarczy obronnej: 1) Warstwa serwera WWW: konfiguracja strefy limit_req_zone w Nginx ograniczającej liczbę zapytań do endpointu logowania do maksymalnie 5 na minutę z dopuszczalnym krótkim buforem (burst), 2) Warstwa systemowa: wdrożenie narzędzia Fail2ban analizującego dziennik access.log serwera Nginx i automatycznie wprowadzającego reguły blokujące na zaporze iptables/nftables po wykryciu 5 nieudanych prób logowania w ciągu 10 minut.
Sprawozdanie musi zawierać konfigurację Nginx i filtrów Fail2ban, symulację ataku za pomocą narzędzia Hydra / skryptu w Pythonie przed i po wdrożeniu zabezpieczeń oraz dowody automatycznego nakładania blokad IP.
Pamiętajcie o poprawnym zrozumieniu parametru `burst` w module `limit_req` Nginx. Parametr `rate=5r/m` pozwala średnio na jedno zapytanie co 12 sekund. Jeśli użytkownik szybko kliknie przycisk logowania dwukrotnie, bez parametru `burst` drugie kliknięcie zostałoby natychmiast odrzucone kodem 429. Parametr `burst=3 nodelay` pozwala na natychmiastowe obsłużenie do 3 zapytań z rzędu, a odrzuca dopiero kolejne próby, co zapewnia idealną równowagę pomiędzy wygodą użytkownika a bezpieczeństwem.
Poniżej przedstawiono konfigurację limitowania zapytań w Nginx oraz reguły więzienia Fail2ban:
Konfiguracja filtra i więzienia w pliku /etc/fail2ban/jail.d/nginx-login.local:
Weryfikacja nałożenia blokady po przeprowadzeniu testowego ataku za pomocą fail2ban-client:
Poniższa lista zawiera propozycje zagadnień i wniosków technicznych, które warto uwzględnić w sprawozdaniu z tego zadania:
Przykładowe wnioski (wzór do sprawozdania): Zastosowanie dwupoziomowej ochrony interfejsu uwierzytelniania opartej na module Nginx limit_req oraz usłudze Fail2ban skutecznie odparło zmasowany atak Credential Stuffing symulowany narzędziem Hydra. Skonfigurowanie dedykowanej strefy limitowania z limitem 5 żądań na minutę i parametrem 'burst=3 nodelay' natychmiast ograniczyło przepustowość złośliwych zapytań z kodem błędu HTTP 429 Too Many Requests. Filtr Fail2ban po wykryciu 5 nieudanych prób logowania w oknie 60 sekund dynamicznie wstrzyknął regułę blokującą w podsystemie nftables, odcinając ruch napastnika na poziomie jądra systemu operacyjnego. Zaimplementowanie mechanizmu zróżnicowanych reguł dla pojedynczych adresów IP zapobiegło przypadkowemu zablokowaniu całych podsieci korporacyjnych korzystających z bramek translacji adresów NAT. Połączenie limitowania aplikacyjnego z blokadą firewall zredukowało zużycie zasobów procesora i bazy danych o 94% podczas trwania symulacji ataku.
Kon1 Rodzaje i źródła zagrożeń dla systemów teleinformatycznych. Metody i środki ochrony. Kon3 Autoryzacja i uwierzytelnianie w systemach komputerowych. Standardy tokenów tożsamościowych.
Celem zadania jest zaprojektowanie, zaimplementowanie i przetestowanie bezpiecznego mechanizmu uwierzytelniania i autoryzacji użytkowników opartego na standardzie JSON Web Token (JWT, RFC 7519) w architekturze mikroserwisowej. Studenci analizują typowe błędy implementacyjne i podatności tokenów JWT: atak degradacji algorytmu (Alg: None Attack), atak zamiany klucza (Key Confusion Attack - próba weryfikacji tokena RS256 za pomocą klucza publicznego traktowanego jako symetryczny sekret HMAC), brak weryfikacji daty ważności (claim exp) oraz fałszowanie claims (roli, uprawnień, tożsamości).
W części praktycznej studenci implementują asymetryczny schemat podpisywania tokenów (RS256 lub ES256) z wykorzystaniem pary kluczy asymetrycznych (klucz prywatny w posiadaniu serwera autoryzacji, klucz publiczny dystrybuowany do serwisów weryfikujących), konfigurują bezpieczny model podwójnego tokena (krótkotrwały Access Token o czasie życia 15 minut + bezpieczny Refresh Token przechowywany w ciasteczku HttpOnly) oraz mechanizm unieważniania tokenów (Token Revocation List / Blacklist w Redis).
Firma z branży IoT SmartHome Polska S.A. oferuje platformę do zdalnego sterowania urządzeniami automatyki domowej (kamery, zamki do drzwi, termostaty). Do autoryzacji żądań z aplikacji mobilnych wykorzystywano tokeny JWT generowane przez serwer autoryzacyjny i weryfikowane przez kilkanaście rozproszonych mikroserwisów.
W trakcie audytu bezpieczeństwa wykazano, że biblioteka parsująca tokeny w mikroserwisie sterowania zamkami smart-lock akceptowała tokeny z nagłówkiem "alg": "none" bez weryfikacji sygnatury. Umożliwiło to audytorom wygenerowanie sfałszowanego tokena z rolą "admin" i otworzenie zamków w dowolnym mieszkaniu klienta bez znajomości jakiegokolwiek hasła.
Dodatkowo w pozostałych serwisach stosowano algorytm symetryczny HS256, a sekret HMAC był zakodowany na stałe w kodzie źródłowym aplikacji (Hardcoded Secret), do którego dostęp mieli wszyscy programiści i stażyści. Tokeny miały ustawiony czas ważności na 365 dni i nie istniał żaden mechanizm ich unieważnienia w przypadku kradzieży smartfona.
Zarząd SmartHome Polska nakazał natychmiastową przebudowę całego systemu autoryzacji zgodnie z najlepszymi praktykami OWASP i RFC 8725 (JSON Web Token Best Current Practices).
Grupa laboratoryjna musi zaimplementować bezpieczny serwer uwierzytelniający: wygenerować 2048-bitową parę kluczy RSA, wdrożyć podpisywanie algorytmem RS256, zablokować możliwość użycia algorytmu 'none' i nieautoryzowanych kluczy, wprowadzić rozdzielenie na Access Token (15 min) i Refresh Token (7 dni) oraz stworzyć mechanizm czarnej listy unieważnionych tokenów w bazie Redis.
Najważniejszą zasadą bezpiecznej weryfikacji tokenów JWT jest bezwzględne wymuszenie dozwolonych algorytmów w parametrach biblioteki weryfikującej (np. `algorithms=['RS256']`). Nigdy nie pozwalaj bibliotece na dynamiczne decydowanie o użytym algorytmie na podstawie pola `alg` znajdującego się w nagłówku tokena przysłanego przez klienta, gdyż to właśnie ten mechanizm był źródłem słynnych podatności 'Alg: None' oraz 'HMAC Key Confusion'.
Poniżej przedstawiono implementację bezpiecznego podpisywania i weryfikacji tokena JWT w języku Python za pomocą biblioteki PyJWT:
Próba sfałszowania uprawnień przez napastnika narzędziem jwt_tool kończy się błędem weryfikacji sygnatury:
Sprawdzenie unieważnienia tokena na czarnej liście w bazie Redis za pomocą redis-cli:
Poniższa lista zawiera propozycje zagadnień i wniosków technicznych, które warto uwzględnić w sprawozdaniu z tego zadania:
Przykładowe wnioski (wzór do sprawozdania): Przeprowadzone testy dowiodły, że zastąpienie symetrycznego algorytmu HS256 podpisem asymetrycznym RS256/ES256 eliminuje ryzyko kompromitacji całej infrastruktury mikroserwisowej w przypadku przejęcia jednego z serwerów zasobów. Klucz prywatny niezbędny do wystawiania tokenów pozostaje ściśle odizolowany w usłudze Identity Providera, podczas gdy serwisy brzegowe pobierają wyłącznie klucz publiczny w formacie JWKS. Weryfikacja oświadczeń czasowych 'exp' oraz tożsamości odbiorcy 'aud' skutecznie zabezpieczyła interfejs API przed atakami powtórzeniowymi i użyciem tokenów w nieautoryzowanych kontekstach aplikacyjnych. Wprowadzenie krótkiego czasu życia tokena dostępu (15 minut) powiązanego z rotacją tokenów odświeżających uniemożliwiło długotrwałe nadużycie przechwyconych poświadczeń. Wyeliminowanie możliwości negocjacji algorytmu 'none' oraz blokada zamiany kluczy uczyniły implementację w pełni zgodną ze standardem RFC 8725.
Kon1 Rodzaje i źródła zagrożeń dla systemów teleinformatycznych. Metody i środki ochrony. Kon2 Warunki zapewnienia autentyczności i nienaruszalności informacji. Ochrona przed fałszowaniem żądań.
Celem zadania jest zbadanie mechanizmu ataku fałszowania żądań międzywitrynowych (Cross-Site Request Forgery - CSRF) oraz zaprojektowanie i wdrożenie wielowarstwowej architektury obronnej dla bankowego panelu przelewów internetowych. Studenci analizują, w jaki sposób złośliwa witryna internetowa odwiedzana przez zalogowanego użytkownika może wykorzystać automatyczne dołączanie ciasteczek sesyjnych przez przeglądarkę do wymuszenia wykonania nieautoryzowanej transakcji finansowej lub zmiany hasła.
W części programistycznej studenci implementują i porównują dwa wiodące wzorce obronne: wzorzec tokena synchronizującego (Synchronizer Token Pattern / Anti-CSRF Token) generowanego po stronie serwera i wstrzykiwanego do formularzy HTML oraz wzorzec podwójnego składania ciasteczek (Double Submit Cookie Pattern) dedykowany dla nowoczesnych aplikacji typu Single Page Application (SPA). Zadanie obejmuje również konfigurację atrybutu ciasteczka SameSite oraz weryfikację nagłówków Origin i Referer.
Spółdzielczy Bank Rolny w Grójcu udostępnia rolnikom i lokalnym przedsiębiorcom portal bankowości elektronicznej. W panelu zlecania przelewów zastosowano formularz wysyłający żądanie POST pod adres /transakcje/przelew z parametrami: numer_konta oraz kwota. Serwer weryfikował tożsamość klienta wyłącznie na podstawie ciasteczka sesyjnego przesłanego w nagłówku Cookie.
Podczas kampanii phishingowej przestępcy rozesłali do klientów banku maile z linkiem do fałszywej strony z rzekomymi dopłatami rolniczymi. Złośliwa strona zawierała ukryty formularz HTML z kodem JavaScript automatycznie wysyłającym żądanie POST do serwera banku (atak CSRF): document.forms[0].submit(). Gdy rolnik zalogowany w sąsiedniej karcie do banku otworzył złośliwy link, przeglądarka automatycznie dołączyła aktywne ciasteczko sesyjne, a bank bez wiedzy użytkownika zrealizował przelew na kwotę 10 000 zł na rachunek przestępcy.
Incydent doprowadził do utraty środków przez kilkunastu rolników i wywołał kryzys wizerunkowy banku. Audyt zlecony przez KNF wykazał brak jakichkolwiek tokenów zabezpieczających formularze przed CSRF oraz brak konfiguracji atrybutu SameSite.
Zarząd banku powołał grupę laboratoryjną w celu natychmiastowego zaprojektowania i wdrożenia zabezpieczeń eliminujących ataki CSRF we wszystkich formularzach i endpointach API platformy.
Zadaniem studentów jest odtworzenie ataku CSRF w środowisku testowym (stworzenie złośliwej strony wymuszającej przelew), wdrożenie mechanizmu losowych kryptograficznie tokenów Anti-CSRF powiązanych z sesją użytkownika, wdrożenie ciasteczek SameSite=Strict oraz zaimplementowanie middleware sprawdzającego nagłówki Origin i Referer.
Warto pamiętać, że chociaż atrybut `SameSite=Strict` na ciasteczkach stanowi potężną pierwszą linię obrony przed CSRF, to sam w sobie nie zastępuje klasycznych tokenów Anti-CSRF. W architekturze bezpieczeństwa bankowego obowiązuje zasada obrony w głąb (Defense in Depth): aplikacja musi stosować kryptograficzne tokeny CSRF (Synchronizer Token Pattern) dla każdej operacji modyfikującej stan oraz dodatkowo zabezpieczać ciasteczka atrybutem `SameSite`.
Poniżej przedstawiono implementację ochrony przed CSRF z generowaniem i weryfikacją kryptograficznego tokena w języku PHP:
Złośliwy kod strony atakującej (PoC CSRF) wykorzystujący automatyczne zatwierdzenie formularza w JavaScript:
Odpowiedź serwera bankowego po wdrożeniu ochrony CSRF Token Guard:
Poniższa lista zawiera propozycje zagadnień i wniosków technicznych, które warto uwzględnić w sprawozdaniu z tego zadania:
Przykładowe wnioski (wzór do sprawozdania): Symulacja ataku CSRF wykazała, że sama obecność autoryzacyjnych ciasteczek sesyjnych w przeglądarce ofiary pozwala obcej witrynie na potajemne wywołanie nieautoryzowanego przelewu środków. Zaimplementowanie wzorca Synchronizer Token Pattern powiązanego z kryptograficznie bezpieczną sesją użytkownika całkowicie zneutralizowało podatność formularza transakcyjnego. Każde żądanie modyfikujące stan aplikacji zostało uwarunkowane obecnością unikalnego tokenu generowanego z użyciem CSPRNG, którego złośliwa domena nie jest w stanie odczytać z uwagi na politykę Same-Origin Policy. W aplikacjach SPA wdrożenie ciasteczka z flagą SameSite=Strict w połączeniu z automatyczną weryfikacją nagłówka Origin stworzyło wielowarstwową barierę ochronną. Przeprowadzone testy potwierdziły pełną zgodność zrealizowanego zabezpieczenia z wytycznymi OWASP Cross-Site Request Forgery Prevention Cheat Sheet.
Kon1 Rodzaje i źródła zagrożeń dla systemów teleinformatycznych. Metody i środki ochrony. Kon2 Warunki zapewnienia integralności i dostępności informacji. Bezpieczeństwo uploadu plików.
Celem zadania jest zaprojektowanie, zaimplementowanie i przetestowanie kompleksowego potoku bezpiecznego przesyłania plików przez użytkowników (Secure File Upload Pipeline) w portalu internetowym. Studenci badają mechanizmy powstawania i eksploatacji krytycznych podatności związanych z przesyłaniem niebezpiecznych plików (Unrestricted File Upload), umożliwiających wgranie skryptu powłoki webowej (Web Shell w PHP/JSP) i uzyskanie zdalnego wykonania kodu na serwerze (Remote Code Execution - RCE).
W ramach ćwiczenia studenci wdrażają wielowarstwowe mechanizmy obronne: rygorystyczną białą listę rozszerzeń (Whitelist), weryfikację nagłówków MIME, inspekcję magicznych bajtów pliku (Magic Bytes / File Signatures), losową zmianę nazwy pliku na identyfikator UUID v4, skanowanie antywirusowe w locie za pomocą darmowego silnika ClamAV, a także przechowywanie przesłanych plików całkowicie poza katalogiem publicznym serwera WWW (Webroot) z blokadą wykonywania skryptów.
Internetowe Biuro Karier Uczelni 'TalentHunter' umożliwia studentom i absolwentom rejestrację profilu zawodowego oraz przesyłanie dokumentów aplikacyjnych (CV, certyfikaty, listy motywacyjne) w formatach PDF i DOCX. W formularzu przesyłania plików zastosowano jedynie prostą weryfikację rozszerzenia po stronie klienta w języku JavaScript oraz sprawdzanie nagłówka Content-Type przesłanego przez przeglądarkę.
Podczas audytu bezpieczeństwa testerzy przechwycili żądanie przesyłania pliku w programie Burp Suite, zmodyfikowali nazwę pliku z cv.pdf na webshell.php, a w treści wstrzyknęli prosty skrypt powłoki <?php system($_GET['cmd']); ?>. Serwer zapisał plik bezpośrednio w publicznym katalogu /var/www/html/uploads/webshell.php. Testerzy, odpytując adres URL https://biurokarier.local/uploads/webshell.php?cmd=id, uzyskali pełny dostęp do powłoki systemu operacyjnego z uprawnieniami konta www-data.
Co więcej, napastnik mógł za pośrednictwem Web Shella odczytać pliki konfiguracyjne bazy danych, pobrać dane osobowe tysięcy studentów oraz wykorzystać serwer jako platformę do rozsyłania spamu i ataków na inne jednostki uczelni.
Władze uczelni nakazały natychmiastowe zablokowanie modułu uploadu i stworzenie od podstaw bezpiecznego mechanizmu obsługi przesyłanych plików, wykluczającego możliwość wgrania i wykonania jakiegokolwiek złośliwego kodu.
Zadaniem grupy laboratoryjnej jest zaimplementowanie bezpiecznego potoku uploadu: usunięcie publicznego dostępu do katalogu uploads, weryfikacja magicznych bajtów plików (File Signature), integracja z demonem antywirusowym ClamAV (clamdscan), losowa zmiana nazwy każdego pliku oraz konfiguracja serwera Nginx blokująca wykonywanie skryptów w katalogach statycznych.
Nigdy nie pozwalaj na bezpośredni dostęp przeglądarek do katalogu, w którym zapisywane są pliki przesyłane przez użytkowników. Pliki powinny znajdować się poza strukturą dokumentów serwera WWW (`outside webroot`), a ich pobieranie powinno odbywać się wyłącznie przez dedykowany skrypt pośredniczący, który wymusza pobranie pliku jako załącznik (`Content-Disposition: attachment`), co uniemożliwia przeglądarce wykonanie złośliwego kodu HTML lub SVG w kontekście domeny.
Poniżej przedstawiono bezpieczną procedurę weryfikacji magicznych bajtów i skanowania ClamAV w języku PHP:
Wykrycie złośliwego pliku testowego EICAR przez silnik ClamAV z poziomu wiersza poleceń:
Konfiguracja Nginx gwarantująca brak możliwości wykonania kodu PHP w katalogu pobierania:
Poniższa lista zawiera propozycje zagadnień i wniosków technicznych, które warto uwzględnić w sprawozdaniu z tego zadania:
Przykładowe wnioski (wzór do sprawozdania): Praktyczna analiza podatności modułu uploadu wykazała, że poleganie wyłącznie na rozszerzeniu pliku lub nagłówku Content-Type pozwala na łatwe umieszczenie skryptu PHP Web Shell pod postacią rzekomego pliku JPEG. Wdrożenie inspekcji sygnatury binarnej (Magic Numbers) w połączeniu z rygorystyczną białą listą dozwolonych typów MIME skutecznie udaremniło próby oszukania walidatora. Przeniesienie docelowego katalogu składowania plików całkowicie poza katalog Document Root oraz wyłączenie praw do wykonywania kodu uniemożliwiło bezpośrednie wywołanie przesłanego kodu przez przeglądarkę. Każdy plik przed trwałym zapisem został poddany inspekcji antywirusowej przez demona ClamAV, a jego nazwa zastąpiona losowym ciągiem UUIDv4 pozbawionym metadanych EXIF. Wdrożony potok stanowi wzorcową realizację zaleceń OWASP File Upload Security i całkowicie eliminuje ryzyko wrogiego przejęcia serwera.
Kon1 Rodzaje i źródła zagrożeń dla systemów teleinformatycznych. Metody i środki ochrony. Kon4 Bezpieczeństwo protokołów komunikacyjnych i sieci komputerowych. Wirtualizacja i konteneryzacja.
Celem zadania jest zaprojektowanie, zaimplementowanie i przetestowanie zaawansowanej architektury utwardzonej konteneryzacji serwisu internetowego w środowisku Docker, minimalizującej ryzyko ucieczki z kontenera (Container Breakout) do systemu gospodarza (Host OS). Studenci badają mechanizmy izolacji jądra systemu Linux stanowiące fundament kontenerów: przestrzenie nazw (Namespaces), grupy kontrolne (Cgroups), filtry wywołań systemowych (Seccomp) oraz obowiązkową kontrolę dostępu (AppArmor / SELinux).
W części praktycznej studenci konfigurują demona Docker w trybie bezuprawnieniowym (Rootless Mode), tworzą utwardzone obrazy kontenerów bazujące na dystrybucji minimalnej (Distroless / Alpine), wymuszają system plików tylko do odczytu (Read-Only Root Filesystem), blokują eskalację uprawnień (no-new-privileges) oraz odrzucają wszystkie zbędne zdolności jądra (Drop All Capabilities). Zadanie uczy również audytowania obrazów pod kątem podatności CVE za pomocą narzędzia Trivy.
Firma fintechowa PayGate Polska Sp. z o.o. przetwarza transakcje płatnicze za pośrednictwem mikrousług uruchomionych w kontenerach Docker. W trakcie audytu bezpieczeństwa wykazano, że wszystkie kontenery działały z domyślną konfiguracją Dockera: proces serwera aplikacji wewnątrz kontenera działał z uprawnieniami użytkownika root (uid=0), system plików kontenera był w pełni zapisywalny, a kontener posiadał zamontowany socket Dockera (/var/run/docker.sock) w celu automatyzacji wdrożeń.
Audytorzy zademonstrowali krytyczny atak ucieczki z kontenera: wykorzystując drobną podatność w aplikacji webowej, uzyskali dostęp do powłoki w kontenerze, a następnie za pośrednictwem otwartego gniazda /var/run/docker.sock wydali polecenie uruchomienia nowego kontenera uprzywilejowanego z zamontowanym głównym systemem plików hosta (docker run -v /:/host). W niespełna minutę audytorzy uzyskali pełną kontrolę nad fizycznym serwerem dedykowanym w centrum danych.
Incydent ten uświadomił zarządowi, że domyślny Docker nie zapewnia wystarczającej izolacji dla krytycznych systemów finansowych podlegających wymogom standardu PCI DSS v4.0.
Zarząd powierzył grupie laboratoryjnej zadanie całkowitego utwardzenia infrastruktury konteneryzacji. Należy wdrożyć środowisko Docker Rootless, przepisać pliki Dockerfile w celu wyeliminowania konta root na rzecz użytkownika nieuprzywilejowanego (UID 10001), zablokować możliwość modyfikacji systemu plików kontenera w czasie działania oraz zastosować rygorystyczne profile seccomp i AppArmor.
Sprawozdanie musi zawierać zoptymalizowany plik Dockerfile, konfigurację docker-compose.yml z parametrami bezpieczeństwa, raport ze skanera Trivy oraz dowody zablokowania prób modyfikacji plików i wywołań systemowych wewnątrz kontenera.
Wdrożenie flagi `--read-only` na kontenerze jest jednym z najskuteczniejszych środków ochrony przed atakami typu Web Shell i złośliwym oprogramowaniem. Nawet jeśli napastnik znajdzie lukę w kodzie aplikacji i spróbuje pobrać narzędzie exploitujące lub zmodyfikować kod serwera, jądro systemu natychmiast zablokuje operację zapisu błędem `Read-only file system`. Aplikacja powinna zapisywać dane wyłącznie do dedykowanych wolumenów lub do pamięci tymczasowej `tmpfs`.
Poniżej przedstawiono wzorcowy, utwardzony plik `docker-compose.yml` spełniający wytyczne CIS Benchmark:
Próba zapisu pliku wewnątrz uruchomionego kontenera kończy się błędem jądra:
Wynik skanowania bezpieczeństwa obrazu kontenera narzędziem Trivy:
Poniższa lista zawiera propozycje zagadnień i wniosków technicznych, które warto uwzględnić w sprawozdaniu z tego zadania:
Przykładowe wnioski (wzór do sprawozdania): Wdrożenie utwardzonej konfiguracji konteneryzacji całkowicie wyeliminowało ryzyko ucieczki do systemu gospodarza (Host Breakout) po potencjalnej kompromitacji serwisu WWW. Zastąpienie domyślnego użytkownika root kontem nieuprzywilejowanym o UID 10001 uniemożliwiło wykonywanie operacji administracyjnych i przejęcie kontroli nad demonem kontenera. Zastosowanie flagi read-only w połączeniu z odrzuceniem wszystkich zdolności jądra (--cap-drop=ALL) skutecznie zablokowało próby pobrania i uruchomienia narzędzi exploitujących na systemie plików kontenera. Ograniczenie wywołań systemowych profilem Seccomp oraz precyzyjna polityka AppArmor odcięły napastnikowi dostęp do krytycznych zasobów jądra Linux. Automatyczne skanowanie obrazów za pomocą narzędzia Trivy pozwoliło na wyeliminowanie podatności CVE w bibliotekach bazowych, spełniając wymogi CIS Docker Benchmark.
Kon1 Rodzaje i źródła zagrożeń dla systemów teleinformatycznych. Metody i środki ochrony. Kon2 Warunki zapewnienia poufności i integralności informacji. Metodyka audytu oprogramowania.
Celem zadania jest przeprowadzenie całościowego, metodycznego audytu bezpieczeństwa aplikacji webowej przy użyciu darmowego, otwartoźródłowego narzędzia OWASP Zed Attack Proxy (OWASP ZAP), stanowiącego standard branżowy w automatycznym i półautomatycznym testowaniu aplikacji internetowych (DAST - Dynamic Application Security Testing). Studenci poznają dwa komplementarne podejścia audytorskie: pasywne skanowanie ruchu (Passive Scanning) analizujące nagłówki i odpowiedzi serwera bez generowania nowych pakietów oraz aktywne skanowanie podatności (Active Scanning) symulujące realne ataki.
W ramach laboratorium studenci konfigurują mechanizmy uwierzytelniania w ZAP (Session Management / Form-based Authentication), mapują strukturę aplikacji za pomocą tradycyjnego spidera i Ajax Spidera (dla aplikacji SPA renderowanych w JavaScript), analizują wykryte podatności według standardu CWE i OWASP Top 10, eliminują fałszywe alarmy (False Positives) oraz generują profesjonalny, techniczny raport audytorski spełniający wymogi formalne odbioru systemów informatycznych.
Wojewódzki Urząd Pracy w Rzeszowie wdraża nowy portal elektronicznych wniosków dotacyjnych dla przedsiębiorców 'DotacjePodkarpacie'. Zgodnie z zapisami umowy o dofinansowanie ze środków Unii Europejskiej, przed oficjalnym uruchomieniem produkcyjnym system musi przejść niezależny audyt bezpieczeństwa DAST poświadczony raportem z darmowego narzędzia audytorskiego akredytowanego przez społeczność Open Source.
Dotychczasowe testy manualne przeprowadzone przez firmę programistyczną nie wykazały krytycznych błędów, jednakże wstępne podłączenie skanera OWASP ZAP w trybie pasywnym ujawniło brak podstawowych nagłówków ochronnych, przesyłanie wrażliwych tokenów w parametrach GET oraz podatność na ataki typu Open Redirect w module logowania przez Profil Zaufany.
Kierownik projektu ze strony urzędu wstrzymał odbiór końcowy systemu do czasu dostarczenia formalnego raportu z pełnego skanowania podatności (obejmującego strefy dostępne po zalogowaniu wnioskodawcy) oraz wykazania, że wszystkie podatności o poziomie High i Medium zostały całkowicie wyeliminowane lub opatrzone akceptacją ryzyka.
Grupa laboratoryjna przyjmuje rolę niezależnego zespołu audytorów bezpieczeństwa. Zadaniem studentów jest skonfigurowanie środowiska OWASP ZAP, przeprowadzenie pełnego rekonesansu aplikacji testowej (tradycyjny spider + Ajax Spider z przeglądarką headless), skonfigurowanie uwierzytelniania sesyjnego, wykonanie skanowania aktywnego z dostrojonymi regułami, weryfikacja wykrytych alertów oraz wygenerowanie formalnego raportu audytowego.
Sprawozdanie musi zawierać profil konfiguracji ZAP, omówienie zidentyfikowanych podatności z podaniem ich identyfikatorów CWE i WASC, analizę przynajmniej jednego potwierdzonego błędu (wraz z wektorem żądania i odpowiedzi HTTP) oraz zredagowane rekomendacje naprawcze dla programistów.
Podczas przeprowadzania skanowania aktywnego za pomocą narzędzia OWASP ZAP krytycznie ważne jest zdefiniowanie w kontekście adresu wylogowania (`/logout`) jako adresu wykluczonego ze skanowania (`Exclude from Context`). W przeciwnym razie skaner, testując parametry na stronie wylogowania, natychmiast zakończy sesję uwierzytelnioną i całe dalsze skanowanie stref chronionych hasłem będzie bezużyteczne (będzie skanować wyłącznie stronę logowania).
Poniżej przedstawiono przykładowe uruchomienie zautomatyzowanego skanowania OWASP ZAP Baseline Scan za pomocą oficjalnego kontenera Docker:
Weryfikacja podatności Open Redirect wykrytej przez ZAP w konsoli cURL:
Inspekcja podsumowania alertów bezpieczeństwa w raporcie JSON wygenerowanym przez OWASP ZAP:
Poniższa lista zawiera propozycje zagadnień i wniosków technicznych, które warto uwzględnić w sprawozdaniu z tego zadania:
Przykładowe wnioski (wzór do sprawozdania): Kompleksowy audyt bezpieczeństwa przeprowadzony za pomocą narzędzia OWASP ZAP pozwolił na zidentyfikowanie krytycznych podatności aplikacyjnych przed oficjalnym wdrożeniem produkcyjnym portalu. Połączenie tradycyjnego pająka z mechanizmem Ajax Spider umożliwiło pełne zindeksowanie dynamicznych tras w aplikacji jednostronicowej oraz zmapowanie chronionych punktów końcowych API po uwierzytelnieniu sesyjnym. Skanowanie aktywne wykazało podatność na otwarte przekierowania (Open Redirect, CWE-601) w module logowania oraz brak nagłówków chroniących przed atakami Clickjacking. Szczegółowa analiza każdego alertu pozwoliła na wyeliminowanie fałszywych trafień w skanerze podatności SQLi i precyzyjne sformułowanie zaleceń naprawczych w oparciu o taksonomię OWASP Top 10. Wygenerowany raport techniczny stanowił formalną podstawę do wdrożenia poprawek w kodzie źródłowym i pomyślnego odbioru systemu przez zamawiającego.