Кампраметацыя працоўнай станцыі распрацоўшчыка: шкоднасная залежнасць або адказ пашырэння IDE¶
Нумары экстранных службаў адрозніваюцца ў залежнасці ад краіны. На гэтай старонцы выкарыстоўваецца 911, нумар для Злучаных Штатаў і Канады. Многія іншыя краіны выкарыстоўваюць 112, 999 ці іншы нумар. Знайдзіце нумар для вашай краіны.
Выявіўшы, што пакет праграм, які вы толькі што ўсталявалі праз npm install, pip install, cargo build, gem install, або go get, або нядаўна абноўлены Visual Studio Code, Cursor або пашырэнне IDE JetBrains, з'яўляецца шкоднасным typosquat, карыснай нагрузкай, якая выклікае блытаніну залежнасцяў, або ўзламаным выпускам уверх па плыні ўяўляе крытычную надзвычайную інфраструктуру. У адрозненне ад стандартных спажывецкіх камп'ютараў, інжынер-праграміст, архітэктар DevOps або рабочая станцыя спецыяліста па апрацоўцы дадзеных захоўваюць прамыя крыптаграфічныя ключы да вытворчых воблачных асяроддзяў, сховішчаў зыходнага кода, рэестраў кантэйнераў, канвеераў CI/CD і баз дадзеных кліентаў. Калі зламысны preinstall або postinstall сцэнар ўнутры package.json, узброены setup.py у коле Python, або скампраметаваны .vsix пашырэнне выконваецца на вашым ноўтбуку, яно працуе з вашымі поўнымі прывілеямі карыстальніка і неадкладна збіраецца -/.aws/credentials, -/.ssh/id_ed25519, -/.npmrc, -/.pypirc, -/.kube/config, мясцовы .env файлы, macOS Keychain або Linux libsecret запісы і файлы cookie актыўнага сеансу браўзера на працягу некалькіх секунд.
Калі вы толькі што зразумелі, што выканалі шкоднасную залежнасць ад адкрытага зыходнага кода, кланавалі і стварылі збройнае сховішча (напрыклад, фальшывы праект тэхнічнага інтэрв'ю ад махлярства з рэкрутэрам) або ўсталявалі траянізаванае пашырэнне IDE, кожную секунду ваша машына застаецца падлучанай да сеткі, што дазваляе карыснай нагрузцы перамяшчацца ў ваша карпаратыўнае воблака або публікаваць чарвякоў, якія самараспаўсюджваюцца, выкарыстоўваючы токены рэестра вашых пакетаў. Калі атака звязана з вымагальніцтвам, фізічнымі пагрозамі або крытычным парушэннем грамадскай інфраструктуры, патэлефануйце ў мясцовы нумар службы экстранай дапамогі (911 у Злучаных Штатах і Канадзе, 112 па ўсім Еўрапейскім Саюзе, 999 у Злучаным Каралеўстве) або пракансультуйцеся з нашым міжнародным нумары экстраных службаў каталог. Неадкладна выконвайце гэтыя працэдуры стрымлівання, судова-медыцынскай сартавання і ратацыі крыптаграфічных ключоў.
Зрабіце гэта зараз¶
- Неадкладна разарвіце ўсе сеткавыя злучэнні на працоўнай станцыі распрацоўшчыка (выключыце Wi-Fi, адключыце Ethernet і закрыйце актыўныя тунэлі VPN або SSH), але пакуль НЕ выключайце і не перазагружайце машыну: адключэнне Ethernet і выключэнне Wi-Fi спыняе актыўнае зваротнае пакрыццё, маяк C2 або аўтаматызаваны чарвяк ад выкарыстання вашых лакальных токенаў для націскання шкоднасных фіксацый або выкрадання дадатковых пакетаў. Трымайце машыну ўключанай у аўтаномным стане (або прыпыняйце яе толькі пасля захопу спісаў зменлівых працэсаў), каб вы маглі правяраць запушчаныя даччыныя працэсы, адкрытыя сеткавыя сокеты, гісторыю абалонкі і якія менавіта
.envі файлы ўліковых дадзеных, якія знаходзіліся на дыску ў момант выканання. - Выкарыстоўвайце асобную чыстую прыладу (напрыклад, смартфон з сотавай перадачай дадзеных або недатыкальны ноўтбук), каб паведаміць у свой цэнтр бяспекі (SOC) і адклікаць сеансы адзінага ўваходу (SSO) і Cloud IAM: ніколі не ўваходзьце ў AWS, GCP, Azure, GitHub або Okta з заражанай працоўнай станцыі, каб павярнуць ключы. Калі рэзідэнтны крадзеж памяці, шкоднаснае пашырэнне IDE або хук абалонкі назіраюць за вашым тэрміналам і браўзерам, любы новы токен, які вы ствараеце на гэтай машыне, імгненна захопліваецца.
- Анулюйце і ратуйце свае токены распрацоўшчыка з вялікім радыусам выбуху ў строгім парадку прыярытэту на працягу першых 15 хвілін:
- Прыярытэт 1 (Воблака і Kubernetes): дэактывуйце ўсе лакальныя ключы доступу AWS IAM (
AKIA...), ануляваць уліковыя даныя праграмы Google Cloud па змаўчанні (gcloud auth application-default revoke), зрабіць несапраўднымі токены Azure CLI (az account clear+ адкліканне сеанса ідэнтыфікатара ўваходу) і паварот Kuberneteskubeconfigкліенцкія сертыфікаты або токены сэрвіснага ўліковага запісу. - Прыярытэт 2 (Зыходны код і CI/CD): Выдаліць усе адкрытыя ключы SSH GitHub, GitLab і Bitbucket, асабістыя токены доступу (
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) разам са зборшчыкам уліковых дадзеных распрацоўшчыка, прытрымлівайцеся нашых Кіраўніцтва па выкраданні файлаў cookie сесіі і адкліканні токенаў infostealer і, калі вы займаецеся распрацоўкай Web3 або валодаеце лічбавымі актывамі, выканайце нашы Кіраўніцтва па кампрамісу з кашальком криптовалюты і пачатковай фразай.
Danger
** Чаму бег npm uninstall <package> або pip uninstall <package> НЕ ачышчае вашу працоўную станцыю**: у Node.js (npm, yarn, pnpm) і Python (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 / Cargo Package, траянізаванае пашырэнне IDE або Fake Recruiter Repo Executed"] --> Isolate["КРОК 1: Неадкладна адключыце Wi-Fi і Ethernet працоўнай станцыі (падтрымлівайце машыну ўключанай для пазасеткавай сартавання)"]
Isolate --> ScopeCheck{"Ці адбывалася выкананне ў хост-АС або ўнутры ізаляванага кантэйнера / віртуальнай машыны?"}
ScopeCheck -->|"Хост-АС (Mac / Linux / Windows / WSL2)"| FullCompromise["Выкажам здагадку, што 100% хатняга каталога (-/.aws, -/.ssh, -/.npmrc, .env, файлы cookie браўзера) былі выкрадзены"]
ScopeCheck -->|"DevContainer / Docker"| MountCheck["Праверце манціроўкі томаў (-v -/.ssh, -v -/.aws, докер-сокет /var/run/docker.sock або хост-сетка)"]
MountCheck --> FullCompromise
FullCompromise --> CleanDevice["КРОК 2: з асобнай чыстай прылады папярэдзьце SOC і адклікайце Cloud IAM, SSO, GitHub/GitLab і маркеры рэестра"]
CleanDevice --> WormCheck["КРОК 3: Аўдыт фіксацый GitHub, працоўных працэсаў CI/CD і апублікаваных версій npm/PyPI для аўтаматызаванага распаўсюджвання чарвякоў"]
WormCheck --> OfflineAudit["КРОК 4: На аўтаномнай працоўнай станцыі правядзіце інвентарызацыю ўсіх файлаў .env, файлаў стану Terraform і бэкдораў устойлівасці"]
OfflineAudit --> RotateEnv["КРОК 5: Памяняйце кожны пароль базы даных, сакрэт вэб-хука, ключ подпісу GPG і ключ API, знойдзеныя ў файлах .env / State"]
RotateEnv --> RebuildOS["КРОК 6: Ачысціце працоўную станцыю праз чыстую пераўсталёўку АС -> Прымяненне апаратных ключоў SSH, OIDC і --ignore-scripts"]
Разуменне таго, як выконваюцца ланцужкі паставак распрацоўшчыкаў і вектары 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"у пакет. - Python (
setup.pyі.pthфайлы): Каліpipусталёўвае зыходны дыстрыбутыў (sdist.tar.gz), ён выконваеsetup.pyз поўнымі прывілеямі інтэрпрэтатара Python. Нават пры ўсталёўцы папярэдне скампіляваных бінарных колаў (.whl), якія не выконваюццаsetup.pyпадчас усталявання зламыснікі ўключаюць шкоднасныя.pth(канфігурацыя шляху) файлы скінуты непасрэдна ўsite-packages/. Любы радок унутры a.pthфайл, які пачынаецца зimportкожны раз аўтаматычна выконваецца інтэрпрэтатарам Pythonpythonзапускаецца ў гэтай сістэме. - Іржа (
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) запускаць у галоўным працэсе Node.js Extension Host на вашай працоўнай станцыі з нулявой пясочніцай. Любое ўсталяванае пашырэнне мае поўны доступ для чытання/запісу да ўсёй вашай файлавай сістэмы, можа спараджаць бясшумныя даччыныя працэсы (child_process.exec), можа чытаць кожны адкрыты буфер рэдактара і.envфайл, і можа падключыць ваш інтэграваны тэрмінал. - Суб'екты пагрозы рэгулярна публікуюць фальшывыя пашырэнні тэм (
Darcula Official), падробленыя памочнікі кадзіравання штучнага інтэлекту або typosquatted linter/Prettier пашырэнні, якія бясшумна спампоўваюць інфаскрадальнік другой ступені або адваротную абалонку ў момант запуску IDE.
3. Узброеныя рэпазітары Git і аўтаматычнае выкананне працоўнай прасторы IDE (пасткі "падробленага вярбоўшчыка / тэсціраванне дадому")¶
- Паўночнакарэйскія групы, якія фінансуюцца дзяржавай (
Contagious Interview/Lazarus Group) і ўдзельнікі пагроз, арыентаваных на крыптаграфію, звычайна звяртаюцца да распрацоўшчыкаў на LinkedIn, Upwork або GitHub, выдаючы сябе за рэкрутэраў або тэхнічных дырэктараў, якія прапануюць высокааплатныя аддаленыя ролі. Яны просяць распрацоўшчыка кланаваць рэпазітар Bitbucket або GitHub для «15-хвіліннай ацэнкі адладкі» або «Агляду MVP гульняў Web3». - Гэтыя рэпазітары ўтрымліваюць схаваныя пасткі выканання, якія запускаюцца альбо пры адкрыцці ў IDE, альбо падчас зборкі:
.vscode/tasks.jsonз"runOn": "folderOpen": Аўтаматычна запускае фонавы скрыпт абалонкі, калі вы націскаеце «Так, я давяраю аўтарам» у VS Code.- Зламысны
.git/hooks/або.gitmodules: Выкарыстоўвае канфігурацыю субмодуля Git або скрыпты зборкі (Makefile,webpack.config.js,next.config.js,vite.config.ts), якія загружаюць абфускаваныя карысныя нагрузкі JavaScript (часта дапаўняюцца тысячамі прабелаў па-за экранам, каб схавацца ў слупку 2000+), выклікаючы знешні сервер 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 уліковага запісу Service ( private_key_id), які быў спампаваны на жорсткі дыск працоўнай станцыі.3. Праверце журналы аўдыту воблака на наяўнасць несанкцыянаваных прывязак IAM або стварэння Compute Engine. |
| 3. Microsoft Azure & Entra ID | -/.azure/msal_token_cache.bin-/.azure/accessTokens.json-/.azure/azureProfile.json |
1. Запусціце Entra ID Admin Revoke-MgUserSignInSession -UserId <your-user-id> зрабіць несапраўднымі ўсе токены абнаўлення і асноўныя токены абнаўлення (PRT).2. Выдаліце ўсе кліенцкія сакрэты або сертыфікаты прынцыпала службы, якія захоўваюцца лакальна. |
| 4. Kubernetes і Helm | -/.kube/config-/.kube/cache/-/.config/helm/registry/config.json |
1. Калі -/.kube/config змяшчае статычныя кліенцкія сертыфікаты (client-certificate-data / client-key-data) або доўгатэрміновыя токены носьбіта ServiceAccount, адклікайце сертыфікат праз кластарны ЦС (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 / .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 > Налады ўліковага запісу > Токены API і rubygems.org і неадкладна Анулюйце ўсе актыўныя токены. 2. Аўдыт вашых апублікаваных пакетаў (гл. Фазу 2 ніжэй), каб пераканацца, што зламыснік не выпусціў бэкдор-рэліз за апошнія некалькі гадзін. |
| 8. Рэестры докераў і кантэйнераў | -/.docker/config.json (Base64 auths для Docker Hub, GHCR, ECR, GCR, Quay) |
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. Інфраструктура як код (Terraform / Pulumi / Ansible Vault) | -/.terraform.d/credentials.tfrc.json**/terraform.tfstate (Лакальныя файлы стану)-/.pulumi/credentials.json-/.vault-token |
1. Адклікайце токены карыстальніцкага API Terraform Cloud / Enterprise і токены 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. Менеджэры баз дадзеных з графічным інтэрфейсам (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 (xoxb-...), Токены Discord Bot, Datadog, Sentry, Supabase (service_role), Адміністратар Firebase і сакрэты подпісу JWT. |
| 12. Вядомыя хасты SSH і серверы Bastion Jump | -/.ssh/config-/.ssh/known_hosts-/.zsh_history, -/.bash_history |
Зламыснікаў неадкладна разбіраюць -/.ssh/config і -/.zsh_history каб знайсці кожны ўнутраны IP-адрас сервера, бастыённы хост і імя карыстальніка, да якога вы падключаецеся, а затым выкарыстоўваць свой скрадзены -/.ssh/id_ed25519 ключ для ўваходу на гэтыя серверы. Выдаліце свой стары адкрыты ключ з -/.ssh/authorized_keys на кожным аддаленым серверы Linux і праверце /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 у сховішчы Activity view або арганізацыі Audit Log (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), каб выдаліць шкоднасны артэфакт і паставіць на каранцін закранутыя версіі. - Праверце сакрэтны TruffleHog / Git Clone Exfiltration:
- Выкрадальнікі ланцужкоў паставак часта выклікаюць API GitHub/GitLab, выкарыстоўваючы ваш скрадзены токен, каб кланаваць кожнае прыватнае арганізацыйнае сховішча, да якога ў вас ёсць доступ, і запускаць аўтаматызаваныя сакрэтныя сканеры (
TruffleHogабоGitleaks) супраць усёй гісторыі фіксацыі вашай кампаніі. Калі ваша арганізацыя калі-небудзь выпадкова змясціла сакрэт у гісторыю Git прыватнага сховішча, не змяніўшы яго, зменіце гэтыя гістарычныя сакрэты зараз.
Фаза 3: Судова-медыцынская сартаванне ў аўтаномным рэжыме на ўзламанай працоўнай станцыі¶
Калі ваша рабочая станцыя цалкам адключана ад Wi-Fi і Ethernet, адкрыйце акно тэрмінала, каб выканаць аўтаномную сартаванне. Ваша мэта дваякая: (A) знайсці кожны .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)¶
Шкоднасныя залежнасці і сховішчы «фальшывых рэкрутэраў» часта выдаляюць пастаянныя фонавыя агенты, замаскіраваныя пад праграмы абнаўлення сістэмы, дэманы Node або індэксатар 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 у нашым Кіраўніцтва па выкраданні сесійных файлаў cookie і па выкраданні інфармацыі і наш кіраўніцтва па заражэнні шкоднаснымі праграмамі, праграмамі-вымагальнікамі і шпіёнскімі праграмамі.
Этап 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 Code і Cursor непасрэдна патчуюць Electron asar архіў або workbench.desktop.main.js ўнутры камплекта прыкладанняў IDE, каб бэкдор выжыў пасля выдалення ўсіх пашырэнняў.
Рэзервовае капіраванне толькі чыстага зыходнага кода (праверана праз git status і git diff на чыстай машыне) і асабістыя дакументы, а затым выканайце чыстае выдаленне ўсяго змесціва і налад у macOS / аднаўленне DFU, чыстую ўстаноўку USB Linux або чыстую ўстаноўку 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.)
- 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 minimumReleaseAge, або Socket.dev / брандмаўэр Artifactory), каб адхіляць версіі пакетаў, апублікаваныя за апошнія 48 да 72 гадзін.
2. Выключыце адкрыты тэкст -/.ssh/id_ed25519, -/.aws/credentials, і .env Файлы з дыска¶
- Перамясціце ключы SSH у апаратны YubiKey (
ed25519-sk) або Secure Enclave / Biometric Agent: - Ніколі не пакідайце незашыфраваным або без парольнай фразы
-/.ssh/id_ed25519файл на дыску. Стварыце апаратны рэзідэнтны ключ SSH FIDO2 (ssh-keygen -t ed25519-sk -O verify-required) на фізічным ключы YubiKey (які патрабуе фізічнага дакранання пальцам да металічнага кантакту для кожнагаgit pushабоsshзлучэнне), або захоўвайце ключы SSH у 1Password SSH Agent / Secretive (macOS Secure Enclave), дзе прыватны ключ ніколі не існуе ў выглядзе файла ў-/.ssh/і кожны подпіс прапануе Touch ID / Windows Hello. - ** Замяніць Static
-/.aws/credentials(AKIA...) з кароткачасовым SSO (aws sso loginабоaws-vault)**: - Выдаліць усе пастаянныя ключы доступу карыстальнікаў IAM (
AKIA...). Выкарыстоўвайце AWS IAM Identity Center (aws sso login) з кароткай працягласцю сеанса (ад 1 да 4 гадзін) або загарніце ўліковыя дадзеныя ўнутрыaws-vaultпадтрымліваецца macOS Keychain / Windows Credential Manager з біяметрычнымі падказкамі. - Замяніць адкрыты тэкст
.envФайлы з Runtime Secret Injection (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) замест Long-Lived
-/.npmrcі-/.pypircТокены: - Ніколі не захоўвайце ўнутры токен з магчымасцю публікацыі
-/.npmrcабо-/.pypircна вашым ноўтбуку. І PyPI, і npm (праз Provenance / OIDC) дазваляюць публікаваць пакеты выключна з ізаляваных GitHub Actions / GitLab CI Trusted Publishers з выкарыстаннем кароткачасовых токенаў OpenID Connect (OIDC), што азначае, што нулявых токенаў публікацыі ніколі не існуе на ноўтбуку любога суправаджальніка.
3. Ізалюйце ненадзейныя рэпазітары і сцэнарыі зборкі ўнутры замацаваных DevContainer або віртуальных машын¶
- Ніколі не кланіруйце і не запускайце "Ацэнку вярбоўшчыкаў на дом", незнаёмы праект з адкрытым зыходным кодам або баунты-рэпазітар непасрэдна ў вашай хост-АС:
- Запускайце незнаёмыя праекты ўнутры GitHub Codespace, аднаразовай воблачнай віртуальнай машыны або лакальнага Docker DevContainer, які НЕ прывязвае хатні каталог хаста (
-), НЕ мантуецца/var/run/docker.sock, і пры неабходнасці перадае толькі токен Git з ахопам, толькі для чытання. - Аўдыт супраць кода / пашырэнняў курсора і адключэнне аўтаматычнага абнаўлення для неправераных выдаўцоў:
- Памятайце, што Cursor, Windsurf і VSCodium выцягваюць пашырэнні з рэестра OpenVSX (
open-vsx.org), а не на афіцыйным Microsoft Visual Studio Marketplace. Перад устаноўкай любога пашырэння праверце дакладную прастору імёнаў выдаўца і колькасць устаноўленых пашырэнняў, звядзіце да мінімуму спіс усталяваных пашырэнняў і выдаліце пашырэнні, якімі вы больш не карыстаецеся.
Часта задаюць пытанні¶
Займаецца бегам npm install --ignore-scripts цалкам абараніць мяне ад шкоднаснага пакета npm?¶
Бег npm install --ignore-scripts блакуе найбольш распаўсюджаны вектар атакі ў ланцужку паставак: аўтаматычнае выкананне прадусталяваць, ўсталяваць, і пасля ўстаноўкі каманды абалонкі, вызначаныя ўнутры package.json падчас ўстаноўкі. Аднак гэта не абараняе вас, калі вы сапраўды выконваеце код JavaScript пакета (напрыклад, пры запуску npm run dev, тэст npm, жарт, вэб-пакет, або віт, або калі плагін ESLint/TypeScript вашай IDE загружае шкоднасны плагін з node_modules). Паколькі Node.js па змаўчанні не мае файлавай сістэмы часу выканання або сеткавай пясочніцы, любы код, імпартаваны падчас зборкі або этапу тэставання, усё яшчэ можа чытаць -/.aws і -/.ssh калі вы не ізалюеце зборку ўнутры кантэйнера або не выкарыстоўваеце эксперыментальную мадэль дазволу Node (node --permission).
Я адкрыў падазроны рэпазітар у VS Code ад вярбоўшчыка ў LinkedIn і націснуў «Так, я давяраю аўтарам», перш чым зразумеў, што гэта махлярства. Ці выконваўся код, нават калі я ніколі не запускаўся npm install?¶
Так, вы павінны меркаваць, што адвольны код быў выкананы ў тую ж секунду, калі вы націснулі «Так, я давяраю аўтарам». У Visual Studio Code і Cursor прадастаўленне Workspace Trust неадкладна дазваляе сховішчам .vscode/tasks.json файл для запуску фонавых задач абалонкі, настроеных з "runOn": "тэчка адкрыта", дазваляе вызначаць працоўную прастору .vscode/settings.json для ўказання моўных сервераў (такіх як Python, TypeScript, ESLint або Rust Analyzer) на шляхі шкоднасных выканальных файлаў у тэчцы сховішча і запускае аўтаматычнае выкананне build.rs у праектах Rust. Неадкладна адключыце прыладу ад сеткі і выканайце этап 1, каб змяніць усе ўліковыя даныя.
Калі шкоднасны пакет npm або PyPI працаваў у кантэйнеры Docker або DevContainer, ці бяспечны мой хост-машыну Mac або ноўтбук Windows?¶
Гэта цалкам залежыць ад таго, якія аб'ёмы мацавання, зменныя асяроддзя і сокеты былі перададзены ў гэты кантэйнер. Стандартныя і лакальныя шаблоны DevContainer docker-compose.yml налады часта аўтаматычна перанакіроўваюць ваш хост SSH_AUTH_SOCK (дазваляючы шкоднасным праграмам унутры кантэйнера выкарыстоўваць ключы SSH вашага хоста для падлучэння да аддаленых сервераў або адпраўкі на GitHub), прывязка-мантаванне -/.aws, -/.gitconfig, або ваша працоўная прастора .env файлы або змантаваць хост-сокет Docker (/var/run/docker.sock), які дае імгненны каранёвы доступ да ўсёй аперацыйнай сістэмы хоста. Агледзіце свой devcontainer.json і докер правяраць мантуе, каб убачыць, якія менавіта рэсурсы хаста былі адкрыты ўнутры кантэйнера.
Як я магу праверыць, ці ёсць у версіі пакета, якую я збіраюся ўсталяваць, схаваныя скрыпты ўстаноўкі або заблытаная тэлеметрыя перад яе ўсталяваннем?¶
Перш чым усталяваць незнаёмы пакет npm, PyPI, Go або Rust, праверце яго на Socket.dev або Deps.dev (ад Google Open Source Insights), якія статычна аналізуюць кожную версію на наяўнасць скрыптоў усталявання, сеткавых запытаў, доступу да файлавай сістэмы,ацэнка() абфускацыя і змяненні ў суправаджэння. Вы таксама можаце бегаць скрыпты прагляду <пакета> npm у вашым тэрмінале, каб праверыць яго сцэнарыі жыццёвага цыкла без загрузкі або выканання пакета.
Крыніцы правераныя¶
- Агенцтва кібербяспекі і бяспекі інфраструктуры (
CISA) і Агенцтва нацыянальнай бяспекі (NSA) (Злучаныя Штаты Амерыкі): Бяспека ланцужка паставак праграмнага забеспячэння: рэкамендаваныя практыкі для распрацоўшчыкаў і рэагаванне на ўзламаныя залежнасці. - Лабараторыя бяспекі GitHub і парады па бяспецы npm: Рэагаванне на ўзламаныя пакеты npm, шкоднасныя
.vscode/tasks.jsonПасткі сховішча (Contagious Interview), а таксама GitHub Actions Workflow Зніжэнне сакрэтнай эксфільтрацыі. - Упраўленне ўпакоўкі Python (
PyPA) & Бяспека PyPI: Апрацоўка шкоднаснага кола.pthфайлы,setup.pyАдвольнае выкананне і давераная публікацыя (OIDC) Рэкамендацыі па ўкараненні. - Адкрыты сусветны праект бяспекі прыкладанняў (
OWASP): Шпаргалка па бяспецы ланцужка паставак праграмнага забеспячэння і 10 галоўных рызык бяспекі CI/CD. - Нацыянальны цэнтр кібербяспекі (
NCSC) (Злучанае Каралеўства): Абарона асяроддзяў распрацоўшчыкаў і воблачных планаў кіравання ад мэтанакіраванага збору ўліковых даных.
Звязаныя даведнікі¶
- Выкраданне файлаў cookie сеанса, крадзяжы інфармацыі і адкліканне токенаў
- Уцечка кашалька криптовалюты і кампраметацыя пачатковай фразы
- Шкоднасныя пашырэнні браўзера, выкрадальнікі буфера абмену і выдаленне рэкламнага ПЗ
- Махлярства з фальшывымі прапановамі працы, махлярства з праверкай абсталявання і крадзеж асабістых дадзеных
- Заражэнне шкоднаснымі праграмамі, праграмамі-вымагальнікамі і шпіёнскімі праграмамі
- Нумары экстраных службаў па краінах