
Sicurezza per l'era moderna dell'AI: difenditi dagli agenti AI dannosi e dai pacchetti npm malintenzionati
Sicurezza per l'era moderna dell'IA.
Nessun livello di sicurezza è perfetto. airgap è ancora sperimentale. Contributi benvenuti!
airgap avvia un programma target (es. un agente di codifica IA) all'interno del proprio mount namespace e sostituisce trasparentemente i segreti con versioni oscurate. Un programma in esecuzione sotto airgap può ancora leggere e modificare i file protetti, ma non vede mai i segreti reali. Finora airgap protegge:
.env e .env.* (es. .env.local, .env.production) — identificati per nome file. I valori vengono oscurati in <redacted value> mentre le chiavi rimangono visibili; modifiche, aggiunte ed eliminazioni vengono salvate sul file reale.BEGIN/END vengono mantenuti..npmrc — identificato per nome file. I valori di token di autenticazione e password (_authToken, _auth, _password, inclusa la forma per-registry //registry/:_authToken) vengono oscurati in <redacted value>, mentre registry, scope, email e commenti rimangono visibili; le modifiche vengono salvate sul file reale.Altri tipi di segreti verranno aggiunti.
Questi vengono oscurati ovunque sotto la directory di lavoro o la tua home directory ($HOME) — quindi sia il .env di un progetto che le chiavi in ~/.ssh sono coperti. Il rilevamento è dinamico: anche i file creati dopo l'avvio vengono intercettati.
Confronta il contenuto di .env con e senza usare airgap:
$ cat .env
API_KEY=sk-live-9f8c2a1b4e7d
DB_PASSWORD=hunter2
$ airgap cat .env
API_KEY=<redacted value>
DB_PASSWORD=<redacted value>
Con un agente 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>"
...
Un ulteriore livello di difesa protegge da pacchetti dannosi: airgap chiede il tuo permesso quando si accede a file inattesi — ad esempio da uno script di installazione npm dannoso.
Quando il gate è attivo, airgap ti chiede di consentire o rifiutare la prima lettura di ogni nuovo file. Approvare un file concede l'accesso solo a quel file; le decisioni durano per l'esecuzione. Ogni package manager include un elenco di file pre-approvati.
Ad esempio, installando un pacchetto dannoso il cui script postinstall tenta di leggere le tue chiavi SSH e il tuo .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
Rispondi n per rifiutare l'accesso.
airgap si basa su mount namespaces e un overlay FUSE, che sono funzionalità di Linux.cargo install airgap
airgap <program> [args...]
airgap esegue <program> con [args...], trasmettendo senza modifiche argv, l'ambiente e la directory di lavoro. Quando <program> termina, airgap termina con lo stesso codice.
Per eseguire sempre il tuo agente IA sotto airgap, crea un alias nella configurazione della shell (~/.bashrc, ~/.zshrc, ...):
alias claude="airgap claude"
alias opencode="airgap opencode"
Ora claude (o opencode) viene eseguito trasparentemente all'interno di airgap.
Esegui il tuo package manager sotto airgap per proteggerti da script di installazione dannosi. Oppure crea un alias nella configurazione della shell:
alias npm="airgap npm"
Se vuoi segnalare un problema di sicurezza o fare una domanda, scrivi a [email protected].