2023-05-31

Ataki XSS, co to takiego, jak wykonać taki atak i jak się przed nim bronić?

0

Atak typu XSS (Cross-Site Scripting) to jedna z najczęstszych technik wykorzystywanych przez hakerów, aby uzyskać dostęp do danych użytkowników i naruszyć bezpieczeństwo systemów informatycznych. Atak XSS polega na umieszczeniu złośliwego skryptu na stronie internetowej, który pozwala na wykradnięcie informacji z przeglądarki użytkownika lub przeprowadzenie innych działań na jego komputerze, umożliwia to atakującemu wykradnięcie np. plików cookie co pozwala na nieautoryzowane zalogowanie się na przykład do panelu admina.

Jak przeprowadzić atak XSS na podatną stronę? Istnieją różne sposoby, ale jednym z najprostszych jest umieszczenie złośliwego kodu JavaScript w formularzu lub na stronie, który zostanie wykonany po wprowadzeniu przez użytkownika danych. Na przykład, haker może dodać złośliwy skrypt do pola „komentarz” na stronie internetowej, który zostanie wykonany po wprowadzeniu przez użytkownika danych i umożliwi hakerowi uzyskanie dostępu do przeglądarki użytkownika lub wykradnięcie jego danych.

A więc jak przeprowadzić taki atak (oczywiście w celach penetracyjnych własnej aplikacji)?
Po pierwsze i najważniejsze, potrzebujemy podatnej na taki atak strony. W tym celu przygotowałem prostą aplikację webową na której dodaje się notatki. Aby dodać taki wpis należy wpisać tytuł i treść notatki. Notatki zapisywane są w folderze notatki. Oto kod:
index.php

<!DOCTYPE html>
<html>
<head>
	<title>Moje notatki</title>
</head>
<body>
	<h1>Moje notatki</h1>
	<form method="post" action="dodaj.php">
		<label for="tytul">Tytuł:</label><br>
		<input type="text" id="tytul" name="tytul"><br>
		<label for="tresc">Treść:</label><br>
		<textarea id="tresc" name="tresc"></textarea><br>
		<input type="submit" value="Dodaj notatkę">
	</form>
	<hr>
	<h2>Wszystkie notatki</h2>
	<?php
	$notatki = glob("notatki/*.txt");
	foreach ($notatki as $notatka) {
		$tytul = basename($notatka, ".txt");
		$tresc = file_get_contents($notatka);
		echo "<h3>$tytul</h3>";
		echo "<p>$tresc</p>";
	}
	?>
</body>
</html>

dodaj.php

<?php
$tytul = $_POST["tytul"];
$tresc = $_POST["tresc"];
$nazwa_pliku = "notatki/" . $tytul . ".txt";
file_put_contents($nazwa_pliku, $tresc);
header("Location: index.php");
?>

Wygląd przygotowanej aplikacji:

Aby zacząć przeprowadzać atak należy wpisać tytuł, a złośliwy kod JS w polu treść. Przygotowany przeze mnie kod wygląda tak:

<script>alert("atak xss");</script>

Po wejściu na stronę przez obojętnie jakiego użytkownika, spowoduje wyświetlenie u niego alertu z treścią atak xss, ponieważ notatki wyświetlają się każdemu użytkownikowi (a w jednej z notatek zapisany jest złośliwy kod JS), nie zależnie od tego kto odwiedza stronę lub kto umieścił notatkę.

Jak zabezpieczyć swoją aplikacje i użytkowników przed takimi atakami?

Wiesz już jak wykonać taki atak, aby sprawdzić własną aplikację, ale jak bronić swoją aplikacje przed takimi atakami?

  1. Po pierwsze i najważniejsze, walidacja danych wejściowych: Programiści powinni sprawdzać poprawność i rodzaj danych wejściowych, aby upewnić się, że są one zgodne z oczekiwaniami. Oznacza to, że każde wejście użytkownika powinno być poddane walidacji, a nie tylko wejścia z formularzy czy adresów URL.
  2. Powinieneś filtrować i escapować dane wejściowe: Programiści powinni dokładnie sprawdzać, jakie dane są wysyłane do przeglądarki i upewnić się, że są one odpowiednio filtrowane i escapowane. Oznacza to, że należy zapobiegać wprowadzaniu złośliwych znaków lub kodów HTML, a także uciekać przed znakami specjalnymi, takimi jak < i >, które mogą być wykorzystane przez atakujących.
  3. Użyj mechanizmów ochrony przed atakami XSS: Istnieje wiele mechanizmów, które programiści mogą zastosować, aby zabezpieczyć swoje aplikacje przed atakami XSS. Jednym z nich jest Content Security Policy (CSP), który pozwala na określenie, które zasoby (takie jak skrypty, style i obrazy) są dozwolone na stronie internetowej. Innym sposobem jest użycie frameworków, które oferują wbudowane mechanizmy zabezpieczeń przed atakami XSS.
  4. Przeprowadzaj testy bezpieczeństwa aplikacji: Programiści powinni regularnie przeprowadzać testy bezpieczeństwa swoich aplikacji, aby upewnić się, że ich zabezpieczenia są skuteczne i że aplikacja jest odporna na ataki XSS. Testy te powinny uwzględniać różne scenariusze ataków, takie jak próba wstrzyknięcia skryptu do formularza czy próba wykorzystania mechanizmu cookies.

Podsumowując, aby zabezpieczyć swoje aplikacje przed atakami typu XSS, programiści powinni stosować zasady walidacji danych wejściowych i filtracji danych wyjściowych, korzystać z mechanizmów ochrony przed atakami XSS, takich jak Content Security Policy, a także regularnie przeprowadzać testy bezpieczeństwa aplikacji. Dzięki tym krokom można zminimalizować ryzyko ataku XSS i zapewnić bezpieczeństwo aplikacji i danych użytkowników.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *