hazmat
- title
- hazmat
- type
- toolbox
- summary
- Изоляция ИИ-агентов для написания кода в macOS через отдельного Unix-пользователя, песочницу Seatbelt и правила pf
- tags
- security, macos, ai-agents, sandboxing
- language
- Go
- license
- MIT
- created
- 2026-04-08
- updated
- 2026-04-22
- lang
- ru
- translation_of
- hazmat
- source_updated
- 2026-04-22
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
Hazmat - это система изоляции для macOS, запускающая ИИ-агентов для написания кода (Claude Code, OpenCode, Codex) в изоляции на уровне ОС. Вместо того чтобы полагаться на запросы разрешений или диалоги подтверждения human-in-the-loop, она оборачивает сессию агента в три уровня ограничений и позволяет ему работать автономно внутри строго защищённого периметра.
Как это устроено
Изоляция построена на трёх независимых уровнях, каждый из которых компенсирует пробелы других:
Изоляция на уровне пользователя Unix. Агент работает от имени выделенного пользователя macOS, создаваемого во время hazmat init. Домашний каталог хоста недоступен структурно - он не просто скрыт политиками, а принципиально недосягаем в рамках модели пользователей ОС. Это самый грубый уровень, но из него сложнее всего выбраться.
Песочница ядра Seatbelt. Каждая сессия получает собственный профиль Seatbelt с запретом всего по умолчанию. Каталог проекта получает доступ на чтение и запись; пути к тулчейнам - только на чтение. Пути к учётным данным (ключи SSH, учётные данные AWS, связка ключей GPG) блокируются на уровне ядра даже внутри собственного домашнего каталога агента. Seatbelt - это недокументированный фреймворк песочниц от Apple (тот же самый, что используют приложения из App Store), поэтому он работает ниже userspace.
Межсетевой экран pf. Набор правил пакетного фильтра блокирует исходящие протоколы SMTP, IRC, FTP, Tor и VPN для предотвращения утечки данных. Чёрный список DNS резолвит известные C2- и туннельные сервисы (ngrok, pastebin, webhook.site) на localhost. HTTPS на порту 443 нельзя заблокировать, не нарушив возможность агента вызывать API, поэтому это остаётся признанным пробелом.
Поверх этих уровней hazmat задаёт настройку npm ignore-scripts=true, чтобы блокировать атаки на цепочку поставок через postinstall-скрипты, и автоматически делает снимки через Kopia перед каждой сессией для возможности отката.
Использование
# one-time setup — creates agent user and security infra
hazmat init
# import existing Claude Code config
hazmat config import claude
# install agent tooling for the contained user
hazmat bootstrap claude
# run a contained session
hazmat claude
# or run arbitrary commands contained
hazmat exec <command>
# audit and recover
hazmat diff # what changed this session
hazmat snapshots # list snapshots
hazmat restore # roll back
hazmat explain # preview session contract before running
Флаги управления доступом: -R для постоянных путей только на чтение, -W для дополнительных корней с возможностью записи помимо каталога проекта. Конфигурация для конкретного проекта находится в .hazmat/config.yaml.
Перед запуском сессии hazmat выводит "контракт", в котором показаны режим изоляции (нативный или песочница Docker), пути проекта для чтения и записи, автоматически определённые пути только для чтения и настройки снимков.
Формальная верификация
Порядок настройки, структура политик Seatbelt, безопасность резервных копий и эквивалентность политик второго и третьего уровней формально верифицированы с помощью спецификаций TLA+. В репозитории также задокументированы 16 CVE в файле docs/cve-audit.md и представлена полная модель угроз в threat-matrix.md.
Ограничения
- Только macOS (порт для Linux - открытый проект)
- Утечку данных по HTTPS заблокировать нельзя: агент может выполнить curl к любому URL по порту 443
- Seatbelt не документирован Apple; это эшелонированная защита, а не изоляция на уровне виртуальных машин
- Общий каталог
/tmpостаётся доступным для других процессов
См. также
Подход для Linux с более тонким контролем описан в syscall-binary-rewriting - это перезапись бинарного кода, которая заменяет инструкции системных вызовов на ловушки (traps), позволяя проверять и модифицировать аргументы системных вызовов, а не просто разрешать или запрещать их. Эквивалент уровня изоляции файловой системы hazmat для Linux описан в bubblewrap-dev-env (настройка на базе bubblewrap от Ciężarkiewicz'а). Более широкая таксономия, охватывающая все четыре уровня песочниц - файловую систему, сеть, политики HTTP и системные вызовы, - приведена в sandboxing-ai-agents; crabtrap закрывает уровень политик HTTP, который не может покрыть межсетевой экран pf в hazmat.
Ссылки
- Репозиторий: https://github.com/dredozubov/hazmat
- Установка: Homebrew tap или установочный скрипт из GitHub release
- Charlie Labs Daemons
- CrabTrap
- ctx
- flue
- Little Snitch for Linux
- Sandbox Agent SDK
- statewright
- superhq
- tilde-run
- BubbleWrap your dev env and agents
- Claude Code
- Matryoshka Isolation (Containers Inside VMs)
- Your Container Is Not a Sandbox — MicroVM Isolation in 2026
- Open Source Security at Astral
- We Reverse-Engineered Docker Sandbox's Undocumented MicroVM API
- Sandboxing AI Agents
- Supply Chain Security
- Rewriting Every Syscall in a Linux Binary at Load Time