O 123% więcej zgłoszonych CVE dziennie w 2026 niż przed rokiem.

Łańcuch dostaw

Czym jest typosquatting?

Typosquatting to atak polegający na zarejestrowaniu nazwy zbliżonej do popularnej i czekaniu, aż ktoś się pomyli przy jej wpisywaniu. Zaczęło się od domen internetowych. W oprogramowaniu napastnicy publikują złośliwe pakiety o nazwach takich jak crossenv zamiast cross-env, a jedna literówka w poleceniu instalacji uruchamia ich kod na komputerze programisty lub w pipeline CI.

Zaktualizowano

Jak działa typosquatting pakietów

  1. Wybór celu. Napastnik wybiera popularny pakiet, przy którym nawet niewielki odsetek literówek daje znaczną liczbę instalacji.
  2. Rejestracja podobnej nazwy. Różni się jedną literą, brakującym łącznikiem, zamienionym znakiem lub wiarygodnym sufiksem.
  3. Ukrycie ładunku. Pakiet często opakowuje ten prawdziwy, więc wszystko nadal działa i nic nie budzi podejrzeń.
  4. Uruchomienie przy instalacji. Menedżery pakietów mogą uruchamiać skrypty podczas instalacji, więc kod działa, zanim ktokolwiek go wywoła, i ma dostęp do zmiennych środowiskowych i tokenów.
  5. Kradzież i rozprzestrzenianie. Skradzione poświadczenia pozwalają napastnikowi publikować kolejne pakiety lub docierać do kolejnych systemów.

Typowe techniki typosquattingu

Technika Prawdziwy pakiet Podróbka
Brak separatora cross-env crossenv
Dodany sufiks jquery jquery.js
Zamienione litery ffmpeg ffmepg
Pominięta litera mongoose mongose
Dodany prefiks sqlite node-sqlite

Wszystkie powyższe podróbki pochodzą z jednej prawdziwej kampanii, opisanej poniżej.

Prawdziwy przykład: crossenv

W 2017 r. użytkownik npm o nazwie hacktask opublikował crossenv, podszywając się pod popularny cross-env. Pakiet zachowywał działanie oryginału, a dodatkowo wysyłał zmienne środowiskowe osoby instalującej na serwer napastnika. W buildzie to właśnie w zmiennych środowiskowych znajdują się tokeny. Analiza Snyk wykazała, że był to jeden z ponad 30 złośliwych pakietów z tego samego konta i że pozostawał niezauważony przez około dwa tygodnie, dopóki nie wypatrzył go pewien inżynier.

Dlaczego asystenci kodowania AI pogarszają sprawę

Asystent AI może zaproponować pakiet, który nie istnieje. Jeśli napastnik zarejestruje tę nazwę, kolejna osoba akceptująca podpowiedź zainstaluje złośliwe oprogramowanie. Czasem nazywa się to slopsquattingiem. Automatyczne agenty instalujące zależności bez czytania nazwy przez człowieka dodatkowo podnoszą stawkę.

Typosquatting a dependency confusion

Oba wykorzystują sposób rozwiązywania nazw pakietów, ale błąd jest inny.

Typosquatting Dependency confusion
Czyj błąd Człowiek myli się przy wpisywaniu nazwy System buildu wybiera niewłaściwy rejestr
Nazwa Zbliżona do pakietu publicznego Identyczna z prywatnym pakietem wewnętrznym
Dlaczego się udaje Ktoś instaluje pakiet przez pomyłkę Publiczna wersja z wyższym numerem ma pierwszeństwo
Główna ochrona Lockfile i przegląd nowych zależności Pakiety z zakresem (scoped) i konfiguracja rejestru, dzięki której nazwy wewnętrzne pozostają prywatne

Dependency confusion zyskało rozgłos w 2021 r., gdy badacz Alex Birsan użył tej techniki, aby uruchomić kod wewnątrz ponad 35 organizacji, w tym Apple, Microsoft i PayPal, w ramach programów bug bounty lub za zgodą.

Jak zapobiegać typosquattingowi

  • Instalować z lockfile w CI. Używać npm ci i jego odpowiedników. Literówka może wtedy trafić do buildu tylko przez przejrzaną zmianę. Zob. co lockfile robi, a czego nie.
  • Przeglądać nowe zależności w pull requestach. Przyglądać się samej nazwie i czytać różnice w lockfile zamiast je pomijać.
  • Sprawdzać przed instalacją. Porównywać nazwę z dokumentacją projektu i zachować ostrożność przy pakiecie z małą liczbą pobrań, świeżą pierwszą publikacją lub bez linku do repozytorium.
  • Ograniczać skrypty instalacyjne. Wyłączać je tam, gdzie pozwala na to build.
  • Odczekać przed wdrożeniem nowych pakietów. Złośliwe pakiety są często wykrywane i usuwane wkrótce po pojawieniu się.
  • Ograniczać zasięg buildu. Build, który może łączyć się tylko ze znanymi hostami, nie wyśle sekretów napastnikowi, nawet jeśli uruchomi się w nim zły pakiet. Zob. politykę ruchu wychodzącego w GitHub Actions.
  • Sprawdzać każdą podpowiedź AI. Przed instalacją upewnić się, że pakiet istnieje i jest tym, o który chodziło.

Warto pamiętać, że typosquat w dniu pojawienia się nie ma CVE, więc skan SCA oparty na biuletynach go nie oznaczy. Więcej informacji zawierają dobre praktyki bezpieczeństwa łańcucha dostaw oprogramowania.

Typosquatting domen

Pierwotna forma ataku, zwana też URL hijacking, polega na rejestracji domeny, na przykład z błędnie zapisaną nazwą banku lub strony logowania. Odwiedzający, którzy pomylą się przy wpisywaniu adresu, trafiają na kopię witryny stworzoną do kradzieży poświadczeń lub rozsyłania złośliwego oprogramowania. Ochrona wygląda inaczej: należy zarejestrować typowe błędne zapisy własnych domen, monitorować rejestracje podobnych domen i używać menedżera haseł, który nie wypełni danych automatycznie na niewłaściwej domenie.

Jak CRACI ogranicza szkody

CRACI nie wykrywa nowych złośliwych pakietów na podstawie zachowania ani reputacji, więc do tego należy użyć firewalla pakietów lub narzędzia do analizy zachowania. CRACI natomiast je powstrzymuje. Jako runner GitHub Actions egzekwuje politykę ruchu wychodzącego, która blokuje połączenia zbędne dla buildu, więc pakiet kradnący sekrety nie ma ich dokąd wysłać, nawet jeśli nikt wcześniej nie widział takiego ataku. Każdy pakiet pobrany przez zadanie jest zapisany, więc gdy atak stanie się znany, można sprawdzić, które buildy pobrały ten pakiet, a wydania z opublikowanym CVE są oznaczane i mogą zostać zablokowane przez bramki polityk. Zob. czym jest atak na łańcuch dostaw.

Typosquatting: najczęściej zadawane pytania

Czym jest typosquatting w prostych słowach?

To zarejestrowanie nazwy niemal identycznej z popularną, na przykład pakietu lub witryny, i czekanie, aż ktoś się pomyli przy jej wpisywaniu. Podróbka dostarcza wtedy złośliwe oprogramowanie lub kradnie poświadczenia.

Jaki jest przykład typosquattingu?

W 2017 r. pakiet npm crossenv podszywał się pod popularny cross-env. Działał jak prawdziwy pakiet, a dodatkowo wysyłał zmienne środowiskowe użytkowników na serwer napastnika.

Jaka jest różnica między typosquattingiem a dependency confusion?

Typosquatting polega na tym, że człowiek myli się przy wpisywaniu nazwy pakietu publicznego. Dependency confusion wykorzystuje dokładną nazwę pakietu prywatnego i liczy na to, że system buildu pobierze zamiast niego wersję publiczną.

Czy typosquatting jest nielegalny?

Publikowanie złośliwego oprogramowania i kradzież poświadczeń są nielegalne w większości miejsc. Typosquatting domen może też naruszać prawo znaków towarowych, na przykład amerykańską ustawę Anticybersquatting Consumer Protection Act.

Czym jest slopsquatting?

To odmiana, w której napastnik rejestruje nazwę pakietu chętnie wymyślaną przez asystentów AI. Każdy, kto zainstaluje zaproponowany pakiet, otrzymuje kod napastnika.

Jak wykrywać typosquatting?

Należy przeglądać nowe zależności pod kątem nazwy i metadanych oraz używać narzędzia, które porównuje nazwy pakietów z popularnymi lub analizuje zachowanie. Skanery oparte na biuletynach pomagają dopiero wtedy, gdy pakiet zostanie zgłoszony.

Powstrzymać pakiet, którego nie wychwycono

Proszę zablokować połączenia wychodzące zbędne dla buildów i zachować zapis każdego pakietu, który pobrały.

Umów demo