19:48
23/6/2010

Ciekawy błąd w Firefoksie

Mozilla wypuściła nową wersję Firefoksa 3.6.4, w której załatano kilka błędów związanych z bezpieczeństwem. Ja chciałbym zwrócić uwagę na jeden z nich, pozwalający rozpoznać (i śledzić) internautę na dowolnej stronie internetowej.

Śledzenie użytkownika poprzez Math.random();

Amit Klein odkrył, że reverse-engineeringując wartość funkcji Math.random(), można przewidzieć, jakim seedem została ona zainicjowana. Funkcja Math.random() jest “seedowana” tylko raz — przy starcie przeglądarki. Dzięki temu, umieszczając odpowiedni skrypt na stronach internetowych, można było domyślić się, czy odwiedzający serwis internauta już na nim gościł.

Oprócz oczywistego “śledzenia” użytkownika, błąd ten mógł zostać wykorzystany do rozpoznawania nadużyć na stronach, na których nie chcemy, aby użytkownicy wielokrotnie wykonywali jakieś akcje (oddanie głosu, dodawanie anonimowych, obraźliwych komentarzy). Internautę, o ile ciągle korzystał z tej samej przeglądarki, dało się zidentyfikować pomimo zmieniającego się adresu IP (TOR, proxy, restart neostrady ;), wyczyszczenia ciastek, czy podmiany User-Agenta.

Błąd o którym mowa, po raz pierwszy zgłoszono w styczniu 2009r…

Czy łatka cokolwiek zmienia?

Wyeliminowanie tego ciekawego z punktu widzenia prywatności błędu to chwalebny, ale mały krok naprzód. Ciągle bowiem internautów da się śledzić w sieci na wiele różnych sposobów.

P.S. Prawie bym zapomniał. Nie mniej ciekawy błąd znaleziony przez lcamtufa też został załatany w tym wydaniu Firefoksa będzie załatany w 3.6.6 — lcamtuf się zzeroday’ował, chyba za dużo z Tavisem pracuje ;)

Przeczytaj także:

20 komentarzy

Dodaj komentarz
  1. Dobrze, że chociaż to załatali :)

  2. …a jak sprawa wygląda w innych przeglądarkach(opera, safari, chrome, ie) też istnieje/został naprawiony ten błąd?

  3. Zadanie 1: Powinno być:

    a) march.random()
    b) match.random()
    c) żadne z powyższych

    Bo sam nie wiem ;)

  4. match.random? march.random?

  5. Dziś marzył mi się marcowy ziąb i źle dopasowałem skarpetki, ot wyjasnienie zagadki ;)

  6. Równie ciekawe że FF podczas tej aktualizacji mi się wysypał i bez końca próbuje się zamknąć i zaktualizować ;)

  7. Sergi miałem to samo :) W moim przypadku poszło za 3 razem restartem

  8. Math.random(), z dużego M, inaczej nie zadziała :).

  9. Pewnie nie będę specjalnie odkrywczy, ale po przeczytaniu wpisu przyszedł mi do głowy następujący pomysł:

    Przygotowujemy zestaw obrazków: 0.png 1.png.. 15.png, które umieszczamy na stronie.
    W przypadku gdy przeglądarka wysyła wszystkie 16 żądań zakładamy, że użytkownik pierwszy raz odwiedza stronę. W tej sytuacji nadajemy użytkownikowi ID np. 5 (0000000000000101b), który kodujemy ustawiając, lub nie, cache dla odpowiedniego obrazka np. 0.png (no-cache), 1.png(no-cache).. 13.png(cache), 14.png(no-cache), 15.png(cache). Teraz, gdy użytkownik ponownie odwiedzi stronę, w łatwy sposób możemy odtworzyć ID na podstawie requestów.

  10. dariusz – Masz rację, ale jeśli użytkownik czyści cache po każdym wyłączeniu przeglądarki, albo odświeża z Ctrl to i tak niczego się nie dowiemy.

  11. Czy w trybie prywatnym, gdzie przeglądarka nie zapamiętuje żadnych ustawień witryn, ciastek itd. również występuje takie zachowanie?

  12. @Odstresowany: Nie wiem jak działa tryb prywatny w Firefox, ale teoretycznie taki błąd nie ma żadnej zależności od tego co przeglądarka przechowuje a czego nie. Po prostu zgłasza się pewnego rodzaju ID i jest on niezmienny i niezależny od IP, ciastek, itp.

  13. Dobre ;)

  14. Cytując za blogiem lcamtufa:
    “Reported early April, CVE-2010-1206; Mozilla targets this fix for 3.6.6 (my bad).”

    • @dotnokato: A to ci… lcamtuf się zzeroday’ował, chyba za dużo z Tavisem pracuje ;) Poprawiłem.

  15. Od jakiegoś czasu na Niebezpieczniku pojawiają się newsy opisujące możliwości śledzenia użytkowników przeglądarek.
    Dlaczegóż zatem sam Niebezpiecznik nas śledzi i przechwytuje kliknięcia na linkach?
    Rozumiem, że sprawa jest błaha, ale doprowadza mnie do szewskiej pasji – to opóźnienie wczytania taba w tle, bo javascript musi coś przekazać do Waszych statystyk.

    • @M-Z: wykorzystywane przez nas skrypty statystyk służą optymalizacji serwisu, a nie śledzeniu użytkowników (sprawdzamy np. czy linki w sidebarze/toolbarze się klikają, jeśli nie, to je usuwamy, żeby niepotrzebnie nie “zaśmiecały” stron i zajmowały przestrzeni). Danych nie sprzedajemy i nie analizujemy pod kątem tego, czy Kowalski czytał tylko informacje o omijaniu firmowego firewalla :-) Ale oczywiście nie musisz nam ufać, więc jeśli Ci skrypty przeszkadzają, proponuje ich odfiltrowanie w przeglądarce.

  16. Tak jak napisałem, nie powoduje mną strach przed śledzeniem, tylko denerwuje mnie opóźnienie w działaniu przeglądarki. Można niby wyłączyć javascript, ale to zawsze jest coś za coś; już lepiej używać spatial navigation w Operze.

  17. Rozumiem, że odpalając tryb prywatny w FF id generowane jest na nowo?

  18. Jest jeszcze w 3.6.4 jakiś babol z flash’em.
    Na YouTube i innych serwisach vodeo wywala szary kwadrat – nie widać obrazu,
    a słychać tylko dźwięk podczas odtwarzania.

Twój komentarz

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.

RSS dla komentarzy: