Ataki XSS i BruteForce
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.
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.
Potencjalne skutki ataku XSS
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.
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.
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.
Stored XSS
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.
Schemat ataku DOM
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:
znacząco wzmacniają ochronę przed XSS.
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:
& → &
< → <
> → >
" → “
' → ‘
  →
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.:
Przykłady ataków XSS
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.
W jaki sposób skrócić czas łamania hasła?
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.
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.
Źródła:
https://www.geeksforgeeks.org/understanding-stored-xss-in-depth/
https://www.blackduck.com/blog/why-cross-site-scripting-still-matters.html
https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
https://www.hivesystems.com/blog/are-your-passwords-in-the-green
https://www.techtarget.com/whatis/definition/rainbow-table
https://google-gruyere.appspot.com/