Запрос «install ps1 iex» обычно приводит к одной и той же команде: powershell -ExecutionPolicy Bypass -c "irm https://…/install.ps1 | iex". Её тебе дала документация, форум или AI-ассистент, и вопрос «а выполнять ли это вообще» - самый правильный из возможных. Короткий ответ: сама по себе связка легитимна, ей пользуются официальные проекты; опасно слепое выполнение всего, что вернул сервер.
Насколько это опасно, в 2026 году стало видно по официальным документам. 2 июля ФБР опубликовало бюллетень FLASH-20260702-01 «Cyber Criminal Group TeamPCP» (TLP:CLEAR, шесть страниц): группа TeamPCP отравила сразу несколько инструментов, которыми пользуются разработчики и безопасники, и выкачивала облачные токены, SSH-ключи и Kubernetes-секреты из тысяч CI/CD-окружений. Среди жертв - LiteLLM, библиотека-шлюз к API нейросетей с примерно 95 млн загрузок в месяц на PyPI: 24 марта она почти два часа раздавала бэкдор вместе с обычным обновлением, а главной добычей стали API-ключи к LLM-провайдерам.
Что делает команда irm …install.ps1 | iex?
Коротко: однострочник скачивает скрипт в память и тут же исполняет его как код, не сохраняя файл на диск. Права скрипт получает те же, что у тебя, - если терминал открыт от администратора, то и выполнится он от администратора. Флаг -ExecutionPolicy Bypass при этом глушит предупреждения о неподписанных скриптах.
По косточкам:
| Фрагмент команды | Что он делает | Чем рискует |
|---|---|---|
powershell |
запускает интерпретатор PowerShell | код работает в новом процессе с твоими правами |
-ExecutionPolicy Bypass |
отключает политику подписи на время этого процесса | неподписанный скрипт запускается без единого вопроса |
irm https://…/install.ps1 |
Invoke-RestMethod скачивает текст скрипта | код приезжает из сети напрямую в память |
| `\ | ` | пайп передаёт скачанное дальше |
iex |
Invoke-Expression исполняет текст как код | выполняется всё, что сервер вернул в эту секунду |
Два следствия из этой механики. Первое: fileless-выполнение - файл на диск не пишется, но процесс и его поведение могут обнаружить EDR, антивирус и сетевой мониторинг. Второе: между «скачал» и «выполнил» нет паузы, чтобы открыть скрипт глазами и решить, доверяешь ли ты ему.
При этом iex - не вирус и не хакерская находка. Это штатный командлет Invoke-Expression, и сама Microsoft в документации к нему держит блок Caution: проверяй, что команда безопасна, а оператор вызова & компания прямо называет более безопасной альтернативой.
Почему «скачать и выполнить» стало нормой - и главным каналом атаки?
Коротко: паттерн нормализовали сами легитимные проекты. Так ставят Hugging Face CLI (irm https://hf.co/cli/install.ps1 | iex), Bun, winutil Криса Титуса. Когда официальная документация учит «выполни вот это от админа», граница между нормой и подставой стирается, и атакующие играют именно на этой привычке.
Модель «скачал из сети - исполнил» - это и есть атака на цепочку поставок в бытовом исполнении: злоумышленнику не нужно взламывать тебя лично, достаточно встать на пути установки или обновления. У паттерна есть unix-брат - curl | bash: синтаксис другой, слепота та же.
Отдельно про миф о защите: политика выполнения никого не защищает, это предупреждение, которое флаг Bypass просто выключает на время процесса. В Microsoft Q&A (май 2026) паттерн irm ... | iex прямо назван опасным, а рекомендация звучит буднично: скачать скрипт, изучить и только потом выполнить. Признаками закрепления малвари там же названы Run-ключи реестра и задачи планировщика с -ExecutionPolicy Bypass плюс iex(irm …) - запомни эту связку, она понадобится ниже.
Кстати, помимо установки AI-инструменты упираются в российскую реальность и деньгами: заплатить за Claude или GPT российской картой напрямую нельзя. Рабочих путей три: зарубежная карта, реселлеры с наценкой и агрегаторы вроде provod.ai (российский OpenRouter), где те же модели доступны в рублях по официальным тарифам. Но сначала - про саму команду, она важнее.
Что пишет ФБР про TeamPCP?
Коротко: за пять дней марта 2026 группа TeamPCP прошла каскадом через пять экосистем - от сканера безопасности Trivy до библиотеки LiteLLM на PyPI. ФБР связывает с кампанией четыре CVE, а маркером заражения называет репозитории tpcp-docs и docs-tpcp, которые червь создаёт в GitHub-организации жертвы украденными кредами. По состоянию на июль 2026 украденные креды нужно считать скомпрометированными до отзыва или ротации и после инцидента продолжать мониторинг.
Хронология по отчётам Mallory Intel, Trend Micro и Cycode:
| Дата (2026) | Цель | Что случилось |
|---|---|---|
| 19 марта | Trivy, GitHub | форс-пуш 76 из 77 тегов trivy-action и всех 7 тегов setup-trivy; троянизированный релиз v0.69.4 |
| 20 марта | npm | червь CanisterWorm: 28 пакетов scope @EmilGroup заражены менее чем за 60 секунд |
| 22 марта | Docker Hub | образы aquasec/trivy:0.69.5 и 0.69.6 залиты напрямую украденными кредами, в обход GitHub-релизов |
| 23 марта | KICS + OpenVSX | угнаны все 35 тегов kics-github-action и два расширения VS Code |
| 24 марта | PyPI | LiteLLM 1.82.7 и 1.82.8 с бэкдором; в 13:38 UTC PyPI поместил пакет в карантин |
Показательно, что первой доминошкой пал инструмент безопасника. В конце февраля бот эксплуатировал небезопасный pull_request_target-workflow в CI Trivy и украл токен aqua-bot. Aqua раскрыла инцидент 1 марта и начала ротацию, но, как признано в её же пост-мортеме, ротация «wasn't atomic» - у атакующих остался резидуальный доступ, которым они и воспользовались 19 марта. Инцидент получил номер CVE-2026-33634 (CVSS 9.4, «встроенный вредоносный код») и позже попал в каталог CISA KEV.
Особняком стоит эпизод с LiteLLM, потому что он бьёт прямо по пользователям нейросетей. TeamPCP украденным из CI токеном PYPI_PUBLISH опубликовала версии 1.82.7 (10:39 UTC) и 1.82.8 (10:52 UTC) - ирония в том, что CI самой LiteLLM гонял отравленный Trivy. В 11:48 UTC исследователь Callum McMahon открыл GitHub issue #24512 после «fork bomb» на своей машине; атакующий с правами мейнтейнера закрыл тред и засыпал его бот-комментариями.
Механика бэкдора - отдельный урок. В 1.82.7 это было 12 строк обфусцированного кода в proxy_server.py, а в 1.82.8 - файл litellm_init.pth размером 34 628 байт в site-packages. Python исполняет import-строки из файлов .pth при каждом старте интерпретатора, поэтому малварь срабатывала в любом Python-процессе - Jupyter, Ansible, тесты - даже без импорта litellm. Snyk подтвердил, что файл был честно задекларирован в RECORD колеса с валидным хэшем: формально пакет был «целым». А Wiz оценивала присутствие LiteLLM примерно в 36% облачных окружений.
Что забирают с машины разработчика?
Коротко: облачные токены AWS, GCP и Azure, SSH-ключи, секреты Kubernetes, env-переменные, криптокошельки и API-ключи к LLM-провайдерам. ФБР перечисляет семейства CanisterWorm, SANDCLOCK, Mini Shai-Hulud и его вариант Miasma - самораспространяющихся червей по npm и PyPI. Список скомпрометированных инструментов бюро даёт открытым: «including, but not limited to».
Пейлоад в отравленном Trivy, по данным Trend Micro и наблюдениям CrowdStrike, скрейпил память процесса Runner.Worker, собирал креды с файловой системы, шифровал связку AES-256-CBC плюс RSA-4096 и уводил её на типосквоттинг-домен scan.aquasecurtiy[.]org - обрати внимание на пропущенную «i». Второй C2-домен из отчёта ФБР - checkmarx[.]zone, тоже имитация известного бренда безопасности. Самое неприятное: легитимный скан после кражи отрабатывал нормально. В логах не было видно ничего.
Масштаб последствий виден по жертвам. У Mercor через украденные ключи Tailscale выкачали 4 ТБ: исходный код, базу с PII, видеоинтервью, документы удостоверения личности. По сводке Cloud Security Alliance (Google GTIG ведёт группу как UNC6780), креды из взлома Trivy позже открыли dev-окружение Cisco - 300+ внутренних репозиториев с исходниками Cisco AI Assistant. А 18-20 мая группа вошла во внутреннюю инфраструктуру GitHub через троянизированное расширение Nx Console, пролежавшее на Visual Studio Marketplace 18 минут, и забрала около 3 800 репозиториев.
Формулировка ФБР про украденное стоит того, чтобы её прочитать дважды: аффилированные группы, вероятно, «будут использовать эти данные как оружие спустя долгое время после первичной компрометации». Ключ не протухает - он всплывает в атаках через месяцы и годы, и вымогательская группа VECT уже связана с этим потоком. Ротация здесь - рабочий ответ, другого ФБР не оставляет.
Здесь же уместна мысль про гигиену ключей. Токены, разбросанные по .env-файлам на каждой машине и в каждом pet-проекте, - идеальная мишень для такого скрейпера. В provod.ai единый API ко всему каталогу моделей подключается заменой ключа и base_url - он совместим с OpenAI- и Anthropic-SDK, так что Claude Code, Cursor и n8n подхватывают его без переписывания кода: удобство интеграции; ключи для чата и продакшена лучше разделять, хранить в секрет-менеджере, выдавать с минимальными правами и регулярно ротировать.
Как установить инструмент и не подставиться?
Коротко: разорви сцепку «скачал - выполнил» паузой. Проверь домен первоисточника, скачай файл, прочитай его глазами, выполни локально. В CI правила жёстче: пин версий к полным SHA коммитов, минимальный возраст пакета семь дней, мониторинг исходящих соединений. Это не мои выдумки - это рекомендации ФБР из того же FLASH.
Для ручной установки на Windows:
- Возьми ссылку только с первоисточника: официальный репозиторий, официальная документация. Не из чата, не из рекламы, не из «удобного» зеркала. Сверь домен побуквенно - типосквоттинг в этой истории сработал дважды.
- Скачай скрипт файлом:
irm https://…/install.ps1 -OutFile install.ps1. - Открой в редакторе и прочитай. Ищи обфусцированные куски, base64, странные исходящие адреса,
iexвнутри самого скрипта. - Выполни локально через оператор вызова:
& .\install.ps1, без Bypass, если скрипт подписан. - Если ставишь через пакетный менеджер, используй lock-файлы, явные версии, проверенные хэши или подписи и изолированное окружение: сам менеджер не гарантирует безопасность.
Для CI/CD ФБР рекомендует: пиновать GitHub Actions к полным SHA коммитов вместо плавающих тегов (именно плавающие теги и переписали в Trivy); выдерживать минимальный возраст пакета семь дней во всех средах - в окне LiteLLM это спасло бы тебя автоматически; включить фишинг-устойчивый MFA для аккаунтов с правом публикации; мониторинг раннеров вроде Harden-Runner на неожиданные исходящие соединения; аудит npm-аккаунтов на протухшие recovery-домены.
Уже выполнил подозрительную команду - что теперь?
Коротко: отключи машину от сети, проверь точки закрепления и начинай ротацию ключей, не дожидаясь «симптомов». В кейсе Trivy жертвы ничего не замечали - сканер работал как обычно, пока креды уже были на чужом сервере. Отсутствие признаков здесь ничего не значит.
Порядок такой. Сначала изолируй машину от сети. Потом проверь Run-ключи реестра и планировщик на связку -ExecutionPolicy Bypass плюс iex(irm …) - Microsoft называет её типичным признаком персистентности. Дальше - GitHub: ищи в своей организации репозитории tpcp-docs или docs-tpcp, их создание ФБР считает маркером заражения. И ротация: облачные креды, SSH-ключи, токены CI/CD и API-ключи к LLM в первую очередь - именно они были главной целью TeamPCP. Секреты, токены, артефакты и окружения, попавшие в область экспозиции 19-24 марта, нужно расследовать по конкретным задачам CI и раннерам; секреты и креды из этого окна - ротировать.
Чего этот ритуал не решает
Коротко: «скачал, прочитал, запустил» защищает от случайной дрянной ссылки, но не от компрометации самого вендора. Бэкдор в LiteLLM приехал в официально опубликованном на PyPI пакете с валидным RECORD-хэшем, а Trivy был отравлен в доверенном GitHub Action: целостность колеса не подтверждает добросовестность публикации.
Поэтому честная картина такая. Ритуал проверки закрывает бытовой сценарий «нашёл однострочник в чате». Системный риск цепочки поставок он не снимает: там работают только пин версий и SHA, возрастной ценз пакетов, изоляция секретов от пайплайнов и мониторинг исходящего трафика. Меня в этой истории больше всего напрягает именно это: даже идеальная паранойя пользователя не спасла бы от колеса 1.82.8 с валидным хэшем.
Когда provod.ai не подходит
Коротко: provod.ai решает доступ к моделям и оплату из России - и ничего из области безопасности твоего пайплайна. Если твоя задача - защитить CI/CD, ритуалы выше придётся внедрять самому.
Агрегатор не просканирует твои зависимости, не заменит Harden-Runner и не отменит ротацию секретов - если ты гонял отравленные версии в марте 2026, чини это независимо от того, где берёшь модели. Не закрывает он и сценарии on-prem и fine-tuning: для закрытого контура с собственными весами нужна другая инфраструктура. А прямой Enterprise-контракт с вендором ради их SLA - отдельная история, где посредник не нужен. Для обычной работы с API и чатом из России - с оплатой в рублях, договором и закрывающими для юрлица - агрегатор проще самодельных схем с зарубежными картами.
provod.ai — российский AI API-роутер для личных и корпоративных сценариев
Один API и веб-интерфейс объединяют привычную AI-экосистему: от первого запроса в чате до агентных систем, мультимедиа и production-интеграций для бизнеса.
В одном каталоге — актуальные модели для текста и медиа: GPT от OpenAI, Claude от Anthropic, Gemini от Google, Grok от xAI, DeepSeek, Qwen, GLM, Kimi и MiniMax; для изображений — Nano Banana 2 Pro и GPT Image; для видео — последние версии Seedance, Kling, Veo и Google Omni. Также доступны модели для reasoning, поиска, документов, эмбеддингов, музыки и аудио.
Ценовая основа платформы — официальный тариф без собственной маржи: 1:1 с провайдером, оплата в рублях, единый баланс и документы для бизнеса. Это один из самых прямых и доступных способов оплачивать мировой AI-каталог из России.
Подключитесь к provod.ai: форма регистрации · цены на модели · защита данных по 152-ФЗ · главная provod.ai
FAQ
Коротко: пять вопросов, которые возникают после таких разборов, с ответами без повторов уже сказанного.
iex в PowerShell - это вирус?
Нет, это штатный командлет Invoke-Expression, он десятилетиями в системе. Опасно применение к непроверенному вводу: Microsoft в официальной документации держит для этого блок Caution и советует оператор & как более безопасную альтернативу.
Чем irm | iex отличается от curl | bash?
Модель одна: скачать текст в память и исполнить, не сохраняя. Различия в синтаксисе и в правах: PowerShell-вариант чаще запускают от администратора, так что права у малвари сразу максимальные.
Выполнил команду, и ничего не случилось - я в безопасности?
Не факт. Отравленный Trivy после кражи кредов честно делал свою работу, и CrowdStrike прямо отмечает отсутствие признаков в логах. Ключи ротируй без ожидания симптомов.
Как ФБР рекомендует защищать CI/CD?
Пин Actions к полным SHA, возраст пакета от семи дней, фишинг-устойчивый MFA на публикацию, мониторинг исходящих соединений раннеров, ротация секретов из окна экспозиции.
Почему взлом LiteLLM касается тех, кто просто пользуется API ChatGPT или Claude?
Потому что шлюзы вроде LiteLLM - точка, где концентрируются ключи сразу ко многим провайдерам, а ключи и были главной целью атаки.
Урок TeamPCP сводится к одному предложению: пауза между «скачал» и «выполнил» - это гигиена, и в 2026 году ФБР пишет про неё в официальных бюллетенях. Проверь домен, сохрани файл, прочитай, выполни локально; в CI - пинуй версии и держи семидневный ценз на свежие пакеты. А привычку «разбрасывать секреты по машинам и ставить что-то от админа» пора оставить в прошлом.
Хочешь попробовать модели без установочных скриптов от администратора и без зарубежной карты: зайди на provod.ai - подключение это замена ключа и base_url в твоём клиенте, оплата в рублях по официальным тарифам провайдеров, для юрлиц договор и закрывающие документы.
Спорный момент напоследок: я считаю, что проекты, которые до сих пор предлагают irm | iex как способ установки по умолчанию, несут часть ответственности за нормализацию этой привычки. Согласен - или вина целиком на тех, кто выполняет не глядя?
Источники
- S1 - FBI, FLASH-20260702-01 «Cyber Criminal Group TeamPCP», https://www.ic3.gov/CSA/2026/260702.pdf, 02.07.2026
- S2 - Trend Micro, «Inside the LiteLLM Supply Chain Compromise», https://www.trendmicro.com/en_us/research/26/c/inside-litellm-supply-chain-compromise.html, 26.03.2026
- S3 - Cycode, «Shedding The Lite: Unfolding The Dramatic Turn of Events with the LiteLLM Compromise», https://cycode.com/blog/lite-llm-supply-chain-attack/, 25.03.2026
- S4 - Mallory Intel / GitHub Advisory GHSA-69fq-xp46-6x23, https://www.mallory.ai/vulnerabilities/019d1cd1-6a25-7125-951d-df0fbe9b31fe, 23.03.2026
- S5 - Penligent Labs, «CVE-2026-33634 and the Trivy supply chain compromise», https://www.penligent.ai/hackinglabs/cve-2026-33634-and-the-trivy-supply-chain-compromise-how-mutable-tags-turned-a-security-scanner-into-a-credential-stealer/, 27.03.2026
- S6 - Microsoft Learn, документация Invoke-Expression, https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-expression, проверено 19.07.2026
- S9 - Vectra AI, «VECT and TeamPCP: The Ransomware Kill Chain, Reversed», https://www.vectra.ai/blog/vect-and-teampcp-the-ransomware-kill-chain-reversed, 07.07.2026
- S10 - Cloud Security Alliance, «TeamPCP (UNC6780): AI Supply Chain's Most Active Threat Actor», https://labs.cloudsecurityalliance.org/wp-content/uploads/2026/05/CSA_research_note_teampcp-unc6780-ai-developer-supply-chain-risk_20260524-csa-styled.pdf, 24.05.2026
- S11 - Oasis Security, «What the TeamPCP Trivy Attack Reveals About NHI Risk», https://www.oasis.security/blog/trivy-breach-non-human-identity-risk, 01.05.2026
- S12 - AnonHaven, «TeamPCP backdoors LiteLLM on PyPI using stolen Trivy credentials», https://anonhaven.com/en/news/litellm-teampcp-supply-chain-attack/, 25.03.2026
- S14 - Microsoft Q&A, «irm steam.run | iex», https://learn.microsoft.com/en-us/answers/questions/5907021/irm-steam-run-iex, 31.05.2026


Top comments (0)