Anche se i modelli linguistici di grandi dimensioni stanno migliorando rapidamente, gli errori nella sicurezza del codice potrebbero costare caro. Il processo di convalida automatica di CodeMender garantisce che le modifiche al codice siano corrette in molte dimensioni, facendo emergere solo patch di alta qualità per la revisione umana che, ad esempio, risolvono la causa principale del problema, sono funzionalmente corrette, non causano regressioni e seguono le linee guida di stile.
Nell’ambito della nostra ricerca, abbiamo anche sviluppato nuove tecniche e strumenti che consentono a CodeMender di ragionare sul codice e convalidare le modifiche in modo più efficace. Ciò include:
- Analisi avanzata del programma: Abbiamo sviluppato strumenti basati sull’analisi avanzata dei programmi che includono analisi statica, analisi dinamica, 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 profonde dei difetti di sicurezza e delle debolezze dell’architettura.
- Sistemi multi-agente: Abbiamo sviluppato agenti speciali che consentono a CodeMender di affrontare aspetti specifici di un problema di fondo. Ad esempio, CodeMender utilizza un ampio strumento di critica basato su modelli linguistici che evidenzia le differenze tra il codice originale e quello modificato al fine di verificare che le modifiche proposte non introducano regressioni e si autocorreggano se necessario.
Correzione delle vulnerabilità
Per correggere efficacemente una vulnerabilità e impedire che si ripresenti, Code Mender utilizza un debugger, un browser del codice sorgente e altri strumenti per individuare le cause principali e ideare patch. Abbiamo aggiunto due esempi di vulnerabilità di CodeMender nel carosello video riportato di seguito.
Esempio n. 1: identificare la causa principale di una vulnerabilità
Ecco un frammento 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 di questo esempio abbia modificato solo poche righe di codice, la causa principale della vulnerabilità non è stata immediatamente chiara. In questo caso, il rapporto sull’arresto anomalo mostrava un overflow del buffer dell’heap, ma il problema reale era altrove: una gestione errata dello stack di elementi Extensible Markup Language (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 creare una patch non banale che affronta un problema complesso relativo alla durata dell’oggetto.
L’agente non solo è riuscito a individuare la causa principale della vulnerabilità, ma è anche riuscito a modificare un sistema completamente personalizzato per la generazione di codice C all’interno del progetto.
Fonte: deepmind.google
