Kolejny rodzaj ataku na strony internetowe to Web Parameter Tampering. Jest to obok SQL Injection oraz XSS jeden z najpopularniejszych typów ataków na strony i aplikacje internetowe. Jest on łatwy do przeprowadzenia a jego zasada działania jest bardzo prosta.

Manipulowanie parametrami sieciowymi (ang. Web Parameter Tampering) polega na wysyłaniu do serwera zmodyfikowanych po stronie klienta parametrów sieciowych w taki sposób w jaki nie przewidzieli tego twórcy aplikacji.

Jeżeli zrozumiemy, że użytkownicy mogą modyfikować:

  • adresy URL i parametry GET widoczne w pasku adresu,
  • wartości pól POST w ukrytych polach formularzy,
  • wartości w skryptach JS,
  • zawartość plików Cookie

to atak tego typu staje się trywialny do zrozumienia i zastosowania w praktyce.

Gdzie dochodzi do ataków Web Parameter Tampering?

W dużym skrócie, wszędzie. Gdziekolwiek otrzymujemy dane na podstawie parametrów GET, POST, używamy ciasteczek, AJAXa lub wysyłamy jakieś dane do serwera z formularzy, strona jest podatna na tego typu atak.

Web Parameter Tampring jest często wykorzystywany w przypadków ataków XSS i SQL Injection. To właśnie za pomocą modyfikacji parametrów w sposób, który nie został przewidziany przez twórcę aplikacji dochodzi do wysyłania nienaturalnych zapytań w wyniku czego atakujący ma dostęp do danych, które nie są dla niego przeznaczone.

Przykłady manipulacji parametrami sieciowymi

Aby stworzyć listę działań zaradczych, w tym punkcie wypiszmy przykłady ataków z wykorzystaniem Web Paramter Tampering.

Modyfikacja parametrów pól formularza

Jednym z najprostszych przykładów ataku tego typu jest modyfikacja wartości i atrybutów w polach formularzy. Edycję elementów w konsoli przeglądarki można z powodzeniem uznać za typową próbę ataku.

Takie dane mogą nie tylko zostać zmodyfikowane aby wpłynąć na aplikację ale mogą być zmodyfikowane w przypadku ataków Man-In-The-Middle.

Załóżmy, że mamy rejestrację użytkownika w której wybieramy typ konta. Użytkownik podczas rejestracji wybiera rodzaj zakładanego konta. Wyboru dokonuje poprzez selekcję opcji w standardowym polu select:

<select name="account-type">
<option value="2">Klient</option>
<option value="3">Gość</option>
<option value="4">Reklamodawca</option>
</select>

Aplikacja przyjmuje wartości z pola formularza i tworzy konto. Jeżeli dane administratorów są przechowywane w tej samej tabeli a aplikacja nie ma odpowiednich zabezpieczeń, użytkownik, który dokonuje rejestracji może po prostu zmodyfikować wartość w value na 1 lub 0, które będzie określać poziom administratora.

Modyfikacja ukrytych pól formularza

W niektórych aplikacjach wykorzystuje się ukryte pola formularza do zapisania stanów różnych parametrów. Stosuje je większość sklepów internetowych w miejscu obok przycisku „Dodaj do koszyka”. Złośliwy użytkownik może próbować zmienić wartości w sposób nieprzewidywany przez twórców tego systemu. Ukryte pole w zależności od sytuacji może przechowywać ID koszyka, cenę lub wybrane wartości w poprzednich krokach składania zamówienia.

Przykładowe ukryte pola w popularnym sklepie internetowym.

Ukryte pola są często wykorzystywane w bramkach płatności obok przycisku „Płacę” lub „Zapłać teraz”. Jeżeli aplikacja nie używa dodatkowych zabezpieczeń, (np. podpisywania wartości specjalnym haszem, który powstaje na podstawie pewnych obliczeń i nieodwracalnych działań matematycznych) ukryte pola formularza można modyfikować zupełnie tak, jakby były wyświetlone na stronie i w pełni edytowalne przez użytkownika.

Modyfikacja adresów URL

Modyfikacja adresów URL może doprowadzić do wszelkiego rodzaju wycieków danych lub nieautoryzowanego dostępu do plików. Jeżeli parametry nie są dodatkowo sprawdzane pod kątem integralności lub nie jest sprawdzana czy dana strona powinna wyświetlić się temu konkretnemu użytkownikowi, za pomocą parametrów URL mamy dostęp do dowolnej strony portalu.

Wyobraźmy sobie aplikację webową, która pozwala edytować szczegóły profilu użytkownika. Strona z ustawieniami wygląda tak:

/profile/edit/id=1024

Wystarczy teraz zmienić wartość parametru id np. na 1023 i jeżeli aplikacja nie będzie miała odpowiednich zabezpieczeń, będziemy mogli edytować cudzy profil.

Tego typu atak jest w stanie przeprowadzić bardzo początkujący programista, pamiętam jak po pierwszych zajęciach z PHP (po poznaniu metod GET i POST) przeglądałem cudze zamówienia w sklepach i we wszelkiego rodzaju panelach administracyjnych.

Jak zabezpieczyć się przed atakiem Web Parameter Tampering?

Najprostszą metodą radzenia sobie z Web Parameter Tampering jest zasada aby kiedy to możliwe, nie pobierać ID z ukrytych pól, ciasteczek ani z parametrów URL. Do takich celów powstały sesje. Jeżeli odczyt lub modyfikacja wymaga odpowiedniego poziomu dostępu lub stanu zalogowania, sprawdźmy czy użytkownik faktycznie jest tym za kogo się podaje:

if(isset($_SESSION["current_user_id"])){
/* Operacja, która następuje po sprawdzeniu czy użytkownik jest zalogowany */
}

W przypadku modyfikacji w bazie danych, róbmy bardziej szczegółowe klauzule WHERE, których część parametrów pochodzi z formularza a część z sesji:

Zamiast:

DELETE FROM posts WHERE post = $post_id;

Zróbmy bardziej szczegółowe zapytanie:

DELETE FROM posts WHERE post = $post_id AND author = $author_id;

W drugim zapytaniu zmienna author_id pochodzi z sesji a nie z URL wysyłanego przez formularz.

Jeżeli użycie sesji w danym momencie byłyby zbyt kłopotliwe należy weryfikować integralność parametrów za pomocą dodatkowych haszy, które sprawdzają czy parametry nie zostały zmienione w nieprzewidzialny sposób. Najczęściej działa to tak, że wartości z poszczególnych pól są konkatenowane z jakimś prywatnym kluczem przechowywanym po stronie aplikacji. Na tak stworzonym ciągu znaków wykonywana jest funkcja skrótu. Po przesłaniu formularza z dodatkowym polem lub wywołaniu adresu URL z dodatkowym parametrem, aplikacja weryfikuje czy dodatkowy podpis w postaci hasha pasuje do przesyłanych danych. Atakującemu nie uda się podrobić podpisu bo nie zna prywatnego klucza i funkcja skrótu nie przejdzie weryfikacji.

$signature = hash("sha256", $store_id.$payment_value.$order_id.$private_key);

Praktycznym przykładem tej techniki może być fragment dokumentacji integracji z PayU, gdzie w formie instrukcji dla deweloperów pokazano jak dokonać całej procedury:

https://developers.payu.com/pl/restapi.html#algorithm_sign_form

Podsumowanie

Web Paramater Tampering to najbardziej podstawowy atak na aplikacje webowe jaki można przeprowadzić. Zmiana liczby w adresie URL może doprowadzić do tego że atakujący widzi cudze dane a w skrajnych przypadkach ma dostęp do ich modyfikacji. Aplikacja nie może bezgranicznie ufać wszystkim parametrom jakie są wysyłane przez formularz lub żądania URL. Należy weryfikować dane i korzystać z dodatkowych sygnatur w dodatkowych polach.

Źródła

Oceń artykuł na temat: Manipulowanie parametrami – (Web Parameter Tampering)
Średnia : 4.8 , Maksymalnie : 5 , Głosów : 4