OpenSSF (Open Source Security Foundation), utworzona przez Linux Foundation i mająca na celu poprawę bezpieczeństwa oprogramowania open source, wprowadziła otwarty projekt Package Analysis, który rozwija system analizy obecności złośliwego kodu w pakietach. Kod projektu napisany jest w Go i rozpowszechniany na licencji Apache 2.0. Wstępne skanowanie repozytoriów NPM i PyPI przy użyciu proponowanych narzędzi pozwoliło nam zidentyfikować ponad 200 niewykrytych wcześniej szkodliwych pakietów.
Większość zidentyfikowanych problematycznych pakietów manipuluje przecięciem nazw z wewnętrznymi, niepublicznymi zależnościami projektów (atak polegający na pomyleniu zależności) lub wykorzystuje metody typosquattingu (przypisywanie nazw podobnych do nazw popularnych bibliotek), a także wywołuje skrypty uzyskujące dostęp do hostów zewnętrznych podczas proces instalacji. Według twórców Package Analysis większość zidentyfikowanych problematycznych pakietów została najprawdopodobniej stworzona przez badaczy bezpieczeństwa uczestniczących w programach bug bounty, ponieważ przesyłane dane ograniczają się do nazwy użytkownika i systemu, a działania są wykonywane jawnie, bez prób ukryć swoje zachowanie.
Pakiety zawierające złośliwą aktywność obejmują:
- Pakiet PyPI discordcmd, który rejestruje wysyłanie nietypowych żądań do raw.githubusercontent.com, Discord API i ipinfo.io. Określony pakiet pobrał kod backdoora z GitHuba i zainstalował go w katalogu klienta Discord Windows, po czym rozpoczął proces wyszukiwania tokenów Discord w systemie plików i wysyłania ich na zewnętrzny serwer Discord kontrolowany przez atakujących.
- Pakiet Colorss NPM próbował również wysłać tokeny z konta Discord na serwer zewnętrzny.
- Pakiet NPM @roku-web-core/ajax - podczas procesu instalacji wysłał dane o systemie i uruchomił procedurę obsługi (odwrotną powłokę), która akceptowała połączenia zewnętrzne i uruchamiała polecenia.
- Pakiet PyPI secrevthree - uruchamia odwrotną powłokę podczas importowania określonego modułu.
- Pakiet NPM random-vouchercode-generator - po zaimportowaniu biblioteki wysłał żądanie do zewnętrznego serwera, który zwrócił polecenie i czas, w którym należy je uruchomić.
Praca analizy pakietów sprowadza się do analizowania pakietów kodu w kodzie źródłowym w celu nawiązywania połączeń sieciowych, uzyskiwania dostępu do plików i uruchamiania poleceń. Dodatkowo monitorowane są zmiany stanu pakietów w celu wykrycia dodania szkodliwych wstawek w jednej z wersji początkowo nieszkodliwego oprogramowania. Do monitorowania pojawiania się nowych pakietów w repozytoriach oraz wprowadzania zmian we wcześniej opublikowanych pakietach wykorzystywany jest pakiet Package Feeds, który ujednolica pracę z repozytoriami NPM, PyPI, Go, RubyGems, Packagist, NuGet i Crate.
Analiza pakietów obejmuje trzy podstawowe komponenty, które można stosować zarówno w połączeniu, jak i osobno:
- Harmonogram uruchamiania analizy pakietów na podstawie danych z Package Feeds.
- Analizator, który bezpośrednio bada paczkę i ocenia jej zachowanie przy użyciu technik analizy statycznej i dynamicznego śledzenia. Test przeprowadza się w izolowanym środowisku.
- Moduł ładujący, który umieszcza wyniki testów w magazynie BigQuery.
Źródło: opennet.ru