Copilot IA, da non confondere con l’omonimo di Microsoft, integrato nel motore di ricerca Bing.
Immagina un mondo in cui il software che alimenta le tue app preferite, protegge le tue transazioni online e mantiene la tua vita digitale potrebbe essere superato e preso di mira da un pezzo di codice astutamente camuffato e questo non è trama dell’ultimo cyber-thriller; è una realtà esistente da anni.
Come questo cambierà in una direzione positiva o negativa, mentre l’intelligenza artificiale (IA) assume un ruolo sempre più grande nello sviluppo del software è una delle grandi incertezze legate a questo nuovo mondo coraggioso.
In un’era in cui l’IA promette di rivoluzionare il nostro modo di vivere e lavorare, la conversazione sulle sue implicazioni per la sicurezza non può essere messa da parte; man mano che ci affidiamo sempre di più all’IA per compiti che vanno dal banale al fondamentale, la domanda non è più solo: “L’IA può potenziare la sicurezza informatica?” (certo!), ma anche “L’IA può essere hackerata?” (sì!), “Si può usare l’IA per hackerare?” (certo!), e “L’IA produrrà software sicuro?” (beh…).
Questo Copilot è stato creato da Cydrill (una società di formazione alla codifica sicura) ed esplora il complesso panorama delle vulnerabilità prodotte dall’IA, con un’attenzione speciale su GitHub Copilot, per sottolineare l’imperativo delle pratiche di codifica sicura nel salvaguardare il nostro futuro digitale.
Il Paradosso della Sicurezza dell’IA
Il salto dell’IA dalla curiosità accademica a una pietra angolare dell’innovazione moderna è avvenuto piuttosto improvvisamente; le sue applicazioni spaziano in una vasta gamma di settori, offrendo soluzioni che un tempo erano materia di fantascienza.
Tuttavia, questo rapido avanzamento e adozione hanno superato lo sviluppo di misure di sicurezza corrispondenti, lasciando sia i sistemi AI che i sistemi creati dall’AI vulnerabili a una varietà di attacchi sofisticati.
Al cuore di molti sistemi AI c’è il machine learning, una tecnologia che si basa su ampi set di dati per “imparare” e prendere decisioni. Ironicamente, la forza dell’IA ossia la sua capacità di elaborare e generalizzare da vaste quantità di dati è anche il suo tallone d’Achille.
Il punto di partenza di “qualsiasi cosa troviamo su Internet” potrebbe non essere il perfetto set di dati di formazione; sfortunatamente, la saggezza delle masse potrebbe non essere sufficiente in questo caso; inoltre, gli hacker, armati delle giuste strumentazioni e conoscenze, possono manipolare questi dati per ingannare l’IA nel prendere decisioni errate o compiere azioni malevole.
Copilot nel mirino
GitHub Copilot, alimentato da Codex di OpenAI, rappresenta una testimonianza del potenziale dell’IA nella codifica ed è stato progettato per migliorare la produttività suggerendo frammenti di codice e persino interi blocchi di codice.
Tuttavia, molteplici studi hanno evidenziato i pericoli di fare affidamento completo su questa tecnologia; è stato dimostrato che una parte significativa del codice generato da Copilot può contenere difetti di sicurezza, inclusa la vulnerabilità a attacchi comuni come l’iniezione SQL e gli overflow di buffer.
Il principio del “spazzatura in, spazzatura fuori” (Garbage in, garbage out oppure GIGO) è particolarmente rilevante qui. I modelli AI, incluso Copilot, vengono addestrati su dati esistenti, e proprio come qualsiasi altro Large Language Model, la maggior parte di questo addestramento è non supervisionato.
Se questi dati di addestramento sono difettosi (cosa molto possibile dato che provengono da progetti open source o grandi siti di domande e risposte come Stack Overflow), l’output, inclusi i suggerimenti di codice, potrebbe ereditare e propagare questi difetti. Nei primi giorni di Copilot, uno studio ha rivelato che circa il 40% dei campioni di codice prodotti da Copilot quando chiamato a completare il codice basandosi su campioni dai Top 25 della CWE erano vulnerabili, sottolineando il principio GIGO e la necessità di una maggiore consapevolezza della sicurezza.
Uno studio su scala più ampia nel 2023 (È GitHub’s Copilot tanto inefficiente quanto gli esseri umani nell’introdurre vulnerabilità nel codice?) ha avuto risultati leggermente migliori, ma ancora lontani dall’essere buoni.
Rimuovendo la linea di codice vulnerabile dagli esempi di vulnerabilità del mondo reale e chiedendo a Copilot di completarla, ha ricreato la vulnerabilità circa 1/3 delle volte e ha corretto la vulnerabilità solo circa 1/4 delle volte; inoltre, si è comportato molto male su vulnerabilità legate alla mancanza di validazione dell’input, producendo codice vulnerabile ogni volta.
Questo evidenzia che l’IA generativa è scarsamente attrezzata per gestire input maliziosi se soluzioni “panacea” per trattare una vulnerabilità (ad es. le istruzioni preparate) non sono disponibili.
Il percorso verso lo sviluppo sicuro di software alimentato da AI
Affrontare le sfide di sicurezza poste dall’IA e strumenti come Copilot richiede un approccio multifattoriale:
- Comprensione delle Vulnerabilità: È essenziale riconoscere che il codice generato dall’IA può essere suscettibile agli stessi tipi di attacchi del software sviluppato “tradizionalmente”.
- Elevare le pratiche di codifica sicura: Gli sviluppatori devono essere formati nelle pratiche di codifica sicura, tenendo conto delle sfumature del codice generato dall’IA; questo implica non solo identificare potenziali vulnerabilità, ma anche comprendere i meccanismi attraverso i quali l’IA suggerisce determinati frammenti di codice, per anticipare e mitigare i rischi in modo efficace.
- Adattare il SDLC: Non è solo tecnologia; anche i processi dovrebbero tenere conto dei sottili cambiamenti che l’IA apporterà. Quando si tratta di Copilot, lo sviluppo del codice è di solito al centro dell’attenzione, ma requisiti, design, manutenzione, test e operazioni possono anche beneficiare dei Large Language Models.
- Vigilanza e miglioramento continui: I sistemi AI, così come gli strumenti che alimentano, sono in continua evoluzione e tenere il passo con questa evoluzione significa essere informati sulle ultime ricerche sulla sicurezza, comprendere le vulnerabilità emergenti e aggiornare di conseguenza le pratiche di sicurezza esistenti.
Navigare l’integrazione di strumenti AI come GitHub Copilot nel processo di sviluppo del software è rischioso e richiede non solo un cambiamento di mentalità, ma anche l’adozione di strategie robuste e soluzioni tecniche per mitigare le vulnerabilità potenziali.
Ecco alcuni consigli pratici progettati per aiutare gli sviluppatori a garantire che il loro utilizzo di Copilot e strumenti simili alimentati dall’IA aumenti la produttività senza compromettere la sicurezza.
Di seguito una piccola “guida” sul come utilizzare uno strumento tanto potente quanto utile.
Implementare la validazione rigorosa dell’input
Implementazione pratica: La programmazione difensiva è sempre al centro della codifica sicura. Quando si accettano suggerimenti di codice da Copilot, specialmente per funzioni che gestiscono input utente, implementare misure di validazione rigorose dell’input.
Definire regole per l’input utente, creare un elenco di consentiti di caratteri ammissibili e formati di dati, e assicurarsi che gli input siano convalidati prima dell’elaborazione e puoi anche chiedere a Copilot di farlo per te; a volte funziona davvero bene!
Gestire le dipendenze in modo sicuro
Implementazione pratica: Copilot potrebbe suggerire di aggiungere dipendenze al tuo progetto, e gli attaccanti potrebbero sfruttarlo per implementare attacchi alla catena di distribuzione tramite “allucinazione di pacchetti”.
Prima di incorporare qualsiasi libreria suggerita, verifica manualmente il loro stato di sicurezza controllando le vulnerabilità conosciute nei database come il National Vulnerability Database (NVD) o effettua un’analisi della composizione del software (SCA) con strumenti come OWASP Dependency-Check o npm audit per progetti Node.js; questi strumenti possono tracciare e gestire automaticamente la sicurezza delle dipendenze.
Condurre regolari valutazioni della sicurezza
Indipendentemente dalla fonte del codice, sia esso generato dall’IA o realizzato a mano, condurre regolari revisioni del codice e test con attenzione alla sicurezza; Combina gli approcci, testa staticamente (SAST) e dinamicamente (DAST), fai un’analisi della composizione del software (SCA). Fai testing manuale e integrato con l’automazione.
Ma ricorda di mettere le persone al di sopra degli strumenti: nessun tool o intelligenza artificiale può sostituire l’intelligenza naturale (umana). Sii quindi graduale!
Per prima cosa, lascia che Copilot scriva i tuoi commenti o registri di debug è già abbastanza bravo in questi ed eventuali errori in questi non influiranno comunque sulla sicurezza del tuo codice; poi, una volta familiarizzato con il suo funzionamento, puoi gradualmente lasciarlo generare sempre più frammenti di codice per la funzionalità effettiva.
Rivedi sempre ciò che offre Copilot
Implementazione pratica: Non accettare mai ciecamente ciò che Copilot suggerisce; ricorda, sei il pilota, e Copilot è “solo” il Copilota! Tu e Copilot potete essere un team molto efficace insieme, ma sei comunque tu a comandare, quindi devi sapere quale codice ci si aspetta e come dovrebbe apparire il risultato finale.
Sperimenta
Implementazione pratica: Prova cose diverse e stimoli (in modalità chat). Cerca di chiedere a Copilot di perfezionare il codice se non sei soddisfatto di quello che hai ottenuto; cerca di capire come “pensa” Copilot in determinate situazioni e realizza i suoi punti di forza e debolezza. Inoltre, Copilot migliora nel tempo e quindi sperimenta continuamente!
Resta informato ed istruito!
Continua ad educare te stesso e il tuo team sulle ultime minacce alla sicurezza e sulle migliori pratiche; segui blog sulla sicurezza, partecipa a webinar e workshop e partecipa a forum dedicati alla codifica sicura.
La conoscenza è uno strumento potente nell’identificare e mitigare potenziali vulnerabilità nel codice, generato dall’IA o meno.
Conclusione
Sì, hai capito bene questo strumento è sempre uno della famiglia dei vari ChatGPT, Gemini o chicchessia, con la differenza ce è strutturato al 100% per la programmazione.
L’importanza delle pratiche di codifica sicura non è mai stata così importante mentre navighiamo nelle acque inesplorate del codice generato dall’IA.
Strumenti come GitHub Copilot presentano significative opportunità di crescita e miglioramento, ma anche particolari sfide quando si tratta della sicurezza del tuo codice; solo comprendendo questi rischi si può conciliare con successo l’efficacia con la sicurezza e mantenere protette la nostra infrastruttura e i nostri dati.
In questo viaggio, Cydrill rimane impegnata nell’empowerment degli sviluppatori con la conoscenza e gli strumenti necessari per costruire un futuro digitale più sicuro.
Il percorso di apprendimento misto di Cydrill fornisce formazione nella codifica sicura proattiva ed efficace per sviluppatori di aziende Fortune 500 di tutto il mondo.
Combinando formazione condotta da istruttori, e-learning, laboratori pratici e gamification, Cydrill fornisce un approccio nuovo ed efficace per imparare a codificare in modo sicuro.