1 of 22

Ataki XSS i BruteForce

2 of 22

Co to XSS?

XSS (Cross-Site Scripting) to podatność w zabezpieczeniach aplikacji internetowych, która umożliwia atakującym wstrzyknięcie własnego kodu po stronie klienta (najczęściej JavaScript) na strony internetowe. Po załadowaniu takiego złośliwego kodu razem z oryginalną stroną w przeglądarce użytkownika hakerzy mogą uzyskać szerszy dostęp do funkcji i danych tej strony.

3 of 22

Dlaczego XSS jest ważne?

Zgodnie z danymi opracowanymi przez Black Duck Cybersecurity Research Center, 27% testów wykazało luki o wysokim stopniu krytyczności, a 6,2% ujawniły luki o krytycznym stopniu ważności. Luki umożliwiające ataki XSS konsekwentnie zajmowały 1. lub 2. miejsce wśród najwyższych ryzyk w trzech ostatnich latach testów przeprowadzonych przez Synopsys. W testach z 2022 roku 19% z wykrytych luk o wysokim ryzyku było związanych z atakami typu cross-site scripting.

4 of 22

Potencjalne skutki ataku XSS

  • przechwytywanie ciasteczek innych użytkowników,
  • wykradanie ich poufnych danych,
  • wykonywanie działań w ich imieniu,
  • przekierowywanie użytkowników na niepożądane strony,
  • wyświetlanie reklam w okienkach pop-up lub ukrytych elementach strony.

5 of 22

XSS nietrwały (Non-Persistent XSS):

W tym przypadku kod XSS jest wyświetlany tylko na kolejnej stronie dla tego samego użytkownika i nie jest przechowywany w trwałej pamięci, takiej jak baza danych. Ten typ ataku jest zazwyczaj mniej niebezpieczny, ponieważ atakujący może zobaczyć jedynie swoje własne ciasteczka lub dokonywać zmian na aktualnie otwartych stronach. Jednak tego rodzaju luki mogą prowadzić do ataków typu CSRF (Cross-Site Request Forgery). CSRF umożliwia hakerowi zmuszenie użytkownika do wykonania nieautoryzowanych działań, np. poprzez wstawienie ukrytych linków.

6 of 22

1. Atakujący tworzy link z osadzonym skryptem (<script>alert("...")</script>).

2. Użytkownik otwiera link.

3. Serwer odsyła skrypt w odpowiedzi.

4. Przeglądarka uruchamia złośliwy kod.

7 of 22

XSS trwały (Persistent XSS / Stored XSS)

W przypadku trwałego ataku XSS złośliwy kod zostaje na stałe zapisany w pamięci trwałej, takiej jak baza danych, razem z innymi danymi. Dzięki temu staje się dostępny i widoczny także dla innych użytkowników. Na przykład na stronach blogowych atakujący może dodać kod XSS w treści komentarza. Jeśli serwer nie ma odpowiednich mechanizmów walidacji lub filtrowania, kod XSS zostaje zapisany w bazie danych. Gdy inni użytkownicy otworzą zainfekowaną stronę w swojej przeglądarce, kod zostanie wykonany i umożliwi wykonanie różnych szkodliwych działań. Ten typ ataku jest bardziej niebezpieczny, ponieważ atakujący może przechwytywać ciasteczka, modyfikować zawartość strony lub podejmować inne złośliwe działania. Dodatkowym zagrożeniem jest to, że inni hakerzy mogą wykorzystać tę lukę do wykonywania nieautoryzowanych operacji w imieniu użytkowników.

8 of 22

Stored XSS

9 of 22

10 of 22

11 of 22

Atak oparty na DOM (DOM-based XSS)

DOM-based XSS to specjalny rodzaj ataku, w którym złośliwy ładunek nie jest umieszczany w odpowiedzi serwera, lecz działa w przeglądarce ofiary poprzez zmiany środowiska DOM (Document Object Model). To powoduje, że skrypt po stronie klienta działa w sposób nieoczekiwany, mimo że sama odpowiedź HTTP pozostaje bez zmian.

12 of 22

Schemat ataku DOM

  1. Tworzenie złośliwego linku przez atakującego
  2. Użytkownik otwiera złośliwy link
  3. Serwer odbiera żądanie, ale nie zawiera złośliwego kodu w odpowiedzi
  4. Kod po stronie klienta wstawia złośliwy skrypt
  5. Wykonanie złośliwego skryptu przez przeglądarkę
  6. Przekazanie poufnych danych do osoby atakującej

13 of 22

Obrona przed atakami XSS

Aby zapobiec atakom XSS, aplikacja webowa musi walidować, kodować wyjście oraz sanityzować dane wejściowe użytkownika. Frameworki, jak React czy Angular, oferują domyślne zabezpieczenia, np. escapowanie danych, ale nie eliminują całkowicie ryzyka. Dodatkowe techniki, takie jak:

  • Kodowanie wyjścia dla kontekstów HTML, JavaScript i URL,
  • Sanityzacja HTML (usuwanie złośliwych znaczników),
  • Content Security Policy (CSP) (ograniczenie źródeł skryptów),

znacząco wzmacniają ochronę przed XSS.

14 of 22

Kilka przykładów zakodowanych wartości dla konkretnych znaków

Zakodowane znaki w kontekście HTML są stosowane, aby zapobiegać ich interpretacji jako kod:

&amp → &

&lt → <

&gt → >

&quot → “

&#x27 → ‘

&nbsp →

15 of 22

Bezpieczne miejsca docelowe (Safe sinks)

W kontekście XSS, "sinks" to miejsca, gdzie zmienne są wstawiane na stronę. Wiele z nich jest bezpiecznych, ponieważ traktują zmienne jako tekst i nie wykonują ich. Aby zwiększyć bezpieczeństwo, unikaj niebezpiecznych metod, takich jak innerHTML, i stosuj bezpieczniejsze alternatywy, np.:

  • elem.textContent = dangerVariable;
  • elem.insertAdjacentText(dangerVariable);
  • elem.className = dangerVariable;

16 of 22

Przykłady ataków XSS

  1. Atak "onMouseOver" na Twitterze (2010)

  • Atak XSS na MySpace (2005)

  • Atak XSS na PayPal (2014)

17 of 22

Co to atak Brute Force?

Atak brute force to metoda łamania zabezpieczeń polegająca na automatycznym, systematycznym testowaniu różnych kombinacji danych logowania, lub kluczy szyfrowania, aż do znalezienia właściwego. Jest to technika oparta na próbach i błędach, która może być czasochłonna, ale skuteczna, jeśli nie zastosowano odpowiednich zabezpieczeń, takich jak limity prób logowania czy wymaganie odpowiednio długiego hasła.

18 of 22

19 of 22

W jaki sposób skrócić czas łamania hasła?

  • Użycie specjalistycznego oprogramowania i narzędzi
  • Wykorzystanie GPU
  • Równoległe ataki
  • Optymalizacja słowników (Dictionary Attack)
  • Zastosowanie skompromitowanych danych
  • Rainbow Tables

20 of 22

Dictionary Attack

Zamiast sprawdzać wszystkie możliwe kombinacje, atakujący mogą użyć słowników zawierających popularne hasła, imiona, daty urodzin, a także kombinacje tych słów. Ataki oparte na słowniku (dictionary attacks) są znacznie szybsze niż pełne brute force, ponieważ testują tylko najbardziej prawdopodobne hasła. Bazy danych zawierające dane słowniki można znaleźć na internecie, część z nich jest dostosowana do odpowich języków.

21 of 22

Rainbow Tables

W przypadku, gdy dane logowania są przechowywane jako hashe (np. w bazach danych), atak brute force polega na zgadywaniu haseł, przeliczaniu ich na hash i porównywaniu z zapisanym w bazie. Rainbow tables to precomputed (wcześniej wyliczone) zestawy wartości skrótów (hashy) dla wielu możliwych haseł. Dzięki temu atakujący nie musi generować każdego hasha "na bieżąco" podczas próby odgadnięcia hasła, co znacznie skraca czas potrzebny na przeprowadzenie ataku brute force.

22 of 22

Źródła: