Approfondimenti22/7/2024

Le allucinazioni negli LLM: un rischio per la sicurezza software

AI

Il nostro metodo di lavoro, orientato a uno sviluppo del software Agile e che risponda ai massimi criteri in termini di qualità e sicurezza, ci guida ad individuare rapidamente potenziali falle nel processo di scrittura del codice.  

Oggi, uno dei temi più caldi è l’introduzione di strumenti di Generative AI a fianco degli sviluppatori. Questo rappresenta senza dubbio è uno step importante per restare al passo con il mercato ma è anche una criticità a cui tutti gli stakeholder devono porre particolare attenzione.  

L'uso di modelli linguistici di grandi dimensioni (LLM) come i modelli GPT3.5/4/4o, i modelli Gemini o i modelli open source come Llama 3, è diventato sempre più diffuso nel mondo dello sviluppo software. Questi strumenti possono aiutare gli sviluppatori a generare codice per risolvere problemi in modo più rapido ed efficace.  

Il problema delle allucinazioni

Come sappiamo però, uno dei più grossi “limiti” degli LLM è la loro capacità di allucinare: utilissima per la scrittura creativa, meno utile per la risoluzione di task specifici e ad alto rischio di errore. Questo fenomeno non solo può causare inefficienze, ma rappresenta soprattutto un potenziale rischio per la sicurezza: una porta d’ingresso per potenziali malintenzionati. 

Anche se nello sviluppo software le allucinazioni sono ridotte al minimo, un problema grave che sta emergendo riguarda il suggerimento di package o librerie da importare nel codice generato, che possono sembrare plausibili ma che in realtà sono inesatte o completamente inventate. 

In poche parole, può capitare che quando l’utente formula una domanda chiedendo ad un modello LLM di generare codice per risolvere una particolare esigenza, il Modello (LLM) risponda con del codice tendenzialmente corretto ma con l’aggiunta di alcune librerie che non esistono, raccomandando quindi pacchetti che non sono pubblicati in un repository legittimo (ad esempio npm, Pypi, ecc.). 

L’utente, se attento, si accorge di questa allucinazione ed elimina il pacchetto; se invece esegue il codice si possono avere due scenari: 

  • Il primo (quello fortunato) è quando il pacchetto non esiste, il codice va in errore e con del debugging si identifica il problema e lo si elimina. 
  • Il secondo avviene quando un Hacker ha intercettato questa problematica prima dell’utente e ha pubblicato un pacchetto omonimo contenente codice dannoso che verrà eseguito di nascosto. 

    Una volta eseguito, quel codice può dare accesso all’aggressore a dati sensibili e causare potenziali rischi per la sicurezza dell’applicativo.

Come mitigare i rischi delle allucinazioni negli LLM

L' esempio evidenzia come oggi ci siano nuovi temi per la sicurezza del software che devono essere individuati ed affrontati. È necessario avere un approccio trasversale per mitigare questi rischi

  1. Formazione su strumenti di Generative AI: Diventa fondamentale per un’organizzazione formare in modo adeguato i propri dipendenti sulle nuove tecnologie che entrano a far parte della “cassetta degli attrezzi” con cui vengono svolte le mansioni di tutti i giorni. Ogni strumento può diventare un’arma a doppio taglio se non viene investito del tempo per comprenderne rischi e potenzialità; 

     
  2. Verifica del codice generato: Gli sviluppatori devono controllare attentamente il codice generato dagli strumenti di IA, anche se il codice compila, non significa necessariamente che sia corretto o sicuro. Un controllo manuale è il primo passo per identificare possibili allucinazioni o errori; 

     
  3. Valutazione delle librerie suggerite: Indipendentemente da dove proviene il codice che si sta per testare, è sempre buona norma verificare l'affidabilità delle librerie che si stanno importando in un progetto. 
    Questo include controllare la loro versione, il numero di contributori, il livello di manutenzione e le vulnerabilità note. Le librerie open source con una comunità attiva e molte stelle su piattaforme come GitHub sono generalmente più sicure; 

     
  4. Strumenti di analisi statica: Integrare strumenti di analisi statica nelle pipeline di CI/CD aiuta a identificare problemi nel codice e nelle librerie proposte. Questi strumenti possono rilevare vulnerabilità e potenziali errori prima che il codice venga implementato; 

     
  5. Test automatici: Implementare test automatici è un metodo efficace per verificare il corretto funzionamento del codice e per identificare eventuali regressioni introdotte dal codice suggerito dall'IA; 

     
  6. Assessment di sicurezza regolari: Indipendentemente dalla tecnologia utilizzata per produrre il codice, è sempre una buona regola quella di condurre assessment di sicurezza regolari, soprattutto per applicazioni web e mobili esposte su Internet. Questo aiuta a identificare e mitigare potenziali vulnerabilità; 

     
  7. Adottare un approccio Agile allo sviluppo software: In ultimo è sempre utile ricordare come l’adozione di metodologie Agile consentano di mitigare questi rischi. Adottare un approccio strutturato con cicli brevi nella verifica e valutazione del codice consente di identificare e correggere tempestivamente le problematiche, riducendo il rischio di errori sistematici. 

    È fondamentale che gli sviluppatori acquisiscano una profonda consapevolezza delle limitazioni degli strumenti di IA e si impegnino in una continua formazione e aggiornamento su queste tecnologie. 

    Porsi le giuste domande riguardo agli strumenti utilizzati, come ad esempio la loro affidabilità e le loro potenziali debolezze, diventa più che mai cruciale. 

    In adesso.it siamo convinti che adottando le migliori pratiche nella progettazione e gestione dei progetti, come le metodologie Agile, e mantenendo una costante attenzione alla sicurezza, è possibile migliorare l'affidabilità dei progetti software basati su IA.

Articolo a cura di

Federico Riboldi

Project Leader

Linkedin