
Безопасность для современной эпохи ИИ: защита от вредоносных ИИ-агентов и злонамеренных npm-пакетов
Безопасность для современной эпохи ИИ.
Ни один уровень безопасности не идеален. airgap всё ещё экспериментальный. Вклад приветствуется!
airgap запускает целевую программу (например, ИИ-агента для написания кода) в собственном mount namespace и прозрачно заменяет секреты замаскированными версиями. Программа, работающая под airgap, по-прежнему может читать и изменять защищённые файлы, но никогда не видит реальные секреты. Пока что airgap защищает:
.env и .env.* (например, .env.local, .env.production) — определяются по имени файла. Значения заменяются на <redacted value>, а ключи остаются видимыми; изменения, добавления и удаления сохраняются обратно в реальный файл.BEGIN/END сохраняются..npmrc — определяется по имени файла. Значения auth-токенов и паролей (_authToken, _auth, _password, включая форму //registry/:_authToken для конкретного реестра) заменяются на <redacted value>, а реестры, области видимости, email и комментарии остаются видимыми; изменения сохраняются обратно в реальный файл.Другие типы секретов будут добавлены позже.
Они маскируются в любом месте в пределах рабочей директории или вашей домашней директории ($HOME) — таким образом, и .env проекта, и ключи в ~/.ssh защищены. Сопоставление динамическое: файлы, созданные после запуска, также обнаруживаются.
Сравните содержимое .env с использованием airgap и без него:
$ cat .env
API_KEY=sk-live-9f8c2a1b4e7d
DB_PASSWORD=hunter2
$ airgap cat .env
API_KEY=<redacted value>
DB_PASSWORD=<redacted value>
С ИИ-агентом:
$ airgap claude
show me ./test/fixtures/.env contents
Read 1 file
Here's the file:
DATABASE_URL="<redacted value>"
API_KEY="<redacted value>"
AWS_SECRET_ACCESS_KEY="<redacted value>"
DEBUG="<redacted value>"
...
Дополнительный уровень защиты от вредоносных пакетов: airgap запрашивает ваше разрешение при доступе к неожиданным файлам — например, со стороны вредоносного скрипта npm install.
Когда шлюз активен, airgap просит разрешить или отклонить первое чтение каждого нового файла. Одобрение предоставляет доступ только к этому файлу; решения действуют в течение запуска. Каждый пакетный менеджер поставляется со списком предварительно одобренных файлов.
Например, установка вредоносного пакета, чей postinstall-скрипт пытается прочитать ваши SSH-ключи и .env:
$ airgap npm install
...
airgap: npm wants to read the file /home/you/.ssh/id_rsa — allow? [y/N] n
airgap: npm wants to read the file /home/you/.env — allow? [y/N] n
Ответьте n, чтобы отклонить доступ.
airgap использует mount namespaces и FUSE-оверлей, которые являются функциями Linux.cargo install airgap
airgap <program> [args...]
airgap запускает <program> с [args...], передавая argv, окружение и рабочую директорию без изменений. Когда <program> завершается, airgap завершается с тем же кодом.
Чтобы всегда запускать своего ИИ-агента под airgap, добавьте алиас в конфигурацию вашей оболочки (~/.bashrc, ~/.zshrc, ...):
alias claude="airgap claude"
alias opencode="airgap opencode"
Теперь claude (или opencode) прозрачно работает внутри airgap.
Запускайте ваш пакетный менеджер под airgap, чтобы защититься от вредоносных скриптов установки. Или добавьте алиас в конфигурацию вашей оболочки:
alias npm="airgap npm"
Если вы хотите сообщить о проблеме безопасности или задать вопрос, напишите на [email protected].