Ott 22, 2024 Approfondimenti, Attacchi, Attacchi, Hacking, Minacce, Minacce, News, RSS
Una delle problematiche più discusse degli assistenti di IA riguarda la possibilità di iniettare dei comandi malevoli per aprire un canale di comunicazione col tool e ottenere i dati condivisi dagli utenti. Nonostante le precauzioni prese per ridurre l’efficacia delle tecniche dietro questi attacchi, esistono ancora dei modi per inviare comandi ai chatbot senza farsi notare, per esempio tramite i caratteri Unicode.
Come spiega Dan Goodin di Ars Technica, gli attaccanti possono usare caratteri speciali invisibili all’utente ma interpretabili dai chatbot per iniettare comandi malevoli e prendere il controllo del tool. Poiché questo testo invisibile può essere combinato con quello normale, gli utenti potrebbero copiare e incollare i prompt senza accorgersi della presenza di caratteri speciali.
A illustrare il funzionamento di questa tecnica è stato Johann Rehberger, un ricercatore di sicurezza che ha pubblicato due POC dove ha colpito Microsoft 365 Copilot.
Nelle POC condivise, l’utente chiede a Copilot di riassumere un’email ricevuta da un mittente non conosciuto. Nell’email ci sono delle istruzioni che chiedono al chatbot di cercare tra le email ricevute in precedenza dall’utente cifre di vendita o password OTP e includerle in un URL che punta al suo server web. L’uso di caratteri nascosti permetteva a Rehberger di nascondere i dati sensibili raccolti in una stringa invisibile alla fine dell’URL, il quale compariva normale all’utente.
Seguendo le istruzioni incluse nell’email, le quali istruivano il chabot ad appendere i dati sensibili all’URL codificati con tag Unicode, rendendoli così invisibili. “L’URL del browser codifica i caratteri Unicode, poi viene inviato tutto e il server web riceverà il testo codificato nell’URL e lo decodificherà nei caratteri corretti“.
Le POC di Rehberger derivano da una serie di scoperte fatte da Riley Goodside, ricercatore esperto di sicurezza degli LLM. Tra le migliaia di caratteri dello standard Unicode, ce ne sono 128 invisibili, simili ai caratteri ASCII, che venivano usati inizialmente per indicare la lingua dei testi (per esempio “en” per l’inglese o “jp” per il giapponese). Questo range di caratteri viene indicato come “Tags”.
Questo utilizzo è stato quasi subito abbandonato e in seguito si è pensato di usare questi caratteri per indicare i Paesi di fianco alle emoji delle bandiere; anche questa opzione è stata scartata e i caratteri sono rimasti inutilizzati.
Goodside ha scoperto che proprio questi 128 caratteri, invisibili nella maggior parte delle interfacce utente, possono essere compresi dagli LLM e quindi usati per iniettare comandi al chatbot senza che l’utente se ne accorga. Il ricercatore, già esperto di tecniche di manipolazione dei chatbot tramite testo invisibile, ha sfruttato la sua conoscenza del blocco di caratteri invisibili per dimostrare attacchi di prompt injection contro i chatbot,
Secondo quanto riportato da Goodin, attualmente i servizi più colpiti dalla tecnica del testo invisibile sono la web app di Claude e l’API di Claude. In entrambi i casi, i Tag Unicode vengono interpretati e scritti come testo ASCII. Fino a poche settimane fa, anche OpenAI API Access e Azure OpenAI API leggevano e scrivevano i Tag e li interpretavano come ASCII; OpenAPI non ha spiegato se questa modifica è legata alla diffusione dei risultati delle POC.
Dopo essere stata contattata in merito alle POC, anche Microsoft ha modificato il comportamento del suo chatbot: se a inizio ottobre Copilot Consumer App riusciva ancora a leggere e scrivere i caratteri Unicode nascosti, ora non è più in grado di farlo. Microsoft 365 Copilot invece riesce ancora a leggerli.
Infine, Gemini può leggere e scrivere i caratteri nascosti ma non li interpreta sempre come testo ASCII; per questo motivo, gli attaccanti non possono fare completamente affidamento sul chatbot per iniettare comandi.
“L’onnipresente standard Unicode supporta un framework leggero la cui unica funzione è quella di nascondere dati attraverso la steganografia, l’antica pratica di rappresentare le informazioni all’interno di un messaggio o di un oggetto fisico” sottolinea Goodin.
La possibilità di leggere e scrivere i caratteri Unicode pone in serio pericolo gli utenti dei chatbot e apre a diverse tipologie di attacco. Il consiglio da parte dei provider di LLM di controllare attentamente l’output di questi tool per evitare leak di dati diventa a questo punto inutile.
Un approccio possibile per risolvere questo problema consiste nel filtrare i Tag Unicode sia in input che in output. Molti provider di LLM hanno risolto il problema in questo modo nelle ultime settimane, ma la soluzione migliore sarebbe occuparsene a livello di modello e non di applicazione, in modo che per ogni nuovo servizio non ci si debba più porre il problema.
Secondo Rehberger, questo fenomeno è sintomo del fatto che gli sviluppatori di LLM non stanno approcciando la sicurezza come dovrebbero, ovvero includendola sin dalle prime fasi di progettazione. “Abbiamo LLM prodotti da vendor che contengono feature nascoste e non documentate che possono essere sfruttate dagli attaccanti“.
Il problema dei caratteri nascosti può essere risolto in breve tempo, ma la vera sfida è integrare le buone pratiche di sicurezza orientate all’IA nel processo di design e sviluppo dei servizi, in modo da ridurre al minimo i rischi di abuso.