Fuzzing e il suo impatto sull'ambiente di test

4

Ho fatto questa domanda su StackOverflow ma non ho ricevuto risposte, quindi ho pensato che avrei tentato la fortuna qui poiché la fuzzing è strettamente correlata alla sicurezza e spesso utilizzata nei test di valutazione della vulnerabilità.

Attualmente sto scrivendo un fuzzer che genererà un payload basato su un formato di specifica personalizzato.

Tutto va bene e sono contento della prima versione che ho scritto, ma ho riscontrato un problema durante il tentativo di applicare questo fuzzer a un'attività che non era il mio caso di utilizzo iniziale.

Il problema è legato al modo in cui l'input del fuzzer influirà sull'ambiente di test.

per esempio:

  • Se il metodo testato costruisce un buffer con dimensioni variabili, cosa succederebbe se il valore generato fosse 2^64 e attivasse un errore di memoria esaurita (OOM)?

  • Se il metodo di test rimuove un file specificato da una variabile nomefile cosa accadrebbe se il valore generato fosse * e l'intera directory venisse cancellata?

Naturalmente questi sono solo alcuni esempi ingenui, ma il punto è che sto cercando di trovare un modo per ridurre le conseguenze del fuzzing sull'ambiente di test (pur rimanendo comunque portatile se possibile).

Ciò renderebbe il fuzzer più sicuro da usare ma anche più fluido perché i casi di test fuzz potevano essere facilmente concatenati ed eseguiti in parallelo senza rompere o corrompere l'ambiente a ogni altro payload.

Ci sono alcune soluzioni radicali come:

  • non utilizza il metodo fuzzing su metodi che potrebbero avere effetti collaterali e conseguenze critiche
  • black-listing / white-elenca alcuni input in determinati casi d'uso

Entrambi sono davvero limitanti secondo me e rendono difficile l'uso generico del fuzzer nei test fuzz black-box.

Altre possibili soluzioni come:

  • esecuzione di test in una VM senza testa come Vagrant
  • esecuzione di test in un contenitore Linux come Docker
  • intercettando determinate syscalls come le chiamate I / O e disinfettando i loro input

sono validi ma tutti soffrono del problema che sono di altissimo livello. Anche Syscalls e Docker hanno il problema di non essere molto portabili.

In che modo più fuzzer professionisti / aziendali gestiscono questo problema?

Immagino che il software di testing black-box abbia probabilmente risolto questo problema in modo portatile, non è vero?

    
posta Awake Zoldiek 02.01.2015 - 22:59
fonte

2 risposte

3

Qualsiasi test, non solo fuzzing, dovrebbe essere eseguito in una sorta di sandbox (ad esempio una macchina virtuale). Questo ha due vantaggi principali: 1) puoi ripristinare rapidamente le cose in una configurazione nota, e 2) bug (come una cancellazione ricorsiva in fuga che include .. nell'elenco di directory) non possono danneggiare dati importanti.

    
risposta data 03.01.2015 - 10:28
fonte
0

Il Sulley Fuzzing Framework è stato annunciato insieme al libro "Fuzzing: Brute Force Vulnerability Discovery" e ulteriori informazioni su entrambi sono disponibili su fuzzing.org

Altri framework di test fuzz, probabilmente prima di Sulley, e pochi dopo, utilizzano una tecnica VM guest. Ci sono anche macchine virtuali per testare gli stessi hypervisor come ISO iofuzz di Tavis Ormandy. Un'altra tecnica menzionata nel libro è quella di tenere traccia di errori, arresti anomali e stato (come l'ordine e la sequenza dei pacchetti), quindi vale la pena leggerlo.

Potenzialmente il libro più recente sui test fuzz che copre Sulley è l'ultima quarta edizione di "Gray Hat Hacking: The Ethical Hacker's Handbook". Se Sulley o le risorse di questi libri non sono utili, forse puoi aiutarmi a concentrarti esattamente su ciò che stai cercando.

Anche se ci sono suite, motori e persino appliance di testing fuzz Enterprise - potrei suggerire invece di consultare le persone che scrivono ed eseguono test fuzz specializzati come quello che ti interessa e che cercano di costruire. Ad esempio, Deja Vu Security ha ridimensionato i motori di test fuzz in scala virtuale per molti anni. Le competenze veterane dei loro ricercatori possono essere trovate sul loro blog, nei loro codebase e durante i loro colloqui con DEF CON, BlackHat e altre conferenze sulla sicurezza delle informazioni.

    
risposta data 03.01.2015 - 09:03
fonte