Valutare i modelli linguistici per la rilevazione delle vulnerabilità in Java
Questo report valuta ChatGPT e GPT-3 nel trovare vulnerabilità nel codice Java.
― 5 leggere min
Indice
Negli ultimi anni, modelli di linguaggio grandi come ChatGPT e GPT-3 hanno attirato molto interesse per la loro capacità di capire il codice e aiutare con i compiti di programmazione. Questo report valuta quanto bene questi modelli riescano a trovare debolezze di sicurezza, conosciute come Vulnerabilità, nel codice Java.
Contesto
La rilevazione delle vulnerabilità è un compito importante nello sviluppo software. Aiuta a identificare potenziali problemi di sicurezza nel codice che potrebbero essere sfruttati dagli attaccanti. Tradizionalmente, gli sviluppatori si sono affidati a vari strumenti per trovare queste vulnerabilità. Alcuni studi precedenti hanno dimostrato che modelli come GPT-3 si comportano bene nei compiti di codifica. Tuttavia, resta da vedere se questi modelli possano effettivamente rilevare vulnerabilità nel codice reale.
Scopo dello Studio
Questo report ha l'obiettivo di rispondere se modelli come ChatGPT e GPT-3 possono aiutare a rilevare vulnerabilità nel codice Java. L'attenzione è su quanto accuratamente questi modelli riescano a identificare il codice che contiene potenziali rischi di sicurezza.
Approccio alla Ricerca
Per valutare ChatGPT e GPT-3, è stato creato un dataset utilizzando file Java provenienti da GitHub. Questo dataset include sia codice vulnerabile che corretto. Il codice vulnerabile contiene problemi di sicurezza noti, mentre il codice corretto ha avuto delle riparazioni applicate. La valutazione è stata svolta attraverso vari compiti:
- Classificazione Binaria: Identifica se un determinato pezzo di codice è vulnerabile o meno.
- Classificazione Multilabel: Determina quali tipi di vulnerabilità sono presenti nel codice.
Raccolta del Dataset
Il dataset è stato raccolto con attenzione. Era composto da file Java presi da repository aperti su GitHub. Esperti del settore hanno selezionato manualmente i file noti per contenere vulnerabilità. Le versioni corrette sono state create applicando specifiche riparazioni al codice vulnerabile. I dati comprendevano vari tipi di vulnerabilità della Common Weakness Enumeration (CWE).
Preprocessing dei Dati
I dati raccolti sono stati preparati per l'analisi:
Per la Classificazione Binaria: È stato selezionato un sottoinsieme di file in cui era stata modificata solo una funzione. Un totale di 308 campioni è stato utilizzato in questo compito.
Per la Classificazione Multilabel: Il dataset è stato ristretto ai primi cinque tipi di vulnerabilità. Sono stati utilizzati sessanta campioni vulnerabili e sessanta campioni corretti per l'analisi.
Utilizzo dell'API dei Modelli
La valutazione ha utilizzato due modelli specifici della famiglia GPT-3: il modello Davinci e il modello GPT-3.5-turbo. È stata utilizzata l'API di OpenAI per inviare richieste a questi modelli, chiedendo loro se determinate funzioni Java contenessero vulnerabilità. L'obiettivo era ricevere risposte chiare "Sì" o "No".
Metodologia di Valutazione
Nella valutazione, sono state utilizzate diverse metriche per valutare le prestazioni dei modelli:
- Accuratezza: Misura quanti campioni sono stati classificati correttamente.
- Precisione: Indica quanti delle vulnerabilità previste erano effettivamente corrette.
- Richiamo: Mostra quanti delle vulnerabilità reali sono state identificate correttamente dal modello.
- F1 Score: Combina precisione e richiamo in una singola metrica.
- AUC: Valuta le prestazioni del modello in compiti di classificazione binaria.
Confronto dei Modelli
Per fornire un contesto, le prestazioni di GPT-3 e ChatGPT sono state confrontate con un modello di base, che semplicemente prevedeva etichette in base alla distribuzione nel dataset. Questo ha permesso di capire meglio quanto bene si siano comportati i modelli.
Risultati della Valutazione
Classificazione Binaria
Durante il compito di classificazione binaria, i risultati hanno mostrato che mentre entrambi i modelli GPT hanno ottenuto un richiamo e F1 score più alti rispetto al modello di base, hanno comunque avuto difficoltà a distinguere tra codice vulnerabile e non vulnerabile. Il punteggio AUC indicava che le loro prestazioni non erano migliori di un'ipotesi casuale. Questo significa che i modelli tendevano a etichettare erroneamente molti codici non vulnerabili come vulnerabili, risultando in un'alta percentuale di falsi positivi.
Classificazione Multilabel
Nel compito di classificazione multilabel, entrambi i modelli hanno raggiunto un'accuratezza solo del 38%. Tuttavia, questo numero è un po' fuorviante. Quando si è analizzata la prestazione solo sui codici vulnerabili, i modelli non si sono comportati bene. Interessantemente, i modelli erano più accurati nell'identificare funzioni corrette che erano state riparate, piuttosto che nel considerare le vulnerabilità iniziali. Questo potrebbe indicare un bias nel modo in cui i modelli sono stati addestrati o un effetto casuale dovuto alla dimensione del campione utilizzato.
Limitazioni e Minacce alla Validità
Sono state notate diverse limitazioni in questo studio:
- Dimensione del Campione Piccola: Il numero limitato di campioni potrebbe aver influito sull'affidabilità dei risultati.
- Uso di un Solo Modello: L'uso di un solo modello per la rilevazione potrebbe trascurare altri approcci potenziali che potrebbero offrire risultati migliori.
- Scelte dei Prompt: I prompt specifici utilizzati durante l'addestramento e la valutazione potrebbero limitare le prestazioni dei modelli. Prompt diversi potrebbero dare risultati diversi.
- Selezione Manuale del Codice Vulnerabile: La dipendenza da esperti umani per selezionare le vulnerabilità potrebbe introdurre bias, poiché alcune vulnerabilità potrebbero essere state perse o etichettate in modo errato.
Conclusione
I risultati indicano che mentre ChatGPT e GPT-3 sono modelli capaci per vari compiti di codifica, la loro efficacia nella rilevazione delle vulnerabilità è attualmente limitata. Non si sono comportati bene nell'identificare vulnerabilità nel codice Java valutato. Anche se i modelli di linguaggio grandi hanno mostrato successo in molte altre aree, la loro applicazione nella rilevazione delle vulnerabilità richiede ulteriori ricerche e sviluppi.
Studi futuri potrebbero concentrarsi sul miglioramento dei modelli attraverso diversi metodi di addestramento, incluso l'uso di tecniche di "chain-of-thought", che potrebbero migliorare le loro capacità di ragionamento. Inoltre, testare modelli più recenti come GPT-4 potrebbe fornire ulteriori approfondimenti su come questi strumenti possano aiutare con la rilevazione delle vulnerabilità.
In sintesi, mentre c'è potenziale per i modelli di linguaggio in quest'area, c'è ancora molto da fare prima che diventino strumenti affidabili per rilevare le vulnerabilità nel codice. Ulteriori esplorazioni e affinamenti sono necessari per sbloccare le loro piene capacità.
Titolo: Evaluation of ChatGPT Model for Vulnerability Detection
Estratto: In this technical report, we evaluated the performance of the ChatGPT and GPT-3 models for the task of vulnerability detection in code. Our evaluation was conducted on our real-world dataset, using binary and multi-label classification tasks on CWE vulnerabilities. We decided to evaluate the model because it has shown good performance on other code-based tasks, such as solving programming challenges and understanding code at a high level. However, we found that the ChatGPT model performed no better than a dummy classifier for both binary and multi-label classification tasks for code vulnerability detection.
Autori: Anton Cheshkov, Pavel Zadorozhny, Rodion Levichev
Ultimo aggiornamento: 2023-04-12 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2304.07232
Fonte PDF: https://arxiv.org/pdf/2304.07232
Licenza: https://creativecommons.org/licenses/by/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.