Atheris, un toolkit di test del codice Python

Google ha presentato recentemente il rilascio di Progetto Atheris, che è uno sviluppo di una serie di strumenti open source qualificato per il fuzzing dei test del codice Python ed estensioni per CPython scritte in C / C ++.

El proyecto utilizza un motore basato su libFuzzer e può essere utilizzato insieme agli strumenti Address Sanitizer e Undefined Behavior Sanitizer per rilevare ulteriori errori. Il codice è aperto con la licenza Apache 2.0.

Informazioni su Google Atheris

Nelle parole di Google Atheris, è un toolkit che può essere utilizzato per trovare automaticamente gli errori nel codice Python e nelle estensioni native. Atheris è un fuzzer "basato sulla copertura", il che significa che Atheris proverà ripetutamente vari input per il tuo programma mentre lo guarda correre e cercherà di trovare percorsi interessanti.

La revisione del codice è supportata per Python 2.7 e Python 3.3+, ma per una copertura guidata completa, si consiglia di utilizzare i rami Python 3.8 e 3.9, che ora supportano le statistiche del codice operativo per codice operativo.

Nel processo, Atheris elenca le possibili combinazioni di dati di input e genera un report su tutti i guasti rilevati e le eccezioni non rilevate.

Ad esempio, controllando la libreria di analisi YAML in Atheris, si è riscontrato che alcuni costrutti YAML, come specificare "-_" invece di un valore intero o utilizzare un elenco invece di una chiave, generano un'eccezione imprevista invece di un Errore standard di YAMLErrors.

Il fuzz test è una tecnica ben nota per scoprire errori di programmazione. Molti di questi errori rilevabili hanno gravi implicazioni per la sicurezza. Google ha rilevato migliaia di vulnerabilità di sicurezza e altri bug durante l'utilizzo di questa tecnica. Il fuzzing è tradizionalmente utilizzato nei linguaggi nativi come C o C ++, ma l'anno scorso abbiamo creato un nuovo motore di fuzzing Python. Oggi abbiamo rilasciato il motore di fuzz di Atheris come open source.

Ateris può essere utilizzato anche per identificare le differenze di comportamento di biblioteche che mirano a compiti identici. Ad esempio, un controllo sommario del pacchetto Python "idna" e della libreria "libidn2", che svolgono il compito di decodificare i nomi di dominio internazionalizzati, ha rilevato che non sempre producono lo stesso risultato.

Uno degli usi migliori per Atheris è per i diffusori differenziali. Questi sono fuzzer che cercano differenze nel comportamento di due librerie che hanno lo scopo di fare la stessa cosa. Uno dei fuzz di esempio in bundle con Atheris fa esattamente questo per confrontare il pacchetto "idna" di Python con il pacchetto C "libidn2".

In particolare, se il dominio utilizzava sequenze Unicode, "idna" e "libidn2" hanno convertito il nome di dominio internazionalizzato in host diversi.

In generale, Atheris è utile nel codice Python puro fintanto che si ha un modo per esprimere quale sia il comportamento "corretto", o almeno esprimere quali comportamenti sono decisamente non corretti. Questo potrebbe essere complesso come il codice personalizzato nel fuzzer che valuta l'accuratezza dell'output di una libreria, o semplice come controllare che non vengano sollevate eccezioni impreviste.

È importante tenerne conto i test di fuzzing generano un flusso di tutti i tipi di combinazioni casuali di dati di input, vicino ai dati effettivi (ad es. pagine html con parametri di tag casuali, file o immagini con intestazioni anomale, ecc.) e correggere possibili glitch nel processo.

Se una qualsiasi sequenza genera un'eccezione o non corrisponde alla risposta prevista, questo comportamento molto probabilmente indica un bug o una vulnerabilità.

Infine, come detto Atheris funziona con il codice Python nelle versioni 2.7 e 3.3+, sebbene Google consiglia vivamente di utilizzare 3.8+ e estensioni native scritte per CPython.

Windows non è ancora tra i sistemi operativi supportati, quindi per ora il motore interessa solo gli utenti Linux e Mac OS X.

Per usarlo su queste piattaforme, gli sviluppatori devono avere installata una versione corrente del frontend del compilatore Clang.

Se vuoi saperne di più, puoi controllare la nota originale nel file seguente link


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.