Skip to content

Kehittäjätyöaseman vaarantaminen: Haitallinen riippuvuus tai IDE-laajennusvastaus

Hätänumerot vaihtelevat maittain. Tämä sivu käyttää numeroa 911, joka on Yhdysvaltojen ja Kanadan numero. Monet muut maat käyttävät numeroa 112, 999 tai jotain muuta numeroa. Etsi maasi numero.

Löydät sen ohjelmistopaketin, jonka kautta juuri asensit npm install, pip install, cargo build, gem install, tai go get, tai äskettäin päivitetty Visual Studio Code-, Cursor- tai JetBrains IDE -laajennus, on haitallinen kirjoitusvirhe, riippuvuushäiriö tai kaapattu alkupään julkaisu edustaa kriittistä infrastruktuurin hätätilannetta. Toisin kuin tavalliset kuluttajatietokoneet, ohjelmistosuunnittelija, DevOps-arkkitehti tai datatutkija-työasema pitää hallussaan suoria kryptografisia avaimia tuotantopilviympäristöihin, lähdekoodivarastoihin, säilörekistereihin, CI/CD-putkistoihin ja asiakastietokantoihin. Kun ilkeä preinstall tai postinstall käsikirjoitus sisällä package.json, aseistettu setup.py Python-pyörässä tai vaarantunut .vsix laajennus suoritetaan kannettavassa tietokoneessa, se toimii kaikilla käyttöoikeuksillasi ja kerää välittömästi sadon -/.aws/credentials, -/.ssh/id_ed25519, -/.npmrc, -/.pypirc, -/.kube/config, paikallinen .env tiedostot, macOS Keychain tai Linux libsecret merkinnät ja aktiiviset selaimen istunnon evästeet muutamassa sekunnissa.

Jos huomasit juuri, että suoritit haitallisen avoimen lähdekoodin riippuvuuden, kloonasit ja rakensit aseistetun arkiston (kuten rekrytointihuijauksen tekemän väärennetyn teknisen haastatteluprojektin) tai asensit troijalaisen IDE-laajennuksen, joka sekunti koneesi pysyy yhteydessä verkkoon mahdollistaa hyötykuorman kääntymisen yrityksesi pilveen tai julkaista itse leviäviä pakettimatomatoja käyttämällä. Jos hyökkäys sisältää kiristystä, fyysisiä uhkauksia tai kriittisen julkisen infrastruktuurin häiriöitä, soita paikalliseen hätänumeroon (911 Yhdysvalloissa ja Kanadassa, 112 kaikkialla Euroopan unionissa, 999 Isossa-Britanniassa) tai ota yhteyttä kansainväliseen yritykseemme hätänumerot hakemistosta. Noudata välittömästi näitä eristämis-, rikosteknisen triage- ja salausavainten kiertomenettelyjä.

Tee tämä nyt

  1. Katkaise kaikki kehittäjän työaseman verkkoyhteydet välittömästi (sammuta Wi-Fi, irrota Ethernet ja lopeta aktiiviset VPN- tai SSH-tunnelit), mutta ÄLÄ sammuta tai käynnistä konetta vielä uudelleen: Ethernetin irrottaminen ja Wi-Fi:n kytkeminen pois päältä estää aktiivisen käänteisen kuoren, C2-majakan tai automatisoidun madon käyttämästä paikallisia tokensscomeja. Pidä kone päällä offline-tilassa (tai keskeytä se vasta haihtuvien prosessiluetteloiden tallentamisen jälkeen), jotta voit tarkastaa käynnissä olevat aliprosessit, avoimet verkkopistokkeet, komentotulkkihistoria ja tarkalleen mitkä .env ja tunnistetiedostot, jotka olivat levyllä suoritushetkellä.
  2. Käytä erillistä, puhdasta laitetta (kuten älypuhelintasi mobiilidatalla tai koskematonta kannettavaa tietokonetta) ilmoittaaksesi Security Operations Centerille (SOC) ja peruuta Single Sign-On (SSO)- ja Cloud IAM -istunnot: Älä koskaan kirjaudu AWS-, GCP-, Azure-, GitHub- tai Oktaan tartunnan saaneesta työasemasta kiertääksesi avaimia. Jos muistissa oleva varastaja, haitallinen IDE-laajennus tai komentotulkkikoukku tarkkailee päätettä ja selainta, kaikki kyseisellä koneella luomasi uudet tunnukset kaapataan välittömästi.
  3. Peruuta ja kierrä suuren räjähdyssäteen kehittäjätunnuksesi tiukassa tärkeysjärjestyksessä ensimmäisten 15 minuutin aikana:
  4. Prioriteetti 1 (pilvi ja Kubernetes): Poista kaikki paikalliset AWS IAM -käyttöavaimet käytöstä (AKIA...), peruuttaa Google Cloud -sovelluksen oletuskirjautumistiedot (gcloud auth application-default revoke), mitätöi Azure CLI -tunnukset (az account clear + Entra ID -istunnon peruutus) ja kierrä Kubernetes kubeconfig asiakasvarmenteita tai palvelutilitunnuksia.
  5. Prioriteetti 2 (lähdekoodi ja CI/CD): Poista kaikki GitHub-, GitLab- ja Bitbucket SSH -julkiset avaimet, henkilökohtaiset käyttöoikeudet (ghp_..., github_pat_..., glpat-...) ja OAuth CLI -tunnukset (-/.config/gh/hosts.yml) ja tarkista arkiston webhook-asetukset ja GitHub Actions / GitLab CI -salaisuudet.
  6. Prioriteetti 3 (pakettirekisterit ja säilöt): Kumoa npm-automaatio ja julkaise tunnukset (-/.npmrc), PyPI API-tunnukset (-/.pypirc), Docker Hub / GHCR / ECR -kirjautumistunnukset (-/.docker/config.json) ja Terraform Cloud -tunnukset (-/.terraform.d/credentials.tfrc.json).
  7. Tarkista npm, PyPI, Cargo ja GitHub NIIN NYT varmistaaksesi, että haittaohjelmat eivät ole jo käyttäneet paikallisia tunnuksiasi omien pakettien matotartunnan saaneen version julkaisemiseen tai haitallisten sitoumusten työntämiseen: Nykyaikaiset toimitusketjun hyötykuormat (kuten ua-parser-js, coa, rc, ctx, lottie-player, ja ultralytics kompromissit) jäsentävät automaattisesti uhrin kehittäjän -/.npmrc, -/.pypirc, ja -/.gitconfig julkaista välittömästi takaoviset korjausversiot jokaisesta kehittäjän ylläpitämästä avoimen lähdekoodin tai sisäisestä paketista tai luoda piilotettuja GitHub Actions -työnkulkuja kehittäjän arkistoihin.
  8. Skannata jokainen työaseman projektihakemisto luodaksesi täydellisen luettelon altistuneista .env tiedostot, tietokantayhteysmerkkijonot ja kovakoodatut API-avaimet: Ennen kuin tyhjennät työaseman, suorita offline-komentosarja eristetyssä koneessa listataksesi kaikki .env, .env.local, terraform.tfstate, ja application.yml tiedosto kiintolevylläsi, jotta voit kiertää kaikkia kolmannen osapuolen salaisuuksia (Stripe, Twilio, SendGrid, OpenAI, Anthropic, Datadog, Slack, Postgres, MongoDB ja Redis valtuustiedot), jotka käyttäjätilisi pystyi lukemaan.
  9. Katkaise kaikki selainistunnot ja laitteistolompakkoyhteydet: Koska kehittäjien kompromissit ottavat usein käyttöön hyödyketietovarastoja (kuten Lumma, RedLine tai Atomic macOS Stealer) kehittäjäkohtaisten valtuustietojen kerääjien kanssa, noudata ohjeitamme. istunnon evästeiden kaappauksen ja infostealer-tunnuksen peruutusopas ja jos teet Web3-kehitystä tai omistat digitaalista omaisuutta, toteuta meidän kryptovaluutan lompakon tyhjennys- ja siemenlauseen kompromissiopas.

Danger

Miksi juokseminen npm uninstall <package> tai pip uninstall <package> EI puhdista työasemaasi: Node.js:ssa (npm, yarn, pnpm) ja Python (pip) ekosysteemejä, haitallinen koodi ei melkein koskaan odota sinua import tai require() sovelluskoodisi kirjasto. Sen sijaan hyökkääjät sijoittavat hyötykuorman paketin elinkaaren koukkuihin (preinstall, install, tai postinstall sisään package.json, tai huipputason suoritus sisällä setup.py lähteen jakelupyörän rakentamisen aikana). Sillä hetkellä kun painoit Enter päällä npm install tai pip install, hyökkääjän mielivaltainen komentosarja tai binääri, joka suoritettiin käyttöjärjestelmässäsi, kopioi -/.ssh, -/.aws, ja .env tiedostot ulkoiseen palvelimeen, ja niihin on usein lisätty jatkuva takaovi -/.bashrc, -/.zshrc, crontab, tai -/Library/LaunchAgents. Paketin asennuksen poistaminen jälkeenpäin vain poistaa sisällä olevan kansion node_modules tai site-packages jättäen varastetut avaimet hyökkääjän käsiin ja pysyvyysmekanismin käynnissä käyttöjärjestelmässäsi.


Päätöspuu: kehittäjätyöaseman toimitusketjun kompromissitriage

Käytä tätä tapausreagointityönkulkua hallitaksesi räjähdyssäteen sekä henkilökohtaisessa kehitysympäristössäsi että tuotantoyrityksen infrastruktuurissa:

flowchart TD
    Detect["Epäilty haitallinen npm / PyPI / rahtipaketti, troijalainen IDE-laajennus tai väärennetty Recruiter Repo suoritettu"] --> Isolate["VAIHE 1: Katkaise välittömästi työaseman Wi-Fi- ja Ethernet-yhteys (pidä kone päällä offline-triageä varten)"]

    Isolate --> ScopeCheck{"Tapahtuiko suoritus isäntäkäyttöjärjestelmässä tai erillisen säilön/VM:n sisällä?"}
    ScopeCheck -->|"Isäntäkäyttöjärjestelmä (Mac / Linux / Windows / WSL2)"| FullCompromise["Oletetaan, että 100 % kotihakemistosta (-/.aws, -/.ssh, -/.npmrc, .env, selaimen evästeet) on suodatettu"]
    ScopeCheck -->|"DevContainer / Docker"| MountCheck["Tarkista Volume Mounts (-v -/.ssh, -v -/.aws, Docker Socket /var/run/docker.sock tai isäntäverkko)"]
    MountCheck --> FullCompromise

    FullCompromise --> CleanDevice["VAIHE 2: erilliseltä puhtaalta laitteelta, varoita SOC ja peruuta Cloud IAM, SSO, GitHub/GitLab ja rekisteritunnukset"]

    CleanDevice --> WormCheck["VAIHE 3: Tarkastele GitHub-sitoumuksia, CI/CD-työnkulkuja ja npm/PyPI:n julkaistuja versioita automatisoitua madon leviämistä varten"]

    WormCheck --> OfflineAudit["VAIHE 4: Offline-työasemassa, inventoi kaikki .env-tiedostot, terraform-tilatiedostot ja pysyvyystakaovet"]

    OfflineAudit --> RotateEnv["VAIHE 5: Kierrä jokaista tietokannan salasanaa, Webhook-salaisuutta, GPG-allekirjoitusavain ja API-avain, jotka löytyvät .env-/tilatiedostoista"]

    RotateEnv --> RebuildOS["VAIHE 6: Pyyhi työasema puhtaalla käyttöjärjestelmän uudelleenasennuksella -> pakota laitteiston tukemat SSH-avaimet, OIDC ja --ignore-scripts"]

Ymmärtää kuinka kehittäjien toimitusketju ja IDE-vektorit toimivat

Nykyaikaiset hyökkäykset ohjelmistosuunnittelijoita vastaan kohdistuvat neljään erilliseen työaseman suorituspintaan. Koneeseesi osuvan vektorin tunnistaminen kertoo, mitä oikeuksia ja tiedostopolkuja hyötykuorma on käyttänyt:

1. Haitallisen paketin elinkaaren koukut (npm, pnpm, yarn, pip, cargo, gem)

  • Node.js (package.json skriptit): Oletuksena käynnissä npm install suorittaa automaattisesti minkä tahansa komentotulkkikomennon, joka on määritetty kohdassa "preinstall", "install", tai "postinstall" aloilla package.json, ei vain kirjoittamallesi huipputason paketille, vaan kaikille puun transitiivisille riippuvuuksille. Hyökkääjät käyttävät kirjoitusvirhettä (esim. reqeusts, crossenv, lodahs), riippuvuushäiriö (julkisen paketin julkaiseminen npm- tai PyPI-palvelussa täsmälleen samalla nimellä ja korkeammalla versionumerolla, kuten esim. 99.99.9, yrityksesi sisäisenä yksityisenä pakettina) tai ylläpitäjän tilin haltuunotosta liukuaksesi yhden rivin, kuten "postinstall": "node index.js" pakettiin.
  • Python (setup.py ja .pth tiedostot): Milloin pip asentaa lähdejakelun (sdist .tar.gz), se suorittaa setup.py täydet Python-tulkkioikeudet. Jopa kun asennat valmiiksi käännettyjä binääripyöriä (.whl), jotka eivät toimi setup.py asennuksen aikana hyökkääjät sisältävät haitallisia .pth (polun määritys) tiedostot putosivat suoraan site-packages/. Mikä tahansa rivi a:n sisällä .pth tiedosto alkaa import Python-tulkki suorittaa sen automaattisesti joka kerta python käynnistyy kyseisessä järjestelmässä.
  • ** Ruoste (build.rs) ja Go**: Rustissa Cargo kääntää ja suorittaa automaattisesti build.rs ei vain aikana cargo build tai cargo run, mutta heti kun rust-analyzer (VS Coden tai IntelliJ:n sisällä) avaa projektikansion hakemistotyypeille. Avaa vain kloonattu Rust-tietovarasto IDE:ssäsi rust-analyzer enabled suorittaa mielivaltaisen koodin sisällä build.rs ennen kuin kirjoitat päätekomentoa.

2. Haitalliset tai kaapatut IDE-laajennukset (VS Code Marketplace, OpenVSX, JetBrains)

  • Visual Studio Code-, Cursor-, Windsurf- ja VSCodium-laajennukset (.vsix) suoritetaan Node.js Extension Host -pääprosessissa työasemallasi nolla hiekkalaatikolla. Kaikilla asennetuilla laajennuksilla on täysi luku-/kirjoitusoikeus koko tiedostojärjestelmääsi, ja ne voivat synnyttää hiljaisia lapsiprosesseja (child_process.exec), voi lukea jokaisen avoimen editorin puskurin ja .env tiedostoa ja voi kytkeä integroidun päätelaitteen.
  • Uhkanäyttelijät julkaisevat rutiininomaisesti väärennettyjä teemalaajennuksia (Darcula Official), väärennetyt tekoälyn koodausavustajat tai virheelliset linter/Prettier-laajennukset, jotka lataavat äänettömästi toisen vaiheen infostealer- tai käänteisen kuoren IDE:n käynnistyessä.

3. Aseistetut Git-varastot ja IDE-työtilan automaattinen suoritus ("Fake Recruiter / Take-Home Test" -ansat)

  • Pohjois-Korean valtion tukemat ryhmät (Contagious Interview / Lazarus Group) ja salaukseen keskittyvät uhkatoimijat lähestyvät rutiininomaisesti kehittäjiä LinkedInissä, Upworkissa tai GitHubissa esiintyen rekrytoijana tai teknologiajohtajina, jotka tarjoavat korkeapalkkaisia etärooleja. He pyytävät kehittäjää kloonaamaan Bitbucket- tai GitHub-arkiston "15 minuutin virheenkorjausarviointia" tai "Web3-pelien MVP-arvostelua varten".
  • Nämä arkistot sisältävät piilotettuja suoritusloukkuja, jotka laukeavat joko avattaessa IDE:ssä tai koonnon aikana:
  • .vscode/tasks.json kanssa "runOn": "folderOpen": Suorittaa automaattisesti taustakuoren komentosarjan heti, kun napsautat "Kyllä, luotan tekijöihin" VS Codessa.
  • ** Haitallinen .git/hooks/ tai .gitmodules**: Hyödyntää Git-alimoduulin määrityksiä tai rakentaa komentosarjoja (Makefile, webpack.config.js, next.config.js, vite.config.ts), jotka lataavat hämäriä JavaScript-hyötykuormia (usein pehmustettu tuhansilla ruudun ulkopuolisilla välilyönneillä piilottaakseen sarakkeen 2 000+ kohdalla), jotka kutsuvat ulkoista C2-palvelinta.

Vaihe 1: Täydellinen kehittäjän tunnistetiedot ja salainen kiertomatriisi

Käytä puhdasta toissijaista kannettavaa tietokonetta tai älypuhelinta ja käytä järjestelmällisesti tätä 12 pisteen kehittäjän tunnistetietoluetteloa. Oletetaan, että mikä tahansa tiedosto, jota ei-root-käyttöjärjestelmän käyttäjätilisi voi lukea (chmod 600 tai 644 käyttäjäsi omistama) ladattiin hyökkääjän palvelimelle 3 sekunnin kuluessa hyötykuorman suorittamisesta.

Tunnisteluokka Tarkat paikalliset tiedostopolut kerätty työasemalta Pakollinen peruutus- ja kiertotoiminto (puhtaalta laitteelta)
1. AWS IAM & SSO -/.aws/credentials
-/.aws/config
-/.aws/sso/cache/*.json
-/.aws/cli/cache/*.json
1. AWS IAM -konsolissa heti poista käytöstä ja poista kaikki staattiset pääsyavaimet (AKIA...) tallennettu kyseiseen kannettavaan tietokoneeseen.
2. Peruuta aktiiviset käyttäjäistunnot ja poista rekisteröidyt OIDC-asiakaslaitteen tunnukset AWS IAM Identity Center (SSO) -kohdassa.
3. Tarkista AWS CloudTrail GetCallerIdentity, CreateUser, CreateAccessKey, AssumeRole, ListBuckets, ja SecretsManager:GetSecretValue puhelut, jotka tulevat epätavallisista IP-osoitteista tai käyttäjäagenteista (Boto3, aws-cli, Go-http-client).
2. Google Cloud (GCP) ja 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. Siirry osoitteeseen myaccount.google.com/permissions ja peruuttaa Google Cloud SDK:n ja Firebase CLI:n käyttöoikeudet.
2. Poista kohdassa GCP-konsoli > IAM ja järjestelmänvalvoja > Palvelutilit mikä tahansa palvelutilin JSON-avain (private_key_id), joka on ladattu työaseman kiintolevylle.
3. Tarkista Cloud Audit Logs luvattomien IAM-sidosten tai Compute Engine -luonnin varalta.
3. Microsoft Azure ja Entra ID -/.azure/msal_token_cache.bin
-/.azure/accessTokens.json
-/.azure/azureProfile.json
1. Suorita Entra ID Admin Revoke-MgUserSignInSession -UserId <your-user-id> mitätöidä kaikki päivitystunnukset ja ensisijaiset päivitystunnukset (PRT).
2. Poista kaikki paikallisesti tallennetut Service Principal -asiakassalaisuudet tai -sertifikaatit.
4. Kubernetes & Helm -/.kube/config
-/.kube/cache/
-/.config/helm/registry/config.json
1. Jos -/.kube/config sisälsi staattisia asiakasvarmenteita (client-certificate-data / client-key-data) tai pitkäikäisiä ServiceAccount siirtotietunnuksia, peruuta varmenne klusterin CA:n kautta (CSR / RBAC-poisto) tai poista ja luo uudelleen ServiceAccount salaisuus heti.
2. Tarkista Kubernetes API -palvelimen tarkastuslokit kohteelle exec, pods, tai secrets listaa/hae verbejä.
5. GitHub, GitLab ja Bitbucket -/.ssh/id_ed25519, -/.ssh/id_rsa
-/.config/gh/hosts.yml
-/.git-credentials, -/.netrc
-/.gitconfig
1. Siirry osoitteeseen github.com/settings/keys (ja GitLab/Bitbucket-vastineet) ja Poista julkinen SSH-avain ja GPG/SSH-sitoutumisen allekirjoitusavain tartunnan saaneelta koneelta.
2. Siirry osoitteeseen github.com/settings/tokens ja github.com/settings/applications peruuttaa kaikki henkilökohtaiset käyttöoikeudet (ghp_, github_pat_), OAuth-sovellukset (GitHub CLI, VS Code, Git Credential Manager) ja aktiiviset verkkoistunnot.
3. Tarkista Turvallisuusloki (github.com/settings/security-log) varten repo.clone, org.Invite_member, tai hook.create.
6. GPG ja koodin allekirjoitusavaimet -/.gnupg/private-keys-v1.d/
-/Library/Keychains/login.keychain-db (Applen kehittäjätunnus / .p12)
1. Jos yksityinen GPG-avaimesi oli tallennettu levylle ilman laitteisto-älykorttia (YubiKey OpenPGP) ja salasana on tallennettu välimuistiin gpg-agent tai kirjoitit äskettäin, luo ja julkaise GPG-peruuttamisvarmenne välittömästi ja poista GPG-avain GitHubista/GitLabista.
2. Peruuta kaikki viety Apple Developer .p12 tai Android Keystore .jks koneelle tallennettuja koodin allekirjoitusvarmenteita.
7. Pakettirekisterit (npm, PyPI, Cargo, RubyGems, NuGet) -/.npmrc (_authToken=...)
-/.pypirc
-/.cargo/credentials.toml
-/.gem/credentials
1. Kirjaudu osoitteeseen npmjs.com > Access Tokens, pypi.org > Tiliasetukset > API-tunnukset, crates.io > Tiliasetukset > API-tunnukset ja rubygems.org ja Peruuta kaikki aktiiviset tunnukset välittömästi.
2. Tarkista julkaistut paketit (katso Vaihe 2 alla) varmistaaksesi, että hyökkääjä ei ole painanut takaovella varustettua julkaisua muutaman viime tunnin aikana.
8. Telakka- ja konttirekisterit -/.docker/config.json (Perus64 auths Docker Hub, GHCR, ECR, GCR, Quay) 1. Muista se "auth" sisään -/.docker/config.json (kun ei käytä credsStore: osxkeychain tai wincred) on vain salaamaton Base64 username:password_or_token.
2. Peru henkilökohtaiset käyttötunnukset Docker Hubissa (hub.docker.com/settings/security), GitHub Container Registry ja Quay.io.
9. Infrastructure-as-Code (Terraform / Pulumi / Ansible Vault) -/.terraform.d/credentials.tfrc.json
**/terraform.tfstate (Paikalliset osavaltion tiedostot)
-/.pulumi/credentials.json
-/.vault-token
1. Peruuta Terraform Cloud / Enterprise -käyttäjän API-tunnukset ja HashiCorp Vault -tunnukset.
2. KRIITTINEN: Mikä tahansa paikallinen terraform.tfstate levylläsi oleva tiedosto sisältää selkotekstisalasanat, RDS-pääkäyttäjätiedot, yksityiset TLS-avaimet ja IAM-salaiset avaimet jokaiselle kyseisen tilan hallinnoimalle resurssille. Kierrä jokaista paikallisessa viitattua salaisuutta .tfstate tiedostot.
10. Tietokannat ja CLI-historian välimuisti -/.psql_history, -/.pgpass
-/.mysql_history, -/.my.cnf
-/.rediscli_history
-/.mongodb/mongosh/
DBeaver / TablePlus / DataGrip asetukset
1. GUI-tietokannan hallintaohjelmat (TablePlus, DBeaver, DataGrip, Postico, pgAdmin, MongoDB Compass) tallentavat salattuja tai hämäriä tietokannan salasanoja paikallisesti, jonka varastajat purkavat salauksen rutiininomaisesti.
2. Pyöritä tietokannan käyttäjien salasanoja kaikille lavastus- tai tuotantotietokantoille, joihin pääsee VPN:n, linnakkeen tai julkisen IP-osoitteen kautta työasemastasi.
11. Sovellus .env Tiedostot ja kolmannen osapuolen SaaS-avaimet **/.env, **/.env.local, **/.env.production, **/.env.development Pyöritä jokaista paikalliseen projektiin tallennettua API-avainta .env tiedostot: Raita (sk_live_...), OpenAI (sk-...), antrooppinen (sk-ant-...), Twilio, SendGrid, AWS SES, Slack Bot Tokens (xoxb-...), Discord Bot Tokens, Datadog, Sentry, Supabase (service_role), Firebase Admin- ja JWT-allekirjoitussalaisuuksia.
12. Tunnetut SSH-isännät ja Bastion Jump -palvelimet -/.ssh/config
-/.ssh/known_hosts
-/.zsh_history, -/.bash_history
Hyökkääjät jäsentävät välittömästi -/.ssh/config ja -/.zsh_history löytääksesi jokaisen sisäisen palvelimen IP-osoitteen, linnakeisäntäkoneen ja käyttäjänimen, joihin muodostat yhteyden, ja käytä sitten varastettuasi -/.ssh/id_ed25519 avain kirjautuaksesi suoraan näihin palvelimiin. Poista vanha julkinen avaimesi -/.ssh/authorized_keys jokaisessa Linux-etäpalvelimessa ja tarkista /var/log/auth.log näillä palvelimilla luvattoman SSH-kirjautumisen varalta.

Vaihe 2: Automatisoidun toimitusketjun madon leviämisen tarkistaminen (GitHub, CI/CD ja pakettirekisterit)

Toisin kuin yleiset haittaohjelmat, kehittäjille kohdistetut hyötykuormat on erityisesti ohjelmoitu etenemään itse ohjelmiston toimitusketjussa muutamassa sekunnissa työasemallesi laskeutumisesta. Ennen kuin palaat puhdistamaan kannettavaa tietokonettasi, varmista puhtaalla laitteellasi, ettei varastettuja kirjautumistietoja ole jo käytetty tartuttamaan tiimiäsi tai jatkokäyttäjiäsi:

  1. Tarkista GitHub-/GitLab-arkistot hiljaisten takaovien ja haitallisten työnkulkujen varalta:
  2. Tarkista .github/workflows/*.yml kaikissa arkistoissa, joihin sinulla on kirjoitusoikeus: Viimeaikaiset toimitusketjun madot (Shai-Hulud, tj-actions/changed-files kompromisseja ja ultralytics hyväksikäytöt) käyttävät automaattisesti varastettuja kehittäjätunnuksia haitallisen GitHub Actions -työnkulun suorittamiseen tai muokkaavat olemassa olevaa työnkulkua tyhjentämään ${{ toJSON(secrets) }} (suodattamalla organisaatiosi tuotannon käyttöönoton salaisuudet GitHub Actions -käyttäjiltä).
  3. Tarkista viimeaikaiset sitoumukset tekijän ja sitoutujan aikaleiman mukaan: Muista, että kuka tahansa voi väärentää Git-tekijän nimen ja aikaleiman (git commit --date="..." --author="..."). Tarkista GitHubissa Push Events -tietovaraston Toimintanäkymä tai organisaatio Tarkastusloki (repo.push), jotka tallentavat todellisen palvelinpuolen aikaleiman ja tarkan todennustunnuksen (oauth_application_id tai ssh_key_fingerprint), joka työnsi koodin.
  4. Tarkista arkiston Webhookit, käyttöönottoavaimet ja yhteiskäyttäjät: Tarkista arkistojesi kohdasta Asetukset > Webhookit, Asetukset > Ota käyttöön avaimet ja Asetukset > Yhteiskäyttäjät ja tiimit varmistaaksesi, että hyökkääjä ei ole lisännyt jatkuvaa luku-/kirjoituskäyttöavainta tai ulkoisen Webhook-palvelimen osoitusta.
  5. Tarkista npm, PyPI, Cargo ja Docker Hub luvattomille pakettien julkaisuille:
  6. Jos olet ylläpitäjä tai yhteistyökumppani missä tahansa julkisessa tai yksityisessä paketissa npm:ssä, PyPI:ssä, RubyGemsissä tai Crates.iossa, tarkista jokaisen tilisi paketin Versiot / Julkaisuhistoria -välilehti.
  7. Jos korjausversio (esim. 1.4.2 viimeisen laillisen vapautuksesi jälkeen 1.4.1) julkaistiin työasemasi kompromissin aikarajoissa, poista välittömästi käytöstä tai poista se versio (npm deprecate <pkg>@<version> "CRITICAL: Compromised version, do not use" tai nappaa PyPI:tä) ja ota yhteyttä npm-tukeen (security@npmjs.com / GitHub Security) tai PyPI Security (security@pypi.org) poistaaksesi haitallisen artefaktin ja asettaaksesi ne versiot karanteeniin.
  8. Tarkista Secret TruffleHog / Git Clone Exfiltration:
  9. Toimitusketjun varastajat soittavat usein GitHub/GitLab API:lle varastetun tunnuksesi avulla kloonatakseen jokaisen yksityisen organisaation tietovaraston, johon sinulla on pääsy, ja käyttääkseen automaattisia salaisia skannereita (TruffleHog tai Gitleaks) yrityksesi koko sitoumushistoriaa vastaan. Jos organisaatiosi on koskaan vahingossa luovuttanut salaisuuden yksityisen arkiston Git-historiaan kiertämättä sitä, käännä historiallisia salaisuuksia nyt.

Vaihe 3: Offline Forensic Triage vaarantuneella työasemalla

Kun työasemasi on täysin irrotettu Wi-Fi- ja Ethernet-verkosta, avaa pääteikkuna suorittaaksesi offline-tilan. Tavoitteesi on kaksiosainen: (A) etsi jokainen .env ja konfigurointitiedosto levyllä, jotta tiedät, mitä salaisuuksia kierrättää, ja (B) kerää todisteet siitä, mitä haitallinen paketti tai laajennus todella suoritti, ennen kuin pyyhit käyttöjärjestelmän.

Vaihe 1: Inventoi jokainen altistunut .env, yksityinen avain ja tilatiedosto levylläsi

Suorita tämä vain luku -komento offline-macOS-, Linux- tai WSL2-työasemassasi luodaksesi täydellisen tarkistusluettelon kaikista paikallisista tiedostoista, jotka sisältävät salaisuuksia, jotka haittaohjelma on voinut lukea:

# 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

Tarkista -/exposed_secrets_inventory.txt rivi riviltä ja avaa jokainen .env tai .tfstate tiedosto offline-tilassa, jotta voit kiertää jokaista niiden sisällä lueteltua API-avainta, tietokannan salasanaa ja webhook-salaisuutta puhtaalta laitteeltasi.

Vaihe 2: Tarkista, mitä haittapaketti tai IDE-laajennus suoritti

Ennen kuin poistat loukkaavan kansion, tarkista tarkka hyötykuorma ja tarkista, mihin se asensi pysyvyyden käyttöjärjestelmässäsi:

# 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"

Vaihe 3: Kehittäjähaittaohjelmien (macOS, Linux ja Windows) hylkäämä käyttöjärjestelmätason pysyvyys

Haitalliset riippuvuudet ja "fake recruiter" -tietovarastot pudottavat usein pysyviä tausta-agentteja, jotka on naamioitu järjestelmäpäivittäjiksi, solmudemoneiksi tai Spotlight-indeksoijiksi:

  • Apple macOS:ssä:
    # 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:
    # 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"
    
  • Windowsissa (natiivi tai WSL2:n isäntä):
  • Muista, että WSL2:n (Windows Subsystem for Linux) sisällä ajettava haitallinen npm- tai Python-skripti voi käyttää suoraan koko Windows-isäntääsi C:\ ajaa /mnt/c/Users/<username>/ ja voi kutsua powershell.exe tai cmd.exe suoraan Linux-kuoren sisältä tartuttaaksesi Windowsin isäntärekisterin (HKCU:\Software\Microsoft\Windows\CurrentVersion\Run), ajoitetut tehtävät ja Chrome/Edge Cookies tietokannat.
  • Suorita täydellinen Windows PowerShellin pysyvyystarkastus sivustollamme istunnon evästeiden kaappaus ja infostealer opas ja meidän haittaohjelmien, kiristysohjelmien ja vakoiluohjelmien tartuntaopas.

Vaihe 4: Miksi kehittäjätyöasema on pyyhittävä ja rakennettava uudelleen

Vaikka löydät ja poistat haitallisen node_modules kansio, .vsix laajennus ja roisto -/Library/LaunchAgents plist, et koskaan saa jatkaa vaarantuneen kehittäjätyöaseman käyttöä tuotantosuunnitteluun suorittamatta puhdasta käyttöjärjestelmän pyyhkimistä ja uudelleenasennusta.

Kehittyneet kehittäjille kohdistetut hyötykuormat muokkaavat järjestelmässäsi olemassa olevia laillisia binaaritiedostoja tai määritystiedostoja, joita mikään virustorjuntaohjelma ei merkitse haitallisiksi: 1. Troijalaiset paikalliset CLI-binaarit (git, ssh, sudo, aws, kubectl, docker): Käyttäjätilisi alla olevaa hyötykuormaa ei voi korvata /usr/bin/ssh ilman sudo, joten sen sijaan se pudottaa käärekoodin osoitteeseen -/.local/bin/ssh, -/bin/git tai -/bin/sudo ja liittää kyseisen hakemiston hakemistoosi PATH. Kun seuraavan kerran kirjoitat sudo tai ssh -i Kun olet muodostanut yhteyden Internetiin, kääre sieppaa hiljaa salasanasi tai tunnuslauseesi ja välittää sen hyökkääjälle ennen oikean binaarin kutsumista. 2. tartunnan saaneet paikalliset pakettivälimuistit (-/.npm/_cacache, -/.cache/pip, -/.cargo/registry, -/Library/Caches/pnpm): Haittaohjelmat voivat myrkyttää paikallisen paketinhallinnan välimuistin välimuistiin tallennetut tarballt, joten vaikka asennat puhtaan, laillisen paketin ensi viikolla, paketinhallinta purkaa takaoven paketin paikallisesta välimuistista. 3. Muokatut IDE-ydintiedostot (workbench.desktop.main.js): Tietyt VS-koodin ja kursorin hyötykuormat korjaavat suoraan elektronin asar arkisto tai workbench.desktop.main.js IDE-sovelluspaketin sisällä, jotta takaovi säilyy hengissä poistamalla kaikki laajennukset.

Varmuuskopioi vain puhdas lähdekoodi (vahvistettu git status ja git diff puhtaalla koneella) ja henkilökohtaiset asiakirjat ja suorita sitten puhdas macOS Erase All Content and Settings / DFU Restore, puhdas Linuxin USB-asennus tai puhdas Windows 11 USB -asennus.


Uuden kehittäjätyöasemasi kovettaminen tulevia toimitusketjuhyökkäyksiä vastaan

Kun asennat juuri pyyhittyä kehittäjätyöasemaasi, korvaa kotihakemistosi staattiset tekstitiedostot laitteistotuetuilla, lyhytaikaisilla ja hiekkalaatikkotyönkuluilla, jotta vaikka haitallinen riippuvuus toteutuisi tulevaisuudessa, levyllä ei ole nollaa staattista salaisuutta, jota se voi varastaa:

1. Poista automaattinen elinkaarikomentosarjan suorittaminen käytöstä Package Managerissa

Määritä npm, pnpm, yarn, ja pip joten epäluotettavat riippuvuudet eivät voi suorittaa komentosarjoja äänettömästi asennuksen aikana: - Node.js (npm / yarn / pnpm):

# Globally disable automatic preinstall/postinstall script execution in npm:
npm config set ignore-scripts true
(Huomautus: pnpm v10+ poistaa nyt oletusarvoisesti käytöstä riippuvuuksien elinkaarikoon rakennuskomentosarjat, ellei niitä ole erikseen sallittu pnpm.onlyBuiltDependencies sisään package.json, tekeminen pnpm v10+ huomattavasti turvallisempi toimitusketjun matoja vastaan kuin oletusarvo 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:"
- Cooldown / Minimirelease Age -ikkuna: Useimmat haitalliset npm- ja PyPI-versiot havaitaan ja poistetaan 4-24 tunnin kuluessa julkaisusta. Määritä paketinhallinta tai artefaktien välityspalvelin (esim npm config set before, pnpm minimumReleaseAgetai Socket.dev/Artifactory firewall) hylkäämään pakettiversiot, jotka on julkaistu viimeisen 48-72 tunnin aikana.

2. Poista selkoteksti -/.ssh/id_ed25519, -/.aws/credentials, ja .env Tiedostot levyltä

  • Siirrä SSH-avaimet laitteiston YubiKey-avaimeen (ed25519-sk) tai Secure Enclave / Biometric Agent:
  • Älä koskaan jätä salaamatonta tai ilman tunnuslausetta -/.ssh/id_ed25519 tiedosto levylle. Luo joko laitteistossa oleva FIDO2 SSH -avain (ssh-keygen -t ed25519-sk -O verify-required) fyysisessä YubiKeyssä (joka vaatii fyysisen sormen kosketuksen metallikontaktiin jokaista git push tai ssh yhteys) tai tallenna SSH-avaimesi 1Password SSH Agent / Secretive (macOS Secure Enclave) sisään, jossa yksityinen avain ei koskaan ole tiedostona -/.ssh/ ja jokainen allekirjoitus pyytää Touch ID:tä / Windows Hellota.
  • Vaihda Static -/.aws/credentials (AKIA...) ja lyhytaikainen SSO (aws sso login tai aws-vault):
  • Poista kaikki pysyvät IAM-käyttäjien pääsyavaimet (AKIA...). Käytä AWS IAM Identity Centeriä (aws sso login) lyhyellä istunnon kestolla (1-4 tuntia) tai kääri valtuustiedot aws-vault tukee macOS Keychain / Windows Credential Manager biometrisilla kehotteilla.
  • Korvaa Pelkkä teksti .env Tiedostot, joissa on Runtime Secret Injection (1Password CLI op run, Doppler, tai aws-vault):
  • Varastoinnin sijaan STRIPE_SECRET_KEY=sk_live_... selkeässä tekstissä .env tiedosto mikä tahansa node_modules käsikirjoitus voi fs.readFileSync('.env'), tallentaa viittauksia, kuten STRIPE_SECRET_KEY="op://Dev-Vault/Stripe/secret_key" ja käynnistä paikallinen kehityspalvelin op run --env-file=".env.template" -- npm run dev Touch ID:llä todennuksen jälkeen.
  • Käytä Trusted Publishing (OIDC) -julkaisua Long-Livedin sijaan -/.npmrc ja -/.pypirc Tokenit:
  • Älä koskaan säilytä julkaisukelpoista tunnusta sisällä -/.npmrc tai -/.pypirc kannettavallasi. Sekä PyPI että npm (Provenancen / OIDC:n kautta) mahdollistavat pakettien julkaisemisen yksinomaan yksittäisistä GitHub Actions / GitLab CI Trusted Publishers -julkaisuista käyttämällä lyhytikäisiä OpenID Connect (OIDC) -tunnuksia, mikä tarkoittaa, että ylläpidon kannettavassa tietokoneessa ei ole koskaan olemassa nollaa julkaisutunnusta.

3. Eristä epäluotetut tietovarastot ja luo komentosarjat vahvistetuissa DevContainer- tai VM-koneissa

  • Älä koskaan kloonaa ja suorita "Recruiter Take-Home Assessment -arviointia", tuntematonta avoimen lähdekoodin projektia tai palkkion repoa suoraan isäntäkäyttöjärjestelmässäsi:
  • Suorita tuntemattomia projekteja GitHub Codespacessa, kertakäyttöisessä pilvi-VM:ssä tai paikallisessa Docker DevContainerissa, joka EI sido isäntäkotihakemistoasi (-), ei EI kiinnity /var/run/docker.sock, ja välittää vain suojatun, vain luku -muodon Git-tunnuksen tarvittaessa.
  • Tarkista VS-koodi/kohdistinlaajennukset ja poista automaattiset päivitykset käytöstä vahvistamattomilta julkaisijoilta:
  • Muista, että Cursor, Windsurf ja VSCodium vetää laajennuksia OpenVSX-rekisteristä (open-vsx.org) Microsoftin virallisen Visual Studio Marketplacen sijaan. Tarkista julkaisijan tarkka nimiavaruus ja asennusten määrä ennen laajennuksen asentamista, pidä asennettujen laajennusten luettelo mahdollisimman pienenä ja poista laajennukset, joita et enää käytä aktiivisesti.

Usein kysytyt kysymykset

Juokseeko npm install --ignore-scripts Suojaako minut täysin haitallisilta npm-paketilta?

Juoksemassa npm install --ignore-scripts estää yleisimmän toimitusketjun hyökkäysvektorin: automaattisen suorituksen esiasennus, asentaa, ja asennuksen jälkeen sisällä määritetyt shell-komennot package.json asennushetkellä. Se ei kuitenkaan suojaa sinua, kun suoritat paketin JavaScript-koodin (esimerkiksi kun suoritat npm run dev, npm testi, vitsi, verkkopaketti, tai vitetai kun IDE:si ESLint/TypeScript-laajennus lataa haitallisen laajennuksen solmu_moduulit). Koska Node.js:llä ei ole oletuksena ajonaikaista tiedostojärjestelmää tai verkon hiekkalaatikkoa, kaikki koonti- tai testivaiheen aikana tuodut koodit voivat silti lukea -/.aws ja -/.ssh ellet eristä rakennusta säilön sisällä tai käytä Noden kokeellista lupamallia (solmu -- lupa).

Avasin epäilyttävän tietovaraston VS Codessa LinkedInin rekrytoijalta ja napsautin "Kyllä, luotan kirjoittajiin" ennen kuin tajusin, että kyseessä oli huijaus. Suoritinko koodin, vaikka en koskaan juoksenutkaan npm install?

Kyllä, sinun on oletettava, että mielivaltainen koodi suoritettiin täsmälleen heti, kun napsautat "Kyllä, luotan tekijöihin". Visual Studio Codessa ja Cursorissa Workspace Trustin myöntäminen sallii arkiston välittömästi .vscode/tasks.json tiedosto, jonka avulla voit suorittaa taustakuoritehtäviä "runOn": "folderOpen", mahdollistaa työtilan määrittämisen .vscode/settings.json osoittaa kielipalvelimia (kuten Python, TypeScript, ESLint tai Rust Analyzer) haitallisille suoritettaville poluille arkistokansiossa ja käynnistää build.rs Rust-projekteissa. Irrota laite verkosta välittömästi ja kierrä kaikkia valtuustietoja vaiheen 1 mukaisesti.

Jos haitallinen npm- tai PyPI-paketti juoksi Docker-säilön tai DevContainerin sisällä, onko isäntätietokoneeni Mac- tai Windows-kannettava turvallinen?

Se riippuu täysin siitä, mitkä tilavuuskiinnikkeet, ympäristömuuttujat ja pistokkeet siirrettiin kyseiseen säiliöön. Vakiomuotoiset DevContainer-mallit ja paikalliset docker-compose.yml asetukset lähettävät isäntäsi usein automaattisesti eteenpäin SSH_AUTH_SOCK (antamalla säilön sisällä olevien haittaohjelmien käyttää isäntäsi SSH-avaimia yhteyden muodostamiseen etäpalvelimiin tai työntämiseen GitHubiin), bind-mount -/.aws, -/.gitconfigtai työtilaasi .env tiedostot tai liitä isäntä Docker-liitäntä (/var/run/docker.sock), joka antaa välittömän pääkäyttäjän pääsyn koko isäntäkäyttöjärjestelmään. Tarkista omasi devcontainer.json ja telakka tarkastaa mounts nähdäksesi tarkalleen, mitkä isäntäresurssit olivat esillä säilön sisällä.

Kuinka voin tarkistaa, onko asentamassani pakettiversiossa piilotettuja asennusskriptejä tai hämäriä telemetriaa ennen sen asentamista?

Ennen kuin asennat tuntemattoman npm-, PyPI-, Go- tai Rust-paketin, tarkista se Socket.dev tai Deps.dev (Google Open Source Insights), joka analysoi staattisesti jokaisen version asennuskomentosarjojen, verkkopyyntöjen, tiedostojärjestelmän käytön,eval() hämärtäminen ja ylläpitäjän muutokset. Voit myös juosta npm view komentosarjat terminaalissasi tarkistaaksesi sen elinkaariskriptit lataamatta tai suorittamatta pakettia.


Lähteet tarkistettu

  • Kyberturvallisuus ja infrastruktuurin turvallisuusvirasto (CISA) ja kansallinen turvallisuusvirasto (NSA) (Yhdysvallat): Ohjelmiston toimitusketjun suojaaminen: Kehittäjien suositellut käytännöt ja reagointi vaarantuneisiin riippuvuuksiin.
  • GitHub Security Lab & npm Security Advisories: Vastaaminen vaarantuneisiin npm-paketteihin, haitallinen .vscode/tasks.json Arkiston ansoja (Contagious Interview) ja GitHub Actions Workflow Secret Exfiltration Mitigations.
  • Python Packaging Authority (PyPA) & PyPI-suojaus: Haitallisen pyörän käsittely .pth tiedostot, setup.py Mielivaltainen toteutus ja luotettu julkaisu (OIDC) Täytäntöönpanoohjeet.
  • Open Worldwide Application Security Project (OWASP): Ohjelmiston toimitusketjun tietoturvahuijauslehti & CI/CD-tietoturva Top 10 riskiä.
  • Kansallinen kyberturvakeskus (NCSC) (Iso-Britannia): Kehittäjäympäristöjen ja pilvenhallintasuunnitelmien puolustaminen kohdistettua tunnistetietojen keräämistä vastaan.

Aiheeseen liittyviä oppaita