Che tipo di bug può essere trovato da una stupida applicazione desktop?

4

Sto appena iniziando a conoscere il problema della fuzzing e ho creato uno stupido fuzzer che cambia diversi byte casuali in un file PDF in valori casuali, lo apre e rileva se Acrobat Reader si è arrestato in modo anomalo. Quali tipi di bug posso aspettarmi di trovare usando questo metodo?

Suppongo che si possa trovare una vulnerabilità in una stringa di formato nel caso in cui si verifichi un fuzzer stupido per inserire un parametro stringa formato nel punto giusto. Suppongo anche che si possano trovare overflow interi. Ma cos'altro potrebbe essere trovato?

È possibile trovare buffer overflow? Dato che cambio solo pochi byte casuali, presumo che la possibilità di traboccare un buffer sia in realtà piccola o nulla. O mi sbaglio?

    
posta pineappleman 08.04.2016 - 13:44
fonte

2 risposte

2

Sciocco muto

I'm just starting out to learn about fuzzing and have made a dumb fuzzer that changes several random bytes in a pdf file to random values, opens it and detects if Acrobat Reader has crashed. What types of bugs can I expect to find using such a method?

Nessuno. Tale sconcertamento "stupido" ha una copertura incredibilmente limitata. Sarei estremamente sorpreso se quell'applicazione si arrestasse effettivamente solo perché alcuni byte nell'input sono stati modificati casualmente. Questo sarebbe il caso anche se il fuzzer stesse provando milioni di campioni al secondo. Comunque tu dici anche che il tuo fuzzer lo apre e vede se si blocca. Questo otterrebbe solo ciò che, qualche tentativo un secondo? Una prova ogni pochi secondi? Nemmeno vicino ne vale la pena.

Il modo in cui alcuni fuzzer professionali funzionano sta generando un processo, interrompendo lo stato della memoria proprio prima che stia per analizzare i dati di destinazione (per saltare lo stato di bootstrap), e quindi riprenderlo. Se non si arresta in modo anomalo entro alcune decine di millisecondi, ritorna allo stato di pausa in cui si trovava prima. Ciò consente la sfocatura a centinaia di volte al secondo al più lento, o decine di migliaia al più veloce.

I assume that a format string vulnerability could be found in case the dumb fuzzer happens to inserts a format string parameter at the right place. I also assume that integer overflows could be found. But what else could be found?

Dipende da come funziona il parser. Senza avere il codice sorgente di Acrobat Reader, non potrei nemmeno iniziare a rispondere a questa domanda. Overflow di buffer, vulnerabilità di formato stringa, overflow di interi, errori logici, ecc. Sono tutti possibili. Devi anche essere consapevole che non tutte le vulnerabilità saranno facili da scoprire, dal momento che alcune parti dell'input possono essere protette con un checksum, un numero magico complesso o possono essere compresse.

Immagina di avere un campo protetto con un semplice checksum. Le probabilità che le modifiche casuali si traducano in una collisione sono piuttosto basse, poiché questo è ciò per cui è stato progettato il checksum e, di conseguenza, un percorso di codice vulnerabile non può mai essere preso. Tuttavia un exploit reale potrebbe semplicemente assicurarsi che il checksum sia valido. Questo è un problema comune con i nuovi utenti che sfogliano il formato rar. L'intero file è coperto da un checksum, quindi non importa quanto ingenuo lo stia facendo qualcuno, non si bloccherà mai. Quando il codice di checksum viene rimosso, risulta essere piuttosto buggato e facile da arrestare. Per evitare questo problema, devi capire il formato e rimuovere il codice di checksum o assicurarti che i tuoi input utilizzino sempre checksum corretti.

Is it possible to find buffer overflows? Since I change only few random bytes, I assume that the chance of overflowing a buffer is actually small or none. Or am I wrong?

Se si modifica un valore che finisce per specificare la dimensione di un buffer, anche se non si modifica la dimensione del buffer, potrebbe comunque verificarsi un overflow. Ad esempio, prendi un contenuto di memoria ipotetico here is some text17 . Questo è composto da un buffer, here is some text e una dimensione, 17 . Una permutazione che modifica la dimensione in modo che sia inferiore comporterebbe il sovraccarico del buffer una volta elaborato. Ora non è probabile che Acrobat Reader abbia qualcosa di ovvio, ma un bug potrebbe ipoteticamente portare a un risultato simile internamente. Potrei immaginare diverse possibilità.

Fuzzing intelligente

I fuzzer professionali non si limitano a inserire input casuali in un programma per vedere se si blocca. Modificano l'input in modi specifici che possono provocare modifiche nel comportamento dell'obiettivo. Il programma è compilato con un codice speciale inserito che fa sì che riferisca il suo stato interno al fuzzer in ciascun ramo, consentendo al fuzzer di sapere quando un dato input ha portato a un diverso codepath, anche se il suo comportamento esterno non cambia. Questa è la tecnica utilizzata da AFL , uno dei più diffusi fuzzer di uso generale. È abbastanza intelligente da creare un file JPEG valido dal nulla , semplicemente esaminando lo stato di un decodificatore JPEG mentre lo alimenta.

Per scrivere un fuzzer che trova bug reali, è necessario utilizzare la strumentazione binaria come AFL con la possibilità di analizza automaticamente il formato , o scrive un fuzzer sensibile al formato specifico dell'applicazione (cioè uno che è profondamente consapevole delle specifiche del formato PDF, ed è in grado di creare permutazioni su una parola chiave per sintassi base piuttosto che una base per byte ).

    
risposta data 12.12.2017 - 04:40
fonte
1

Non penso che questo approccio aiuterà a trovare alcuna vulnerabilità in questo ambito poiché il formato Adobe PDF è piuttosto complesso. È molto improbabile che tu possa ottenere una buona copertura del codice in un ragionevole lasso di tempo.

Dai un'occhiata al riferimento del formato PDF e delle estensioni Adobe e inizia a scrivere test per parti particolari che trovi interessanti. (Questo potrebbe portarti alle specifiche di altri formati di file che possono essere incorporati.) Se focalizzi particolari dettagli di implementazione puoi lavorare molto bene con il flipping di byte.

    
risposta data 08.04.2016 - 15:46
fonte

Leggi altre domande sui tag