Presentazione di CodeMender: un agente AI per la sicurezza del codice

 | Intelligenza-Artificiale

Responsabilità e sicurezza

Pubblicato
Autori

Raluca Ada Popa e quattro flynn

Una curva a nastro blu e rosa luccicante e pixelata su uno sfondo azzurro. Il nastro sembra essere fatto di singoli quadrati, con alcuni dei quadrati rosa vicino al centro che si staccano e si distinguono, suggerendo un processo dinamico di cambiamento o riparazione.

Utilizzo dell’intelligenza artificiale avanzata per correggere le vulnerabilità del software critico

Oggi condividiamo i primi risultati della nostra ricerca su CodeMender, un nuovo agente basato sull’intelligenza artificiale che migliora automaticamente la sicurezza del codice.

Le vulnerabilità del software sono notoriamente difficili e richiedono molto tempo per gli sviluppatori da trovare e fissare, anche con metodi tradizionali e automatizzati come il fuzzing. I nostri sforzi basati sull’intelligenza artificiale come Grande sonno E Oss-fuzz hanno dimostrato la capacità di AI di trovare nuove vulnerabilità a zero giorni in software ben testato. Man mano che otteniamo più scoperte nella scoperta di vulnerabilità basata sull’intelligenza artificiale, diventerà sempre più difficile solo per gli umani tenere il passo.

CodeMender aiuta a risolvere questo problema adottando un approccio completo alla sicurezza del codice che sia sia reattivo, patching istantaneamente nuove vulnerabilità e proattivo, riscrivendo e proteggendo il codice esistente ed eliminando intere classi di vulnerabilità nel processo. Negli ultimi sei mesi in cui abbiamo costruito CodeMender, abbiamo già aumentato 72 correzioni di sicurezza per progetti open source, tra cui alcuni di 4,5 milioni di righe di codice.

Creando e applicando automaticamente patch di sicurezza di alta qualità, l’agente alimentato dall’intelligenza artificiale di CodeMender aiuta gli sviluppatori e i manutentori a concentrarsi su ciò che fanno meglio: costruire un buon software.

CodeMender in azione

CodeMender opera sfruttando le capacità di pensiero di recente Gemelli DEEP pensa Modelli per produrre un agente autonomo in grado di debug e fissare vulnerabilità complesse.

Per fare ciò, l’agente CodeMender è dotato di strumenti robusti che gli consentono di ragionare sul codice prima di apportare modifiche e convalidare automaticamente tali modifiche per assicurarsi che siano corrette e non causano regressioni.

Animazione che mostra il processo di CodeMender per la fissazione delle vulnerabilità.

Mentre i modelli di grandi dimensioni stanno rapidamente migliorando, gli errori nella sicurezza del codice potrebbero essere costosi. Il processo di convalida automatica di CodeMender garantisce che le modifiche al codice siano corrette in molte dimensioni emergendo solo per le patch di alta qualità di revisione umana che, ad esempio, risolvono la causa principale del problema, sono funzionalmente corrette, non si possono regressioni e seguono le linee guida di stile.

Come parte della nostra ricerca, abbiamo anche sviluppato nuove tecniche e strumenti che consentono a CodeMender di ragionare il codice e convalidare le modifiche in modo più efficace. Questo include:

  • Analisi avanzata del programma: Abbiamo sviluppato strumenti basati su analisi del programma avanzate che includono analisi statiche, analisi dinamiche, test differenziali, fuzzing e solutori SMT. Utilizzando questi strumenti per esaminare sistematicamente i modelli di codice, il flusso di controllo e il flusso di dati, CodeMender può identificare meglio le cause della radice dei difetti di sicurezza e delle debolezze architettoniche.
  • Sistemi multi-agente: Abbiamo sviluppato agenti per scopi speciali che consentono a CodeMender di affrontare aspetti specifici di un problema sottostante. Ad esempio, CodeMender utilizza uno strumento di critica basato su modelli di linguaggio di grandi dimensioni che evidenzia le differenze tra il codice originale e modificato al fine di verificare che le modifiche proposte non introdurino regressioni e siano auto-corretti se necessario.

Fissaggio delle vulnerabilità

Per correggere efficacemente una vulnerabilità e impedirgli di riemergere, il codice Mender utilizza un debugger, un browser di codice sorgente e altri strumenti per individuare le cause del root e ideare le patch. Abbiamo aggiunto due esempi di codeMender patching vulnerabilità nel video giostre di seguito.

Esempio n. 1: identificare la causa principale di una vulnerabilità

Ecco uno snippet del ragionamento dell’agente sulla causa principale di una patch generata da CodeMender, dopo aver analizzato i risultati dell’output del debugger e uno strumento di ricerca del codice.

Sebbene la patch finale in questo esempio abbia cambiato solo poche righe di codice, la causa principale della vulnerabilità non è stata immediatamente chiara. In questo caso, il rapporto sugli incidenti ha mostrato un overflow del buffer heap, ma il problema reale era altrove: una gestione errata dello stack di elementi di lingua di markup estensibile (XML) durante l’analisi.

Esempio n. 2: l’agente è in grado di creare patch non banali

In questo esempio, l’agente CodeMender è stato in grado di elaborare una patch non banale che si occupa di un problema di vita complesso.

L’agente non è stato solo in grado di capire la causa principale della vulnerabilità, ma è stato anche in grado di modificare un sistema completamente personalizzato per la generazione di codice C all’interno del progetto.

Riscrivere in modo proattivo il codice esistente per una migliore sicurezza

Abbiamo anche progettato CodeMender per riscrivere in modo proattivo il codice esistente per utilizzare strutture di dati e API più sicure.

Ad esempio, abbiamo distribuito CodeMender per applicare -fbounds-shaty Annotazioni a parti di una libreria di compressione di immagine ampiamente utilizzata chiamata libwebp. Quando -fbounds-shaty Vengono applicate le annotazioni, il compilatore aggiunge i controlli dei limiti al codice per impedire a un utente malintenzionato di sfruttare un overflow del buffer o underflow per eseguire il codice arbitrario.

Alcuni anni fa, una vulnerabilità di overflow con tampone heap in libwebp (CVE-2023-4863) è stato usato da un attore di minaccia come parte di un exploit iOS a zero clic. Con -fbounds-shaty Annotazioni, questa vulnerabilità, insieme alla maggior parte degli altri overflow buffer nel progetto in cui abbiamo applicato annotazioni, sarebbero state rese insultibili per sempre.

Nel video giostre di seguito mostriamo esempi del processo decisionale dell’agente, comprese le fasi di convalida.

Esempio n. 1: fasi di ragionamento dell’agente

In questo esempio, all’agente CodeMender viene chiesto di affrontare quanto segue -fbounds-shaty errore su bit_depths Pointer:

Esempio n. 2: agente corregge automaticamente gli errori e i guasti del test

Un’altra delle caratteristiche chiave di CodeMender è la sua capacità di correggere automaticamente nuovi errori e qualsiasi errore di test derivante dalle proprie annotazioni. Ecco un esempio del recupero dell’agente da un errore di compilazione.

Esempio n. 3: l’agente convalida le modifiche

In questo esempio, l’agente CodeMender modifica una funzione e quindi utilizza lo strumento di giudice LLM configurato per l’equivalenza funzionale per verificare che la funzionalità rimanga intatta. Quando lo strumento rileva un fallimento, l’agente si auto-corregge in base al feedback del giudice LLM.

Rendere il software sicuro per tutti

Mentre i nostri primi risultati con CodeMender sono promettenti, stiamo adottando un approccio cauto, concentrandoci sull’affidabilità. Attualmente, tutte le patch generate da CodeMender sono riviste dai ricercatori umani prima di essere inviati a monte.

Usando CodeMender, abbiamo già iniziato a presentare patch a varie librerie open source critiche, molte delle quali sono già state accettate e estese. Stiamo gradualmente aumentando questo processo per garantire la qualità e affrontare sistematicamente il feedback dalla comunità open source.

Rivolderemo anche gradualmente ai manutentori interessati di progetti open source critici con patch generati da CodeMender. Iterato al feedback da questo processo, speriamo di rilasciare CodeMender come strumento che può essere utilizzato da tutti gli sviluppatori di software per mantenere sicure le loro basi di codice.

Avremo una serie di tecniche e risultati da condividere, che intendiamo pubblicare come documenti e rapporti tecnici nei prossimi mesi. Con CodeMender, abbiamo appena iniziato a esplorare l’incredibile potenziale di AI per migliorare la sicurezza del software per tutti.

Riconoscimenti

Crediti (elencati in ordine alfabetico):

Alex Rebert, Arman Hasanzadeh, Carlo Lemos, Charles Sutton, Dongge Liu, Gogul Balakrishnan, Hiep Chu, James Zern, Koushik Sen, Lihao Liang, Max Shavrick, Oliver Chang e Petros Maniatis.

Fonte: deepmind.google

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *