Sviluppare framework di test per le librerie crittografiche
Un nuovo framework migliora l'efficienza dei test e la rilevazione dei bug nelle librerie crittografiche.
― 8 leggere min
Indice
- Sfide nel Testing
- Protocollo di Validazione Crittografica Automatica (ACVP)
- Contributi di Questo Lavoro
- Lavori Correlati
- Introduzione al Framework di Generazione Test ACVP
- Approccio di Fuzzing Ibrido
- Miglioramento della Copertura dei Test NSS
- Scoperta di Bug in NSS
- Analisi del Miglioramento della Copertura
- Suggerimenti per Migliorare il Formato dei Vettori di Test ACVP
- Conclusione
- Fonte originale
- Link di riferimento
Testare il software in modo approfondito è fondamentale per assicurarsi che funzioni correttamente, soprattutto nelle librerie crittografiche che gestiscono informazioni sensibili. Gli errori umani possono spesso causare problemi nel software, come programmi che non controllano correttamente le dimensioni degli input. Questo può creare vulnerabilità, permettendo accessi non desiderati. Anche se molti linguaggi di programmazione offrono soluzioni a questi problemi, le prestazioni sono cruciali nella scrittura di software crittografico. Perciò, i programmatori usano spesso linguaggi di basso livello come C o C++.
Un modo per garantire la correttezza del codice di basso livello è attraverso il testing automatico, che verifica l'esecuzione del programma senza intervento umano, risparmiando tempo e denaro. I test automatici presentano varie sfide, e l’idea è fornire input al programma per vedere se produce i risultati attesi.
Sfide nel Testing
La copertura è un fattore importante nel testing; misura quanto a fondo un programma è stato testato e identifica eventuali aree che potrebbero rimanere non testate. Il Fuzz Testing, o fuzzing, è una forma di testing automatico che esegue il software target con input casuali per trovare errori.
Negli ultimi anni, è emerso un tipo di fuzzing chiamato fuzzing grey-box basato sulla copertura (CGF). Questa tecnica migliora il processo di testing aggiungendo marcatori speciali nel codice, che aiutano a raccogliere dati su quanto del programma viene eseguito. Man mano che si raccolgono più feedback, il metodo usa questi dati per identificare quali input cambiare per massimizzare la copertura.
Tuttavia, raggiungere obiettivi di copertura complessi può richiedere molte risorse. Per affrontare questo, i ricercatori hanno esplorato metodi diversi, come l'uso di supporto hardware o l'esecuzione simbolica.
Protocollo di Validazione Crittografica Automatica (ACVP)
Nel 1995, è stato avviato un programma per validare i moduli crittografici, assicurandosi che funzionassero come previsto. La necessità di cicli di testing più rapidi ha portato allo sviluppo del Protocollo di Validazione Crittografica Automatica (ACVP). Questo protocollo consente il testing automatico di software o moduli hardware crittografici. Include un formato universale per i dati di test, rendendo più facile l'uso.
L'ACVP coinvolge tre componenti principali: un server, un proxy e un client. Il server gestisce le richieste per i dati di test e la validazione, mentre il proxy si collega a sistemi offline per trasmettere informazioni. Il client comunica direttamente con il sistema sottoposto a test.
I test ACVP coprono vari primitivi crittografici e i test sono raggruppati in set. Ogni set contiene informazioni sull'algoritmo, specifiche revisionate e una serie di test che dettagliano cosa deve essere eseguito. Il modulo in esame deve rispondere a ciascun set con un risultato strutturato.
Contributi di Questo Lavoro
Questa ricerca si concentra sulla creazione di un sistema completo per generare test per librerie crittografiche. Questo sistema fornisce un formato semplice, leggibile per gli esseri umani e flessibile. Diversi strumenti si interfacciano con l'ACVP, ma molti sono codificati in C, portando a complessità e mancanza di estensibilità.
Per migliorare questo, è stata sviluppata una nuova libreria utilizzando Rust, nota per il suo forte typing e l'attenzione alla sicurezza. Il progetto include:
- Un framework software per produrre ed eseguire set di test per librerie crittografiche.
- Un metodo che sfrutta l'assistenza umana per migliorare la generazione di vettori di test.
- Suggerimenti per miglioramenti al formato ACVP, insieme a nuove specifiche.
I test estesi hanno rivelato bug precedentemente nascosti nella libreria crittografica NSS di Mozilla, confermando che il framework sviluppato aiuta a rilevare bug.
Lavori Correlati
Il fuzzing è un campo in continua evoluzione. Molti fuzzers guidati dalla copertura maturi competono per migliori prestazioni. Ecco alcuni esempi:
AFL++: Uno strumento open-source costruito su versioni precedenti di AFL. Utilizza feedback dal codice eseguito per mutare gli input e punta a una migliore copertura. Tuttavia, può avere difficoltà con software crittografico complesso a causa della generazione di input casuali.
LibFuzzer: Integrato nel framework del compilatore LLVM, questo strumento esegue fuzzing consapevole della struttura. Sebbene generi test completi, affronta anche delle sfide, specialmente nel soddisfare condizioni specifiche delle implementazioni crittografiche.
Fuzztruction: Questo metodo migliora gli output modificando il programma che li produce. Tuttavia, richiede l'esistenza del programma originale.
Carpetfuzz: Questo strumento utilizza il processamento del linguaggio naturale per creare input dalla documentazione, anche se dipende fortemente dalla presenza di documentazione pertinente.
Introduzione al Framework di Generazione Test ACVP
L'ACVP fornisce un formato di test universale, ma c'è una chiara necessità di software che possa facilmente adattarlo a varie librerie crittografiche. Il nuovo framework consente di generare test con fuzzing, utilizzando feedback per validare le librerie.
Il framework è composto da due parti principali:
- Runners: Questi adattatori si connettono a librerie di terze parti, fornendo un'interfaccia comune.
- Libreria: Questa logica condivisa gestisce l'analisi dei test ACVP e coordina con i runners.
Gli utenti possono eseguire test su un runner per validare un modulo o eseguire fuzzing per rilevare problemi, migliorando così il processo di testing per qualsiasi libreria compilata con LLVM.
Approccio di Fuzzing Ibrido
Il fuzzing è efficace per scoprire errori da input inaspettati, tuttavia, può avere difficoltà a produrre copertura approfondita poiché molti input vengono scartati in anticipo. Questa ricerca implementa un fuzzing ibrido, combinando un fuzzer di mutazione di base con un traduttore di casi di test. Questo approccio aiuta a produrre gli input necessari che soddisfano condizioni specifiche.
Implementando il fuzzing ibrido, il sistema lavora per trovare input profondi, mentre il coinvolgimento umano aiuta a navigare parti difficili. Di conseguenza, i set di test generati possono essere applicati ad altre librerie, rendendo il processo efficiente su diverse piattaforme.
Miglioramento della Copertura dei Test NSS
La libreria NSS, utilizzata da varie applicazioni, è stata sottoposta a test per garantire che le modifiche al codice non compromettano la crittografia. Sebbene la libreria abbia superato numerosi test, sono stati implementati ulteriori miglioramenti basati su questo lavoro.
Sviluppando un runner per NSS, sono stati introdotti controlli aggiuntivi, assicurando che tutti gli angoli del codice siano testati adeguatamente. Lo sforzo mira a coprire più aspetti della crittografia, inclusa la generazione di firme e la popolazione di chiavi.
Scoperta di Bug in NSS
Mentre migliorava i test di NSS, sono stati scoperti bug che erano precedentemente non rilevati. Ad esempio, sono sorti problemi relativi alle operazioni RSA, portando a un accesso improprio alla memoria. Anche se questi bug non sono stati sfruttati nel software esistente, evidenziano la necessità di casi di test diversificati per coprire vari scenari critici.
I bug trovati durante il testing sottolineano l'importanza di includere una vasta gamma di casi di test per mettere in sicurezza il software contro potenziali vulnerabilità. La metodologia fornita dal fuzzing ibrido consente ai ricercatori di coprire aree difficili che il testing tradizionale potrebbe perdere.
Analisi del Miglioramento della Copertura
Misurare la copertura di solito comporta esaminare la percentuale di codice coperto durante il testing. La focalizzazione non è solo su quanto codice è stato testato, ma anche sul numero di problemi che sono stati scoperti o prevenuti. I test coinvolti in questa ricerca hanno mostrato notevoli miglioramenti in termini di copertura.
Il metodo ibrido consente al processo di testing di esplorare aree del codice che sono spesso difficili da raggiungere. I risultati dimostrano che il framework aumenta non solo la copertura, ma migliora anche la qualità complessiva del fuzzing, portando a una scoperta più efficace di potenziali problemi.
Suggerimenti per Migliorare il Formato dei Vettori di Test ACVP
Basandosi sui risultati del processo di testing, sono state fatte raccomandazioni per migliorare il formato di test ACVP. Queste includono:
- Introdurre strutture più chiare per una più facile analisi e lavorazione.
- Semplificare la creazione di test consentendo la condivisione di dati tra i gruppi di test.
Questi cambiamenti mirano a migliorare l'usabilità complessiva del sistema ACVP, rendendolo più semplice per gli sviluppatori implementare test legati alla crittografia.
Conclusione
In sintesi, è stato sviluppato un nuovo framework software per analizzare efficacemente le librerie crittografiche. L'obiettivo principale di questa iniziativa è identificare potenziali bug all'interno del codice. Test estesi hanno dimostrato che questo approccio produce test efficienti e riutilizzabili tra varie librerie. Inoltre, l'applicazione riuscita del framework sulla libreria NSS illustra la sua efficacia nel rilevare vulnerabilità.
Questo progetto evidenzia l'importanza di test accurati e la necessità di casi di test diversificati per coprire sia le condizioni standard che quelle critiche. Andando avanti, ci sono molte opportunità per espandere questo lavoro, inclusa la sviluppo di nuove specifiche e l'automazione di più del processo di testing.
Il supporto per la scienza aperta e la ricerca riproducibile è alla base di questi sforzi, con l'obiettivo di permettere ad altri ricercatori di trarre vantaggio dai risultati e dagli strumenti sviluppati in questo lavoro.
Titolo: Point Intervention: Improving ACVP Test Vector Generation Through Human Assisted Fuzzing
Estratto: Automated Cryptographic Validation Protocol (ACVP) is an existing protocol that is used to validate a software or hardware cryptographic module automatically. In this work, we present a system providing the method and tools to produce well-covering tests in ACVP format for cryptographic libraries. The system achieves better coverage than existing fuzzing methods by using a hybrid approach to fuzzing cryptographic primitives. In addition, the system offers a framework that allows to creates easily and securely create testing modules for cryptographic libraries. The work demonstrates how this system has been used to improve automated testing of NSS (Network Security Services), a popular cryptographic library, detect its vulnerabilities and suggest ways to improve and further develop the ACVP test format.
Autori: Iaroslav Gridin, Antonis Michalas
Ultimo aggiornamento: 2024-07-11 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2407.08535
Fonte PDF: https://arxiv.org/pdf/2407.08535
Licenza: https://creativecommons.org/licenses/by-sa/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.
Link di riferimento
- https://firefox-source-docs.mozilla.org/security/nss/index.html
- https://anonymous.4open.science/r/acvpframe/
- https://gitlab.com/nisec/acvp-rust
- https://www.rdocumentation.org/packages/exomePeak/versions/2.6.0/topics/bltest
- https://searchfox.org/nss/source/cmd/bltest/tests/sha256
- https://searchfox.org/nss/source/cmd/bltest/tests/aes_gcm
- https://searchfox.org/nss/source/cmd/bltest/tests/rsa
- https://searchfox.org/nss/source/cmd/bltest/tests/rsa_pss
- https://searchfox.org/nss/source/cmd/bltest/tests/rsa_oaep
- https://searchfox.org/nss/source/cmd/bltest/tests/ecdsa
- https://merkel.texture.rocks/Latex/natbib.php
- https://anonymous.4open.science/api/repo/acvpframe/file/reports/rsa.insane.html
- https://anonymous.4open.science/api/repo/acvpframe/file/reports/rsa.sane.html
- https://gitlab.com/nisec/acvp-rust/-/raw/master/reports/rsa.insane.html?inline=false
- https://gitlab.com/nisec/acvp-rust/-/raw/master/reports/rsa.sane.html?inline=false
- https://serde.rs/derive.html
- https://aflplus.plus/docs/custom