Skip to content

Kompromis razvojne radne stanice: zlonamjerna ovisnost ili odgovor IDE proširenja

Brojevi za hitne slučajeve razlikuju se u zavisnosti od zemlje. Ova stranica koristi 911, broj za Sjedinjene Države i Kanadu. Mnoge druge zemlje koriste 112, 999 ili neki drugi broj. Pronađite broj za svoju zemlju.

Otkrivanje softverskog paketa koji ste upravo instalirali putem npm install, pip install, cargo build, gem install, ili go get, ili novo ažurirani Visual Studio Code, Cursor ili JetBrains IDE ekstenzija, je zlonamjerni typosquat, korisni teret konfuzije ovisnosti ili oteto uzvodno izdanje predstavlja hitnu kritičnu infrastrukturu. Za razliku od standardnih potrošačkih računara, softverski inženjer, DevOps arhitekta ili radna stanica naučnika podataka drži direktne kriptografske ključeve za proizvodna okruženja u oblaku, spremišta izvornog koda, registre kontejnera, CI/CD cevovode i baze podataka korisnika. Kada zlonamerno preinstall ili postinstall skripta unutra package.json, naoružani setup.py u Python točku ili kompromitovanom .vsix ekstenzija se izvršava na vašem laptopu, radi sa vašim punim korisničkim privilegijama i odmah prikuplja -/.aws/credentials, -/.ssh/id_ed25519, -/.npmrc, -/.pypirc, -/.kube/config, lokalni .env datoteke, macOS Keychain ili Linux libsecret unose i aktivne kolačiće sesije pretraživača u roku od nekoliko sekundi.

Ako ste upravo shvatili da ste izvršili zlonamjernu ovisnost otvorenog koda, klonirali i izgradili naoružano spremište (kao što je lažni projekt tehničkog intervjua od prevare regruta), ili instalirali trojaniziranu IDE ekstenziju, svaka sekunda vašeg stroja ostaje povezana s mrežom omogućava prijenosu da se okrene u vaš korporativni oblak ili objavi samopropagirajuće registre za pakete. Ako napad uključuje iznudu, fizičke prijetnje ili kritičan poremećaj javne infrastrukture, nazovite svoj lokalni broj za hitne slučajeve (911 u Sjedinjenim Državama i Kanadi, 112 širom Evropske unije, 999 u Ujedinjenom Kraljevstvu) ili se posavjetujte s našim međunarodnim brojevi za hitne slučajeve imenik. Odmah slijedite ove procedure zadržavanja, forenzičke trijaže i rotacije kriptografskih ključeva.

Uradi ovo sada

  1. Odmah prekinite sve mrežne veze na radnoj stanici za razvojne programere (isključite Wi-Fi, isključite Ethernet i ukinite aktivne VPN ili SSH tunele), ali NEMOJTE još uvijek isključiti ili ponovno pokrenuti stroj: Isključivanje Etherneta i isključivanje Wi-Fi-ja zaustavlja aktivnu obrnutu školjku, C2 beacon ili automatizirane crve da koriste dodatne zlonamjerne bufile ex-trake. Držite mašinu uključenu u vanmrežnom stanju (ili ga suspendirajte tek nakon što snimite promjenjive liste procesa) kako biste mogli provjeriti pokrenute podređene procese, otvorene mrežne utičnice, povijest ljuske i tačno koje .env i datoteke vjerodajnica koje se nalaze na disku u trenutku izvršenja.
  2. Koristite zaseban, čist uređaj (kao što je vaš pametni telefon na mobilnim podacima ili netaknuti laptop) da obavijestite svoj sigurnosni operativni centar (SOC) i opozovete svoje jednostruke prijave (SSO) i Cloud IAM sesije: Nikada se nemojte prijavljivati ​​na AWS, GCP, Azure, GitHub ili Okta sa zaražene ključne radne stanice da biste rotirali. Ako kradljivac koji je rezidentan u memoriji, zlonamjerna IDE ekstenzija ili shell hook nadgleda vaš terminal i pretraživač, svaki novi token koji generišete na toj mašini se trenutno hvata.
  3. Opozovite i rotirajte svoje programerske tokene velikog radijusa po strogom prioritetu u prvih 15 minuta:
  4. Prioritet 1 (Cloud & Kubernetes): Deaktivirajte sve lokalne AWS IAM pristupne ključeve (AKIA...), opozovite zadane vjerodajnice Google Cloud aplikacije (gcloud auth application-default revoke), poništiti Azure CLI tokene (az account clear + Opoziv sesije Entra ID) i rotirajte Kubernetes kubeconfig klijentske certifikate ili tokene računa usluge.
  5. Prioritet 2 (izvorni kod i CI/CD): Izbrišite sve GitHub, GitLab i Bitbucket SSH javne ključeve, tokene ličnog pristupa (ghp_..., github_pat_..., glpat-...), i OAuth CLI tokeni (-/.config/gh/hosts.yml), i pregledajte postavke webhooka spremišta i GitHub Akcije / GitLab CI tajne.
  6. Prioritet 3 (registri paketa i kontejneri): opozovite npm automatizaciju i objavite tokene (-/.npmrc), PyPI API tokeni (-/.pypirc), Docker Hub / GHCR / ECR tokeni za prijavu (-/.docker/config.json), i Terraform Cloud tokeni (-/.terraform.d/credentials.tfrc.json).
  7. Provjerite npm, PyPI, Cargo i GitHub ODMAH da biste potvrdili da zlonamjerni softver već nije koristio vaše lokalne tokene za objavljivanje verzije vaših vlastitih paketa zaraženih crvima ili za pokretanje zlonamjernih urezivanja: Moderni sadržaji u lancu nabavke (kao što je ua-parser-js, coa, rc, ctx, lottie-player, i ultralytics kompromisi) automatski analiziraju žrtvu programera -/.npmrc, -/.pypirc, i -/.gitconfig da odmah objavite backdoored verzije zakrpa svakog otvorenog koda ili internog paketa koji programer održava ili kreira skrivene tokove rada GitHub Actions u spremištima programera.
  8. Skenirajte svaki direktorij projekta na radnoj stanici kako biste napravili kompletan popis izloženih .env datoteke, nizove za povezivanje baze podataka i tvrdo kodirane API ključeve: Prije brisanja radne stanice, pokrenite skriptu van mreže na izolovanoj mašini da navedete sve .env, .env.local, terraform.tfstate, i application.yml datoteku na vašem tvrdom disku tako da možete rotirati svaku tajnu treće strane (Stripe, Twilio, SendGrid, OpenAI, Anthropic, Datadog, Slack, Postgres, MongoDB i Redis vjerodajnice) koju je vaš korisnički račun mogao pročitati.
  9. Ukinite sve sesije preglednika i veze hardverskog novčanika: Budući da kompromitacije programera često postavljaju alate za krađu informacija o robi (kao što su Lumma, RedLine ili Atomic macOS Stealer) zajedno sa sakupljačima vjerodajnica specifičnih za programere, slijedite naše Vodič za otmicu kolačića sesije i opoziv tokena za krađu informacija i, ako se bavite razvojem Web3 ili držite digitalnu imovinu, izvršite naše Vodič za kompromitiranje kriptovalute novčanika i fraze za početak.

Danger

Zašto trčanje npm uninstall <package> ili pip uninstall <package> NE čisti vašu radnu stanicu: U Node.js (npm, yarn, pnpm) i Python (pip) ekosistema, zlonamjerni kod gotovo nikada ne čeka dok vas import ili require() biblioteku u kodu vaše aplikacije. Umjesto toga, napadači postavljaju teret unutar kukica životnog ciklusa paketa (preinstall, install, ili postinstall in package.json, ili izvođenje na najvišem nivou iznutra setup.py tokom izgradnje izvora distribucije). Trenutak kada ste pritisnuli Enter on npm install ili pip install, napadačeva proizvoljna shell skripta ili binarni program koji se izvršava na vašem operativnom sistemu, kopirao je vaš -/.ssh, -/.aws, i .env datoteke na eksterni server, i često su u njega ubrizgali trajni backdoor -/.bashrc, -/.zshrc, crontab, ili -/Library/LaunchAgents. Deinstaliranje paketa nakon toga samo briše fasciklu unutar node_modules ili site-packages dok ostavljate ukradene ključeve u rukama napadača i mehanizam postojanosti koji radi na vašem OS.


Stablo odluke: kompromisna trijaža lanca snabdevanja razvojne radne stanice

Koristite ovaj radni tok odgovora na incidente kako biste zadržali radijus eksplozije u vašem osobnom razvojnom okruženju i proizvodnoj korporativnoj infrastrukturi:

flowchart TD
    Detect["Sumnja se na zlonamjerni npm / PyPI / Cargo paket, trojanizirano IDE proširenje ili lažni repo regruter izvršen"] --> Isolate["KORAK 1: Odmah isključite Wi-Fi i Ethernet radne stanice (ostavite mašinu uključenom za vanmrežnu trijažu)"]

    Isolate --> ScopeCheck{"Da li se izvršenje dogodilo na Host OS-u ili unutar izolovanog kontejnera/VM-a?"}
    ScopeCheck -->|"Host OS (Mac / Linux / Windows / WSL2)"| FullCompromise["Pretpostavimo da je 100% kućnog direktorija (-/.aws, -/.ssh, -/.npmrc, .env, kolačići pretraživača) eksfiltrirano"]
    ScopeCheck -->|"DevContainer / Docker"| MountCheck["Provjerite nosače volumena (-v -/.ssh, -v -/.aws, Docker Socket /var/run/docker.sock ili Host Network)"]
    MountCheck --> FullCompromise

    FullCompromise --> CleanDevice["KORAK 2: Sa zasebnog čistog uređaja, upozorite SOC i opozovite Cloud IAM, SSO, GitHub/GitLab i tokene registra"]

    CleanDevice --> WormCheck["KORAK 3: Revizija GitHub urezivanja, CI/CD tokova rada i npm/PyPI objavljenih verzija za automatizirano širenje crva"]

    WormCheck --> OfflineAudit["KORAK 4: Na vanmrežnoj radnoj stanici, inventar svih .env datoteka, Terraform State Files i Persistence Backdoors"]

    OfflineAudit --> RotateEnv["KORAK 5: Rotirajte svaku lozinku baze podataka, tajnu web-dojavnika, GPG ključ za potpisivanje i API ključ koji se nalazi u .env / State datotekama"]

    RotateEnv --> RebuildOS["KORAK 6: Obrišite radnu stanicu putem ponovne instalacije čistog OS-a -> Primijenite hardverski podržane SSH ključeve, OIDC i --ignore-scripts"]

Razumijevanje načina na koji se izvode lanac nabavke programera i IDE vektori

Moderni napadi na softverske inženjere ciljaju na četiri različite izvršne površine na radnoj stanici. Identificiranje koji je vektor pogodio vašu mašinu govori vam kojim privilegijama i putanjama datoteka je pristupilo korisnom učitavanju:

1. Zlonamjerne kuke životnog ciklusa paketa (npm, pnpm, yarn, pip, cargo, gem)

  • Node.js (package.json skripte): Podrazumevano, radi npm install automatski izvršava bilo koju naredbu ljuske definiranu u "preinstall", "install", ili "postinstall" polja package.json, ne samo za paket najviše razine koji ste upisali, već i za svaku tranzitivnu ovisnost u stablu. Napadači koriste tipski skvot (npr. reqeusts, crossenv, lodahs), zabuna ovisnosti (objavljivanje javnog paketa na npm ili PyPI s potpuno istim imenom i većim brojem verzije, kao što je 99.99.9, kao interni privatni paket vaše kompanije), ili preuzimanje računa za održavanje da biste ubacili jedan red kao "postinstall": "node index.js" u paket.
  • Python (setup.py i .pth datoteke): Kada pip instalira izvornu distribuciju (sdist .tar.gz), izvršava se setup.py sa punim privilegijama Python interpretatora. Čak i kada instalirate unaprijed kompajlirane binarne kotače (.whl) koji se ne izvršavaju setup.py tokom instalacije, napadači uključuju zlonamjerne .pth (konfiguracija putanje) datoteke direktno ubačene site-packages/. Bilo koja linija unutar a .pth fajl koji počinje sa import se automatski izvršava od strane Python interpretera svaki put python se pokreće na tom sistemu.
  • Rust (build.rs) i Go: U Rustu, Cargo automatski kompajlira i izvršava build.rs ne samo tokom cargo build ili cargo run, ali odmah kada rust-analyzer (unutar VS Code ili IntelliJ) otvara fasciklu projekta za indeksiranje tipova. Samo otvaranje kloniranog Rust spremišta u vašem IDE-u sa rust-analyzer enabled izvršava proizvoljan kod iznutra build.rs prije nego što upišete naredbu terminala.

2. Zlonamjerna ili oteta IDE proširenja (VS Code Marketplace, OpenVSX, JetBrains)

  • Visual Studio Code, Cursor, Windsurf i VSCodium ekstenzije (.vsix) pokrenite u glavnom procesu Node.js Extension Host na vašoj radnoj stanici sa nultim sandboxingom. Bilo koja instalirana ekstenzija ima potpuni pristup za čitanje/pisanje vašem cijelom sistemu datoteka, može pokrenuti tihe podređene procese (child_process.exec), može čitati svaki otvoreni bafer uređivača i .env datoteku i može spojiti vaš integrirani terminal.
  • Akteri prijetnji rutinski objavljuju lažna proširenja tema (Darcula Official), falsifikovani pomoćnici za AI kodiranje, ili typosquatted linter/Prettier ekstenzije koje tiho preuzimaju drugu fazu infostealer-a ili reverse shell u trenutku kada se IDE pokrene.

3. Oružana Git repozitorija i automatsko izvršavanje radnog prostora IDE (zamke "Lažni regruter/testiranje odvesti kući")

  • Grupe koje sponzoriše severnokorejska država (Contagious Interview / Lazarus Group) i kripto-fokusirani akteri prijetnji rutinski prilaze programerima na LinkedIn-u, Upwork-u ili GitHubu predstavljajući se kao regruteri ili tehnički direktori koji nude visoko plaćene udaljene uloge. Oni traže od programera da klonira Bitbucket ili GitHub spremište za "15-minutnu procjenu otklanjanja grešaka" ili "Web3 gaming MVP pregled."
  • Ova spremišta sadrže skrivene zamke izvršenja koje se pokreću bilo kada se otvore u IDE-u ili tokom izgradnje:
  • .vscode/tasks.json sa "runOn": "folderOpen": Automatski pokreće pozadinsku shell skriptu čim kliknete na "Da, vjerujem autorima" u VS Code-u.
  • Malicious .git/hooks/ ili .gitmodules: Iskorištava konfiguraciju Git podmodula ili gradi skripte (Makefile, webpack.config.js, next.config.js, vite.config.ts) koji učitavaju obfuskovane JavaScript korisne podatke (često dopunjene hiljadama razmaka van ekrana da bi se sakrili u koloni 2.000+) pozivajući eksterni C2 server.

Faza 1: Kompletna matrica akreditiva programera i tajne rotacije

Koristeći čisti sekundarni laptop ili pametni telefon, radite sistematski kroz ovaj inventar akreditiva programera od 12 tačaka. Pretpostavimo da bilo koja datoteka koju može čitati vaš ne-root OS korisnički račun (chmod 600 ili 644 u vlasništvu vašeg korisnika) je učitano na server napadača u roku od 3 sekunde od izvršenja korisnog učitavanja.

Credential Category Tačne lokalne putanje datoteka prikupljene na radnoj stanici Obavezna radnja opoziva i rotacije (sa čistog uređaja)
1. AWS IAM & SSO -/.aws/credentials
-/.aws/config
-/.aws/sso/cache/*.json
-/.aws/cli/cache/*.json
1. U AWS IAM konzoli, odmah Deaktivirajte i izbrišite sve statičke pristupne ključeve (AKIA...) pohranjen na tom laptopu.
2. U AWS IAM Identity Center (SSO), opozovite aktivne korisničke sesije i izbrišite registrirane tokene uređaja OIDC klijenta.
3. Revizija AWS CloudTrail za GetCallerIdentity, CreateUser, CreateAccessKey, AssumeRole, ListBuckets, i SecretsManager:GetSecretValue pozivi koji potiču od neobičnih IP adresa ili korisničkih agenata (Boto3, aws-cli, Go-http-client).
2. Google Cloud (GCP) i Firebase -/.config/gcloud/credentials.db
-/.config/gcloud/access_tokens.db
-/.config/gcloud/application_default_credentials.json
-/.config/configstore/firebase-tools.json
*-service-account.json
1. Idite na myaccount.google.com/permissions i opozovite pristup za Google Cloud SDK i Firebase CLI.
2. U GCP Console > IAM & Admin > Service Accounts, izbrišite bilo koji JSON ključ za račun usluge (private_key_id) koji je preuzet na čvrsti disk radne stanice.
3. Pregledajte Dnevnike revizije u oblaku za neovlašteno povezivanje IAM-a ili kreiranje Compute Engine-a.
3. Microsoft Azure & Entra ID -/.azure/msal_token_cache.bin
-/.azure/accessTokens.json
-/.azure/azureProfile.json
1. Pokrenite Entra ID Admin Revoke-MgUserSignInSession -UserId <your-user-id> da poništite sve tokene za osvježavanje i primarne tokene za osvježavanje (PRT).
2. Izbrišite sve tajne ili certifikate klijenta principala usluge pohranjene lokalno.
4. Kubernetes & Helm -/.kube/config
-/.kube/cache/
-/.config/helm/registry/config.json
1. Ako -/.kube/config sadržavao statičke klijentske certifikate (client-certificate-data / client-key-data) ili dugovječne ServiceAccount bearer tokene, opozovite certifikat putem CA klastera (CSR / RBAC uklanjanje) ili izbrišite i ponovo kreirajte ServiceAccount tajna odmah.
2. Provjera dnevnika revizije Kubernetes API servera za exec, pods, ili secrets listati/dobijati glagole.
5. GitHub, GitLab i Bitbucket -/.ssh/id_ed25519, -/.ssh/id_rsa
-/.config/gh/hosts.yml
-/.git-credentials, -/.netrc
-/.gitconfig
1. Idite na github.com/settings/keys (i GitLab/Bitbucket ekvivalenti) i Izbriši SSH javni ključ i GPG/SSH ključ za potpisivanje sa zaražene mašine.
2. Idite na github.com/settings/tokens i github.com/settings/applications da opozovete sve tokene ličnog pristupa (ghp_, github_pat_), OAuth aplikacije (GitHub CLI, VS Code, Git Credential Manager) i aktivne web sesije.
3. Provjerite Sigurnosni dnevnik (github.com/settings/security-log) za repo.clone, org.Invite_member, ili hook.create.
6. GPG & ključevi za potpisivanje koda -/.gnupg/private-keys-v1.d/
-/Library/Keychains/login.keychain-db (Apple Developer ID / .p12)
1. Ako je vaš GPG privatni ključ pohranjen na disku bez hardverske pametne kartice (YubiKey OpenPGP) i šifra je keširana gpg-agent ili nedavno otkucani, odmah generirajte i objavite GPG certifikat za opoziv i uklonite GPG ključ sa GitHub/GitLab-a.
2. Opozovite sve izvezene Apple Developer .p12 ili Android Keystore .jks certifikati za potpisivanje koda pohranjeni na stroju.
7. Registri paketa (npm, PyPI, Cargo, RubyGems, NuGet) -/.npmrc (_authToken=...)
-/.pypirc
-/.cargo/credentials.toml
-/.gem/credentials
1. Prijavite se na npmjs.com > Pristupni tokeni, pypi.org > Postavke računa > API tokeni, crates.io > Postavke računa > API tokeni i rubygems.org i Odmah opozovite sve aktivne tokene.
2. Provjerite svoje objavljene pakete (pogledajte Fazu 2 ispod) kako biste potvrdili da napadač nije gurnuo backdoored izdanje u posljednjih nekoliko sati.
8. Docker i registri kontejnera -/.docker/config.json (Baza64 auths za Docker Hub, GHCR, ECR, GCR, Quay) 1. Zapamtite to "auth" in -/.docker/config.json (kada se ne koristi credsStore: osxkeychain ili wincred) je samo nešifrirani Base64 username:password_or_token.
2. Opozovite tokene ličnog pristupa u Docker Hub-u (hub.docker.com/settings/security), GitHub Registar kontejnera i Quay.io.
9. Infrastruktura kao kod (Terraform / Pulumi / Ansible Vault) -/.terraform.d/credentials.tfrc.json
**/terraform.tfstate (Lokalni državni fajlovi)
-/.pulumi/credentials.json
-/.vault-token
1. Opozovite Terraform Cloud / Enterprise korisničke API tokene i HashiCorp Vault tokene.
2. KRITIČNO: Bilo koji lokalni terraform.tfstate datoteka na vašem disku sadrži lozinke otvorenog teksta, RDS glavne vjerodajnice, privatne TLS ključeve i IAM tajne ključeve za svaki resurs kojim upravlja ta država. Rotirajte svaku tajnu navedenu unutar lokalnog .tfstate datoteke.
10. Baze podataka i keširanje CLI historije -/.psql_history, -/.pgpass
-/.mysql_history, -/.my.cnf
-/.rediscli_history
-/.mongodb/mongosh/
DBeaver / TablePlus / DataGrip konfiguracije
1. GUI menadžeri baza podataka (TablePlus, DBeaver, DataGrip, Postico, pgAdmin, MongoDB Compass) lokalno pohranjuju šifrirane ili zamagljene lozinke baze podataka koje kradljivci rutinski dešifriraju.
2. Rotirajte korisničke lozinke baze podataka za bilo koju scensku ili proizvodnu bazu podataka koja je dostupna putem VPN-a, bastiona ili javnog IP-a sa vaše radne stanice.
11. Aplikacija .env Datoteke i SaaS ključevi trećih strana **/.env, **/.env.local, **/.env.production, **/.env.development Rotirajte svaki API ključ pohranjen unutar lokalnog projekta .env fajlovi: Stripe (sk_live_...), OpenAI (sk-...), antropski (sk-ant-...), Twilio, SendGrid, AWS SES, Slack Bot tokeni (xoxb-...), Discord bot tokeni, Datadog, Sentry, Supabase (service_role), Firebase Admin i tajne potpisivanja JWT.
12. Poznati SSH hostovi i Bastion Jump serveri -/.ssh/config
-/.ssh/known_hosts
-/.zsh_history, -/.bash_history
Napadači odmah analiziraju -/.ssh/config i -/.zsh_history da pronađete svaki interni server IP, bastion host i korisničko ime na koje se povežete, a zatim koristite ukradeno -/.ssh/id_ed25519 ključ za prijavu direktno na te servere. Uklonite svoj stari javni ključ iz-/.ssh/authorized_keys na svakom udaljenom Linux serveru i provjerite /var/log/auth.log na tim serverima za neovlaštene SSH prijave.

Faza 2: Provjera automatiziranog širenja crva u lancu snabdijevanja (GitHub, CI/CD i registri paketa)

Za razliku od generičkog zlonamjernog softvera, korisni sadržaji usmjereni na programere su posebno programirani da se samoproširuju kroz lanac nabavke softvera u roku od nekoliko sekundi od slijetanja na vašu radnu stanicu. Prije nego što se vratite na čišćenje vašeg laptopa, koristite čisti uređaj da provjerite da vaši ukradeni akreditivi nisu već korišteni za zarazu vašeg tima ili vaših daljnjih korisnika:

  1. Provjerite svoja GitHub / GitLab spremišta za tiha pozadinska vrata i zlonamjerne tokove rada:
  2. Provjeri .github/workflows/*.yml u svim repozitorijumima kojima imate pristup za pisanje: Nedavni crvi lanca snabdevanja (Shai-Hulud, tj-actions/changed-files kompromise i ultralytics eksploatacije) automatski koriste ukradene programerske tokene da učine zlonamjerni tok rada GitHub Actions ili modificiraju postojeći radni tok da ga izbace ${{ toJSON(secrets) }} (eksfiltriranje tajni implementacije proizvodnje vaše organizacije iz pokretača GitHub Actions).
  3. Provjerite nedavna urezivanja po autoru i vremenskoj oznaci izvršioca: Imajte na umu da svako može krivotvoriti Git ime autora i vremensku oznaku (git commit --date="..." --author="..."). U GitHubu pregledajte Push događaje u spremištu Prikaz aktivnosti ili organizaciju Revizijski dnevnik (repo.push), koji bilježe pravu vremensku oznaku na strani servera i tačan token za autentifikaciju (oauth_application_id ili ssh_key_fingerprint) koji je gurnuo kod.
  4. Provjerite Webhookove spremišta, ključeve za implementaciju i saradnike: pogledajte pod Postavke > Webhookovi, Postavke > Ključevi za implementaciju i Postavke > Saradnici i timovi u vašim spremištima kako biste osigurali da napadač nije dodao trajni ključ za čitanje ili pisanje na eksterni server za postavljanje.
  5. Provjerite npm, PyPI, Cargo i Docker Hub za neovlaštena izdanja paketa:
  6. Ako ste održavatelj ili saradnik na bilo kojem javnom ili privatnom paketu na npm, PyPI, RubyGems ili Crates.io, provjerite karticu Verzije / Istorija izdanja za svaki paket pod vašim računom.
  7. Ako je verzija zakrpe (npr. 1.4.2 nakon vašeg posljednjeg legitimnog puštanja na slobodu 1.4.1) je objavljen u vremenskom okviru kompromitovanja vaše radne stanice, odmah odbacite ili povucite tu verziju (npm deprecate <pkg>@<version> "CRITICAL: Compromised version, do not use" ili povucite na PyPI) i kontaktirajte npm podršku (security@npmjs.com / GitHub Security) ili PyPI Security (security@pypi.org) da biste uklonili zlonamjerni artefakt i verzije zahvaćene karantenom.
  8. Provjerite tajnu eksfiltraciju TruffleHog / Git Clone:
  9. Kradljivci lanca nabavke često pozivaju GitHub/GitLab API koristeći vaš ukradeni token za kloniranje svakog privatnog organizacijskog spremišta kojem imate pristup i pokretanje automatiziranih tajnih skenera (TruffleHog ili Gitleaks) u odnosu na cjelokupnu historiju udruživanja vaše kompanije. Ako je vaša organizacija ikada slučajno predala tajnu Git historiji privatnog spremišta, a da je nije rotirala, rotirajte te povijesne tajne sada.

Faza 3: Forenzička trijaža van mreže na ugroženoj radnoj stanici

Sa vašom radnom stanicom potpuno isključenom sa Wi-Fi i Etherneta, otvorite prozor terminala da izvršite vanmrežnu trijažu. Vaš cilj je dvostruk: (A) locirati svaki .env i konfiguracionu datoteku na disku tako da znate koje tajne treba rotirati i (B) uhvatiti dokaze o tome šta je zlonamjerni paket ili ekstenzija zapravo izvršio prije nego što obrišete operativni sistem.

Korak 1: Inventar svakog izloženog .env, privatni ključ i datoteku stanja na vašem disku

Pokrenite ovu naredbu samo za čitanje na vašoj offline macOS, Linux ili WSL2 radnoj stanici kako biste generirali kompletnu kontrolnu listu svake lokalne datoteke koja sadrži tajne koje je zlonamjerni softver mogao pročitati:

# Create an offline audit list of all .env files, Terraform states, kubeconfigs, and private keys in your home directory:
find ~ -maxdepth 5 \( \
    -name ".env" -o \
    -name ".env.*" -o \
    -name "*.tfstate" -o \
    -name "*.tfstate.backup" -o \
    -name "*.pem" -o \
    -name "*.key" -o \
    -name "*.p12" -o \
    -name "*.pfx" -o \
    -name "*service-account*.json" -o \
    -name "credentials.json" -o \
    -name ".npmrc" -o \
    -name ".pypirc" -o \
    -name ".netrc" \
\) -not -path "*/node_modules/*" -not -path "*/.git/*" -not -path "*/Library/Caches/*" 2>/dev/null > ~/exposed_secrets_inventory.txt

cat ~/exposed_secrets_inventory.txt

Pregled -/exposed_secrets_inventory.txt red po red i otvori svaki .env ili .tfstate datoteku van mreže tako da možete rotirati svaki pojedini API ključ, lozinku baze podataka i tajnu web-dojavnika navedene unutar njih sa vašeg čistog uređaja.

Korak 2: Provjerite šta je izvršio zlonamjerni paket ili IDE proširenje

Prije nego što izbrišete uvredljivu mapu, provjerite tačan korisni teret i provjerite gdje je instalirana postojanost na vašem operativnom sistemu:

# 1. Inspect package.json lifecycle scripts in the suspect project and its node_modules:
grep -rnE '"(preinstall|install|postinstall|prepublish|prepare)"' ./package.json ./node_modules/*/package.json ./node_modules/@*/*/package.json 2>/dev/null

# 2. Check Python site-packages for malicious .pth startup hook files:
find . -path "*/site-packages/*.pth" -exec head -n 20 {} + 2>/dev/null

# 3. Inspect recently installed or modified VS Code / Cursor / Windsurf Extensions:
ls -lt ~/.vscode/extensions/ ~/.cursor/extensions/ ~/.windsurf/extensions/ 2>/dev/null | head -n 30

# 4. Check for persistence injected into your Shell RC profiles and Git global hooks:
tail -n 30 ~/.zshrc ~/.bashrc ~/.bash_profile ~/.zprofile ~/.profile 2>/dev/null
git config --global --list | grep -E "core.hooksPath|alias|credential|filter"

Korak 3: Potražite postojanost na nivou OS koju je odbacio zlonamjerni softver programera (macOS, Linux i Windows)

Zlonamjerne ovisnosti i spremišta "lažnih regrutatora" često ispuštaju trajne pozadinske agente prerušene u ažuriranje sistema, node demone ili Spotlight indeksere:

  • Na Apple macOS-u:
    # 1. Check user and system LaunchAgents / LaunchDaemons for recently added .plist files:
    ls -laht ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons
    
    # 2. Check active cron jobs and running background node/python/curl/nohup processes:
    crontab -l
    ps aux | grep -iE "node|python|osascript|curl|wget|nc|bash -i|/tmp/|/var/tmp/|Library/Application Support"
    
  • Na Linux / Ubuntu / Fedora / WSL2:
    # 1. Check user systemd services, cron jobs, and SSH authorized_keys:
    ls -la ~/.config/systemd/user/ /etc/systemd/system/
    crontab -l
    cat ~/.ssh/authorized_keys
    
    # 2. Check running processes executing out of /tmp, /dev/shm, or ~/.cache:
    ls -la /proc/*/exe 2>/dev/null | grep -E "/tmp/|/dev/shm/|\.cache|\.local"
    
  • Na Windows (nativni ili host WSL2):
  • Zapamtite da zlonamjerna npm ili Python skripta koja se izvodi unutar WSL2 (Windows podsistem za Linux) može direktno pristupiti cijelom vašem Windows hostu C:\ vozi preko /mnt/c/Users/<username>/ i može pozvati powershell.exe ili cmd.exe direktno iz Linux ljuske da zarazi Windows host Registry (HKCU:\Software\Microsoft\Windows\CurrentVersion\Run), Planirani zadaci i Chrome/Edge Cookies baze podataka.
  • Pokrenite potpunu reviziju postojanosti Windows PowerShell-a u našoj Vodič za otmicu kolačića sesije i krađu informacija i naše vodič za infekcije malverom, ransomwareom i špijunskim softverom.

Faza 4: Zašto morate izbrisati i ponovo izgraditi radnu stanicu za programere

Čak i ako pronađete i izbrišete zlonamjerne node_modules folder, the .vsix proširenje, i nevaljalac -/Library/LaunchAgents plist, nikada ne biste trebali nastaviti koristiti kompromitovanu radnu stanicu programera za proizvodni inženjering bez izvođenja čistog brisanja OS-a i ponovne instalacije.

Sofisticirani korisni programi ciljani na programere mijenjaju postojeće legitimne binarne ili konfiguracijske datoteke na vašem sistemu koje nijedan antivirusni skener ne označava kao zlonamjerne: 1. Trojanizirane lokalne CLI binarne datoteke (git, ssh, sudo, aws, kubectl, docker): Korisno opterećenje koje radi pod vašim korisničkim računom ne može prepisati /usr/bin/ssh bez sudo, pa umjesto toga ispušta skriptu omotača na -/.local/bin/ssh, -/bin/git ili -/bin/sudo i stavlja taj direktorij ispred vašeg PATH. Sljedeći put kada kucate sudo ili ssh -i nakon ponovnog povezivanja na internet, omotač tiho presreće vašu lozinku ili pristupnu frazu i prosljeđuje je napadaču prije nego što pozove pravu binarnu datoteku. 2. Zaraženi lokalni kešovi paketa (-/.npm/_cacache, -/.cache/pip, -/.cargo/registry, -/Library/Caches/pnpm): Zlonamjerni softver može otrovati keširane tarball-ove unutar vašeg lokalnog keša menadžera paketa, tako da čak i kada sljedeće sedmice instalirate čist, legitiman paket, vaš upravitelj paketa raspakuje backdoored tarball iz vaše lokalne keš memorije. 3. Modifikovani IDE Core fajlovi (workbench.desktop.main.js): Određeni sadržaji VS koda i kursora direktno povezuju Electron asar arhiva ili workbench.desktop.main.js unutar IDE paketa aplikacija tako da backdoor preživi uklanjanjem svih ekstenzija.

Napravite sigurnosnu kopiju samo čistog izvornog koda (provjereno putem git status i git diff na čistoj mašini) i ličnim dokumentima, a zatim izvršite čistu macOS-ovu obriši sav sadržaj i postavke / DFU vraćanje, čistu Linux USB instalaciju ili čistu instalaciju Windows 11 USB.


Ojačajte svoju novu radnu stanicu za programere protiv budućih napada na lanac snabdevanja

Prilikom postavljanja svoje svježe obrisane radne stanice za programere, zamijenite statične datoteke otvorenog teksta u svom kućnom direktoriju sa hardverski podržanim, prolaznim i zaštićenim radnim tokovima, tako da čak i ako se zlonamjerna ovisnost izvrši u budućnosti, postoji nula statičkih tajni na disku za krađu:

1. Onemogućite automatsko izvršavanje skripte životnog ciklusa u upraviteljima paketa

Konfiguriši npm, pnpm, yarn, i pip tako da nepouzdane zavisnosti ne mogu tiho izvršavati shell skripte tokom instalacije: - Node.js (npm / yarn / pnpm):

# Globally disable automatic preinstall/postinstall script execution in npm:
npm config set ignore-scripts true
( Napomena: pnpm v10+ sada podrazumevano onemogućava skripte izgradnje životnog ciklusa za zavisnosti osim ako nije eksplicitno dozvoljeno preko pnpm.onlyBuiltDependencies in package.json, izrada pnpm v10+ znatno sigurniji protiv crva u lancu nabavke nego zadani npm.) - Python (pip / uv):
# Refuse to run arbitrary setup.py scripts from source distributions (.tar.gz); require binary wheels only:
export PIP_ONLY_BINARY=":all:"
- Prozor za hlađenje/minimalno izdanje: Većina zlonamjernih npm i PyPI verzija se otkriva i uklanja u roku od 4 do 24 sata od objavljivanja. Konfigurirajte upravitelj paketa ili proxy za artefakte (npr npm config set before, pnpm minimumReleaseAge, ili Socket.dev / Artifactory firewall) da odbijete verzije paketa objavljene u posljednja 48 do 72 sata.

2. Uklonite otvoreni tekst -/.ssh/id_ed25519, -/.aws/credentials, i .env Fajlovi sa diska

  • Premjestite SSH ključeve u hardverski YubiKey (ed25519-sk) ili Secure Enclave / Biometrijski agent:
  • Nikada ne ostavljajte nešifrirano ili bez šifre -/.ssh/id_ed25519 fajl na disku. Ili generirajte hardverski rezidentni FIDO2 SSH ključ (ssh-keygen -t ed25519-sk -O verify-required) na fizičkom YubiKey-u (koji zahtijeva fizički dodir prsta na metalni kontakt za svaki git push ili ssh vezu) ili pohranite svoje SSH ključeve unutar 1Password SSH Agent / Secretive (macOS Secure Enclave) gdje privatni ključ nikada ne postoji kao datoteka u -/.ssh/ i svaki potpis traži Touch ID / Windows Hello.
  • Zamijenite statički -/.aws/credentials (AKIA...) s kratkotrajnim SSO (aws sso login ili aws-vault):
  • Izbrišite sve trajne IAM korisničke pristupne ključeve (AKIA...). Koristite AWS IAM Identity Center (aws sso login) sa kratkim trajanjem sesije (1 do 4 sata) ili umotajte akreditive unutra aws-vault podržan od macOS Keychain / Windows Credential Manager s biometrijskim upitima.
  • Zamijenite otvoreni tekst .env Datoteke s ubrizgavanjem tajne za vrijeme izvršavanja (1Password CLI op run, Doppler, ili aws-vault):
  • Umjesto skladištenja STRIPE_SECRET_KEY=sk_live_... u otvorenom tekstu .env fajl koji bilo node_modules skripta može fs.readFileSync('.env'), pohraniti reference poput STRIPE_SECRET_KEY="op://Dev-Vault/Stripe/secret_key" i pokrenite svoj lokalni dev server putem op run --env-file=".env.template" -- npm run dev nakon autentifikacije pomoću Touch ID-a.
  • Koristite Trusted Publishing (OIDC) umjesto dugovječnog -/.npmrc i -/.pypirc Tokeni:
  • Nikada nemojte držati token sposoban za objavljivanje unutra -/.npmrc ili -/.pypirc na vašem laptopu. I PyPI i npm (preko porekla / OIDC) vam omogućavaju da objavljujete pakete isključivo od izolovanih GitHub Actions / GitLab CI pouzdanih izdavača koristeći kratkotrajne OpenID Connect (OIDC) tokene, što znači da nula tokena za objavljivanje ikada postoji na laptopu bilo kog održavaoca.

3. Izolirajte nepouzdana spremišta i izgradite skripte unutar ojačanih DevContainers ili VM-ova

  • Nikada nemojte klonirati i pokretati "Recruiter Take-Home Assessment", nepoznat projekat otvorenog koda ili bounty repo direktno na vašem OS-u:
  • Pokreni nepoznate projekte unutar GitHub Codespace, jednokratnog VM-a u oblaku ili lokalnog Docker DevContainer koji NE povezuje vaš kućni direktorij (-), NE se montira /var/run/docker.sock, i samo prosljeđuje Git token s opsegom i samo za čitanje ako je potrebno.
  • Revizija VS koda / proširenja kursora i onemogućavanje automatskih ažuriranja za neprovjerene izdavače:
  • Zapamtite da Cursor, Windsurf i VSCodium povlače ekstenzije iz OpenVSX Registry (open-vsx.org) umjesto Microsoftovog službenog Visual Studio Marketplace-a. Provjerite tačan imenski prostor izdavača i broj instalacija prije instaliranja bilo koje ekstenzije, neka lista instaliranih ekstenzija bude minimalna i deinstalirajte ekstenzije koje više ne koristite aktivno.

Često postavljana pitanja

Trči npm install --ignore-scripts u potpunosti me zaštititi od zlonamjernog npm paketa?

Trčanje npm install --ignore-scripts blokira najčešći vektor napada na lanac nabavke: automatsko izvršenje preinstall, instalirati, i postinstall shell komande definirane unutra package.json u vrijeme instalacije. Međutim, to vas ne štiti kada stvarno izvršite JavaScript kod paketa (na primjer, kada pokrenete npm run dev, npm test, šala, webpack, ili vite, ili kada vaš IDE dodatak ESLint/TypeScript učita zlonamjerni dodatak sa node_modules). Budući da Node.js po defaultu nema runtime fajl sistem ili mrežno okruženje, bilo koji kod uvezen tokom vašeg pravljenja ili testnog koraka i dalje može čitati -/.aws i -/.ssh osim ako ne izolujete gradnju unutar kontejnera ili koristite Nodeov eksperimentalni model dozvole (čvor --dozvolu).

Otvorio sam sumnjivo spremište u VS Code-u od regrutera na LinkedInu i kliknuo na „Da, vjerujem autorima“ prije nego što sam shvatio da je to prevara. Da li se kod izvršio čak i ako nikada nisam pokrenuo npm install?

Da, morate pretpostaviti da se proizvoljan kod izvršava u sekundi kada kliknete na "Da, vjerujem autorima." U Visual Studio kodu i kursoru, dodeljivanje poverenja radnom prostoru odmah dozvoljava spremište .vscode/tasks.json datoteku za pokretanje pozadinskih shell zadataka konfiguriranih "runOn": "folderOpen", dozvoljava radni prostor definiran .vscode/settings.json da usmjere jezičke servere (kao što su Python, TypeScript, ESLint ili Rust Analyzer) na zlonamjerne izvršne putanje unutar mape spremišta i pokrene automatsko izvršavanje build.rs u Rust projektima. Odmah isključite uređaj iz mreže i slijedite Fazu 1 da biste rotirali sve akreditive.

Ako se zlonamjerni npm ili PyPI paket pokrenuo unutar Docker kontejnera ili DevContainer-a, da li je moj host Mac ili Windows laptop siguran?

To u potpunosti ovisi o tome koji su volumeni za montiranje, varijable okruženja i utičnice proslijeđeni u taj kontejner. Standardni DevContainer predlošci i lokalni docker-compose.yml često postavlja automatsko prosljeđivanje vašeg hosta SSH_AUTH_SOCK (omogućavanje zlonamjernom softveru unutar kontejnera da koristi SSH ključeve vašeg domaćina za povezivanje s udaljenim serverima ili prebacivanje na GitHub), bind-mount -/.aws, -/.gitconfig, ili vaš radni prostor .env datoteke ili montirajte host Docker socket (/var/run/docker.sock), koji daje trenutni root pristup cijelom operativnom sistemu hosta. Pregledajte svoje devcontainer.json i docker inspect montira da vidi tačno koji su host resursi izloženi unutar kontejnera.

Kako mogu provjeriti da li verzija paketa koju namjeravam instalirati ima skrivene skripte za instalaciju ili zamagljenu telemetriju prije instaliranja?

Prije instaliranja nepoznatog paketa npm, PyPI, Go ili Rust, provjerite ga na Socket.dev ili Deps.dev (od Google Open Source Insights), koji statički analizira svaku verziju za instalacijske skripte, mrežne zahtjeve, pristup sistemu datoteka,eval() zamagljivanje i promjene održavatelja. Možete i trčati npm view skripte u vašem terminalu da pregledate njegove skripte životnog ciklusa bez preuzimanja ili izvršavanja paketa.


Izvori provjereni

  • Agencija za sajber sigurnost i sigurnost infrastrukture (CISA) i Agencija za nacionalnu sigurnost (NSA) (Sjedinjene Američke Države): Osiguravanje lanca nabavke softvera: Preporučene prakse za programere i odgovor na kompromitovane zavisnosti.
  • GitHub Security Lab & npm sigurnosni savjeti: Odgovaranje na kompromitovane npm pakete, zlonamjerno .vscode/tasks.json Zamke spremišta (Contagious Interview), i GitHub Actions Workflow Ublažavanje tajne eksfiltracije.
  • Python Packaging Authority (PyPA) & PyPI sigurnost: Upravljanje zlonamjernim točkom .pth fajlovi, setup.py Samovoljno izvršenje i pouzdano objavljivanje (OIDC) Smjernice za implementaciju.
  • Open Worldwide Application Security Project (OWASP): * Informacija o sigurnosti lanca nabave softvera i 10 najvećih rizika za sigurnost CI/CD*.
  • Nacionalni centar za sajber sigurnost (NCSC) (Ujedinjeno Kraljevstvo): Odbrana razvojnih okruženja i planova upravljanja oblakom od ciljanog prikupljanja vjerodajnica.

Povezani vodiči