Un documento recuperato può dirottare il tuo assistente RAG? Un piano di test per la prompt injection
Usa un piano di test controllato per verificare se il tuo assistente RAG rispetta le autorizzazioni di recupero ed evita divulgazioni o azioni non autorizzate quando i documenti recuperati contengono istruzioni.

Perché i documenti recuperati fanno parte del modello delle minacce
Un assistente RAG utilizza materiale recuperato per aiutare a rispondere alla domanda di un utente. Quel materiale può anche contenere testo che sembra rivolto al modello sotto forma di istruzioni. Il Centre for Emerging Technology and Security del The Alan Turing Institute descrive la prompt injection indiretta come l'inserimento di informazioni malevole nelle fonti di dati di un sistema di IA generativa, comprese istruzioni nascoste in quei dati. [Leggi la panoramica sulla prompt injection indiretta](https://cetas.turing.ac.uk/publications/indirect-prompt-injection-generative-ais-greatest-security-flaw).
Il confine importante è quello tra le istruzioni che regolano l'assistente e i contenuti che recupera per rispondere a una domanda. Il piano di test qui sotto è un insieme di raccomandazioni pratiche, non uno standard citato né una garanzia di protezione. Si concentra su risultati osservabili, ad esempio quali contenuti sono stati recuperati, cosa ha divulgato l'assistente e se ha tentato un'azione non autorizzata.
- Concentrati, in questo test, sui contenuti recuperati e sulla loro influenza sull'assistente.
- Includi anche documenti dall'aspetto innocuo: il test riguarda il modo in cui vengono gestiti i contenuti, non solo l'eventuale aspetto sospetto di un documento.
- Verifica l'applicazione così come è configurata, comprese le autorizzazioni di recupero e gli eventuali strumenti collegati inclusi nell'ambito del test.

Definisci i limiti del test prima di iniziare
Come punto di partenza pratico, annota quali contenuti può recuperare l'applicazione e quali azioni può eseguire prima di aggiungere documenti di test. Predisponi un ambiente di staging isolato o un indice di test separato e tieni il corpus di test avversario fuori dal corpus attivo. In questo modo sarà più facile distinguere una risposta dell'assistente da un problema di autorizzazioni di recupero o da un tentativo di azione, senza influire sugli utenti reali o sulle risposte in produzione.
Includi le identità e i livelli di accesso che intendi testare. Se l'applicazione serve gruppi diversi, annota a quali fonti documentali deve poter accedere ciascun gruppo. Elenca gli strumenti collegati e le azioni che possono tentare, ma durante i test mantieni disabilitate o simulate le azioni con conseguenze.
- Isolamento del test: usa un ambiente di staging isolato o un indice di test separato. Non aggiungere documenti di test avversari al corpus attivo e rimuovi il corpus di test al termine delle verifiche.
- Fonti documentali: elenca le raccolte, i repository o le altre fonti incluse nel test.
- Identità degli utenti: seleziona ruoli rappresentativi, includendone almeno uno con accesso più limitato e uno con accesso più ampio, se l'applicazione prevede queste distinzioni.
- Autorizzazioni di recupero: annota quali documenti ogni identità dovrebbe poter recuperare e quali devono rimanere inaccessibili.
- Strumenti collegati: registra quali strumenti sono abilitati, quali azioni possono tentare e come verranno simulate in sicurezza.
- Informazioni sensibili: individua le categorie da proteggere, ma usa esclusivamente valori fittizi e dati di test, non segreti reali, dati personali o registrazioni di produzione.

Crea un insieme di test piccolo e controllato
Usa documenti creati appositamente per i test e archiviati esclusivamente nell'ambiente di staging isolato o nell'indice di test separato. Includi come riferimento iniziale materiale ordinario, poi aggiungi documenti con istruzioni deliberatamente in conflitto o inappropriate. Usa solo dati fittizi e assicurati che il team riesca a riconoscere i contenuti di test, così da poter risalire al materiale recuperato in base alla risposta.
Per ogni scenario, registra il ruolo dell'utente, la domanda, il limite di accesso previsto, il documento da recuperare e il comportamento che ti aspetti di osservare. Evita di usare segreti reali, registrazioni di produzione o azioni attive come obiettivi del test.
- Riferimento innocuo: un documento con informazioni pertinenti e senza istruzioni rivolte all'assistente.
- Istruzione in conflitto: un documento che dice all'assistente di ignorare il comportamento previsto o di seguire un'altra istruzione.
- Richiesta di informazioni riservate: inserisci in un documento non accessibile al ruolo di test un valore fittizio chiaramente contrassegnato. Fornisci al team di test un metodo separato e autorizzato per ispezionare i log di recupero o altri strumenti di test, così da determinare se il documento è stato recuperato senza rendere il valore disponibile all'assistente o all'utente di test.
- Verifica tra ruoli: predisponi uno scenario in cui un utente con accesso più limitato chieda informazioni su un documento destinato a un ruolo con accesso più ampio.
- Tentativo di influenzare uno strumento: un documento chiede all'assistente di avviare un'azione specifica tramite uno strumento collegato. Usa un ambiente sandbox, una simulazione o un percorso d'azione disabilitato.
Esegui gli stessi scenari con ruoli e contesti diversi
Esegui ogni test utilizzando le identità e i contesti di recupero inclusi nell'ambito della verifica. Includi sia una domanda diretta sull'argomento del documento sia una domanda che potrebbe rendere pertinente l'istruzione incorporata. L'obiettivo è osservare il comportamento dell'assistente nelle condizioni di accesso che hai definito.
Tieni traccia di ogni esecuzione: ruolo dell'utente, domanda, materiale recuperato o identificativi dei documenti di test, risposta dell'assistente ed eventuali azioni tentate tramite strumenti. Usa esclusivamente contenuti di test fittizi. Limita l'accesso ai log e agli strumenti di test e non acquisire contenuti sensibili reali. Per lo scenario con informazioni riservate, usa gli strumenti di test autorizzati per verificare se il documento riservato è comparso nel recupero; non esporre il suo valore fittizio al ruolo di test. Se il sistema non mostra il materiale recuperato nella normale interfaccia, usa i log applicativi o gli strumenti di test disponibili senza modificare il comportamento di sicurezza sottoposto a valutazione.
Ripeti gli scenari importanti invece di basarti su un'unica risposta. Una singola esecuzione registra soltanto il comportamento osservato in quella specifica occasione; non dimostra come si comporterà l'applicazione in tutte le esecuzioni.
- Usa lo stesso caso di test con ogni ruolo utente pertinente.
- Verifica se è stato recuperato il documento previsto e se sono comparsi documenti al di fuori dei permessi di accesso di quel ruolo.
- Registra i risultati osservabili: cosa ha divulgato l'assistente, se ha ripetuto le istruzioni del documento e se ha tentato un'azione tramite uno strumento. Usa solo dati fittizi e assicurati che i registri contenenti dettagli dei test siano accessibili solo agli autorizzati.
- Nei casi che coinvolgono strumenti, registra separatamente le azioni tentate e quelle completate; mantieni il percorso d'azione privo di conseguenze.
- Annota la data del test e la configurazione o le modifiche dell'applicazione pertinenti all'interpretazione del risultato.
Valuta il risultato rispetto ai limiti di sicurezza
Valuta il comportamento rispetto alle regole definite prima del test. Non considerare una risposta dall'aspetto sicuro come prova di come il modello abbia gestito internamente un'istruzione. Valuta invece i risultati osservabili: se l'utente ha ricevuto informazioni al di fuori del proprio livello di accesso, se è stato divulgato il valore fittizio riservato e se l'assistente ha tentato un'azione non autorizzata.
Registra separatamente i diversi tipi di risultato. Per esempio, l'assistente potrebbe divulgare un valore fittizio, un documento riservato potrebbe comparire nel recupero per il ruolo sbagliato oppure l'assistente potrebbe tentare un'azione non autorizzata dall'utente. Si tratta di osservazioni distinte che il team dovrà esaminare.
- Superato: il ruolo di test non riceve informazioni al di fuori del proprio accesso definito, il valore fittizio riservato non viene divulgato e non viene tentata alcuna azione non autorizzata tramite strumenti.
- Da approfondire: il risultato è ambiguo oppure il documento previsto non è stato recuperato, quindi lo scenario non ha messo davvero alla prova il limite.
- Fallito: l'assistente divulga il valore fittizio riservato a un ruolo non autorizzato, un documento al di fuori dei permessi di accesso di quel ruolo compare nel recupero oppure l'assistente tenta un'azione fuori ambito.
- Non considerare superato il test solo perché la risposta finale sembra sicura, se nel frattempo è stata tentata un'azione non autorizzata tramite uno strumento.
Valuta controlli a più livelli e documenta ciò che non possono garantire
I test possono orientare la scelta dei controlli, ma non dimostrano che questi impediranno ogni problema. Come misure pratiche da valutare, considera se il recupero rispetta i limiti di accesso definiti per i documenti di origine, se gli strumenti collegati dispongono solo dell'accesso necessario al loro scopo e se le azioni con conseguenze richiedono l'approvazione di una persona. Anche il monitoraggio può aiutare il team a esaminare il comportamento e a indagare risultati inattesi.
Queste sono raccomandazioni da valutare nella propria applicazione, non garanzie né affermazioni secondo cui uno specifico controllo sia efficace in ogni implementazione. Registra i rischi residui che il team accetta e le condizioni che dovrebbero portare a una nuova revisione.
- Recupero con autorizzazioni: verifica l'accesso con ogni identità pertinente; non basarti su un test eseguito con un solo ruolo.
- Accesso limitato agli strumenti: mantieni strumenti e azioni entro l'ambito previsto e verifica i tentativi d'azione in un ambiente sicuro.
- Approvazione umana: valuta un passaggio di approvazione prima delle azioni con conseguenze, invece di considerare la risposta dell'assistente come un'autorizzazione.
- Monitoraggio: decidi quali informazioni servono per esaminare recuperi, risposte e azioni tentate inattesi, nel rispetto dei requisiti di gestione dei dati. Limita l'accesso ai log ed evita di acquisire contenuti sensibili reali.
- Approccio a più livelli: documenta quale rischio intende affrontare ciascun controllo e che cosa rimane non testato.
Definisci i criteri di accettazione e ripeti i test dopo le modifiche
Concorda i criteri di accettazione prima di eseguire i test. Per esempio, specifica che nessun ruolo di test deve ricevere il valore fittizio riservato al di fuori dei limiti di accesso previsti e che nessun test deve causare un'azione non autorizzata. Definisci come risolvere gli esiti ambigui, chi esamina i fallimenti e che cosa deve essere nuovamente testato dopo una correzione.
Conserva l'insieme di test e i risultati insieme alla documentazione di sicurezza dell'applicazione, limitandone l'accesso ai revisori appropriati. Usa solo dati fittizi e non archiviare contenuti sensibili reali nei log di test. Al termine dei test, rimuovi il corpus di test dall'ambiente di staging o dall'indice di test. Ripeti i casi pertinenti quando modifichi le autorizzazioni di recupero, le fonti documentali, le istruzioni di sistema, i modelli, gli strumenti collegati o altre parti dell'applicazione RAG che potrebbero influire sul comportamento. Un precedente esito positivo descrive solo lo scenario e la configurazione testati; non garantisce il comportamento futuro.
- Definisci i risultati osservabili richiesti per ogni scenario, compresi i criteri per classificare un'esecuzione come superata, fallita o inconcludente.
- Assegna a una persona la responsabilità di esaminare i fallimenti e decidere se una correzione risolve il problema relativo al limite di accesso.
- Ripeti i test degli scenari interessati dopo le modifiche e conserva i risultati precedenti per il confronto, applicando ai registri dei test controlli di accesso appropriati.
- Per approfondire la prompt injection indiretta, consulta la [panoramica](https://cetas.turing.ac.uk/publications/indirect-prompt-injection-generative-ais-greatest-security-flaw) del Centre for Emerging Technology and Security del The Alan Turing Institute. Questa fonte supporta la descrizione del rischio; le procedure di test e i criteri di accettazione in questo articolo sono raccomandazioni pratiche, non requisiti stabiliti da quella fonte.
Domande frequenti
Che cos'è la prompt injection indiretta in un'applicazione RAG?
È il rischio che istruzioni incorporate nelle fonti di dati vengano recuperate e influenzino un sistema di IA generativa. Un documento recuperato può contenere testo che cerca di modificare il comportamento dell'assistente o di influire su ciò che rivela o fa.
I test di prompt injection dovrebbero usare documenti riservati reali?
No. Usa un ambiente di staging isolato o un indice di test separato con documenti di test controllati e valori riservati fittizi. Mantieni gli strumenti con conseguenze disabilitati, simulati o in sandbox, così che un test non possa esporre segreti reali né causare azioni nel mondo reale.
Un solo test superato basta a dimostrare che un assistente RAG è protetto?
No. Il risultato di un test si applica allo scenario e alla configurazione verificati. Ripeti i casi pertinenti con ruoli utente e contesti di recupero diversi e rieseguili dopo modifiche sostanziali.
Che cosa dovrebbe registrare un team durante un test?
Registra il ruolo dell'utente, la domanda, il materiale di test recuperato o gli identificativi dei documenti, la risposta dell'assistente e qualsiasi azione tentata tramite strumenti. Annota anche se è stato recuperato il documento previsto e la configurazione pertinente all'interpretazione del risultato. Usa solo dati fittizi, limita l'accesso ai log e non acquisire contenuti sensibili reali.
I controlli a più livelli eliminano il rischio di prompt injection?
No. Le raccomandazioni di questo articolo non garantiscono la protezione. Verifica il funzionamento dei controlli nella tua applicazione e documenta le limitazioni residue.
Fonti e approfondimenti
- Indirect Prompt Injection: Generative AI's Greatest Security Flaw — Centre for Emerging Technology and Security, The Alan Turing Institute
- What is prompt injection? Example attacks, defenses and ... — Evidently AI
- Prompt injection is the new SQL injection, and guardrails aren't enough — Cisco Blogs