LR © 2026
← Torna alla home

Progetti / Security

AI Guardian Lab

Un middleware open source tra l'agente LLM e la shell, prima dell'esecuzione.

$ task: "analizza lo spazio disco"  ·  comando: rm -rf /tmp
 
[1/4] allowlist......... FAIL (rm non in allowlist)
 
>> BLOCKED: binario non ammesso.

Il problema

Se un agente propone «rm -rf /tmp» per analizzare lo spazio disco, non mi affido alla sola istruzione data al modello. Nella demo una regola esterna ferma «rm», che non è nella allowlist, prima che il comando arrivi alla shell.

Cosa ho costruito

Ho scritto un middleware Python tra l'agente e la shell. Nel caso qui sopra basta il primo controllo, la allowlist. Dopo cerco offuscamenti con regex e confronto il comando con il task. Se il caso è ambiguo, interviene anche una verifica LLM. I test automatici girano in CI. Il servizio usa utenti non privilegiati e parte in dry-run; i comandi fuori dalla pipeline non sono coperti.

Ruolo: Software Developer (open source), dal 2026. Il codice è pubblico. Non c'è una sandbox forte: in produzione non lo metterei.

Come l'ho verificato

Le prove stanno nel repository. I controlli della pipeline sono la allowlist dei binari, le regex sul comando grezzo e normalizzato, la coerenza tra il task e il comando e la verifica LLM solo sui casi ambigui. Il comportamento è fail-closed: se un controllo ha un dubbio il comando non passa, e se la verifica LLM non risponde il comando resta bloccato.

I test automatici girano con pytest. La CI esegue pytest, una scansione Bandit non bloccante e uno smoke test Docker. Nel repository ci sono anche il corpus di attacchi, diviso per offuscamento, esfiltrazione, reverse shell e prompt injection, e la configurazione dei container: agente in dry-run di default, utenti non privilegiati, cap_drop: ALL e no-new-privileges.

I test e il corpus di attacchi sono nel repository; l'esito di ogni run si vede nella CI.

Tech Stack

Python Flask Docker LLM Validation GitHub Actions Dry-run
Apri il repository su GitHub