Fejlesztői munkaállomás kompromittálása: rosszindulatú függőség vagy IDE-bővítményre adott válasz¶
A segélyhívó számok országonként eltérőek. Ez az oldal a 911-et használja, amely az Egyesült Államokra és Kanadára vonatkozik. Sok más országban a 112-es, 999-es vagy más számokat használják. Keresse meg az országának megfelelő számot.
Felfedezi, hogy egy szoftvercsomag, amelyen keresztül éppen telepítette npm install, pip install, cargo build, gem install, vagy go get, vagy egy újonnan frissített Visual Studio Code-, Cursor- vagy JetBrains IDE-bővítmény, rosszindulatú elírás, függőségi zavart okozó hasznos adat vagy eltérített upstream kiadás kritikus infrastruktúra-vészhelyzetet jelent. A szabványos fogyasztói számítógépekkel ellentétben a szoftvermérnök, a DevOps építész vagy adattudós munkaállomás közvetlen kriptográfiai kulcsokkal rendelkezik az éles felhőkörnyezetekhez, a forráskód-tárolókhoz, a konténer-nyilvántartásokhoz, a CI/CD-folyamatokhoz és az ügyféladatbázisokhoz. Amikor egy rosszindulatú preinstall vagy postinstall script belül package.json, fegyveres setup.py egy Python kerékben, vagy egy kompromittált .vsix kiterjesztés fut a laptopon, az Ön teljes felhasználói jogosultságaival fut, és azonnal begyűjti -/.aws/credentials, -/.ssh/id_ed25519, -/.npmrc, -/.pypirc, -/.kube/config, helyi .env fájlokat, macOS kulcstartót vagy Linuxot libsecret bejegyzéseket és az aktív böngésző munkamenet-cookie-kat másodperceken belül.
Ha éppen most vette észre, hogy rosszindulatú, nyílt forráskódú függőséget hajtott végre, klónozott és fegyveres adattárat épített fel (például egy hamis műszaki interjúprojektet egy toborzói átverésből), vagy telepített egy trójai IDE-bővítményt, akkor a gép minden másodpercben csatlakozik a hálózathoz, és lehetővé teszi, hogy a rakomány a vállalati felhőbe forduljon, vagy önszaporító csomag-nyilvántartási férgeket tegyen közzé a férgek segítségével. Ha a támadás zsarolással, fizikai fenyegetésekkel vagy kritikus nyilvános infrastruktúra megzavarásával jár, hívja a helyi segélyhívó számot (911 az Egyesült Államokban és Kanadában, 112 az Európai Unió egész területén, 999 az Egyesült Királyságban), vagy konzultáljon nemzetközi cégünkkel segélyhívó számok könyvtárat. Azonnal kövesse ezeket az elszigetelési, kriminalisztikai osztályozási és kriptográfiai kulcsok rotációs eljárásait.
Tedd ezt most¶
- Azonnal szakítsa meg az összes hálózati kapcsolatot a fejlesztői munkaállomáson (kapcsolja ki a Wi-Fi-t, húzza ki az Ethernet-csatlakozást, és semmisítse meg az aktív VPN- vagy SSH-alagutakat), de MÉG NE kapcsolja ki vagy indítsa újra a gépet: Az Ethernet leválasztása és a Wi-Fi kikapcsolása megakadályozza, hogy egy aktív reverse shell, C2 jeladó vagy automatizált féreg használja a helyi tokenscom-ot. Tartsa a gépet bekapcsolva offline állapotban (vagy csak az illékony folyamatlisták rögzítése után függessze fel), hogy megtekinthesse a futó gyermekfolyamatokat, a megnyitott hálózati socketeket, a shell előzményeket és pontosan
.envés a hitelesítő fájlok a végrehajtás pillanatában a lemezen voltak. - Használjon különálló, tiszta eszközt (például mobiladat-kapcsolatú okostelefonját vagy érintetlen laptopját) a Security Operations Center (SOC) értesítéséhez, és vonja vissza az egyszeri bejelentkezést (SSO) és a Cloud IAM-munkameneteket: Soha ne jelentkezzen be AWS-be, GCP-be, Azure-ba, GitHubba vagy Okta-ba a fertőzött munkaállomásról a kulcsok elforgatásához. Ha egy memória-rezidens lopó, rosszindulatú IDE-bővítmény vagy shell hook figyeli a terminált és a böngészőt, az adott gépen generált új tokent azonnal rögzíti.
- Visszavonja és forgassa el a nagy robbanási sugarú fejlesztői tokeneket szigorú prioritási sorrendben az első 15 percben:
- 1. prioritás (felhő és Kubernetes): Inaktiválja az összes helyi AWS IAM hozzáférési kulcsot (
AKIA...), vonja vissza a Google Cloud alkalmazás alapértelmezett hitelesítő adatait (gcloud auth application-default revoke), érvénytelenítse az Azure CLI tokeneket (az account clear+ Entra ID munkamenet visszavonása), és forgassa el a Kubernetesetkubeconfigügyféltanúsítványok vagy szolgáltatásfiók-tokenek. - 2. prioritás (forráskód és CI/CD): Törölje az összes GitHub, GitLab és Bitbucket SSH nyilvános kulcsot, személyes hozzáférési tokeneket (
ghp_...,github_pat_...,glpat-...), és az OAuth CLI tokenek (-/.config/gh/hosts.yml), és ellenőrizze a tárhely webhook beállításait és a GitHub-műveleteket / GitLab CI titkait. - 3. prioritás (csomagnyilvántartások és tárolók): Az npm automatizálás visszavonása és a tokenek közzététele (
-/.npmrc), PyPI API tokenek (-/.pypirc), Docker Hub / GHCR / ECR bejelentkezési tokenek (-/.docker/config.json), és Terraform Cloud tokenek (-/.terraform.d/credentials.tfrc.json). - Ellenőrizze az npm-et, a PyPI-t, a Cargo-t és a GitHubot AZONNAL, hogy megbizonyosodjon arról, hogy a rosszindulatú program nem használta-e még a helyi tokeneket saját csomagjai féregfertőzött verziójának közzétételére vagy rosszindulatú commitok leküldésére: Modern ellátási lánc hasznos terhei (mint pl.
ua-parser-js,coa,rc,ctx,lottie-player, ésultralyticskompromisszumok) automatikusan elemzi az áldozat fejlesztőjét-/.npmrc,-/.pypirc, és-/.gitconfiga fejlesztő által karbantartott minden nyílt forráskódú vagy belső csomag hátsóajtós javítási verzióinak azonnali közzétételéhez, vagy rejtett GitHub Actions munkafolyamatok létrehozásához a fejlesztő tárolóiban. - Szkenneljen be minden projektkönyvtárat a munkaállomáson, hogy teljes leltárt készítsen a kitett anyagokról
.envfájlok, adatbázis-kapcsolati karakterláncok és keménykódolt API-kulcsok: A munkaállomás törlése előtt futtasson egy offline szkriptet az izolált gépen, hogy minden.env,.env.local,terraform.tfstate, ésapplication.ymlfájlt a merevlemezen, így elforgathat minden olyan harmadik féltől származó titkot (Stripe, Twilio, SendGrid, OpenAI, Anthropic, Datadog, Slack, Postgres, MongoDB és Redis hitelesítő adatokat), amelyeket a felhasználói fiókja elolvashatott. - Minden böngésző-munkamenet és hardvertárca-kapcsolat megszakítása: Mivel a fejlesztői kompromisszumok gyakran árucikk-információs lopókat (például Lumma, RedLine vagy Atomic macOS Stealer) telepítenek a fejlesztő-specifikus hitelesítő adatgyűjtők mellett, kövesse a mi munkamenet-cookie-eltérítési és infostealer-token visszavonási útmutató és ha Web3 fejlesztést végez vagy digitális eszközöket birtokol, hajtsa végre a mi kriptovaluta pénztárca leürítési és magfrakciós kompromisszumos útmutató.
Danger
Miért futni npm uninstall <package> vagy pip uninstall <package> NEM tisztítja meg a munkaállomást: A Node.js (npm, yarn, pnpm) és Python (pip) ökoszisztémák, a rosszindulatú kód szinte soha nem vár addig, amíg Ön import vagy require() az alkalmazás kódjában található könyvtárat. Ehelyett a támadók a hasznos terhet a csomag életciklus-kampóiba helyezik (preinstall, install, vagy postinstall be package.json, vagy a legfelső szintű végrehajtás belül setup.py forráselosztó kerék építése során). Abban a pillanatban, amikor megnyomtad Enter be npm install vagy pip install, a támadó tetszőleges shell-szkriptje vagy az operációs rendszereden végrehajtott bináris fájl, másolta a -/.ssh, -/.aws, és .env fájlokat egy külső szerverre, és gyakran állandó hátsó ajtót fecskendeznek be -/.bashrc, -/.zshrc, crontab, vagy -/Library/LaunchAgents. A csomag utólagos eltávolítása csak a benne lévő mappát törli node_modules vagy site-packages miközben az ellopott kulcsokat a támadó kezében hagyja, és az operációs rendszeren futó perzisztencia mechanizmust.
Döntési fa: fejlesztői munkaállomás ellátási láncának kompromisszumos osztályozása¶
Ezzel az incidensreagálási munkafolyamattal korlátozhatja a robbanás sugarát mind a személyes fejlesztési környezetében, mind a termelési vállalati infrastruktúrában:
flowchart TD
Detect["Feltételezett rosszindulatú npm / PyPI / Cargo Package, trójai IDE-bővítmény vagy hamis Recruiter repo végrehajtása"] --> Isolate["1. LÉPÉS: Azonnal válassza le a munkaállomás Wi-Fi- és Ethernet-kapcsolatát (tartsa bekapcsolva a gépet az offline triage-hez)"]
Isolate --> ScopeCheck{"A végrehajtás a gazdagép operációs rendszeren vagy az izolált tárolón/VM-en belül történt?"}
ScopeCheck -->|"Gazdagép operációs rendszer (Mac / Linux / Windows / WSL2)"| FullCompromise["Tegyük fel, hogy a kezdőkönyvtár (-/.aws, -/.ssh, -/.npmrc, .env, böngészősütik) 100%-át kiszűrték"]
ScopeCheck -->|"DevContainer / Docker"| MountCheck["Ellenőrizze a kötetcsatlakozókat (-v -/.ssh, -v -/.aws, Docker Socket /var/run/docker.sock vagy Host Network)"]
MountCheck --> FullCompromise
FullCompromise --> CleanDevice["2. LÉPÉS: Külön tiszta eszközről, SOC riasztás és Cloud IAM, SSO, GitHub/GitLab és regisztrációs tokenek visszavonása"]
CleanDevice --> WormCheck["3. LÉPÉS: A GitHub Commits, a CI/CD munkafolyamatok és az npm/PyPI által közzétett verziók ellenőrzése az automatikus féregterjesztéshez"]
WormCheck --> OfflineAudit["4. LÉPÉS: Az offline munkaállomáson, az összes .env fájl leltározása, a terraform állapotú fájlok és a perzisztencia hátsó ajtói"]
OfflineAudit --> RotateEnv["5. LÉPÉS: Forgassa el az összes .env / State Files fájlban talált adatbázis-jelszót, Webhook-titkot, GPG-aláíró kulcsot és API-kulcsot"]
RotateEnv --> RebuildOS["6. LÉPÉS: Törölje a munkaállomást a Clean OS újratelepítéssel -> Hardverrel támogatott SSH-kulcsok, OIDC és --ignore-scripts kényszerítése"]
A fejlesztői ellátási lánc és az IDE vektorok végrehajtásának megértése¶
A szoftvermérnökök elleni modern támadások négy különböző végrehajtási felületet céloznak meg egy munkaállomáson. Ha azonosítja, hogy melyik vektor találta el a gépet, akkor megtudhatja, hogy a rakomány milyen jogosultságokhoz és fájlútvonalakhoz férhetett hozzá:
1. Rosszindulatú csomagok életciklusának akasztói (npm, pnpm, yarn, pip, cargo, gem)¶
- Node.js (
package.jsonscripts): Alapértelmezés szerint futnpm installautomatikusan végrehajt minden olyan shell parancsot, amelyet a"preinstall","install", vagy"postinstall"mezőipackage.json, nem csak a beírt legfelső szintű csomagra, hanem a fa minden tranzitív függőségére is. A támadók gépelést használnak (pl.reqeusts,crossenv,lodahs), függőségi zavar (nyilvános csomag közzététele npm-en vagy PyPI-n pontosan ugyanazzal a névvel és magasabb verziószámmal, mint pl.99.99.9, mint a vállalat belső privát csomagja), vagy karbantartói fiókok átvétele, hogy egyetlen sort csússzon, mint pl."postinstall": "node index.js"egy csomagba. - ** Python (
setup.pyés.pthfájlok)**: Mikorpiptelepít egy forrásterjesztést (sdist.tar.gz), végrehajtjasetup.pyteljes Python értelmezői jogosultságokkal. Még akkor is, ha előre összeállított bináris kerekeket telepít (.whl), amelyek nem hajtódnak végresetup.pya telepítés során a támadók rosszindulatú.pth(útvonal-konfigurációs) fájlok közvetlenül asite-packages/. Bármely vonal a.pth-vel kezdődő fájlimportA Python értelmező minden egyes alkalommal automatikusan végrehajtjapythonazon a rendszeren indul el. - rozsda (
build.rs) és Go: Rustban a Cargo automatikusan lefordítja és végrehajtjabuild.rsnem csak közbencargo buildvagycargo runde azonnal amikorrust-analyzer(a VS Code-on vagy az IntelliJ-n belül) megnyit egy projektmappát az indextípusokhoz. Csupán egy klónozott Rust tároló megnyitása az IDE-benrust-analyzerAz enabled tetszőleges kódot hajt végre belülbuild.rsmielőtt beírna egy terminálparancsot.
2. Rosszindulatú vagy feltört IDE-bővítmények (VS Code Marketplace, OpenVSX, JetBrains)¶
- Visual Studio Code, Cursor, Windsurf és VSCodium kiterjesztések (
.vsix). Bármely telepített kiterjesztés teljes olvasási/írási hozzáféréssel rendelkezik a teljes fájlrendszerhez, és csendes gyermekfolyamatokat hozhat létre (child_process.exec), minden megnyitott szerkesztő puffert képes elolvasni és.envfájlt, és csatlakoztathatja az integrált terminált. - A fenyegetés szereplői rendszeresen hamis témakiterjesztéseket tesznek közzé (
Darcula Official), hamisított mesterséges intelligencia kódolási asszisztensek vagy elgépelt linter/Prettier bővítmények, amelyek csendben letöltik a második fokozatú infostealer-t vagy a fordított shellt az IDE indulásakor.
3. Fegyverzett Git-tárak és IDE-munkaterület automatikus végrehajtása ("Fake Recruiter / Take-Home Test" csapdák)¶
- Észak-koreai állam által támogatott csoportok (
Contagious Interview/Lazarus Group) és a kriptográfiai fókuszú fenyegetés szereplői rendszeresen felkeresik a fejlesztőket a LinkedIn, az Upwork vagy a GitHubon, akik jól fizető távoli szerepköröket kínáló toborzóknak vagy CTO-knak adják ki magukat. Arra kérik a fejlesztőt, hogy klónozzon egy Bitbucket vagy GitHub adattárat a „15 perces hibakeresési értékeléshez” vagy a „Web3 gaming MVP felülvizsgálatához”. - Ezek a tárolók rejtett végrehajtási csapdákat tartalmaznak, amelyek IDE-ben való megnyitáskor vagy összeállítás közben aktiválódnak:
.vscode/tasks.json-vel"runOn": "folderOpen": Automatikusan lefuttat egy háttérhéjszkriptet, amint rákattint az "Igen, megbízom a szerzőkben" lehetőségre a VS Code-ban.- Rosszindulatú
.git/hooks/vagy.gitmodules: Kihasználja a Git almodul konfigurációját vagy a szkripteket (Makefile,webpack.config.js,next.config.js,vite.config.ts).
1. fázis: Fejlesztői hitelesítő adatok és titkos rotációs mátrix komplettálása¶
Egy tiszta másodlagos laptop vagy okostelefon használatával szisztematikusan dolgozzon ezen a 12 pontos fejlesztői hitelesítő adatokon. Tételezzük fel, hogy a nem root operációs rendszer felhasználói fiókja által olvasható bármely fájl (chmod 600 vagy 644 a felhasználó tulajdona) a hasznos terhelés végrehajtását követő 3 másodpercen belül felkerült a támadó szerverére.
| Hitelesítési adat kategória | Pontos helyi fájl elérési utak a munkaállomáson | Kötelező visszavonási és elforgatási művelet (tiszta eszközről) |
|---|---|---|
| 1. AWS IAM & SSO | -/.aws/credentials-/.aws/config-/.aws/sso/cache/*.json-/.aws/cli/cache/*.json |
1. Az AWS IAM konzolban azonnal Deaktiválja és törölje az összes statikus hozzáférési kulcsot (AKIA...) az adott laptopon tárolva.2. Az AWS IAM Identity Center (SSO)-ban vonja vissza az aktív felhasználói munkameneteket, és törölje a regisztrált OIDC klienseszköz-tokeneket. 3. Az AWS CloudTrail ellenőrzése GetCallerIdentity, CreateUser, CreateAccessKey, AssumeRole, ListBuckets, és SecretsManager:GetSecretValue szokatlan IP-címekről vagy felhasználói ügynökökről származó hívások (Boto3, aws-cli, Go-http-client). |
| 2. Google Cloud (GCP) és 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. Menjen ide: myaccount.google.com/permissions és vonja vissza a Google Cloud SDK és Firebase CLI hozzáférését.2. A GCP-konzol > IAM és rendszergazda > Szolgáltatásfiókok részben törölje a Szolgáltatásfiók JSON-kulcsát ( private_key_id), amelyet a munkaállomás merevlemezére töltöttek le.3. Vizsgálja meg a Cloud Audit Logs-t, hogy nincs-e benne jogosulatlan IAM-összerendelés vagy Compute Engine létrehozása. |
| 3. Microsoft Azure és Entra ID | -/.azure/msal_token_cache.bin-/.azure/accessTokens.json-/.azure/azureProfile.json |
1. Futtasson egy Entra ID Admin programot Revoke-MgUserSignInSession -UserId <your-user-id> az összes frissítési token és elsődleges frissítési token érvénytelenítéséhez (PRT).2. Töröljön minden helyileg tárolt Service Principal ügyféltitkot vagy tanúsítványt. |
| 4. Kubernetes & Helm | -/.kube/config-/.kube/cache/-/.config/helm/registry/config.json |
1. Ha -/.kube/config statikus ügyféltanúsítványokat tartalmazott (client-certificate-data / client-key-data) vagy hosszú élettartamú ServiceAccount hordozó tokenek, vonja vissza a tanúsítványt a fürt CA-ján keresztül (CSR / RBAC eltávolítás) vagy törölje és hozza létre újra a ServiceAccount azonnal titokban.2. Vizsgálja meg a Kubernetes API Server naplóit exec, pods, vagy secrets list/get igék. |
| 5. GitHub, GitLab és Bitbucket | -/.ssh/id_ed25519, -/.ssh/id_rsa-/.config/gh/hosts.yml-/.git-credentials, -/.netrc-/.gitconfig |
1. Menjen ide: github.com/settings/keys (és GitLab/Bitbucket megfelelői) és Törölje a nyilvános SSH kulcsot és a GPG/SSH aláíró kulcsot a fertőzött gépről.2. Menjen ide: github.com/settings/tokens és github.com/settings/applications az összes személyes hozzáférési token visszavonásához (ghp_, github_pat_), OAuth alkalmazások (GitHub CLI, VS Code, Git Credential Manager), és az aktív webes munkamenetek.3. Ellenőrizze a Biztonsági naplót ( github.com/settings/security-log) számára repo.clone, org.Invite_member, vagy hook.create. |
| 6. GPG és kód-aláíró kulcsok | -/.gnupg/private-keys-v1.d/-/Library/Keychains/login.keychain-db (Apple fejlesztői azonosító / .p12) |
1. Ha a GPG privát kulcsát hardveres intelligens kártya nélkül tárolta a lemezen (YubiKey OpenPGP), és a jelszó gyorsítótárban van gpg-agent vagy nemrégiben gépelt be, azonnal hozzon létre és tegye közzé a GPG visszavonási tanúsítványt, és távolítsa el a GPG-kulcsot a GitHub/GitLab szolgáltatásból.2. Minden exportált Apple Developer visszavonása .p12 vagy Android Keystore .jks a gépen tárolt kód-aláíró tanúsítványok. |
| 7. Csomagnyilvántartások (npm, PyPI, Cargo, RubyGems, NuGet) | -/.npmrc (_authToken=...)-/.pypirc-/.cargo/credentials.toml-/.gem/credentials |
1. Jelentkezzen be az npmjs.com > Access Tokens, pypi.org > Fiókbeállítások > API-tokenek, crates.io > Fiókbeállítások > API-tokenek és rubygems.org webhelyre, és azonnal Vissza vissza az összes aktív tokent. 2. Ellenőrizze közzétett csomagjait (lásd a 2. fázist lentebb), hogy megbizonyosodjon arról, hogy a támadó nem nyomta le a hátsó ajtós kiadást az elmúlt néhány órában. |
| 8. Docker- és konténernyilvántartások | -/.docker/config.json (Base64 auths Docker Hub, GHCR, ECR, GCR, Quay számára) |
1. Ne feledje "auth" be -/.docker/config.json (ha nem használja credsStore: osxkeychain vagy wincred) csupán titkosítatlan Base64 username:password_or_token.2. Személyes hozzáférési tokenek visszavonása a Docker Hubban ( hub.docker.com/settings/security), a GitHub Container Registry és a Quay.io. |
| 9. Infrastructure-as-Code (Terraform / Pulumi / Ansible Vault) | -/.terraform.d/credentials.tfrc.json**/terraform.tfstate (Helyi állam fájlok)-/.pulumi/credentials.json-/.vault-token |
1. A Terraform Cloud/Enterprise felhasználói API tokenjei és a HashiCorp Vault tokenjei visszavonása. 2. KRITIKUS: bármely helyi terraform.tfstate a lemezen lévő fájl egyszerű szöveges jelszavakat, RDS fő hitelesítési adatokat, privát TLS-kulcsokat és titkos IAM-kulcsokat tartalmaz minden, az adott állapot által kezelt erőforráshoz. Forgassa el az összes hivatkozott titkot a lokálison belül .tfstate fájlokat. |
| 10. Adatbázisok és gyorsítótárazott CLI-előzmények | -/.psql_history, -/.pgpass-/.mysql_history, -/.my.cnf-/.rediscli_history-/.mongodb/mongosh/DBeaver / TablePlus / DataGrip konfigurációk |
1. A grafikus felületű adatbázis-kezelők (TablePlus, DBeaver, DataGrip, Postico, pgAdmin, MongoDB Compass) helyileg tárolják a titkosított vagy obfuszkált adatbázisjelszavakat, amelyeket a tolvajok rutinszerűen visszafejtenek. 2. Változtassa meg az adatbázis felhasználói jelszavait a munkaállomásról VPN-en, bástyán vagy nyilvános IP-címen keresztül elérhető bármely átmeneti vagy éles adatbázishoz. |
11. Alkalmazás .env Fájlok és harmadik féltől származó SaaS-kulcsok |
**/.env, **/.env.local, **/.env.production, **/.env.development |
Forgassa el a helyi projektben tárolt összes API-kulcsot .env fájlok: Csík (sk_live_...), OpenAI (sk-...), antropikus (sk-ant-...), Twilio, SendGrid, AWS SES, Slack Bot Tokenek (xoxb-...), Discord Bot Tokenek, Datadog, Sentry, Supabase (service_role), Firebase Admin és JWT aláírási titkok. |
| 12. SSH ismert gazdagépek és Bastion Jump szerverek | -/.ssh/config-/.ssh/known_hosts-/.zsh_history, -/.bash_history |
A támadók azonnal elemzik -/.ssh/config és -/.zsh_history hogy megtalálja az összes belső szerver IP-címét, bástya gazdagépét és felhasználónevét, amelyhez csatlakozik, majd használja az ellopott fájlt -/.ssh/id_ed25519 kulcsot, hogy közvetlenül bejelentkezzen ezekre a szerverekre. Távolítsa el a régi nyilvános kulcsát a -/.ssh/authorized_keys minden távoli Linux szerveren, és ellenőrizze /var/log/auth.log ezeken a kiszolgálókon az illetéktelen SSH-bejelentkezések miatt. |
2. fázis: Az automatikus ellátási lánc férgek terjedésének ellenőrzése (GitHub, CI/CD és csomagnyilvántartások)¶
Az általános rosszindulatú programokkal ellentétben a fejlesztők által megcélzott rakományok kifejezetten úgy vannak programozva, hogy a munkaállomáson való landolást követő másodperceken belül önterjedjenek a szoftverellátási láncon. Mielőtt visszatérne a laptop tisztításához, tiszta eszközével ellenőrizze, hogy az ellopott hitelesítő adatait még nem használták-e a csapat vagy a továbbfelhasználók megfertőzésére:
- A GitHub/GitLab adattárainak ellenőrzése csendes hátsó ajtók és rosszindulatú munkafolyamatok tekintetében:
- Ellenőrzés
.github/workflows/*.ymlaz összes adattárban, amelyhez írási hozzáférése van: Legutóbbi ellátási lánc férgek (Shai-Hulud,tj-actions/changed-fileskompromisszumok, ésultralyticsexploit) automatikusan ellopott fejlesztői tokeneket használ egy rosszindulatú GitHub Actions-munkafolyamat végrehajtására vagy egy meglévő munkafolyamat módosítására a kiíratáshoz${{ toJSON(secrets) }}(a szervezet éles üzembe helyezési titkainak kiszűrése a GitHub Actions futóitól). - A legutóbbi véglegesítések ellenőrzése a szerző és az elkövető időbélyegzője szerint: Ne feledje, hogy bárki meghamisíthatja a Git szerző nevét és időbélyegét (
git commit --date="..." --author="..."). A GitHubban ellenőrizze a Push Events elemet a lerakatban Tevékenység nézet vagy a szervezet Audit Log (repo.push), amelyek rögzítik a valódi szerveroldali időbélyeget és a pontos hitelesítési tokent (oauth_application_idvagyssh_key_fingerprint), amely lenyomta a kódot. - Ellenőrizze a Repository Webhooks-t, a Deploy Keys-t és a Colaborators-okat: Nézze meg a Beállítások > Webhookok, Beállítások > Kulcsok központi telepítése és Beállítások > Együttműködők és csapatok szakaszt a tárhelyen, hogy megbizonyosodjon arról, hogy a támadó nem adott hozzá állandó olvasási/írási telepítési kulcsot vagy külső webhook-mutatót.
- Az npm, a PyPI, a Cargo és a Docker Hub ellenőrzése a jogosulatlan csomagkiadásokhoz:
- Ha Ön karbantartó vagy együttműködő bármely nyilvános vagy privát csomagban az npm, a PyPI, a RubyGems vagy a Crates.io webhelyeken, ellenőrizze a Verziók / Kiadási előzmények lapot a fiókjában található minden csomagnál.
- Ha patch verzió (pl.
1.4.2az utolsó jogos szabadulásod után1.4.1) a munkaállomás kompromisszumának időkeretén belül került közzétételre, azonnal érvénytelenítsd vagy vond vissza a verziót (npm deprecate <pkg>@<version> "CRITICAL: Compromised version, do not use"vagy rántsa meg a PyPI-t), és lépjen kapcsolatba az npm ügyfélszolgálattal (security@npmjs.com/ GitHub Security) vagy PyPI Security (security@pypi.org) a rosszindulatú műtermék eltávolításához, és karanténba helyezi az érintett verziókat. - Ellenőrizze a Secret TruffleHog / Git Clone Exfiltration-t:
- Az ellátási lánc ellopói gyakran hívják a GitHub/GitLab API-t az Ön ellopott tokenje segítségével, hogy klónozzanak minden olyan privát szervezeti adattárat, amelyhez hozzáférhet, és automatizált titkos szkennereket futtathatnak (
TruffleHogvagyGitleaks) vállalata teljes kötelezettségvállalási előzményei ellen. Ha a szervezete valaha véletlenül elkönyvelt egy titkot egy privát adattár Git-előzményeiben anélkül, hogy elforgatta volna, forgatja el ezeket a történelmi titkokat most.
3. fázis: Offline Forensic Triage a kompromittált munkaállomáson¶
Ha munkaállomása teljesen le van választva a Wi-Fi-ről és az Ethernetről, nyisson meg egy terminálablakot az offline triage végrehajtásához. Célja kettős: (A) keresse meg mindegyiket .env és konfigurációs fájlt a lemezen, hogy tudja, mely titkokat kell elforgatni, és (B) bizonyítékot rögzít arra vonatkozóan, hogy a rosszindulatú csomag vagy kiterjesztés valójában mit hajtott végre, mielőtt törölné az operációs rendszert.
1. lépés: Minden kitett leltárt .env, privát kulcs és állapotfájl a lemezen¶
Futtassa ezt az írásvédett parancsot az offline macOS, Linux vagy WSL2 munkaállomáson, hogy létrehozzon egy teljes ellenőrzőlistát minden olyan helyi fájlról, amely tartalmazza a rosszindulatú program által olvasott titkokat:
# 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
Tekintse át -/exposed_secrets_inventory.txt soronként és nyissa meg mindegyiket .env vagy .tfstate offline fájlokat, így minden egyes API-kulcsot, adatbázis-jelszót és webhook-titkot elforgathat tiszta eszközéről.
2. lépés: Vizsgálja meg, mit hajtott végre a rosszindulatú csomag vagy IDE-bővítmény¶
A sértő mappa törlése előtt ellenőrizze a pontos terhelést, és ellenőrizze, hová telepítette a perzisztenciát az operációs rendszeren:
# 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"
3. lépés: Keresd a fejlesztői rosszindulatú programok által elvetett operációs rendszer-szintű tartósságot (macOS, Linux és Windows)¶
A rosszindulatú függőségek és a „hamis toborzó” adattárak gyakran eldobják a rendszerfrissítőnek, csomóponti démonnak vagy Spotlight indexelőnek álcázott állandó háttérügynököket:
- Apple macOS-en:
# 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" - Linux / Ubuntu / Fedora / WSL2 rendszeren:
# 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" - Windows rendszeren (WSL2 natív vagy gazdagépe):
- Ne feledje, hogy a WSL2-n (Windows alrendszer Linuxhoz) belül futó rosszindulatú npm vagy Python szkript közvetlenül hozzáférhet a teljes Windows gazdagéphez
C:\/mnt/c/Users/<username>/és meghívhatpowershell.exevagycmd.exeközvetlenül a Linux shell belsejéből, hogy megfertőzze a Windows gazdagép beállításjegyzékét (HKCU:\Software\Microsoft\Windows\CurrentVersion\Run), Ütemezett feladatok és Chrome/EdgeCookiesadatbázisok. - Futtassa le a teljes Windows PowerShell-perzisztencia auditot a mi webhelyünkön munkamenet süti-eltérítés és infostealer útmutató és a miénk rosszindulatú programokkal, zsarolóprogramokkal és spyware fertőzésekkel kapcsolatos útmutató.
4. fázis: Miért kell törölnie és újjáépítenie a fejlesztői munkaállomást¶
Még akkor is, ha megtalálja és törli a rosszindulatú node_modules mappa, a .vsix kiterjesztés, és egy szélhámos -/Library/LaunchAgents plist, soha ne használjon tovább kompromittált fejlesztői munkaállomást a termelési tervezéshez anélkül, hogy tiszta operációs rendszer-törlést és újratelepítést hajtana végre.
A kifinomult, fejlesztők számára célzott hasznos adatok módosítják a rendszeren meglévő legitim bináris fájlokat vagy konfigurációs fájlokat, amelyeket egyetlen víruskereső sem jelöl meg rosszindulatúként:
1. Trójai helyi CLI binárisok (git, ssh, sudo, aws, kubectl, docker): A felhasználói fiókod alatt futó terhelés nem írható felül /usr/bin/ssh nélkül sudo, ezért ehelyett eldob egy burkoló szkriptet a -/.local/bin/ssh, -/bin/git vagy -/bin/sudo és a könyvtár elé fűzi azt PATH. Amikor legközelebb gépel sudo vagy ssh -i az internethez való újracsatlakozás után a wrapper csendben elkapja jelszavát vagy jelszavát, és továbbítja azt a támadónak, mielőtt meghívná a valódi bináris fájlt.
2. Fertőzött helyi csomaggyorsítótárak (-/.npm/_cacache, -/.cache/pip, -/.cargo/registry, -/Library/Caches/pnpm): A rosszindulatú programok megmérgezhetik a helyi csomagkezelő gyorsítótárában lévő gyorsítótárazott tarballokat, így még akkor is, ha jövő héten tiszta, legitim csomagot telepít, a csomagkezelő kicsomagolja a háttérajtóval ellátott tarballt a helyi gyorsítótárból.
3. Módosított IDE alapfájlok (workbench.desktop.main.js): Bizonyos VS kód és kurzor hasznos adatok közvetlenül javítják az elektront asar archívum ill workbench.desktop.main.js az IDE alkalmazáscsomagon belül, így a hátsó ajtó túléli az összes kiterjesztés eltávolítását.
Csak a tiszta forráskódról készítsen biztonsági másolatot (ellenőrizve: git status és git diff tiszta gépen) és személyes dokumentumokat, majd hajtson végre tiszta macOS Erase All Content and Settings / DFU Restore, tiszta Linux USB-telepítés vagy tiszta Windows 11 USB-telepítés.
Új fejlesztői munkaállomásának keményítése a jövőbeli ellátási lánc támadásaival szemben¶
A frissen törölt fejlesztői munkaállomás beállításakor cserélje ki a statikus szöveges fájlokat a saját könyvtárában hardverrel támogatott, átmeneti és sandbox-alapú munkafolyamatokra, így még ha a jövőben is végrehajtódik egy rosszindulatú függőség, nulla statikus titok marad a lemezen, amelyet el lehet lopni:
1. Tiltsa le az életciklus-szkriptek automatikus végrehajtását a csomagkezelőben¶
Konfigurálás npm, pnpm, yarn, és pip így a nem megbízható függőségek nem tudnak csendben végrehajtani a shell szkripteket a telepítés során:
- Node.js (npm / yarn / pnpm):
# Globally disable automatic preinstall/postinstall script execution in npm:
npm config set ignore-scripts true
pnpm.onlyBuiltDependencies be package.json, készítés pnpm A v10+ lényegesen biztonságosabb az ellátási lánc férgei ellen, mint az alapértelmezett 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:"
npm config set before, pnpm minimumReleaseAgevagy Socket.dev/Artifactory firewall) az elmúlt 48-72 órán belül közzétett csomagverziók elutasításához.
2. Távolítsa el az egyszerű szöveget -/.ssh/id_ed25519, -/.aws/credentials, és .env Fájlok a lemezről¶
- ** Helyezze át az SSH-kulcsokat egy hardveres YubiKey-be (
ed25519-sk) vagy Secure Enclave / Biometrikus ügynök**: - Soha ne hagyjon titkosítás nélkül vagy jelmondat nélkül
-/.ssh/id_ed25519fájl a lemezen. Vagy generáljon egy hardverben rezidens FIDO2 SSH kulcsot (ssh-keygen -t ed25519-sk -O verify-required) egy fizikai YubiKey-n (amihez minden esetben meg kell érintenie az ujját a fém érintkezőngit pushvagysshkapcsolat), vagy tárolja az SSH-kulcsokat a 1Password SSH Agent / Secretive (macOS Secure Enclave)-ban, ahol a privát kulcs soha nem létezik fájlként-/.ssh/és minden aláírás kéri a Touch ID / Windows Hello használatát. - Cserélje ki a Statikust
-/.aws/credentials(AKIA...) rövid életű SSO-val (aws sso loginvagyaws-vault): - Törölje az összes állandó IAM felhasználói hozzáférési kulcsot (
AKIA...). AWS IAM Identity Center használata (aws sso login) rövid munkamenet-időtartamokkal (1-4 óra) vagy a hitelesítő adatok becsomagolásávalaws-vaulta macOS Keychain / Windows Credential Manager támogatásával biometrikus üzenetekkel. - Cserélje ki az egyszerű szöveget
.envFájlok futásidejű titkos befecskendezéssel (1Password CLI op run,Doppler, vagyaws-vault): - Tárolás helyett
STRIPE_SECRET_KEY=sk_live_...egyszerű szövegben.envfájl, hogy bármelyiknode_modulesscript lehetfs.readFileSync('.env'), bolti referenciák, mintSTRIPE_SECRET_KEY="op://Dev-Vault/Stripe/secret_key"és indítsa el a helyi fejlesztői szervert aop run --env-file=".env.template" -- npm run devTouch ID-vel történő hitelesítés után. - ** Használja a Trusted Publishing (OIDC) szolgáltatást a hosszú életű helyett
-/.npmrcés-/.pypircTokenek**: - Soha ne tartson benne közzétételre alkalmas tokent
-/.npmrcvagy-/.pypirca laptopján. Mind a PyPI, mind az npm (a Provenance / OIDC-n keresztül) lehetővé teszi, hogy kizárólag elszigetelt GitHub Actions / GitLab CI Trusted Publishers csomagokat tegyen közzé rövid élettartamú OpenID Connect (OIDC) tokenekkel, ami azt jelenti, hogy egyetlen karbantartó laptopján sem létezik közzétételi token.
3. Különítse el a nem megbízható adattárakat, és készítsen szkripteket keményített fejlesztői tárolókban vagy virtuális gépeken¶
- Soha ne klónozzon és futtasson „Recruter Take-Home Assessment”, ismeretlen nyílt forráskódú projektet vagy jutalomtárat közvetlenül a gazdagép operációs rendszerén:
- Futtasson ismeretlen projekteket egy GitHub Codespace, eldobható felhő virtuális gépen vagy egy helyi Docker DevContainer belsejében, amely NEM köti össze a gazdagép kezdőkönyvtárát (
-), NEM rögzíthető/var/run/docker.sock, és csak szükség esetén ad át egy hatókörű, csak olvasható Git tokent. - A VS kód/kurzorbővítmények ellenőrzése és az automatikus frissítések letiltása nem ellenőrzött megjelenítőknél:
- Ne feledje, hogy a Cursor, a Windsurf és a VSCodium kiterjesztéseket húz ki az OpenVSX beállításjegyzékből (
open-vsx.org) a Microsoft hivatalos Visual Studio Marketplace helyett. Bármely bővítmény telepítése előtt ellenőrizze a kiadó pontos névterét és a telepítések számát, tartsa minimálisan a telepített bővítmények listáját, és távolítsa el azokat a bővítményeket, amelyeket már nem használ aktívan.
Gyakran ismételt kérdések¶
Fut npm install --ignore-scripts teljesen megvéd egy rosszindulatú npm-csomagtól?¶
Futás npm install --ignore-scripts blokkolja a leggyakoribb ellátási lánc támadási vektort: az automatikus végrehajtást előtelepítés, telepíteni, és telepítés után belül meghatározott shell parancsok package.json telepítési időben. Azonban nem védi meg Önt, ha ténylegesen végrehajtja a csomag JavaScript kódját (például amikor fut npm futás dev, npm teszt, tréfa, webpack, vagy vite, vagy ha az IDE ESLint/TypeScript beépülő modulja rosszindulatú beépülő modult tölt be node_modules). Mivel a Node.js-nek alapértelmezés szerint nincs futásidejű fájlrendszere vagy hálózati sandboxa, a felépítés vagy a tesztlépés során importált kód továbbra is olvasható -/.aws és -/.ssh hacsak nem izolálja a buildet egy tárolóban, vagy használja a Node kísérleti engedélymodelljét (csomópont --engedély).
A LinkedIn egyik toborzójától megnyitottam egy gyanús adattárat a VS Code-ban, és rákattintottam az „Igen, megbízom a szerzőkben” lehetőségre, mielőtt rájöttem, hogy átverésről van szó. A kód akkor is lefutott, ha soha nem futottam npm install?¶
Igen, feltételeznie kell, hogy tetszőleges kód fut le pontosan abban a másodpercben, amikor az "Igen, megbízom a szerzőkben" kattintás után. A Visual Studio Code and Cursor alkalmazásban a Workspace Trust megadása azonnal engedélyezi a lerakat .vscode/tasks.json fájl a konfigurált háttérhéjfeladatok futtatásához "runOn": "folderOpen", lehetővé teszi a munkaterület által meghatározott .vscode/settings.json nyelvi kiszolgálókat (például Python, TypeScript, ESLint vagy Rust Analyzer) a lerakat mappán belüli rosszindulatú végrehajtható útvonalakra irányít, és elindítja a build.rs a Rust projektekben. Azonnal válassza le a készüléket a hálózatról, és kövesse az 1. fázist az összes hitelesítő adat elforgatásához.
Ha a rosszindulatú npm- vagy PyPI-csomag egy Docker-tárolóban vagy DevContainer-ben futott, biztonságos-e a gazdagép Mac vagy Windows laptopom?¶
Ez teljes mértékben attól függ, hogy milyen kötetcsatlakozókat, környezeti változókat és foglalatokat adtak át ebbe a tárolóba. Szabványos DevContainer sablonok és helyi docker-compose.yml a beállítások gyakran automatikusan továbbítják a gazdagépet SSH_AUTH_SOCK (lehetővé teszi a tárolóban lévő rosszindulatú programok számára, hogy a gazdagép SSH-kulcsai segítségével távoli szerverekhez kapcsolódjanak, vagy továbbítsanak a GitHubhoz), bind-mount -/.aws, -/.gitconfig, vagy a munkaterületén .env fájlokat, vagy csatlakoztassa a gazdagép Docker socketet (/var/run/docker.sock), amely azonnali root hozzáférést biztosít a teljes gazdagép operációs rendszerhez. Vizsgálja meg devcontainer.json és dokkoló vizsgálja meg mounts, hogy pontosan lássa, mely gazdagép-erőforrások voltak kitéve a tárolóban.
Hogyan ellenőrizhetem, hogy a telepítendő csomagverzióban vannak-e rejtett telepítési szkriptek vagy elhomályosított telemetria a telepítés előtt?¶
Mielőtt egy ismeretlen npm, PyPI, Go vagy Rust csomagot telepítene, ellenőrizze Socket.dev vagy Deps.dev (a Google Open Source Insights által), amely statikusan elemzi az összes verziót a telepítési parancsfájlok, hálózati kérések, fájlrendszer-hozzáférés szempontjából,eval() homályosítás és karbantartó változtatások. Futni is lehet npm nézet a terminálban, hogy megvizsgálja életciklus-szkriptjeit a csomag letöltése vagy végrehajtása nélkül.
A források ellenőrizve¶
- Kiberbiztonsági és Infrastruktúrabiztonsági Ügynökség (
CISA) és Nemzetbiztonsági Ügynökség (NSA) (Egyesült Államok): A Szoftver-ellátási lánc biztonsága: A fejlesztők számára ajánlott gyakorlatok és a kompromittált függőségekre adott válaszok. - GitHub biztonsági laboratórium és npm biztonsági tanácsok: Válasz a kompromittált npm-csomagokra, rosszindulatú
.vscode/tasks.jsonRepository Traps (Contagious Interview), és a GitHub Actions Workflow titkos kiszűrésének enyhítése. - Python Packaging Authority (
PyPA) & PyPI biztonság: A rosszindulatú kerék kezelése.pthFájlok,setup.pyÖnkényes végrehajtás és megbízható közzététel (OIDC) Végrehajtási iránymutatások. - Open Worldwide Application Security Project (
OWASP): Szoftver-ellátási lánc biztonsági csalólap és CI/CD biztonság A 10 legfontosabb kockázat. - Nemzeti Kiberbiztonsági Központ (
NCSC) (Egyesült Királyság): A fejlesztői környezetek és a felhőkezelési síkok védelme a célzott hitelesítő adatok begyűjtése ellen.
Kapcsolódó útmutatók¶
- Munkamenet-cookie-eltérítés, infolopók és token visszavonás
- A kriptovaluta pénztárca kiürítése és a magfrakció kompromisszuma
- Rosszindulatú böngészőbővítmények, vágólap-eltérítők és reklámprogramok eltávolítása
- Hamis állásajánlatokkal kapcsolatos csalások, berendezések ellenőrzésével kapcsolatos csalások és személyazonosság-lopás
- Rosszindulatú programok, zsarolóprogramok és spyware fertőzések
- Segélyhívó számok országonként