Компромис на работната станица на програмерите: Злонамерна зависност или одговор на екстензијата IDE¶
Броевите за итни случаи се разликуваат по земја. Оваа страница користи 911, бројот за Соединетите Американски Држави и Канада. Многу други земји користат 112, 999 или друг број. Најдете го бројот за вашата земја.
Откриваме дека софтверски пакет штотуку го инсталиравте npm install, pip install, cargo build, gem install, или go get, или ново ажурираниот код на Visual Studio, курсорот или JetBrains IDE екстензија, е злонамерен typosquat, оптоварување со конфузија на зависност или киднапирано издание нагоре претставува критична инфраструктурна итност. За разлика од стандардните потрошувачки компјутери, софтверски инженер, архитект DevOps или работна станица за научник за податоци поседува директни криптографски клучеви за производствени средини во облак, складишта за изворни кодови, регистри на контејнери, CI/CD цевководи и бази на податоци за клиентите. Кога злонамерен preinstall или postinstall скрипта внатре package.json, вооружен setup.py во тркало на Пајтон, или компромитиран .vsix продолжувањето се извршува на вашиот лаптоп, работи со вашите целосни кориснички привилегии и веднаш се собира -/.aws/credentials, -/.ssh/id_ed25519, -/.npmrc, -/.pypirc, -/.kube/config, локално .env датотеки, macOS Keychain или Linux libsecret записи и активни колачиња за сесија на прелистувачот за неколку секунди.
Ако штотуку сфативте дека извршивте злонамерна зависност од отворен код, клониравте и изградивте вооружено складиште (како што е лажен проект за техничко интервју од измама со регрутер) или инсталиравте тројанизирана екстензија на IDE, секоја секунда што вашата машина останува поврзана на мрежата му дозволува на товарот да се сврти во вашиот корпоративен облак или да го објави твојата регистрација или самопропагара пакети. Ако нападот вклучува изнуда, физички закани или критично нарушување на јавната инфраструктура, јавете се на вашиот локален број за итни случаи (911 во САД и Канада, 112 низ Европската Унија, 999 во Обединетото Кралство) или консултирајте се со нашите меѓународни броеви за итни случаи директориум. Веднаш следете ги овие процедури за задржување, форензичка тријажа и криптографска ротација на клучот.
Направете го ова сега¶
- Веднаш прекинете ги сите мрежни конекции на работната станица на програмерите (исклучете Wi-Fi, исклучете го Ethernet и убијте ги активните VPN или SSH тунели), но сè уште НЕ исклучувајте ја или рестартирајте ја машината: исклучувањето на етернет и исклучувањето на Wi-Fi запира активна обратна обвивка, светилник C2 или користење на вашиот автоматизиран локален црв или исфрлете го вашиот локален ектракмент дополнителни кофи. Одржувајте ја машината вклучена во офлајн состојба (или суспендирајте ја само откако ќе снимате нестабилни списоци со процеси) за да можете да ги прегледате активните детски процеси, отворените мрежни приклучоци, историјата на школка и точно кои
.envи акредитивните датотеки се наоѓале на дискот во моментот на извршување. - Користете посебен, чист уред (како што е вашиот паметен телефон на мобилни податоци или недопрен лаптоп) за да го известите вашиот безбедносен оперативен центар (SOC) и да ги отповикате вашите сесии за единечно најавување (SSO) и Cloud IAM: Никогаш не се најавувајте на AWS, GCP, Azure, GitHub или Okta клучеви од заразените клучеви. Ако крадец со меморија, злонамерна екстензија на IDE или кука од школка ги гледа вашиот терминал и прелистувач, секој нов токен што ќе го генерирате на таа машина веднаш се фаќа.
- Отповикајте ги и ротирајте ги вашите токени за развивачи со висок радиус на експлозија по строг приоритетен редослед во првите 15 минути:
- Приоритет 1 (Cloud & Kubernetes): деактивирајте ги сите локални клучеви за пристап AWS IAM (
AKIA...), отповикајте ги стандардните акредитиви на апликацијата Google Cloud (gcloud auth application-default revoke), поништи ги токените Azure CLI (az account clear+ Поништување на сесијата на Entra ID) и ротирајте го Kuberneteskubeconfigсертификати за клиенти или токени за сметка на услуги. - Приоритет 2 (Изворен код и CI/CD): Избришете ги сите јавни клучеви GitHub, GitLab и Bitbucket SSH, токени за личен пристап (
ghp_...,github_pat_...,glpat-...), и OAuth CLI токени (-/.config/gh/hosts.yml), и проверете ги поставките за веб-кука на складиштето и тајните на GitHub Actions / GitLab CI. - Приоритет 3 (регистри на пакети и контејнери): Отповикајте ја автоматизацијата npm и објавувајте токени (
-/.npmrc), токени PyPI API (-/.pypirc), токени за најавување Docker Hub / GHCR / ECR (-/.docker/config.json), и токени Terraform Cloud (-/.terraform.d/credentials.tfrc.json). - Проверете ги npm, PyPI, Cargo и GitHub ВЕДНАШ за да потврдите дека малициозниот софтвер веќе не ги користел вашите локални токени за објавување верзија заразена со црви на вашите сопствени пакети или за притискање на малициозни обврски: Модерни носивост на синџирот на снабдување (како што се
ua-parser-js,coa,rc,ctx,lottie-player, иultralyticsкомпромиси) автоматски ги анализира програмерите на жртвата-/.npmrc,-/.pypirc, и-/.gitconfigведнаш да се објават верзии на закрпи со задна врата на секој пакет со отворен код или внатрешен пакет што развивачот го одржува или да креира скриени работни текови на GitHub Actions во складиштата на развивачот. - ** Скенирајте го секој проектен директориум на работната станица за да изградите целосен попис на изложените
.envдатотеки, низи за поврзување со базата на податоци и хардкодирани клучеви API**: пред да ја избришете работната станица, извршете офлајн скрипта на изолираната машина за да ги наведете сите.env,.env.local,terraform.tfstate, иapplication.ymlдатотека на вашиот хард диск за да можете да ја ротирате секоја тајна од трета страна (ингеренциите за Stripe, Twilio, SendGrid, OpenAI, Anthropic, Datadog, Slack, Postgres, MongoDB и Redis) што можела да се чита од вашата корисничка сметка. - ** Прекинете ги сите сесии на прелистувачот и врските со хардверски паричник**: бидејќи компромисите на програмерите често поставуваат информации за кражба на стоки (како што се Lumma, RedLine или Atomic macOS Stealer) заедно со жетварите за акредитиви специфични за програмерите, следете ги нашите Водич за киднапирање на колачиња за сесија и отповикување на токени за информации крадец и, ако правите развој на Web3 или поседувате дигитални средства, извршете ја нашата Водич за компромис за одвод на паричник за криптовалути и семе фраза.
Danger
Зошто трчање npm uninstall <package> или pip uninstall <package> НЕ ја чисти вашата работна станица: во Node.js (npm, yarn, pnpm) и Пајтон (pip) екосистеми, малициозен код речиси никогаш не чека додека вие import или require() библиотеката во кодот на вашата апликација. Наместо тоа, напаѓачите го ставаат товарот во куките на животниот циклус на пакетот (preinstall, install, или postinstall во package.json, или извршување на највисоко ниво внатре setup.py за време на изградбата на тркалото за дистрибуција на изворот). Моментот кога сте притиснале Enter на npm install или pip install, произволна скрипта за школка на напаѓачот или бинарно извршена на вашиот оперативен систем, ја копира вашата -/.ssh, -/.aws, и .env датотеки на надворешен сервер и често се инјектира постојана задна врата во -/.bashrc, -/.zshrc, crontab, или -/Library/LaunchAgents. Деинсталирањето на пакетот потоа само ја брише папката внатре node_modules или site-packages додека ги оставате украдените клучеви во рацете на напаѓачот и механизмот за упорност кој работи на вашиот ОС.
Дрво на одлуки: компромисна тријажа на работните станици со синџирот на снабдување¶
Користете го овој работен тек за одговор на инциденти за да го содржи радиусот на експлозијата и во вашата околина за личен развој и во производствената корпоративна инфраструктура:
flowchart TD
Detect["Сомнителен злонамерен npm / PyPI / товарен пакет, тројанизирана IDE екстензија или лажно регрутерско репо извршено"] --> Isolate["ЧЕКОР 1: Веднаш исклучете ја работната станица Wi-Fi и етернет (одржете ја машината вклучена за офлајн триажа)"]
Isolate --> ScopeCheck{"Дали извршувањето се случи на оперативниот систем домаќин или внатре во изолиран контејнер / VM?"}
ScopeCheck -->|"ОС домаќин (Mac / Linux / Windows / WSL2)"| FullCompromise["Да претпоставиме дека 100% од Домашниот директориум (-/.aws, -/.ssh, -/.npmrc, .env, колачиња од прелистувач) е ексфилтриран"]
ScopeCheck -->|"DevContainer / Docker"| MountCheck["Проверете ги монтирањата на јачината на звукот (-v -/.ssh, -v -/.aws, Docker Socket /var/run/docker.sock или Host Network)"]
MountCheck --> FullCompromise
FullCompromise --> CleanDevice["ЧЕКОР 2: Од посебен уред за чистење, предупредување за SOC и отповикување на облакот IAM, SSO, GitHub/GitLab и регистарски токени"]
CleanDevice --> WormCheck["ЧЕКОР 3: Ревизија на GitHub Commits, CI/CD работни текови и npm/PyPI објавени верзии за автоматско ширење на црви"]
WormCheck --> OfflineAudit["ЧЕКОР 4: На офлајн работна станица, Инвентар на сите .env датотеки, Terraform State датотеки и Persistence Backdoors"]
OfflineAudit --> RotateEnv["ЧЕКОР 5: Ротирајте ја секоја лозинка од базата на податоци, тајната на Webhook, клучот за потпишување GPG и клучот API пронајдени во .env / State Files"]
RotateEnv --> RebuildOS["ЧЕКОР 6: Избришете ја работната станица преку реинсталирање на чист оперативен систем -> Спроведување на хардверски поддржани SSH клучеви, OIDC и --игнорира-скрипти"]
Разбирање како се извршуваат векторите на синџирот на снабдување на програмерите и IDE¶
Современите напади против софтверски инженери се насочени кон четири различни површини за извршување на работната станица. Идентификувањето на кој вектор удрил во вашата машина ви кажува до кои привилегии и патеки на датотеки пристапувал товарот:
1. Куки за животниот циклус на малициозни пакети (npm, pnpm, yarn, pip, cargo, gem)¶
- Node.js (
package.jsonскрипти): Стандардно, работиnpm installавтоматски ја извршува секоја команда на школка дефинирана во"preinstall","install", или"postinstall"полиња наpackage.json, не само за пакетот од највисоко ниво што го внесовте, туку и за секоја преодна зависност во дрвото. Напаѓачите користат typosquatting (на пр.reqeusts,crossenv,lodahs), конфузија на зависноста (објавување јавен пакет на npm или PyPI со точно исто име и поголем број на верзија, како на пр.99.99.9, како внатрешен приватен пакет на вашата компанија), или превземања сметка на одржување за да се префрли една линија како"postinstall": "node index.js"во пакет. - ** Пајтон (
setup.pyи.pthдатотеки)**: Когаpipинсталира изворна дистрибуција (sdist.tar.gz), се извршуваsetup.pyсо целосни привилегии за толкувач на Python. Дури и кога се инсталираат претходно компајлирани бинарни тркала (.whl) кои не се извршуваатsetup.pyза време на инсталацијата, напаѓачите вклучуваат малициозни.pth(конфигурација на патеката) датотеки падна директно воsite-packages/. Секоја линија внатре a.pthдатотека почнувајќи одimportавтоматски се извршува од Python толкувачот секој патpythonсе стартува на тој систем. - ** 'Рѓа (
build.rs) и Go**: Во Rust, Cargo автоматски се компајлира и извршуваbuild.rsне само за време наcargo buildилиcargo run, но веднаш когаrust-analyzer(во VS Code или IntelliJ) отвора проектна папка за индексирање на типови. Само отворање на клонирано складиште на Rust во вашиот IDE соrust-analyzerовозможено извршува произволен код внатреbuild.rsпред да напишете терминална команда.
2. Злонамерни или киднапирани IDE екстензии (VS Code Marketplace, OpenVSX, JetBrains)¶
- Visual Studio Code, Cursor, Windsurf и VSCodium екстензии (
.vsix) се извршува во главниот процес на јазол.js Extension Host на вашата работна станица со нула песочник. Секоја инсталирана екстензија има целосен пристап за читање/запишување до целиот ваш датотечен систем, може да предизвика тивки детски процеси (child_process.exec), може да го чита секој отворен бафер на уредувачот и.envдатотека и може да го закачи вашиот интегриран терминал. - Актерите за закана рутински објавуваат лажни екстензии на теми (
Darcula Official), фалсификувани асистенти за кодирање со вештачка интелигенција или екстензии за печатење на печатење/Поубави екстензии кои тивко преземаат инфокрадец од втора фаза или обратна обвивка во моментот кога ќе започне IDE.
3. Вооружени складишта за Git и автоматско извршување на работен простор IDE (замки за „Лажни регрутери / тест за преземање дома“)¶
- Групи спонзорирани од Северна Кореја (
Contagious Interview/Lazarus Group) и крипто-фокусираните закани актери рутински им пристапуваат на програмерите на LinkedIn, Upwork или GitHub претставувајќи се како регрутери или CTO кои нудат високо платени улоги од далечина. Тие бараат од развивачот да клонира складиште на Bitbucket или GitHub за „15-минутна проценка за дебагирање“ или „Преглед на веб-3 гејминг MVP“. - Овие складишта содржат скриени стапици за извршување кои се активираат или кога се отвораат во IDE или за време на изградбата:
.vscode/tasks.jsonсо"runOn": "folderOpen": Автоматски ја извршува скриптата на заднинската школка веднаш штом ќе кликнете на „Да, им верувам на авторите“ во VS Code.- ** Злонамерно
.git/hooks/или.gitmodules**: Искористува конфигурација на подмодулот Git или градење скрипти (Makefile,webpack.config.js,next.config.js,vite.config.ts) кои вчитуваат заматени JavaScript носивост (често пополнети со илјадници празни места надвор од екранот за да се сокријат на колоната 2.000+) повикувајќи надворешен C2 сервер.
Фаза 1: Целосна матрица за акредитиви на програмери и тајна ротација¶
Користејќи чист секундарен лаптоп или паметен телефон, работете систематски преку овој инвентар на инвентар за програмери од 12 точки. Претпоставете дека која било датотека што може да се чита од вашата корисничка сметка што не е root OS (chmod 600 или 644 во сопственост на вашиот корисник) беше поставено на серверот на напаѓачот во рок од 3 секунди од извршувањето на товарот.
| Категорија на акредитиви | Точни локални патеки за датотеки собрани на работна станица | Задолжително дејство за отповикување и ротација (од чист уред) |
|---|---|---|
| 1. AWS IAM & SSO | -/.aws/credentials-/.aws/config-/.aws/sso/cache/*.json-/.aws/cli/cache/*.json |
1. Во AWS IAM конзолата, веднаш Деактивирајте и избришете сите статични клучеви за пристап (AKIA...) складирани на тој лаптоп.2. Во AWS IAM Identity Center (SSO), отповикајте ги активните кориснички сесии и избришете ги регистрираните токени на уредот со клиент OIDC. 3. Ревизија AWS CloudTrail за GetCallerIdentity, CreateUser, CreateAccessKey, AssumeRole, ListBuckets, и SecretsManager:GetSecretValue повици кои потекнуваат од невообичаени IP адреси или кориснички агенти (Boto3, aws-cli, Go-http-client). |
| 2. Google Cloud (GCP) и 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. Одете на myaccount.google.com/permissions и отповикајте го пристапот за Google Cloud SDK и Firebase CLI.2. Во GCP Console > IAM & Admin > Service Accounts, избришете го кој било клуч JSON за сметка на услуга ( private_key_id) што беше преземено на хард дискот на работната станица.3. Проверете ги Дневниците за ревизија на облакот за неовластени врзувања на IAM или создавање на компјутерски мотор. |
| 3. Microsoft Azure & Entra ID | -/.azure/msal_token_cache.bin-/.azure/accessTokens.json-/.azure/azureProfile.json |
1. Имајте администратор на Entra ID Revoke-MgUserSignInSession -UserId <your-user-id> да ги поништи сите токени за освежување и примарни токени за освежување (PRT).2. Избришете ги сите тајни или сертификати на клиентот на Service Principal складирани локално. |
| 4. Кубернетис и Хелм | -/.kube/config-/.kube/cache/-/.config/helm/registry/config.json |
1. Ако -/.kube/config содржеше статични сертификати за клиент (client-certificate-data / client-key-data) или долготрајни токени на носител на услуга сметка, отповикајте го сертификатот преку вашиот кластер CA (CSR / Отстранување на RBAC) или избришете го и повторно креирајте го ServiceAccount тајна веднаш.2. Ревизија на дневниците за ревизија на серверот на Kubernetes API за exec, pods, или secrets листа/добиј глаголи. |
| 5. GitHub, GitLab и Bitbucket | -/.ssh/id_ed25519, -/.ssh/id_rsa-/.config/gh/hosts.yml-/.git-credentials, -/.netrc-/.gitconfig |
1. Одете на github.com/settings/keys (и еквиваленти на GitLab/Bitbucket) и Избришете јавниот клуч SSH и клучот за потпишување на GPG/SSH од заразената машина.2. Одете на github.com/settings/tokens и github.com/settings/applications да ги отповика сите токени за личен пристап (ghp_, github_pat_), апликации OAuth (GitHub CLI, VS Code, Git Credential Manager), и активни веб сесии.3. Проверете Безбедносен дневник ( github.com/settings/security-log) за repo.clone, org.Invite_member, или hook.create. |
| 6. GPG и клучеви за потпишување код | -/.gnupg/private-keys-v1.d/-/Library/Keychains/login.keychain-db (Apple Developer ID / .p12) |
1. Ако вашиот приватен клуч GPG бил зачуван на диск без хардверска паметна картичка (YubiKey OpenPGP) и лозинката била складирана во gpg-agent или напишано неодамна, генерирајте и објавете сертификат за отповикување GPG веднаш и отстранете го GPG-клучот од GitHub/GitLab.2. Отповикајте го секој извезен Apple Developer .p12 или Android Keystore .jks сертификати за потпишување код зачувани на машината. |
| 7. Регистри на пакети (npm, PyPI, Cargo, RubyGems, NuGet) | -/.npmrc (_authToken=...)-/.pypirc-/.cargo/credentials.toml-/.gem/credentials |
1. Најавете се на npmjs.com > Пристап до токени, pypi.org > Поставки за сметка > токени на API, crates.io > Поставки за сметка > АПИ токени и rubygems.org и Веднаш отповикајте ги сите активни токени. 2. Проверете ги вашите објавени пакети (видете Фаза 2 подолу) за да потврдите дека напаѓачот не извршил порака со задна врата во последните неколку часа. |
| 8. Докер и контејнерски регистри | -/.docker/config.json (База 64 auths за Docker Hub, GHCR, ECR, GCR, Кеј) |
1. Запомнете го тоа "auth" во -/.docker/config.json (кога не се користи credsStore: osxkeychain или wincred) е само нешифрирана Base64 username:password_or_token.2. Отповикајте ги токените за личен пристап во Docker Hub ( hub.docker.com/settings/security), регистар на контејнери на GitHub и Quay.io. |
| 9. Infrastructure-as-Code (Terraform / Pulumi / Ansible Vault) | -/.terraform.d/credentials.tfrc.json**/terraform.tfstate (Локални државни датотеки)-/.pulumi/credentials.json-/.vault-token |
1. Отповикајте ги токените на Terraform Cloud / Enterprise кориснички API и HashiCorp Vault токени. 2. **КРИТИЧНО **: Секое локално terraform.tfstate датотеката на вашиот диск содржи лозинки за обичен текст, главни акредитиви на RDS, приватни TLS клучеви и тајни клучеви IAM за секој ресурс управуван од таа држава. Ротирајте ја секоја тајна наведена во локалното .tfstate датотеки. |
| 10. Бази на податоци и кеширање CLI истории | -/.psql_history, -/.pgpass-/.mysql_history, -/.my.cnf-/.rediscli_history-/.mongodb/mongosh/Конфигурации на DBeaver / TablePlus / DataGrip |
1. Управувачите со бази на податоци на GUI (TablePlus, DBeaver, DataGrip, Postico, pgAdmin, MongoDB Compass) локално складираат шифрирани или заматени лозинки на базата кои крадците рутински ги дешифрираат. 2. Ротирајте ги корисничките лозинки на базата на податоци за која било база на податоци за поставување или производство достапно преку VPN, бастион или јавна IP од вашата работна станица. |
11. Апликација .env Датотеки и клучеви SaaS од трета страна |
**/.env, **/.env.local, **/.env.production, **/.env.development |
Ротирајте го секој клуч за API зачуван во локалниот проект .env датотеки: ** Stripe (sk_live_...), OpenAI (sk-...), Антропски (sk-ant-...), Twilio, SendGrid, AWS SES, Slack Bot Tokens (xoxb-...), Discord Bot Tokens, Datadog, Sentry, Supabase (service_role), Администратор на Firebase и тајни за потпишување на JWT**. |
| 12. SSH познати домаќини и сервери за скокање бастион | -/.ssh/config-/.ssh/known_hosts-/.zsh_history, -/.bash_history |
Напаѓачите веднаш се анализираат -/.ssh/config и -/.zsh_history да ја пронајдете секоја IP IP на внатрешен сервер, домаќин на бастион и корисничко име со кои се поврзувате, а потоа користете го вашиот украден -/.ssh/id_ed25519 клуч за да се најавите директно на тие сервери. Отстранете го вашиот стар јавен клуч од -/.ssh/authorized_keys на секој оддалечен Линукс сервер и проверете /var/log/auth.log на тие сервери за неовластени SSH најавувања. |
Фаза 2: Проверка за автоматско ширење на црви со синџир на снабдување (GitHub, CI/CD и регистри на пакети)¶
За разлика од генеричкиот малициозен софтвер, товарите насочени кон програмерите се специјално програмирани да само-пропагираат низ синџирот на снабдување со софтвер во рок од неколку секунди по слетувањето на вашата работна станица. Пред да се вратите на чистењето на вашиот лаптоп, користете го вашиот чист уред за да потврдите дека вашите украдени акредитиви веќе не биле користени за инфицирање на вашиот тим или вашите додни корисници:
- Проверете ги вашите складишта на GitHub / GitLab за тивки задни врати и малициозни работни текови:
- ** Проверете
.github/workflows/*.ymlниз сите складишта до кои имате пристап за пишување**: Неодамнешни црви од синџирот на снабдување (Shai-Hulud,tj-actions/changed-filesкомпромиси иultralyticsексплоатира) автоматски користи украдени токени за програмери за да изврши злонамерен работен тек на GitHub Actions или да го измени постоечкиот работен тек за да го исфрли${{ toJSON(secrets) }}(екфилтрирање на тајните за распоредување на производството на вашата организација од тркачите на GitHub Actions). - Потврдете ги неодамнешните обврски од страна на авторот и временскиот печат: Имајте на ум дека секој може да фалсификува име и временски печат на авторот на Git (
git commit --date="..." --author="..."). Во GitHub, проверете ги Push Events во складиштето Приказ на активност или организација Дневник за ревизија (repo.push), кои го снимаат вистинскиот временски печат од страната на серверот и точниот токен за автентикација (oauth_application_idилиssh_key_fingerprint) што го турна кодот. - Проверете ги веб-куките на складиштето, клучевите за распоредување и соработниците: погледнете во Поставки > Веб-куки, Поставки > Распоредување клучеви и Поставки > Соработници и тимови на вашите складишта за да се уверите дека напаѓачот не додал постојан клуч за распоредување на сервер за читање/запишување или клуч за распоредување на веб-кука.
- Ревизија npm, PyPI, Cargo и Docker Hub за неовластено издавање пакети:
- Ако сте одржувач или соработник на кој било јавен или приватен пакет на npm, PyPI, RubyGems или Crates.io, проверете го табот Верзии / Историја на издавање за секој пакет под вашата сметка.
- Ако верзијата на закрпа (на пример,
1.4.2по вашето последно легитимно ослободување1.4.1) беше објавено во временската рамка на компромисот на вашата работна станица, веднаш отфрлете ја или превртете ја таа верзија (npm deprecate <pkg>@<version> "CRITICAL: Compromised version, do not use"или заглавете на PyPI) и контактирајте со npm Поддршка (security@npmjs.com/ GitHub Security) или PyPI Security (security@pypi.org) за отстранување на злонамерниот артефакт и зафатените верзии во карантин. - Проверете дали има Тајна ексфилтрација на тартуфи / Git клон:
- Крадците од синџирот на снабдување често го повикуваат GitHub/GitLab API користејќи го вашиот украден токен за да го клонираат секое приватно организационо складиште до кое имате пристап и да стартуваат автоматски тајни скенери (
TruffleHogилиGitleaks) против целата историја на обврски на вашата компанија. Ако вашата организација некогаш случајно извршила тајна во историјата на Git на приватно складиште без да ја ротира, ротирајте ги тие историски тајни сега.
Фаза 3: Офлајн судска тријажа на компромитирана работна станица¶
Со вашата работна станица целосно исклучена од Wi-Fi и Ethernet, отворете терминален прозорец за да извршите офлајн тријажа. Вашата цел е двојна: (А) лоцирајте ја секоја .env и конфигурациска датотека на дискот за да знаете кои тајни да ги ротирате, и (B) доловува доказ за тоа што всушност извршил малициозниот пакет или екстензија пред да го избришете оперативниот систем.
Чекор 1: Инвентар на секое изложено .env, Приватен клуч и државна датотека на вашиот диск¶
Извршете ја оваа команда само за читање на вашата офлајн работна станица macOS, Linux или WSL2 за да генерирате комплетна листа за проверка на секоја локална датотека што содржи тајни што малициозен софтвер можел да ги прочита:
# 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
Преглед -/exposed_secrets_inventory.txt ред по ред и отворете го секој .env или .tfstate датотека офлајн за да можете да го ротирате секој поединечен клуч на API, лозинка за базата на податоци и тајни за веб-кука наведени во нив од вашиот чист уред.
Чекор 2: Проверете што е извршено злонамерниот пакет или наставката IDE¶
Пред да ја избришете навредливата папка, проверете ја точната носивост и проверете каде ја инсталирала упорноста на вашиот оперативен систем:
# 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: Потрагата за упорност на ниво на ОС отфрлена од малициозен софтвер на програмери (macOS, Linux и Windows)¶
Злонамерните зависности и складиштата за „лажни регрутери“ честопати испуштаат постојани агенти во заднина преправени како ажурирачи на системот, демони на јазли или индексатори на Spotlight:
- На Apple macOS:
# 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" - На Windows (мајчин или домаќин на WSL2):
- Запомнете дека злонамерната npm или Python скрипта што работи во WSL2 (Подсистем на Windows за Linux) може директно да пристапи до целиот ваш домаќин на Windows
C:\возете преку/mnt/c/Users/<username>/и може да повикаpowershell.exeилиcmd.exeдиректно од внатрешноста на школката на Linux за да го зарази регистарот на домаќинот на Windows (HKCU:\Software\Microsoft\Windows\CurrentVersion\Run), Закажани задачи и Chrome/EdgeCookiesбази на податоци. - Извршете ја целосната ревизија на упорност на Windows PowerShell во нашата Водич за киднапирање колачиња за сесија и информации за крадење и нашите Водич за инфекција со малициозен софтвер, откуп и шпионски софтвер.
Фаза 4: Зошто мора да ја избришете и повторно да ја изградите работната станица за програмери¶
Дури и ако го пронајдете и избришете злонамерното node_modules папка, на .vsix продолжување, и непријателските -/Library/LaunchAgents plist, никогаш не треба да продолжите да користите компромитирана работна станица за програмери за производство инженеринг без да извршите чисто бришење на ОС и повторно инсталирање.
Софистицираните носивост наменети за програмери ги менуваат постоечките легитимни бинарни датотеки или конфигурациски датотеки на вашиот систем што ниту еден антивирусен скенер не ги означува како малициозни:
1. Тројанизирани локални бинарни CLI (git, ssh, sudo, aws, kubectl, docker): товарот што работи под вашата корисничка сметка не може да се презапише /usr/bin/ssh без sudo, па наместо тоа испушта скрипта за обвивка на -/.local/bin/ssh, -/bin/git, или -/bin/sudo и го приложува тој директориум во вашиот PATH. Следниот пат кога ќе напишете sudo или ssh -i по повторното поврзување на интернет, обвивката тивко ја пресретнува вашата лозинка или лозинка и ја проследува до напаѓачот пред да го повика вистинскиот бинарен.
2. Заразени кешови на локални пакети (-/.npm/_cacache, -/.cache/pip, -/.cargo/registry, -/Library/Caches/pnpm): Злонамерниот софтвер може да ги отруе кешираните тарболи во кешот на вашиот локален менаџер на пакети, така што дури и кога ќе инсталирате чист, легитимен пакет следната недела, вашиот менаџер на пакети го отпакува тарболот со задна врата од вашиот локален кеш.
3. Модифицирани основни датотеки IDE (workbench.desktop.main.js): Одредени товари на VS код и курсор директно го закрпат електронот asar архива или workbench.desktop.main.js внатре во пакетот со апликации IDE за да преживее задна врата отстранувајќи ги сите екстензии.
Направете резервна копија само на чист изворен код (потврдена преку git status и git diff на чиста машина) и лични документи, потоа извршете чиста macOS Избриши ги сите содржини и поставки / DFU Restore, чиста инсталација на Linux USB или чиста инсталација на Windows 11 USB.
Зацврстување на вашата нова работна станица за програмери против идните напади со синџирот на снабдување¶
Кога ја поставувате вашата свежо избришана работна станица за програмери, заменете ги статичките датотеки со обичен текст во вашиот домашен директориум со работни текови поддржани со хардвер, ефемерни и песочни кутии, така што дури и ако се изврши злонамерна зависност во иднина, да има нула статички тајни на дискот за да може да се украде:
1. Оневозможете го автоматското извршување на скрипта за животниот циклус во менаџерите на пакети¶
Конфигурирај npm, pnpm, yarn, и pip така што недоверливите зависности не можат тивко да ги извршуваат скриптите на школка за време на инсталацијата:
- Node.js (npm / yarn / pnpm):
# Globally disable automatic preinstall/postinstall script execution in npm:
npm config set ignore-scripts true
pnpm.onlyBuiltDependencies во package.json, правење pnpm v10+ е значително побезбеден од црви од синџирот на снабдување отколку стандардните npm.)
- ** Пајтон (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 minimumReleaseAge, или Socket.dev / Artifactory firewall) за да се отфрлат верзии на пакети објавени во последните 48 до 72 часа.
2. Елиминирајте го обичен текст -/.ssh/id_ed25519, -/.aws/credentials, и .env Датотеки од диск¶
- ** Преместете ги SSH клучевите во хардверски YubiKey (
ed25519-sk) или безбедна енклава / биометриски агент**: - Никогаш не оставајте нешифрирана или без лозинка
-/.ssh/id_ed25519датотека на дискот. Или генерирај хардверски резидентен клуч FIDO2 SSH (ssh-keygen -t ed25519-sk -O verify-required) на физички YubiKey (што бара вашиот физички допир со прстот на металниот контакт за секојgit pushилиsshконекција), или складирајте ги вашите SSH клучеви во 1Password SSH Agent / Secret (macOS Secure Enclave) каде приватниот клуч никогаш не постои како датотека во-/.ssh/и секој потпис бара за Touch ID / Windows Hello. - Заменете го Static
-/.aws/credentials(AKIA...) со краткотрајна ДЗС (aws sso loginилиaws-vault): - Избришете ги сите постојани клучеви за пристап на корисникот IAM (
AKIA...). Користете AWS IAM Identity Center (aws sso login) со кратко времетраење на сесијата (1 до 4 часа) или завиткајте ги ингеренциите внатреaws-vaultподдржано од macOS Keychain / Windows Credential Manager со биометриски инструкции. - ** Заменете го обичен текст
.envДатотеки со тајна инјекција за време на траење (1Password CLI op run,Doppler, илиaws-vault)**: - Наместо складирање
STRIPE_SECRET_KEY=sk_live_...во обичен текст.envподнесете дека билоnode_modulesскрипта можеfs.readFileSync('.env'), складирајте референци какоSTRIPE_SECRET_KEY="op://Dev-Vault/Stripe/secret_key"и стартувајте го вашиот локален сервер за развој прекуop run --env-file=".env.template" -- npm run devпо автентикацијата со Touch ID. - Користете Trusted Publishing (OIDC) наместо долготрајно
-/.npmrcи-/.pypircЖетони: - Никогаш не чувајте токен со можност за објавување внатре
-/.npmrcили-/.pypircна вашиот лаптоп. И PyPI и npm (преку Provenance / OIDC) ви дозволуваат да објавувате пакети исклучиво од изолирани GitHub Actions / GitLab CI Trusted Publishers користејќи краткотрајни OpenID Connect (OIDC) токени, што значи дека нема токени за објавување на лаптопот на кој било одржувач.
3. Изолирајте недоверливи складишта и изградете скрипти во стврднати DevContainers или VMs¶
- **Никогаш не клонирајте и не извршувајте „Проценка на регрутер за дома“, непознат проект со отворен код или репо за распродажба директно на вашиот оперативен систем домаќин **:
- Извршете непознати проекти во GitHub Codespace, еднократна употреба cloud VM или локален Docker DevContainer кој НЕ го врзува-монтира вашиот домашен директориум (
-), НЕ се монтира/var/run/docker.sock, и само ако е потребно, поминува токен со опсег, Git само за читање. - Ревизија VS код / екстензии на курсорот и оневозможи автоматско ажурирање за непроверени издавачи:
- Запомнете дека курсорот, Windsurf и VSCodium повлекуваат екстензии од OpenVSX Registry (
open-vsx.org) наместо официјалниот пазар на Visual Studio на Microsoft. Потврдете го точниот именски простор на издавачот и бројот на инсталирања пред да инсталирате која било екстензија, одржувајте ја листата со инсталирани екстензии минимални и деинсталирајте ги екстензиите што повеќе не ги користите активно.
Најчесто поставувани прашања¶
Дали трчање npm install --ignore-scripts целосно ме заштити од злонамерен npm пакет?¶
Трчање npm инсталирај --ignore-scripts го блокира најчестиот вектор за напад на синџирот на снабдување: автоматско извршување на прединсталирајте, инсталирај, и постинсталирање команди на школка дефинирани внатре пакет.json во времето на инсталација. Сепак, тој не ве заштитува откако навистина ќе го извршите JavaScript кодот на пакетот (на пример, кога ќе извршите npm изврши dev, npm тест, шега, веб-пакет, или vite, или кога приклучокот ESLint/TypeScript на вашиот IDE ќе вчита злонамерен приклучок од јазол_модули). Бидејќи Node.js нема стандардно датотечен систем за извршување или мрежен песок, кој било код увезен за време на вашиот чекор за изградба или тест сè уште може да чита -/.aws и -/.сш освен ако не ја изолирате изградбата во контејнер или не го користите експерименталниот модел на дозволи на Node (јазол --дозвола).
Отворив сомнително складиште во VS Code од регрутер на LinkedIn и кликнав „Да, им верувам на авторите“ пред да сфатам дека е измама. Дали кодот се извршуваше дури и ако никогаш не сум се кандидирал npm install?¶
Да, мора да претпоставите дека произволниот код е извршен токму во секундата кога сте кликнале „Да, им верувам на авторите“. Во Visual Studio Code и Cursor, доделувањето на Workspace Trust веднаш го дозволува складиштето .vscode/tasks.json датотека за извршување на задачите на школка во заднина конфигурирани со "runOn": "folderOpen", дозволува работен простор дефиниран .vscode/settings.json да ги насочи јазичните сервери (како Python, TypeScript, ESLint или Rust Analyzer) на малициозни извршни патеки во папката складиште и да активира автоматско извршување на изгради.рс во проектите на Руст. Веднаш исклучете ја машината од мрежата и следете ја фазата 1 за да ги ротирате сите ингеренции.
Ако малициозниот пакет npm или PyPI работи во контејнер Docker или DevContainer, дали мојот домаќин Mac или Windows лаптоп е безбеден?¶
Целосно зависи од тоа какви монтирања за јачина на звук, променливи на околината и приклучоци биле пренесени во тој контејнер. Стандардни шаблони за DevContainer и локални docker-compose.yml често поставува автоматско препраќање на вашиот домаќин SSH_AUTH_SOCK (дозволувајќи му на малициозниот софтвер внатре во контејнерот да ги користи SSH клучевите на вашиот домаќин за да се поврзе со оддалечени сервери или да притисне на GitHub), поврзете се -/.aws, -/.gitconfig, или вашиот работен простор .завид датотеки или монтирајте го приклучокот домаќин Docker (/var/run/docker.sock), што овозможува инстант root пристап до целиот оперативен систем на домаќинот. Проверете го вашиот devcontainer.json и докерски преглед се монтира за да се види точно кои ресурси на домаќинот биле изложени во контејнерот.
Како можам да проверам дали верзијата на пакетот што ќе ја инсталирам има скриени скрипти за инсталација или заматена телеметрија пред да ја инсталирам?¶
Пред да инсталирате непознат пакет npm, PyPI, Go или Rust, проверете го Socket.dev или Deps.dev (од Google Open Source Insights), кои статички ја анализираат секоја верзија за инсталирање скрипти, мрежни барања, пристап до датотечен систем,eval () заматување и промени на одржувачот. Можете исто така да трчате npm преглед на скрипти <пакет> во вашиот терминал за да ги прегледате скриптите на неговиот животен циклус без да го преземете или извршите пакетот.
Проверени извори¶
- Агенција за сајбер безбедност и безбедност на инфраструктурата (
CISA) и Агенција за национална безбедност (NSA) (Соединети Американски Држави): Обезбедување на синџирот на снабдување со софтвер: препорачани практики за програмери и одговор на компромитирани зависности. - GitHub Security Lab & npm Безбедносни совети: Одговарање на компромитирани npm пакети, злонамерни
.vscode/tasks.jsonЗамки за складиште (Contagious Interview), и GitHub Actions Workflow Тајни ублажувања на ексфилтрација. - Орган за пакување на Python (
PyPA) & Безбедност на PyPI: Ракување со злонамерно тркало.pthДатотеки,setup.pyПроизволно извршување и доверливо објавување (OIDC) Упатства за имплементација. - Отвори светски проект за безбедност на апликации (
OWASP): Софтвер за безбедност на синџирот на снабдување со мамење и CI/CD безбедност Топ 10 ризици. - Национален центар за сајбер безбедност (
NCSC) (Обединето Кралство): Дефендинг средини за развивачи и рамнини за управување со облак против насочено собирање акредитиви.
Поврзани водичи¶
- Киднапирање колачиња на сесија, инфокрадци и отповикување на токен
- Компромис за одвод на паричник за криптовалути и за семе фраза
- Злонамерни екстензии на прелистувач, киднапери на таблата со исечоци и отстранување на рекламен софтвер
- Измами со лажни понуди за работа, измама со проверка на опрема и кражба на идентитет при вградување
- Инфекција на малициозен софтвер, откуп и шпионски софтвер
- Броеви за итни случаи по земја