L'azienda Google ha presentato il progetto ClusterFuzzLite, che consente di organizzare test fuzzing del codice per individuare precocemente potenziali vulnerabilità durante il lavoro dei sistemi di integrazione continua. Attualmente, ClusterFuzz può essere utilizzato per automatizzare i test fuzzing delle pull request in GitHub Actions, Google Cloud Build e Prow, ma in futuro si prevede il supporto per altri sistemi CI. Il progetto si basa sulla piattaforma ClusterFuzz, creata per coordinare il lavoro dei cluster di test fuzzing, e viene distribuito con licenza Apache 2.0.
Si segnala che dopo l'implementazione, nel 2016, da parte di Google del servizio OSS-Fuzz, sono stati inclusi più di 500 importanti progetti open source nel programma di test fuzzing continuo. Sulla base dei controlli effettuati, sono state eliminate più di 6500 vulnerabilità confermate e corrette oltre 21 mila anomalie. ClusterFuzzLite continua a sviluppare meccanismi di test fuzzing per consentire un'individuazione più precoce dei problemi nella fase di revisione delle modifiche proposte. ClusterFuzzLite è già stato integrato nei processi di revisione delle modifiche nei progetti systemd e curl, e ha permesso di identificare errori che erano stati trascurati dagli analizzatori statici e dai linter utilizzati nella fase iniziale di verifica del nuovo codice.
ClusterFuzzLite supporta il controllo dei progetti in linguaggi come C, C++, Java (e altri linguaggi basati su JVM), Go, Python, Rust e Swift. I test fuzzing vengono eseguiti utilizzando il motore LibFuzzer. Per rilevare errori di gestione della memoria e anomalie, possono essere attivati anche strumenti come AddressSanitizer, MemorySanitizer e UBSan (UndefinedBehaviorSanitizer).
Le principali funzionalità di ClusterFuzzLite includono: verifica rapida delle modifiche proposte per trovare errori prima dell'approvazione del codice; caricamento di rapporti sulle condizioni di crash; possibilità di passare a test fuzzing più approfonditi per rilevare errori più gravi, non emersi durante il controllo delle modifiche del codice; generazione di rapporti di coverage per valutare la copertura del codice durante il test; architettura modulare che consente di selezionare la funzionalità necessaria.
Ricordiamo che il fuzzing consiste nella generazione di un flusso di tutte le possibili combinazioni casuali di dati di input, simili ai dati reali (ad esempio, pagine html con parametri dei tag casuali, archivi o immagini con intestazioni anomale, ecc.) e nella registrazione di eventuali malfunzionamenti durante il loro trattamento. Se qualche sequenza porta a un arresto o non corrisponde alla reazione attesa, tale comportamento è altamente probabile che indichi un errore o una vulnerabilità.
Fonte: opennet.ru
