ARQ: Agentic CodeQL Query Refinement for C/C++ Vulnerability Detection
ARQ è un framework agentico che perfeziona automaticamente le query CodeQL per C/C++ utilizzando prove basate sull'esecuzione derivanti da programmi sintetizzati e LLM per ridurre significativamente i falsi positivi e i falsi negativi senza richiedere dataset etichettati, ottenendo fino al 119,8% in più di rilevamenti di veri positivi e risolvendo problemi di lunga data nei repository ufficiali.
Articolo originale dedicato al pubblico dominio sotto CC0 1.0 (http://creativecommons.org/publicdomain/zero/1.0/). Questa è una spiegazione generata dall'IA dell'articolo qui sotto. Non è stata scritta né approvata dagli autori. Per precisione tecnica, consulta l'articolo originale. Leggi il disclaimer completo
I software che fanno funzionare i nostri computer, i nostri telefoni e le nostre auto sono spesso costruiti con linguaggi come il C e il C++. Questi strumenti offrono ai programmatori un controllo preciso su come una macchina utilizza la propria memoria, ma lo stesso potere rende facile commettere errori. Un piccolo errore nel modo in cui un programma gestisce la memoria può lasciare una porta aperta agli attaccanti per mandare in crash i sistemi o rubare dati. Per individuare questi errori prima che causino danni, gli esperti di sicurezza utilizzano scanner automatizzati che leggono il codice e cercano modelli pericolosi. Questi scanner si basano su un insieme di regole, scritte da esseri umani, che dicono loro esattamente cosa sia un pezzo di codice vulnerabile. Se le regole sono troppo rigide, lo scanner perde pericoli reali; se sono troppo permissive, segnalano problemi che non esistono, sprecando tempo e fiducia.
Per anni, migliorare queste regole è stato un lavoro lento e manuale. Gli esperti devono leggere il codice, ipotizzare dove lo scanner potrebbe fallire e riscrivere le regole a mano. Questo processo è difficile perché le regole devono essere perfette, e il codice che scansionano è vasto e complesso. Un nuovo approccio chiamato ARQ cambia il modo in cui questo lavoro viene svolto. Invece di fare affidamento esclusivamente sull'intuizione umana, ARQ utilizza l'intelligenza artificiale per testare e correggere queste regole automaticamente. Non si limita a indovinare; esegue il codice che crea per vedere se le regole funzionano effettivamente. Costruendo un ciclo in cui il sistema genera programmi di test, li esegue e poi usa i risultati per migliorare le regole, ARQ trova e corregge errori che gli esseri umani hanno mancato per anni.
I ricercatori dietro ARQ sono partiti da un'idea semplice ma potente: una regola è valida solo quanto la sua capacità di distinguere tra codice sicuro e codice pericoloso. Hanno dato a un'intelligenza artificiale una regola specifica proveniente da uno scanner di sicurezza popolare e le hanno chiesto di creare due programmi molto simili. Un programma era progettato per essere sicuro, e l'altro per essere pericoloso. L'IA ha poi osservato come reagiva lo scanner a entrambi. Se lo scanner segnalava il programma sicuro come pericoloso, la regola era troppo permissiva. Se mancava il programma pericoloso, la regola era troppo rigida. Questa discrepanza tra ciò che diceva lo scanner e ciò che accadeva realmente quando il codice veniva eseguito è diventata l'evidenza di cui l'IA aveva bisogno per correggere la regola.
Per garantire che l'IA non stesse solo tirando a indovinare, il sistema ha utilizzato uno strumento speciale chiamato "sanitizer" (sanificatore). Questo strumento agisce come un sensore ad alta precisione che osserva un programma mentre è in esecuzione. Se il programma tenta di fare qualcosa di non sicuro, come utilizzare memoria che è già stata liberata, il sanitizer interrompe il programma e segnala l'errore immediatamente. Questo ha fornito ai ricercatori una verità fondamentale (ground truth). Potevano confrontare il verdetto dello scanner con il rapporto del sanitizer. Se lo scanner diceva che un programma era sicuro, ma il sanitizer trovava un crash, i ricercatori sapevano che lo scanner aveva commesso un errore. L'IA ha quindi usato questo errore confermato per riscrivere la regola, rendendola più intelligente.
Questo processo avveniva in un ciclo continuo. L'IA generava una nuova coppia di programmi di test, li eseguiva, controllava i risultati e perfezionava nuovamente la regola. Fondamentalmente, ogni volta che la regola cambiava, il sistema la testava nuovamente contro tutti gli esempi precedenti per garantire che la correzione non rompesse nulla che stava già funzionando. Ciò ha impedito all'IA di sovra-correggere e di creare nuovi problemi mentre risolveva quelli vecchi. Il team ha testato questo metodo su dodici diverse regole di sicurezza utilizzate in software reali. Hanno eseguito queste regole contro due grandi collezioni di codice progettate per testare gli strumenti di sicurezza. I risultati hanno mostrato che le regole perfezionate dall'IA trovavano significativamente più vulnerabilità reali rispetto alle originali scritte da umani. In alcuni casi, il numero di minacce rilevate è più che raddoppiato, mentre il tasso di falsi allarmi è rimasto estremamente basso, mantenendo un'accuratezza superiore al novantotto percento.
L'impatto di questo lavoro è andato oltre i dati di test. I ricercatori hanno applicato le loro regole perfezionate a librerie software reali e ampiamente utilizzate che alimentano gran parte di Internet, come strumenti per la compressione dei dati e la visualizzazione di immagini. Le regole migliorate hanno scoperto due bug che si nascondevano in queste librerie da anni, in attesa di essere trovati. Inoltre, il sistema ha risolto con successo tre problemi specifici che erano stati segnalati su un repository di software pubblico ma che erano rimasti irrisolti per ventisette mesi. Questi problemi avevano messo in difficoltà gli esperti umani per oltre due anni, eppure il sistema automatizzato li ha risolti testando e regolando sistematicamente le regole di rilevamento.
Questo approccio suggerisce un nuovo modo per mantenere la sicurezza della nostra infrastruttura digitale. Invece di aspettare che gli esseri umani trovino una falla e scrivano manualmente una correzione, i sistemi possono ora testare continuamente le proprie regole rispetto all'esecuzione reale. Il metodo non richiede enormi database di errori etichettati o anni di dati storici per funzionare. Richiede semplicemente la capacità di eseguire il codice e controllare i risultati. Radicando l'intelligenza artificiale nella realtà di come i programmi si comportano effettivamente, piuttosto che solo in come appaiono sulla carta, i ricercatori hanno creato uno strumento che può mantenere gli scanner di sicurezza affilati ed efficaci man mano che il software evolve. Il lavoro dimostra che quando l'intelligenza artificiale è accoppiata con prove concrete derivanti dall'esecuzione del codice, può risolvere problemi ingegneristici complessi che hanno resistito a lungo allo sforzo umano.
Sommerso dagli articoli nel tuo campo?
Ricevi digest giornalieri degli articoli più recenti corrispondenti alle tue parole chiave di ricerca — con riassunti tecnici, nella tua lingua.