Często najprostsze pomysły są genialne. Jednak najtrudniej jest być tym pierwszym, który wpadnie na pomysł i zastosuje go.
Jeden z takich konceptów należy do Alexa Birsana, badacza, który wymyślił metodę włamania do 35 dużych firm technologicznych, w tym Microsoft, Apple, Yelp, Paypal, Shopify, Netflix, Tesla i Uber, dzięki czemu zyskał 130 000 $ z programów Bug Bounty. Może się wydawać, że to dużo, ale za pewne o wiele więcej zapłaciłby znane grupy hackerskie, za sprzedanie im prostej, skutecznej metody włamania się i kradzieży danych z największych światowych korporacji. Chodzi o atak nazwany przez Alexa „Dependency Confusion”.
Metoda „Dependency Confusion”
Jak wskazuje nazwa, ta metoda opiera się na tak zwanym „zamieszaniu zależności” (ang. dependency confusion). Zasadniczo wykorzystuje zamieszanie związane z możliwymi lokalizacjami, których programy komputerowe (w tym przypadku popularne menedżery pakietów, takie jak npm, PyPI i RubyGems) używają do znajdowania plików, od których zależny jest projekt.
Wszystkie takie „menedżery” pakietów zaakceptują zależności wymienione w kodzie źródłowym jako nazwy i spróbują rozwiązać, co miał na myśli programista. Będą szukać zależności lokalnie, na komputerze, na którym znajduje się projekt oraz sprawdzą publiczny, dostępny w Internecie katalog menedżera pakietów.
Birsan stwierdził, że firmy, których dotyczy problem, używały lokalnie przechowywanych plików, których nie było w repozytoriach open-source.
Poniższy przykład pokazuje skrócony plik package.json, który zawiera listę zależności dla prywatnego projektu utworzonego przez PayPal. Birsan zauważył, że chociaż niektóre zależności, takie jak „express” w tym przykładzie, były obecne w publicznym repozytorium npm, inne, takie jak „pplogger”, były zamiast tego prywatnie utworzonymi pakietami npm PayPal, używanymi i przechowywanymi wewnętrznie przez firmę.
Autor zastanawiał się, czy złośliwe oprogramowanie można wprowadzić do takich projektów, tworząc w publicznym repozytorium npm pakiety pasujące do nazw lokalnych zależności.
Aby przetestować swój pomysł, zaczął szukać skutecznych miejsc, w których mógłby przesłać własne „złośliwe” pakiety do rejestru npm pod wszystkimi nieodebranymi nazwami. Ponieważ npm pozwala na automatyczne wykonanie dowolnego kodu podczas instalacji pakietu, jego kod był w stanie wykonać „Call Home” z każdego komputera, na którym został zainstalowany.
Komunikacja „Call Home”
Przeniesienie informacji na jego własny serwer z głębi dobrze chronionych sieci korporacyjnych stanowiło kolejny problem, który został rozwiązany za pomocą eksfiltracji DNS. Eksfiltracja przez DNS to sposób na wymianę danych między dwoma komputerami bez bezpośredniego połączenia. Protokół DNS cały czas nie jest wystarczająco monitorowany w organizacjach, co powoduje, że przesyłanie przez niego informacji jest możliwe w sposób niezauważalny.
Podczas fazy eksfiltracji klient wysyła żądanie rozpoznania nazwy DNS do zewnętrznego adresu serwera DNS. Zamiast odpowiadać rekordem A, serwer nazw atakującego odpowie rekordem CNAME, MX lub TXT, co umożliwia przesłanie dużej ilości nieustrukturyzowanych danych między atakującym a ofiarą.
Oprócz rozszerzenia swojego pierwotnego pomysłu na menedżery pakietów Python i Ruby, Birsan przetestował również, co by się stało, gdyby załadował pakiet z wyższym numerem wersji niż aktualne ostatnie wydanie. W takich przypadkach wyższa wersja w repozytorium publicznym miała pierwszeństwo przed starszą wersją lokalną. To jeszcze bardziej zwiększyło skuteczność tej metody.
Nagrody pieniężne
Jak dotąd Alex Birsan otrzymał 130 000 dolarów z programów nagród za podatności. To dużo pieniędzy, ale wyobraź sobie, ile mógłby zarobić, sprzedając tę sztuczkę oferentowi. Wszyscy znamy druzgocące skutki udanych ataków na łańcuch dostaw. W naszej pamięci są takie ataki jak: SolarWinds, Equifax, NotPetya czy CCleaner. Gdyby któreś ze znanych malware zostały wyposażone w tą metodę, skutki były tragiczne. Według raportu Sonatype o stanie łańcucha dostaw oprogramowania w 2020 r, ataki takie, wymierzone w projekty oprogramowania open-source stanowią poważny problem dla przedsiębiorstw, ponieważ 90% wszystkich aplikacji zawiera kod open-source, a 11% z nich ma znane luki w zabezpieczeniach.
Poprawki
Większość „naruszonych” firm podjęła działania, aby zapobiec tego typu atakom, ale metoda manipulacji łańcuchem dostaw jest nadal użyteczna. Podstawowy problem musi zostać rozwiązany dla całego ekosystemu, a nie dla pojedynczych firm. Zwróćmy uwagę, że pliki package.json umożliwiają wyświetlanie zależności jako pełnych adresów URL, co może zapewnić pewną odporność na tę formę ataku. Najbardziej satysfakcjonującą częścią tej metody jest to, że nie opiera się na inżynierii społecznej. Wystarczy znać nazwy plików i można realizować plan.