Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Mikołajki z sekurakiem! od 2 do 8 grudnia!
Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Mikołajki z sekurakiem! od 2 do 8 grudnia!
Nie tak dawno, bo pod koniec sierpnia pisaliśmy o pozornie nieszkodliwej wtyczce VPN do Chrome, która – jak się okazało – potajemnie rejestrowała zawartość ekranu. Niestety nie był to zupełnie odosobniony przypadek. Badacze z LayerX odkryli kampanię złośliwych wtyczek – głównie VPN, ale także blokery reklam i inne. Rozszerzenia te wracały mimo usuwania, osiągając łącznie ponad 9 milionów pobrań.
TLDR:
Bezpłatne rozszerzenia VPN obiecują prywatność i dostęp do wielu krajów za jednym kliknięciem. Zdają się być łatwym i skutecznym sposobem na ominięcie ograniczeń regionu (np. w usługach streamingowych) lub ukrycie adresu IP bez konieczności płacenia za subskrypcję. Jednak ta obietnica często okazuje się realizować znaną zasadę: jeśli produkt jest bezpłatny, to Twoje dane są produktem.
Choć nazwy, ikony i opisy wyglądały na wiarygodne i nie wzbudzały podejrzeń, wtyczki chętnie realizowały wspomnianą zasadę. Dwie z nich, zawierające złośliwy kod, były dostępne w Chrome Web Store przez prawie 6 lat, zanim zostały usunięte.
Zaledwie dwa miesiące później w Chrome Web Store pojawiło się trzecie rozszerzenie, niemal identyczne pod względem opisu, stylu ikony i działania.
Rozszerzenia te wykraczały daleko poza zwykłe tunelowanie ruchu sieciowego. Pobierały pliki konfiguracyjne ze zdalnych serwerów, co dawało możliwość zmiany ustawień proxy (bez dodania własnego certyfikatu) w czasie rzeczywistym i przechwytywały dane z przeglądarki, działając niejako w sposób zdalnie sterowany.
Wtyczki żądały przy instalacji wielu uprawnień, takich jak webRequest, proxy i declarativeNetRequest. O ile nie dziwi dostęp do konfiguracji proxy (bo większość darmowych VPN-ów to tak naprawdę proxy, a nie VPN), o tyle dostęp do każdego wykonywanego przez przeglądarkę żądania HTTP(S) już wzbudza wątpliwości.
W przypadku analizowanych przez badaczy wtyczek, uprawnienia te były wykorzystywane do zdalnego sterowania konfiguracją (była ona pobierana dynamicznie z zewnętrznego serwera), jak również umożliwiały dynamiczne aktualizacje kodu i przechwytywanie ruchu sieciowego, dając atakującym swobodę w zmianie zachowania rozszerzeń już po instalacji.
Pozwalało to na przechwytywanie każdej odwiedzanej strony, a także gromadzenie historii przeglądania i listy zainstalowanych rozszerzeń przez autorów wtyczek.
Badacze pokazali ramy czasowe kampanii na przykładzie trzech zupełnie podobnych rozszerzeń:

Na szczęście informacja o dostępności ostatniej wtyczki (C) jest już nieaktualna. Została ona usunięta i nie można jej zainstalować:

Choć wtyczki pojawiały się w różnym czasie, ich funkcja była podobna, a kolejne wersje były następstwem usunięcia wcześniejszych wersji z Chrome Web Store.
Twórcy rozszerzeń wykorzystywali symulowany keepalive, tworząc cykliczne połączenie z kartą. Dzięki temu utrzymuje aktywność service workera mimo ograniczeń Manifestu V3 Chrome (standardowo procesy w tle są wygaszane).

Uruchamiany był również event listener na chrome.webRequest.onBeforeRequest dla <all_urls>, a więc działa on przy każdym żądaniu do dowolnej strony. Daje to możliwość późniejszego przekierowywania kart do miejsc zdefiniowanych przez atakującego, a także wstrzykiwania zawartości HTML/JS do odwiedzanych stron.
Rozszerzenie usuwa z historii ślady po takich przekierowaniach:

Badacze znaleźli jednak coś lepszego. Wtyczka sama usuwała się, gdy zabierano jej uprawnienie <all_urls>, a także gdy wykryła, że serwer, z którym się komunikowała, działał w infrastrukturze Cloudflare:

Wtyczka ustawiała proxy za pomocą skryptu pac_script pobieranego ze zdalnego serwera. Instalując zdalny skrypt PAC, atakujący może kierować ruch użytkownika przez dowolne serwery.
Co ważne, jak zaobserwowali badacze, PAC był każdorazowo pobierany z serwera (kontrolowanego przez twórcę wtyczki). Pozwalało to na dowolne definiowanie konfiguracji, niezależnie od kodu i zainstalowanej wersji rozszerzenia.

Rozszerzenie, podobnie jak poprzednia wersja wykorzystuje uprawnienie <all_urls> monitorując każde żądanie wykonywane przez użytkownika. Korzysta też z declarativeNetRequest.updateDynamicRules do zmiany filtrowania/routingu w locie.
Oprócz tego szuka innych wtyczek z uprawnieniami proxy i jeśli je znajdzie, wyłącza.

Dodatkowo wysyła listę wszystkich zainstalowanych rozszerzeń do zdalnego serwera kontrolowanego przez twórców wtyczki. A gdyby to nie wystarczyło, wysyła również hashe wszystkich odwiedzanych adresów URL:

Przeanalizowane przez badaczy wtyczki, choć udawały zwykłe darmowe narzędzia, w rzeczywistości pobierały zdalne konfiguracje, wstrzykiwały skrypty PAC, monitorowały żądania i ruch sieciowy, ukrywając swoje działania w historii i wyłączając inne rozszerzenia proxy.
To kolejny przykład, jak popularne i pozornie profesjonalne dodatki działające latami w Chrome Web Store, mogą wykorzystywać zdobyte uprawnienia. Liczba pobrań, ładna ikona ani obietnice o prywatności nie gwarantują bezpieczeństwa. Niestety często bezpłatny produkt oznacza, że to dane są produktem.
Najbezpieczniejszą praktyką pozostaje minimalizowanie liczby zainstalowanych rozszerzeń, zwłaszcza tych z szerokimi uprawnieniami oraz wykonywanie wrażliwych operacji w trybie incognito lub w osobnym profilu, gdzie dodatki nie mają domyślnego dostępu. Warto rozważyć realizowanie bardziej wrażliwych operacji (np. logowanie do bankowości) w kartach incognito, do których wtyczki domyślnie nie mają dostępu.
Po pełen opis, listę wtyczek i IoC odsyłamy do LayerX.
~Tymoteusz Jóźwiak