Что на самом деле показал инцидент с 28K
Цифра «28K», которая в апреле прокатилась по сообществу OpenClaw, — это число систем, которые один вредоносный пакет успел скомпрометировать, прежде чем кто-либо это заметил. Троян проник через популярное расширение OpenClaw, собрал все доступные API-ключи и тихо встроил себя в промпты агентов, работавших всю остальную неделю.
Он попал внутрь не потому, что OpenClaw «небезопасен». Он попал внутрь потому, что большинство развёртываний OpenClaw настроены так же, как и большинство инструментов разработчика: ключи в переменных окружения, агенты на ноутбуке разработчика, расширения ставятся на доверии, и нет никакого аудит-лога между «агент что-то сделал» и «пришёл счёт». Каждое из этих значений по умолчанию само по себе нормально. Сложенные вместе, они образуют ровно ту модель угроз, под которую и был написан троян.
Этот пост — не пост о фичах. Office Claws не является рантаймом OpenClaw — мы Codex-first десктоп-менеджер, и большинство контролей ниже одинаково применимы к обоим агентам. Мы хотим показать модель угроз, с которой пользователи OpenClaw реально столкнулись после этого инцидента, и скучные локальные практики, которые делают следующий инцидент незначительным.
Реальная модель угроз пользователя OpenClaw
Три вещи делают платформы агентов более лакомой целью, чем обычный инструмент разработчика, и OpenClaw тут не исключение.
- Ключи стоят настоящих денег. Утёкший ключ OpenAI или Anthropic — это не просто учётная запись, это банкомат с тарификацией. Атакующий может сжечь 5 000 $ на ключе за выходные, прежде чем сработают алерты по биллингу.
- У агентов есть руки. Агент с доступом к shell может читать вашу кодовую базу, пушить в репозитории и запускать скрипты от вашего имени. Троян внутри промпта или списка инструментов агента может делать то же самое.
- Цепочка поставок широкая. Каждое расширение, MCP-сервер или «community pack», который вы ставите, работает в той же зоне доверия, что и агент. Установка OpenClaw с двенадцатью расширениями — это двенадцать потенциальных точек входа.
Любая практика, которая не закрывает хотя бы одну из этих трёх позиций, — это украшение.
| Риск | Плохой дефолт | Скучный контроль, который работает |
|---|---|---|
| Утечка ключей | Ключи в .env рядом с исходниками | Локальный OS keychain, короткие ротации |
| Агент на ноутбуке с полным доступом | Один uid, одна файловая система | Агент на собственной VPS, токены со scope |
| Цепочка поставок расширений | Авто-обновление, без ревью | Зафиксированные версии, чтение diff, без auto-install |
| Невидимые расходы | Счёт за API в конце месяца | Лимит расходов на агента + ежедневный мониторинг |
Пять контролей, которые реально двигают стрелку
1. Ключи остаются на машине оператора
Самый рычажный контроль после этого инцидента — он же и самый старый: не отправляй секрет туда, где работает недоверенный код. В Office Claws ваши ключи провайдера живут в локальном хранилище десктоп-приложения. Они передаются агенту через зашифрованный туннель Tailscale только когда агент вызывает провайдера, и никогда не пишутся на диск VPS. Если троян попадает на агентскую машину, он не находит ключ — потому что ключа там никогда не было.
Если вы остаётесь на OpenClaw, эквивалент — вынести ключи из .env файлов проекта в OS keychain (Keychain на macOS, secret-tool на Linux, DPAPI на Windows) и читать их в начале сессии. Это раздражает. Это же — разница между «скомпрометирован» и «слегка неудобно».
2. Агент живёт где-то ещё
Запуск агента на той же машине, где лежат ваши исходники, означает, что одна компрометация дотягивается до всего. Запуск на VPS — вашей собственной коробке Contabo за несколько евро в месяц — превращает большинство атак в «атакующий заrooting'ил один эфемерный дроплет». У этого дроплета нет SSH-ключей к другим репозиториям, нет браузерной сессии в банке, нет доступа в командный Slack. Уничтожаете и переподнимаете заново; радиус — одна машина.
Это та модель, что мы поставляем. Self-hosted Office Claws поднимает дроплет Contabo из заранее запечённого снапшота меньше чем за три минуты; агент работает там, ваш ноутбук говорит с ним через Tailscale.
3. Фиксируйте каждое расширение, которое ставите
Троян на 28K — это атака на цепочку поставок. Авто-обновление общественных расширений — это OpenClaw-эквивалент curl | bash. Фиксируйте версии. Читайте diff перед апгрейдом. К любому расширению, которое просит «все инструменты, все директории», относитесь так же, как к браузерному расширению, которое просит читать все страницы, — с долгой паузой и поиском альтернативы поменьше.
Два практических правила:
- Расширение, которому нужен сетевой выход на домен, о котором вы никогда не слышали, — это «нет».
- Расширение, у мейнтейнера которого история GitHub из трёх коммитов, — это «нет».
4. Поставьте лимит расходов у провайдера
У каждого поддерживаемого провайдера есть лимит расходов на ключ. Поставьте его. Троян на 28K был прибыльным потому, что никто ничего не замечал до прихода счёта; тот же троян против ключа с лимитом 50 $/день — это раздражение, а не инцидент. Office Claws показывает расход токенов на агента в десктоп-приложении, но авторитетная защита — это лимит, который вы выставляете на стороне OpenAI или Anthropic. Мы не можем выставить его за вас и не хотели бы.
5. Имейте аудит-лог, который написали не вы
Если ваша единственная запись о том, «что делал агент», — это собственный scrollback агента, у вас нет записи. Каждый промпт и каждый вызов инструмента должны попадать куда-то, что контролируете вы: gateway-лог на VPS агента, ваш собственный стек Loki/Grafana или — на managed-плане — ленту активности в десктоп-приложении. Цель — не читать его ежедневно. Цель — чтобы после инцидента вы могли ответить на «что трогал этот ключ» за минуты, а не за недели.
Как это выглядит на практике
Конкретно: пользователь OpenClaw, серьёзно отнёсшийся к инциденту, вышел из апреля примерно с таким стеком:
laptop ── Tailscale ──► VPS (one per agent)
│ │
│ ├─ agent runtime
│ ├─ pinned extensions
│ └─ gateway log → operator-side
│
├─ keys in OS keychain (NOT in .env)
├─ provider spend cap set per key
└─ desktop app showing per-agent token burnЭто тот же стек, что Office Claws по умолчанию поставляет для Codex-агентов. Если вы мигрировали с OpenClaw после блокировки подписки, вы получили эту безопасность как побочный эффект миграции по стоимости. Если остались на OpenClaw, та же архитектура достижима — просто собрать её придётся вам самим.
Рекомендации
- Уберите ключи из
.envсегодня. Даже если вы больше ничего из этого списка не сделаете, следующее заражённое расширение не сможет утащить ключ, который оно не может прочитать. - Поставьте лимиты расходов до завтрашней сессии. Пять минут в дашборде провайдера. Самый ROI-эффективный контроль на этой странице.
- Проведите аудит установленных расширений. Всё, чем вы активно не пользуетесь, удалите. Всё, чем пользуетесь, зафиксируйте на известном-хорошем коммите.
- Уберите агента с ноутбука. OpenClaw на self-hosted машине или Codex на Office Claws — ноутбук не то место, где должен жить долгоиграющий агент с доступом к shell.
- Держите один лог на стороне оператора. Он не должен быть навороченным. Он должен существовать до следующего инцидента, а не после.
Инцидент на 28K не последний. Платформы агентов теперь достаточно прибыльны, чтобы «цепочка поставок → ключ → счёт» была бизнес-моделью, а не случайностью. Контроли выше это не останавливают. Они делают радиус поражения достаточно маленьким, чтобы следующий инцидент был тикетом в пятницу после обеда, а не выходными в war room.
По теме
- Подписка OpenClaw заблокирована? Путь миграции на Codex, который держит ваших агентов в работе — стоимостная половина той же истории миграции
- AI Agent Security: как Office Claws хранит ваши ключи в безопасности — архитектурные детали локальной обработки ключей
- Self-Hosted vs Managed — выбор плана под модель угроз выше, цены здесь