
Melkor è un fuzzer per il formato di file ELF molto intuitivo e facile da usare, per trovare bug funzionali e di sicurezza nei parser ELF.
--------------------------------~
| -- DESCRIZIONE -- |
--------------------------------~
Melkor - Un Fuzzer per il Formato File ELF
Melkor, un personaggio immaginario del legendarium della Terra di Mezzo di J. R. R. Tolkien, fu il primo Signore Oscuro e il maestro di Sauron. Viene menzionato brevemente ne Il Signore degli Anelli ed è conosciuto per:
"... Melkor aveva catturato un certo numero di ELFI prima che i Valar lo attaccassero, e li torturò e corruppe, generando i primi Orchi." (http://en.wikipedia.org/wiki/Morgoth)
"... Melkor era astuto e più pieno di malizia che mai. Vedendo la beatitudine degli ELFI e ricordando che era per loro che era stato rovesciato, Melkor desiderava sopra ogni cosa corromperli." (http://lotr.wikia.com/wiki/Melkor)
"Orchi... È così dal giorno in cui furono generati da Melkor a partire da ELFI corrotti, torturati e mutilati, che potrebbero anche essere stati costretti ad accoppiarsi con altre abominazioni innaturali nel dominio dei Poteri Oscuri." (http://lotr.wikia.com/wiki/Orcs)
Per onorare il suo nome, questo codice prende un ELF, lo corrompe e crea tanti Orchi quanti ne vuoi.
Melkor è un fuzzer ibrido (basato su mutazione e su generazione). Muta i dati esistenti in un campione ELF fornito per creare orchi (ELF malformati); tuttavia, non modifica i valori in modo casuale (dumb fuzzing), ma fuzza alcuni metadati con valori semi-validi attraverso l'uso di regole di fuzzing (knowledge base). Scritto in C, Melkor è un fuzzer molto intuitivo e facile da usare per trovare bug funzionali (e di sicurezza) nei parser ELF.
Le regole di fuzzing sono state progettate tenendo presenti i seguenti input:
Troverai le regole di fuzzing in dettaglio e alcuni altri schemi nella directory docs/.
--------------------------------~
| -- REQUISITI -- |
--------------------------------~
--------------------------------~
| -- COMPILAZIONE E USO -- |
--------------------------------~
La compilazione è molto semplice, basta digitare: $make
Verrà creato il file 'melkor', che è il fuzzer stesso, e alcuni altri file ELF all'interno della directory templates/, inclusi normali file ELF come un eseguibile ELF standard, alcune librerie condivise, un ELF statico (eseguibile standalone) e altri ancora.
Eseguendo melkor, verrà mostrato un elenco di opzioni e ti renderai conto che è molto intuitivo e facile da usare. Tutto ciò che devi fornire è il nome di un ELF da usare come template, che può essere uno qualsiasi di quelli presenti nella directory templates/.
A seconda del tipo di software che vuoi testare, devi scegliere quali metadati vuoi fuzzare. Ad esempio, se vuoi testare un loader di sistema operativo, probabilmente vorrai fuzzare solo la Program Header Table (-P) e/o la Dynamic Section (-D). D'altra parte, potresti voler fuzzare la Section Header Table e l'ELF Header per testare un motore antivirus o un debugger. Fuzzare le Symbols Tables (-s) e/o le Relocations Tables (-R) su file rilocabili (.o) o librerie condivise (.so) per testare compilatori e/o linker. Anche le String Tables possono essere fuzzate (-Z). Sta a te decidere quanto violentemente vuoi corrompere un ELF }:-)
Una volta creati gli orchi nella directory orcs_*/, è il momento di testarli con l'aiuto di test_fuzzed.sh, dove puoi semplicemente specificare il nome della directory con gli orchi da eseguire (test del loader di sistema operativo) o aggiungere un parametro extra per specificare quale programma (e i suoi parametri) vuoi testare contro ogni ELF malformato all'interno della directory orcs. Questo script ha l'opzione di fuzzare alcune variabili d'ambiente (definite anch'esse come regole di fuzzing). Mostrare i log con #dmesg dopo l'esecuzione dello script può essere utile per identificare quale programma/libreria è andato in crash e dove si è verificato il crash. Alcuni esempi vengono mostrati eseguendo lo script senza parametri.
Se vuoi testare automaticamente gli ELF malformati (orchi) in ambiente Windows, è incluso uno script batch (win_test_fuzzed.bat) con quasi le stesse funzionalità dello script per *NIX.
Buon fuzzing!
--------------------------------~
| -- DIRECTORY -- |
--------------------------------~
docs/ Contiene la documentazione correlata, come l'elenco dettagliato delle regole di fuzzing e l'elenco delle dipendenze dei metadati ELF.
templates/ Contiene alcuni file ELF compilati insieme a melkor e che possono essere usati per alimentare melkor: foo.c -> foo.o (oggetto ELF)-> foo (eseguibile ELF) foo.c -> foo_static (eseguibile ELF statico) libfoo.c -> libfoo.so (libreria condivisa ELF) e altri ancora. Digita "$make templ" per vedere in dettaglio quali altri template ELF vengono creati.
orcs_*/ Conterrà i file ELF malformati (basati sul file template fornito) creati dopo il processo di fuzzing.
src/ Il codice sorgente di Melkor.
--------------------------------~
| -- BUG -- |
--------------------------------~
Leggi BUGS.txt
--------------------------------~
| -- CONTATTI -- |
--------------------------------~
Nome: Alejandro Hernandez H. [nitr0us] Twitter: http://twitter.com/nitr0usmx Email: nitrousenador [at] gmail [dot] com Sito web: http://www.brainoverflow.org Blog: http://chatsubo-labs.blogspot.com
--------------------------------~
| -- IN MEMORIA -- |
--------------------------------~
Questo progetto è dedicato alla memoria di uno dei miei migliori amici, Aaron Alba.
--------------------------------~
| -- LICENZA -- |
--------------------------------~
Melkor - Un Fuzzer per il Formato File ELF Copyright (C) 2014 Alejandro Hernandez H. (nitr0us)
Questo programma è software libero: puoi ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License come pubblicata dalla Free Software Foundation, versione 3 della Licenza, o (a tua scelta) qualsiasi versione successiva.
Questo programma è distribuito nella speranza che possa essere utile, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedere la GNU General Public License per maggiori dettagli.
Dovresti aver ricevuto una copia della GNU General Public License insieme a questo programma. In caso contrario, vedere http://www.gnu.org/licenses/.