
Sécurité pour l'ère moderne de l'IA : défendez-vous contre les mauvais agents d'IA et les packages npm malveillants
Sécurité pour l'ère moderne de l'IA.
Aucune couche de sécurité n'est parfaite. airgap est encore expérimental. Contributions bienvenues !
airgap lance un programme cible (par exemple un agent de codage IA) dans son propre espace de noms de montage et remplace de manière transparente les secrets par des versions censurées. Un programme exécuté sous airgap peut toujours lire et modifier les fichiers protégés, mais il ne voit jamais les secrets réels. Jusqu'à présent, airgap protège :
.env et .env.* (par exemple .env.local, .env.production) — identifiés par le nom du fichier. Les valeurs sont censurées en <redacted value> tandis que les clés restent visibles ; les modifications, ajouts et suppressions sont répercutés sur le fichier réel.BEGIN/END sont conservés..npmrc — identifié par le nom du fichier. Les valeurs de jeton d'authentification et de mot de passe (_authToken, _auth, _password, y compris la forme par registre //registry/:_authToken) sont censurées en <redacted value>, tandis que les registres, les scopes, email et les commentaires restent visibles ; les modifications sont répercutées sur le fichier réel.D'autres types de secrets seront ajoutés.
Ces secrets sont censurés partout sous le répertoire de travail ou votre répertoire personnel ($HOME) — ainsi les fichiers .env d'un projet et les clés ~/.ssh sont couverts. La détection est dynamique : les fichiers créés après le lancement sont également pris en compte.
Comparez le contenu de .env avec et sans utiliser airgap :
$ cat .env
API_KEY=sk-live-9f8c2a1b4e7d
DB_PASSWORD=hunter2
$ airgap cat .env
API_KEY=<redacted value>
DB_PASSWORD=<redacted value>
Avec un agent IA :
$ 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>"
...
Une couche supplémentaire protège contre les paquets malveillants : airgap demande votre permission lorsque des fichiers inattendus sont accédés — par exemple par un script d'installation npm malveillant.
Lorsque la barrière est active, airgap vous demande d'autoriser ou de rejeter la première lecture de chaque nouveau fichier. Approuver un fichier n'accorde l'accès qu'à ce fichier ; les décisions durent pour la session. Chaque gestionnaire de paquets est fourni avec une liste de fichiers pré-approuvés.
Par exemple, l'installation d'un paquet malveillant dont le script postinstall tente de lire vos clés SSH et .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
Répondez n pour refuser l'accès.
airgap repose sur les espaces de noms de montage et une superposition FUSE, qui sont des fonctionnalités Linux.cargo install airgap
airgap <program> [args...]
airgap exécute <program> avec [args...], en transmettant argv, l'environnement et le répertoire de travail inchangés. Lorsque <program> se termine, airgap se termine avec le même code.
Pour exécuter toujours votre agent IA sous airgap, créez un alias dans votre configuration du shell (~/.bashrc, ~/.zshrc, ...) :
alias claude="airgap claude"
alias opencode="airgap opencode"
Maintenant, claude (ou opencode) s'exécute de manière transparente à l'intérieur d'airgap.
Exécutez votre gestionnaire de paquets sous airgap pour vous protéger contre les scripts d'installation malveillants. Ou créez un alias dans votre configuration du shell :
alias npm="airgap npm"
Si vous souhaitez signaler un problème de sécurité ou poser une question, envoyez un e-mail à [email protected].