Zmiany w moich zasadach bezpiecznego przeglądania stron internetowych
Wpis ten jest rozwinięciem pomysłów, które opisałem w ubiegłym roku tutaj. Wraz z dynamicznym rozwojem zjawisk zachodzących w obrębie szeroko rozumianego Web 2.0, stwierdziłem, że konieczne jest wprowadzenie dodatkowych rozwiązań oraz wyrobienie nowych nawyków w stosunku do tego, co zostało opisane wcześniej.
Obawiam się Cross-site-scripting
O tym czym jest, jak wygląda i co powoduje XSS pokazywałem na przykładzie słynnych stron rzekomo “usuwających” funkcjonalność “Śledzika” z serwisu NK. Generalnie chodzi o to, że gdy jestem zalogowany na pewnej stronie internetowej, np. NK, albo FB w innych kartach przeglądarki zwykle oglądam też jeszcze inne strony. Może się zdarzyć tak, że gdzieś kliknę w pewien złośliwy link, który prowadzi do strony ze skryptem. Ten skrypt z kolei może wykonać bez mojej wiedzy i zgody pewną czynność wykorzystując to, że jestem właśnie zalogowany na swoim koncie. W opisywanym przeze mnie przykładzie było to automatyczne wklejenie komunikatu do “Śledzika”, który pokazywał się naszym znajomym. Innym tego typu przykładem jest strona “110 Hottest Women in The World”, która namawia do “polubienia” jej na FB, po czym bez naszej wiedzy i zgody wkleja się do strumienia aktualności uwidaczniając się wszystkim naszym znajomym. Odrębną kwestią jest konsekwentna nieufność wobec wszelkich stron, które namawiają nas do “polubienia” na FB albo sugerują ściągnięcie i uruchomienie jakiegoś pliku, po to, żeby coś ciekawego zobaczyć. Takie coś świadomy użytkownik natychmiast i bez zastanowienia ignoruje, ponieważ od razu widać, o co tak naprawdę chodzi. Na dzień dzisiejszy tego typu złośliwe sztuczki nie powodują większych szkód, ponieważ “jedynie” umieszczają pewne treści na naszej tablicy FB. Tym, co mnie martwi jednak, są: po pierwsze potężne możliwości rozprzestrzeniania się, po drugie możliwości ewoluowania tego typu technik i łączenia ich np. z lukami typu zero-day. Zauważmy, że jest bardzo prawdopodobne, że w tym przypadku sporo osób kliknie w złośliwy link. Wszak pojawił się on u naszego znajomego na tablicy, to już samo w sobie budzi zaufanie, ponadto skoro się tam pojawił, to znaczy, że ten znajomy uważa, że jest to coś fajnego, co warto zobaczyć. Jest to bardzo sprytny chwyt social-engineering, który skutecznie zwiększa grono potencjalnych ofiar. Niewykluczone, że w przyszłości pojawią się ataki, które tę sprytną sztuczkę będą wykorzystywać tylko do “rozmnażania się”, a ich sednem będzie exploit wykorzystujący nienaprawiony jeszcze błąd w przeglądarce powodujący zdalne wykonanie kodu. Innym możliwym scenariuszem jest “wstrzykiwanie” bez naszej wiedzy i zgody treści niecenzuralnych, żeby “uderzyć” w reputację użytkownika.
W związku z powyższym proponuję wdrożyć w prosty sposób zasadę izolacji i używać na co dzień przynajmniej dwóch przeglądarek internetowych jednocześnie. Jednej z nich używać jedynie do usług, w których zwykle jesteśmy cały czas zalogowani jak np. GMail czy FB, drugą natomiast do zwykłego przeglądania stron internetowych. Zgodnie z tym, co opisywałem w ubiegłym roku, oczywiście obie przeglądarki uruchamiam przez Sandboxie. Ponadto w tej przeznaczonej dla usług korzystam z dodatku NoScript, którym ograniczam wykonywanie skryptów JavaScript tylko do stron z usługami np. google.com czy facebook.com i żadnych innych. Myślę, że jest to skuteczny kompromis pomiędzy wygodą i w miarę przyzwoitym poziomem ochrony. Korzystanie w “przeglądarce do przeglądania” z NoScript mogłoby być uciążliwe, ponieważ JavaScript jest jednak fundamentem większości stron internetowych. Jeśli chodzi o konkrety - ja osobiście używam do przeglądania Firefoxa, natomiast dla usług wybrałem SeaMonkey (przeglądarkę, która w prostej linii jest kontynuacją Mozilla Suite). Eksperymentowałem z Google Chrome, jednakże jak dla mnie jest to przeglądarka o zbyt prymitywnym interfejsie i możliwościach konfiguracji. Co więcej, podczas działania w Sandboxie zawieszała się kilka razy dziennie, co zdyskwalifikowało ją kompletnie. Najchętniej korzystałbym z dwóch Firefoxów, jednakże jest to niemożliwe technicznie - proces Firefoxa może być tylko jeden w systemie. Fakt - mogę uruchomić go z konta innego użytkownika, ale wtedy nie byłby w Sandboxie, który działa tylko dla aktualnie zalogowanego użytkownika. Wybrałem więc starą, dobrą Mozillę, którą miło wspominam jeszcze z początku dekady, gdy w wersjach 1.x w tamtym czasie była o całe lata świetlne w rozwoju przed konkurencją (co ciekawe, wydaje mi się, że SeaMonkey jest szybszy od Firefoxa)
Wiem, jak na implementację zasady security by isolation to trochę za mało. Co prawda Sandboxie skutecznie utrudnia wprowadzenie jakiegokolwiek złośliwego oprogramowania do mojego komputera, to jednak nie chroni przed wszystkimi scenariuszami. Można sobie wyobrazić rozwiązanie, które wyexploituje mi przeglądarkę, odczyta pewne dane z mojego dysku i gdzieś je od razu prześle. Przed czymś takim Sandboxie nie chroni. Najlepiej byłoby używać różnych wirtualnych maszyn do różnych czynności, tak jak proponuje Joanna Rutkowska. Wówczas wyexploitowanie jednej z nich nie spowoduje żadnych strat, co więcej, nie będzie trwałe, bo maszyny po użyciu przywraca się do stanu zapamiętanego migawką. Niestety wadą takiego rozwiązania jest to, że byłoby to zbyt powolne i kłopotliwe przy użyciu komputera o przeciętnych parametrach. Teoretycznie idealnym rozwiązaniem byłoby stosowanie systemu operacyjnego Qubes OS tworzonego przez firmę Joanny Rutkowskiej - Invisible Things Lab. System ten zbudowany jest na hypervisorze Xen i automatyzuje tworzenie i uruchamianie maszyn wirtualnych, tak jakby były zwykłymi programami. Jednakże jak na razie jest to rozwiązanie we wczesnej wersji rozwojowej i nie nadaje się do pracy jako system operacyjny ogólnego przeznaczenia.
Unikam ciasteczek
Dosyć poważnym zagadnieniem jest skala zbierania i przetwarzania informacji o użytkownikach przez takie firmy jak Google. Ciasteczko odpowiada za utrzymanie sesji przeglądarki internetowej ze stroną, umożliwia zauważenie przez serwer, że konkretne wejścia na stronę (i inne działania w ramach strony) wykonywane są przez tego samego użytkownika - posiadającego zapamiętane w przeglądarce ciasteczko. Google na przykład może analizować wpisywane przeze mnie słowa do wyszukiwarki i przyporządkować je do mojego konta jeśli jestem podczas wyszukiwania zalogowany. Tutaj dodatkowym plusem dwóch przeglądarek jest oddzielenie zalogowania na koncie Google (przeglądarka dla usług) od zwykłego wyszukiwania (przeglądarka “do przeglądania”). Fakt, cały czas jestem tym samym adresem IP. Jednakże współcześnie sam adres IP nie wystarczy do pełnego zidentyfikowania sesji użytkownika - wszak może to być ktoś zupełnie inny za moim NAT’em. Wracając do ciasteczek - ustawiłem swoje przeglądarki internetowe tak, aby kasowały ciasteczka po ich zamykaniu. Dzięki temu w pewnym stopniu utrudniam analizę danych na mój temat wprowadzając “szum” - każda odsłona powoduje utworzenie nowego ciasteczka, czyli teoretycznie chodzi o innego użytkownika. Gdzieś słyszałem, że jedno z ciasteczek ustawianych przez wyszukiwarkę Google ma okres ważności do 2020 roku. Możecie sobie, drodzy czytelnicy, wyobrazić komu i do czego potrzebne są analizy aktywności użytkownika w tak długim czasie? Usuwanie ciasteczek nie wpływa znacząco na obniżenie wygody, jedynie zmusza nas do zrezygnowania z opcji typu “zapamiętaj mnie” podczas logowania na stronach, której i tak nie powinno się używać.
W temacie ciasteczek warto wspomnieć również o innej ich kategorii, mianowicie o ciasteczkach wtyczki Flash. Pełnią one taką samą funkcję jak zwykłe ciasteczka, mają większe możliwości i bardzo niewiele osób o nich wie. Szczegółowy opis problemu jest na blogu Piotra Koniecznego. Warto więc wyłączyć również i te ciasteczka za pomocą opcji dostępnych po kliknięciu prawym przyciskiem myszki na dowolnej animacji Flash.
Unikanie ciasteczek jest ważnym aspektem prywatności przeglądania stron internetowych, ale jeżeli ktoś się bardzo postara to i tak może spróbować nas zidentyfikować. Przykładowo istnieją metody wyciągania wniosków z tego, jakimi wtyczkami i jakimi czcionkami nasza przeglądarka może “pochwalić się” serwerowi. Projekt Panopticlick pokazuje jak bardzo unikatowy jest zestaw możliwości naszej przeglądarki. Konfiguracja taka jak moja zdarza się raz na milion według tej strony, co trochę mnie martwi. Co ciekawe, według powyższej strony ta moja unikatowość “generowana” jest przez dość skromny zestaw wtyczek - najnowsze wersje środowiska Java, czy Adobe Flash. Czyżby rzeczywiście tak niewielu użytkowników dbało o aktualność swojego oprogramowania? Jeszcze inną “magiczną” sztuczką jest próba wnioskowania czegoś o historii przeglądanych stron korzystając z możliwości ustawienia różnego wyglądu dla elementów wcześniej odwiedzonych. Przykładem takiej techniki jest strona, za pomocą której można robić znajomym dowcipy: didyouwatchporn.com. Technicznie działa to w ten sposób, że można zdefiniować za pomocą CSS, żeby link do strony X zawierał obrazek w przypadku gdy X była odwiedzona (klasa :visited
). Jeżeli serwer odnotuje pobranie obrazka, wyciągamy wniosek, że użytkownik odwiedził stronę X. Moim zdaniem jednak powyższe mechanizmy nie odgrywają dużej roli, ponieważ de facto są pewnym rodzajem heurystyk i nie dają gwarancji zidentyfikowania użytkownika. To trochę tak jakby np. próbować zidentyfikować kogoś na podstawie koloru i wyposażenia jego samochodu. Fakt, zestaw typu (marka, kolor, silnik turbodiesel, przyciemniane szyby, alufelgi) może być dość unikatowy, ale przecież na tej podstawie nie można mieć stuprocentowej pewności co do identyfikacji konkretnej osoby.
Adobe i “spółka” jest większym problemem niż się wydaje
Programy firmy Adobe - mam tu na myśli wtyczkę Flash oraz czytnik plików PDF Adobe Reader w ostatnim czasie są coraz częstszym obiektem ataków. Niemalże każda kolejna wersja Reader’a zawiera jakąś krytyczną poprawkę naprawiającą błąd, który mógł spowodować zainstalowanie złośliwego oprogramowania w naszym komputerze tylko w wyniku samego otwarcia pliku PDF. Podobnie jest z odtwarzaczem animacji Flash (analogicznie - samo wejście na stronę z animacją mogło wyrządzić nam krzywdę). Wielu nietechnicznym użytkownikom trudno jest uświadomić konieczność aktualizacji systemu operacyjnego czy przeglądarki, nie wspominając już o konieczności aktualizacji “dodatków” firmy Adobe, z czego mało kto sobie zdaje sprawę. A jest to tak samo ważne, ponieważ wiąże się z tymi samymi zagrożeniami. Adobe Reader jest programem wyjątkowo nieprzyjemnym, chociażby dlatego, że instaluje się dodatkowo w przeglądarce jako wtyczka powodująca automatyczne otwieranie pliku PDF w oknie przeglądarki bez pytania o zgodę. W związku z tym, jeżeli już używamy Adobe Readera polecam wyłączyć tę wtyczkę do przeglądarki, aby ręcznie pobierać plik PDF i ręcznie otwierać. Osobiście rozważam zrezygnowanie z Adobre Reader’a na rzecz np. Sumatra PDF albo Foxit. Tymczasem, jeżeli trzeba używać Adobe Readera - polecam uruchamiać go również przez Sandboxie. Powyższe zalecenia dot. konieczności aktualizacji dotyczą również innych “dodatków” do przeglądarki jak np. środowiska Java. Dbanie o używanie aktualnych wersji oprogramowania powinno w świadomości użytkowników komputerów stać się niezbędnym elementem “konserwacji” swojego komputera takim samym jak na przykład wymiana oleju w przypadku samochodu (tu chyba nikt nie ma wątpliwości, że jest to konieczne).
Do naprawdę wrażliwych operacji warto jednak mieć maszynę wirtualną
Do operacji bankowych używam właśnie Xubuntu uruchamianego w Oracle VirtualBox. Po każdym uruchomieniu przywracam dysk maszyny do wcześniej zapamiętanego stanu, dzięki temu przez cały czas mam taki sam, “czysty” system. Gdyby jakimś cudem w moim komputerze znalazło się oprogramowanie np. przechwytujące naciśnięcia klawiszy - to nie przechwyci ono tego, co się wpisuje wewnątrz maszyny wirtualnej. Sprawdzałem działanie mechanizmu Hooks w systemie Windows - faktycznie “haki” przechwytujące naciśnięcia klawiszy nie “wyłapują” tego, co się dzieje w maszynie wirtualnej. Jest to więc bardzo silne i skuteczne rozwiązanie praktycznie uniemożliwiające przedostanie się jakiegokolwiek złośliwego oprogramowania zarówno w kierunku mój system operacyjny -> maszyna wirtualna, jak również w odwrotnym kierunku, ponieważ zakładam, że tej maszyny używam tylko do łączenia się z witryną banku. W przyszłości zamierzam jeszcze wdrożyć pomysł Joanny Rutkowskiej i zmodyfikować wirtualną sieć, tak, aby ta konkretna maszyna mogła łączyć się tylko z jednym adresem IP (zastanawiam się właśnie jak ona to zrobiła, podejrzewam, że w VMware efekt ten można uzyskać za pomocą narzędzia konfiguracji sieci dostępnego przez skrót Manage Virtual Networks)
PS. Platformie blogowej blox.pl gratuluję ograniczenia długości wpisu do 16KB. Ostatnią sekcję tego tekstu musiałem wkleić jako obrazek…