Co może nam powiedzieć zbadanie czasu odpowiedzi serwera?

Przyjmując założenie, że serwer podejmuje działania na podstawie określonego warunku, analizujmy sytuację, w której serwer wykonuje obliczenia w zależności od wyniku tego warunku i następnie przekazuje odpowiedź użytkownikowi. W obu przypadkach, czyli zarówno gdy obliczenia są wykonywane, jak i gdy nie są, serwer zwraca odpowiedź użytkownikowi. Warto zauważyć, że w sytuacji, gdy serwer wykonuje obliczenia, zużywa określoną ilość zasobów, co prowadzi do wydłużenia czasu odpowiedzi serwera. Zwykle różnice te w czasie odpowiedzi są na tyle niewielkie, że nie są zauważalne dla użytkownika końcowego. Niemniej jednak, ujawnienie tych subtelnych różnic w czasie odpowiedzi może doprowadzić do niezamierzonego wycieku danych.

Rozważmy teraz praktyczny przykład tej sytuacji, który opiera się na procesie logowania do aplikacji. Załóżmy, że podany login jest poprawny, ale hasło jest błędne: w takim przypadku serwer może podjąć decyzję o wykonaniu obliczeń, na przykład weryfikacji hasła. Jeśli serwer przeprowadza te obliczenia, może to wymagać dodatkowych zasobów i spowodować dłuższy czas odpowiedzi w porównaniu z przypadkiem, gdy obliczenia nie są wykonywane. Chociaż różnice w czasie odpowiedzi są zazwyczaj małe, są one obecne i mogą być mierzone przez atakującego.

proces logowania istniejącego użytkownika

Ten sam proces, ale gdy także login jest błędny:

proces logowania nie istniejącego użytkownika

W przypadku tak subtelnych różnic w czasie odpowiedzi atakujący może próbować wykorzystać tę informację do wnioskowania o poprawności loginu. Na przykład, atakujący może przeprowadzić atak typu timing attack, analizując czas, który serwer potrzebuje na odpowiedź na zapytania z różnymi loginami. Poprzez porównanie czasów odpowiedzi, atakujący może wywnioskować, które zapytanie zajęło więcej czasu, co sugeruje, że login był poprawny. Ujawnienie loginu użytkownika umożliwia atakującym przeprowadzenie ataku siłowego zgadywania hasła. W niektórych przypadkach może również oznaczać ujawnienie wrażliwych informacji, zwłaszcza gdy loginem jest adres e-mail powiązany z konkretną osobą, a testowana aplikacja to portal z kontrowersyjnymi treściami.

Testowanie za pomocą Burp Suite – Request Timer

Podczas poszukiwań tego rodzaju podatności, przydatna będzie wtyczka do Burpa o nazwie Request Timer. Ta wtyczka pozwoli nam zbadać czas odpowiedzi serwera dla określonych przez nas żądań.

Pierwszym krokiem będzie przechwycenie żądania odpowiedzialnego za logowanie użytkownika i przesłanie go do modułu Intruder:

żądanie logowania użytkownika

Następnie zmieniamy hasło na długi ciąg znaków, aby zwiększyć obciążenie serwera podczas generowania hasha hasła. Wskazujemy miejsce, gdzie znajduje się login użytkownika. W przypadku badanej aplikacji konieczne jest także dodanie nagłówka „X-Forwarded-For” i przypisanie mu losowego adresu IP, aby ominąć blokadę wielokrotnych prób logowania z tego samego adresu IP. W związku z tym musimy zmienić typ ataku na „Pitchfork”.

żądanie logowania użytkownika z długim hasłem

Dodajemy listę loginów do sprawdzenia:

przykładowe loginy użytkowników

We wtyczce Request Timer definiujemy, żeby nasłuchiwła ona modułu Intrudera:

request timer

Po uruchomieniu testu, w zakładce pojawią się wygenerowane żądania wraz z czasem odpowiedzi. Jak można zauważyć, dla poprawnego loginu czas odpowiedzi jest znacznie dłuższy. W ten sposób udowodniliśmy, że aplikacja jest podatna na enumerację loginów użytkowników poprzez analizę czasu odpowiedzi serwera.

żądania w reuest timer

Co zrobić, jak żyć?

Jednym z rozwiązań tego typu problemu jest dodanie funkcji odpowiedzialnej za losowe opóźnianie odpowiedzi serwera:

opóźnianie czasu odpowiedzi

Niemniej jednak, problemem w przypadku tego typu rozwiązania jest to, że nadal nie mamy kontroli nad sytuacjami, takimi jak zwolnienie sieci podczas próby połączenia z bazą danych lub różnice pojawiające się, gdy baza danych rośnie w znaczący sposób.

Lepszym rozwiązaniem wydaje się wykonywanie operacji sprawdzania poprawności danych podanych przez użytkownika asynchronicznie w tle i natychmiastowe powiadamianie użytkownika o próbie zalogowania. W takim przypadku obliczenia i opóźnienia z tym związane pozostaną niewidoczne dla atakującego.

asynchroniczna odpowiedź serwera

Chcesz wiedzieć więcej?

Zapisz się i bądź informowany o nowych postach (zero spamu!). <br> Dodatkowo otrzymasz, moją prywatną listę 15 najbardziej przydatnych narzędzi (wraz z krótkim opisem), których używam przy testach penetracyjnych.

Nigdy nie podam, nie wymienię ani nie sprzedam Twojego adresu e-mail. W każdej chwili możesz zrezygnować z subskrypcji.

Otagowano , , , , , , , , , , , .Dodaj do zakładek Link.

3 odpowiedzi na „Co może nam powiedzieć zbadanie czasu odpowiedzi serwera?

  1. Pingback:Weekendowa Lektura: odcinek 540 [2023-10-06]. Bierzcie i czytajcie | Zaufana Trzecia Strona

  2. emaildfdfeee komentarz:

    Tak wygląda strona w firefoxie:
    https://archive.ph/uskak
    Fotki nie pokazują się.

Podziel się swoją opinią na temat artykułu