Domanda:
Come determino la copertura del codice durante il fuzz
mrduclaw
2013-03-31 00:58:10 UTC
view on stackexchange narkive permalink

Diciamo che vorrei iniziare a confondere il lettore PDF di Acme Corp. Vorrei provare a seguire ciò che Miller ha fatto scaricando un mucchio di PDF benigni e modificandoli.

Miller ha iniziato riducendo al minimo il suo corpus di esempi PDF eliminando campioni con una copertura di codice simile.

Come viene eseguita questa fase specifica? Cioè, come ha determinato quale fosse una copertura di codice simile?

Posso immaginare uno strumento che traccia l'esecuzione e registra JMP / CALL per ottenere un grafico di esecuzione, e suppongo che potresti diffondere quei grafici. Ma per quanto riguarda il codice JIT? Quei grafici non sarebbero molto diversi dal momento che il JIT sarebbe probabilmente in posizioni diverse nella memoria?

Due risposte:
#1
+5
mncoppola
2013-03-31 01:17:45 UTC
view on stackexchange narkive permalink

Sebbene sia fortemente associato a GCC, il progetto gcov è popolare come strumento di copertura del codice di Linux. Tuttavia richiede la compilazione del programma con i flag -fprofile-arcs -ftest-coverage , che potrebbe non essere un'opzione se si prende di mira il software closed source. Ulteriori informazioni possono essere trovate qui: http://gcc.gnu.org/onlinedocs/gcc/Gcov.html

Questo è un ottimo suggerimento, ma speravo in suggerimenti per software closed-source.
#2
+5
0xea
2013-03-31 01:50:00 UTC
view on stackexchange narkive permalink

Non sono sicuro di come se la cava con l'applicazione con codice compilato JIT, ma peach ha un'utilità minset per creare un insieme minimo di file con la massima copertura di codice:

Questo strumento eseguirà ogni file di esempio tramite un programma di destinazione e determinerà la copertura del codice. Quindi troverà il minor numero di file necessari per coprire la maggior parte del codice. Questo sarà il set minimo di file che dovrebbe essere usato durante il fuzz.

Ma per quanto posso vedere utilizza il metodo che hai proposto, monitorando gli hit di tutti i blocchi di base dell'applicazione. Usa un pintool per farlo.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...