Mamy złą wiadomość dla użytkowników popularnego „trybu incognito”. Sesję prywatną i zwykłą można bez większego problemu ze sobą skojarzyć używając dość prostej, znanej od paru lat choć mało nagłośnionej niestandardowej techniki.
Na początek proponujemy Wam odwiedziny na stronie testowej, gdzie możecie przeczytać swój identyfikator (wymagany JavaScript). Następnie otwórzcie nową zakładkę w trybie incognito i wejdźcie na ten sam adres. Identyfikator się zgadza? To zapraszamy do lektury, szczególnie użytkowników Safari. Nie zgadza się? Spróbujcie odświeżyć stronę, czasem prawidłowy pojawia się za drugim razem.
HSTS, czyli więcej bezpieczeństwa
Zacznijmy od wyjaśnienia, czym jest HSTS, czyli HTTP Strict Transport Security. Jest to wprowadzony kilka lat temu tryb gwarantowania połączenia HTTPS z danym adresem WWW. Daje on serwerowi możliwość komunikacji z kompatybilnymi przeglądarkami wyłącznie w formie połączeń HTTPS. Po pierwszym zapytaniu do serwera ten może poinformować przeglądarkę, że dany adres będzie zawsze serwowany wyłącznie w ramach połączenia HTTPS i próby połączenia po HTTP nie zostaną zrealizowane. Pomaga to zapobiegać atakom wykorzystującym np. narzędzie sslstrip do obniżenia poziomu zabezpieczeń sesji z serwerem WWW.
Przeglądarka obsługująca ten tryb przechowuje lokalnie informacje o tym, czy dany adres posiada flagę HSTS czy też nie. Informację taką można odczytać np. za pomocą JavaScriptu. Widzicie już zagrożenie? Skoro strona internetowa może zapisać w przeglądarce zestaw flag dla wybranych adresów, to nie jest problemem zakodowanie w ten sposób całej wiadomości np. w formie unikatowego identyfikatora. Ryzyko to było znane w momencie tworzenia specyfikacji technicznej HSTS, jednak nie zaproponowano żadnych prostych rozwiązań.
Jak działa identyfikacja
Na blogu firmy leviathan przytoczono prosty przykład zapisywania i odczytywania wiadomości z przeglądarki użytkownika. Możemy na przykład zamieścić na stronie taki fragment kodu:
[img]https://charcount-5.trackingdomain.com/setbit.png[/img] [img]https://0-H.trackingdomain.com/setbit.png[/img] [img]https://1-E.trackingdomain.com/setbit.png[/img] [img]https://2-L.trackingdomain.com/setbit.png[/img] [img]https://3-L.trackingdomain.com/setbit.png[/img] [img]https://4-O.trackingdomain.com/setbit.png[/img]
i dla każdego z powyższych URLi poprosić przeglądarkę o zapamiętanie flagi HSTS. Następnie wystarczy pytać przeglądarkę (również działającą w trybie incognito) o kolejne URLe tak długo, aż trafi się na właściwy:
http://charcount-1.trackingdomain.com/getbit.png [ Server: HTTP ] http://charcount-2.trackingdomain.com/getbit.png [ Server: HTTP ] http://charcount-3.trackingdomain.com/getbit.png [ Server: HTTP ] http://charcount-4.trackingdomain.com/getbit.png [ Server: HTTP ] http://charcount-5.trackingdomain.com/getbit.png [ Server: HTTPS! ]
Oczywiście metod zapisu jest wiele, można chociażby korzystać ze zwykłego zapisu binarnego lub filtra Blooma.
Które przeglądarki są podatne
Nie wszystkie przeglądarki są podatne na ten atak i nie wszystkie reagują identycznie na próbę jego ograniczania. Jak informuje firma Radical Research Google Chrome, Firefox i Opera kasują flagi HSTS w trakcie usuwania ciasteczek. Oznacza to, że choć w trybie incognito przeglądarka poda zapisane dane, to prosta operacja kasowania ciastek przywróci naszą anonimowość. W naszych prostych testach faktycznie Chrome i Firefox w trybie prywatnym były podatne a dobry wynik dało usunięcie ciasteczek.
W dużo gorszej sytuacji są użytkownicy Safari. Na iPadzie lub iPhonie nie ma możliwości skasowania flag HSTS przez użytkownika. Co więcej flagi te synchronizowane są z kontem iCloud, dzięki czemu użytkownika można prawidłowo identyfikować również pomiędzy różnymi urządzenia, jeśli na wszystkich korzysta z tego samego konta Apple czy też na przykład po pełnym resecie urządzenia.
Na przeciwnym biegunie są za to użytkownicy Internet Explorera, który po prostu HSTS nie wspiera… Tor Browser również nie wydaje się podatny.
Jeśli jesteś użytkownikiem Firefoksa to możesz zobaczyć swoje flagi HSTS w następujący sposób:
echo "SELECT * FROM moz_hosts WHERE type='sts/use';" | sqlite3 permissions.sqlite
lub za pomocą dowolnej przeglądarki baz SQLite.
Co robić?
Odpowiedź jest prosta i zawsze aktualna – nie traktować trybu prywatnego przeglądarki jako zapewniającego anonimowość lub prywatność. A mechanizmów identyfikujących użytkowników jest multum.
Aktualizacja: Z uwagi na rozbieżne raporty użytkowników spróbujmy usystematyzować wyniki testu. My zaczynamy, Wy dopisujcie miasta w komentarzach ;)
- Chrome/Windows/39.0.2171.95: to samo ID – inni zgłaszają, że nie
- Firefox/Windows/31.0: to samo ID
- Firefox/Windows/34.0.5.5443 to samo ID
Uwaga! Warto testować po kilka razy – według raportów w trybie prywatnym odświeżenie strony powoduje czasem pojawienie się ID z trybu normalnego.
Komentarze
U mnie się nie zgadza. Najnowszy Firefox
http://prntscr.com/5od4pa
Mam tak samo. FF 34.0 i Ubu 14.04 nie zapodały tej samej wartości, a odświeżałem chyba ze 20 razy :)
Firefox 36.0a2 (2015-01-01), Windows 7, identyfikator się nie zgadza, po każdym zamknięciu i uruchomieniu okna trybu prywatnego pokazuje się inny identyfikator, odświeżanie po kilkadziesiąt razy tego nie zmienia. :)
Nie wiem, co złego robię, ale u mnie na Chrome to nie działa. Mam dwa różne identyfikatory.
Windows 7, x64, Chrome 39.0.2175.95 m
=]
A to dobre. Identyczny konfig na tym poziomie i inny wynik u mnie. Może inne ustawienia na poziomie prywatności?
U mnie tez zupełnie inne identyfikatory.
Ubuntu 14.10, Chrome 39.0.2171.95
Raczej defaultowe ustawienia
U mnie na chrome 40/linux nie zadziałało w incognito za pierwszym razem ale już za drugim – owszem.
Yandex Browser 14.10.2062.12544 beta
Windows 8.1 x64
ID różni się w trybie prywatnym
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0 – nie działa na
Opera 26.0.1656.60 Win7 x64 – działa
Chrome 39.0.2171.95 m (64-bit) Win7 x64 – też działa
SeaMonkey 2.23
Your tracking id was read.
Firefox Portable 34.0.5
Your tracking id was set.
Seamonkey 2.31
Your tracking id was set.
Safari/OSX/8.0.3 i Chrome/OSX/39.0.2171.95 i Firefox/OSX/33.0.2 to samo id.
Ale jak zaktualizowałem Firefoxa do 34.0.5 to już są różne.
Firefox 34.0.5/Debian Wheezy – mam różne ID
Potwierdzam. Ani w trybie incognito, ani po wyczyszczeniu ciastek na Debian Wheezy + Iceweasel 34 (czyli Firefox 34) identyfikatory się nie powtarzają, mimo wielu odświeżeń.
FF 34.0.5 – u mnie tryb incognito działa bez zarzutu
Windows
Chrome 39.0.2171.95 m – działa
Opera 26.0.1656.60 – działa
Firefox 34.0 – nie działa
Pięknie, brawa dla Apple. Znowu się wykazali nadmierną troską o użytkownika ;)
Na szczęście trybu prywatnego używam wyłącznie po to, żeby nie zaśmiecać sobie historii :)
Aha i lepiej nie prosić o wpisanie miast, bo kiedyś widziałem odzew w rodzaju: Sodoma, Gomora ;)
Palemoon 25.1.0 (x64)
To samo id. Z włączonym No scriptem oczywiście nic nie wyświetliło.
Firefox 34, Ubuntu 14.04 – mam różne ID
Firefox Nightly 37.0a1 (2015-01-03) na W7 daje różne ID w obu trybach. Nawet po pięćsetnym przeładowaniu ;-)
Dokładnie taka sama sytuacja z Chrome 41.0.2251.0 dev-m (64-bit).
Ubuntu 14.04 / Firefox 34.0 – tak jak u innych mam różne ID
Chromium 39.0.2171.65 Ubuntu 14.04 (64-bit) – też różne ID
w trybie incognito odświeżałem po kilka razy.
Windows 7 x64 HP:
Chrome 39 – to samo ID
Firefox 34.0.5 – różne ID
Opera 26 – różne ID
IE 11 – różne ID
Windows XP :
Chrome 37 – to samo ID
IE 7 – nie działa w ogóle :D
Kubuntu 14.04/ Chrome 39.0.2171.95 – to samo ID
Archlinux x86_64 / Firefox 34.0.5 – rozne ID
Firefox 34.0.5, Win7 – inne, pomimo wielokrotnego odświeżania
Firefox 34.0.5, ArchLinux x86_64 – inne
Te same kody w incognito i bez na Operze 26.0
Incognito
Your tracking id was read.
Bez
Your tracking id was set.
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/7.1.2 Safari/537.85.11 Są inne ID. :v
Ale kto normalny używa trybu porno by ukrywać się przed „siecią” (w rozumieniu by serwery nie wiedziały kim ty jesteś)? Ten tryb służy przede wszystkim do ograniczenia możliwości odczytu historii przeglądarki i stąd właśnie jego „humorystyczna” nazwa.
Niezbyt dobra wiadomość. Z resztą nie pierwsza i nie ostatnia. Widocznie jedyną opcją jest lynx ale obstawiam, że stronek web 2.0 już nie pociągnie ;)
opera 1217 – działa
czyszczenie pamięci podręcznej czyści zapisy hsts
http://s1.postimg.org/vm83seu6n/heh.png
Czuje dobrze paranoik.
Chrome Canary Wersja 41.0.2265.0
Głównym rozszerzeniem, które powoduje u mnie wyświetlanie różnych id jest:
Delete All Cookies From JavaScript v 1.1
Przy okazji jest o wiele więcej innych sposobów na namierzenie przeglądarki:
https://panopticlick.eff.org
miasta
Fedora 21 – na Firefox 34 ID nie zgodziło się ani razu. Na Chromium 38.0.2125.101 Russian Fedora (290379) (64-bit) za każdym razem się zgadza :)
„Na iPadzie lub iPhonie nie ma możliwości skasowania flag HSTS przez użytkownika. Co więcej flagi te synchronizowane są z kontem iCloud, dzięki czemu użytkownika można prawidłowo identyfikować również pomiędzy różnymi urządzenia (…)” – it’s not a bug, it’s a feature.
u mnie także się nie zgadza, najnowszy firefox :)
Dlatego trzeba zawsze kasować swoje ciasteczka :D
Na maxthonie 4.4.3.4 id też są inne
poza tym, kto używa sroma? Chyba tylko ci najmniej świadomi użytkownicy, co nie wiedzą, że istenieje tryb incognito : )
Android 4.1.2 oryginalna przegladarka. Nie dziala ani razu w trybie incognito.
BlackBerry 10, po włączeniu trybu prywatnego za każdym razem choćbym odswiezal 100 razy jest inny „wynik”
Czyli w BlackBerry Tryb prywatny działa super