Czyli jak się dostać do dużej firmy bocznymi drzwiami.
Przez zależności do celu
Nowy typ ataku ujawniony w zeszłym miesiącu dotyka coraz więcej firm, a zeszłym tygodniu na celowniku przestępców znalazły się Microsoft, Amazon, Slack, Lyft, Zillow. W ubiegłych tygodniach także Apple czy Tesla padły ofiarą podobnego ataku, który – jak potwierdzili to analitycy bezpieczeństwa – pozwalał na wykonanie nieautoryzowanego kodu w sieciach ofiar.
Na razie nie potwierdzono aby ataki na Amazon, Slack, Lyft i Zillow także pozwoliły napastnikom na uruchomienie złośliwego oprogramowania. Ale, jak wskazuje firma Sonatype, repozytoria kodów npm i PyPi zostały zalane ponad 5000 podejrzanych pakietów:
Biorąc pod uwagę codzienną liczbę podejrzanych pakietów npm przechwytywanych przez zautomatyzowane systemy wykrywania złośliwego oprogramowania Sonatype, spodziewamy się tylko wzrostu tego trendu, a napastnicy korzystają z zamieszania związanego z zależnościami, aby prowadzić jeszcze dalej idące działania.
Na czym to polega?
Celem ataków jest wykonanie nieautoryzowanego kodu w wewnętrznym systemie budowania oprogramowania administrowanym przez firmę-ofiarę. Technika ta polega na przesyłaniu złośliwych pakietów do publicznych repozytoriów kodu i nadawaniu im nazwy identycznej z nazwą pakietu przechowywanego w wewnętrznym repozytorium dewelopera.
To się często udaje bo aplikacje do zarządzania oprogramowaniem deweloperów często faworyzują zewnętrzne biblioteki kodu nad wewnętrzne, a więc pobierają i używają złośliwego pakietu zamiast zaufanego. Alex Birsan - badacz, który nakłonił Apple i 34 inne firmy do uruchomienia pakietów typu proof-of-concept, które przesłał do npm i PyPi – nazywa te ataki chain attack dependency confusion albo namespace confusion ponieważ opierają się na zależnościach oprogramowania i wprowadzających w błąd nazwach software’u.
Zależności oprogramowania to biblioteki, które aplikacja musi uwzględnić, aby działała. Zwykle programiści ściśle strzegą nazw zależności w swoich systemach kompilacji oprogramowania. Jednak Birsan odkrył, że nazwy te często wyciekają na zewnątrz. Tak dzieje się na przykład gdy pliki package.json - które zawierają różne metadane istotne dla projektu programistycznego - są osadzane w publicznych plikach skryptów. Wewnętrzne ścieżki i publiczne skrypty, które zawierają wywołania, to prosty przepis na wyciek nazw zależności.
Załóżmy, że atakujący poznał takie nazwy zależności, które nie powinny wydostać się poza firmę. Jeśli plik o tej samej nazwie nie jest dostępny w publicznym repozytorium, haker może przesłać na publiczne repozytorium złośliwy pakiet i nadać mu tę samą nazwę pliku i numer wersji, który jest wyższy niż autentyczny plik przechowywany wewnętrznie w firmie-ofierze. W wielu przypadkach programiści albo przypadkowo używają złośliwej biblioteki, albo robi to automatycznie ich świeżo skompilowana aplikacja.
Narażeni głównie deweloperzy?
To sprytny atak - podsumowuje HD Moore, współzałożyciel i dyrektor generalny platformy Rumble. Domyślam się, że dotyczy to wielu ludzi. Najbardziej zagrożone są organizacje, które używają dużej liczby pakietów wewnętrznych i nie podejmują specjalnych kroków, aby zapobiec zastąpieniu pakietów publicznych pakietami wewnętrznymi. To może wskazywać, że głównym celem nowego typu ataku mogą być finntechy, deweloperzy czy software house’y.Sprawdź oferty pracy na TeamQuest
Dodajmy, że tysiące plików, które zalały npm i PyPi, zawierały w większości nieszkodliwe skrypty, które wysyłały badaczom adres IP i inne ogólne szczegóły komputera, na którym są uruchamiane. To nie powinno jednak uśpić niczyjej czujności – nic nie stoi na przeszkodzie aby skrypty zostały nagle podmienione na bardziej złośliwe. Niewykluczone, że część atakujących dopiero bada możliwości nowego wektora ataku. Zresztą już mamy przecież konkretne ataki, np. zgłoszono pliki przesłane do npm, które próbowały ukraść hashe haseł i historię poleceń Basha.