TMin: Fuzzing Test Case Optimizer May 8, 2008
Posted by y2h4ck in General Hacking, Pentesting.Tags: Pentesting, Hacking, Ethical Hacking, General Hacking, General Security, fuzzing, tmin, case optimizer, delta, remote fuzzing, local fuzzing
add a comment
Tmin é um simples utilitário para facilitar a depuração de test cases complexos efetuados atraves de fuzzing. Ele é muito parecido com outra ferramenta deste tipo, delta, mas ele é melhor especialmente em caso de depurações de saídas desconhecidas, fora de padrão ou que o parse format seja difícil de lidar (sem a necessidade de utilizar tokens para re-serializar os dados), e por sua facil integração com UI externas para automatizar os testes.
Uma das features interessantes nele é a normalização alfabética para simplificar os test cases que não podem ser abreviados.
Exemplo de uso:
$ cat testcase.in
This is a lengthy and annoying hello world testcase.
$ cat testme.sh
#!/bin/bash
grep “el..*wo” || exit 0
exit 1
$ ../tmin -x ./testme.sh
tmin - complex testcase minimizer, version 0.03-beta (lcamtuf@google.com)
[*] Stage 0: loading ‘testcase.in’ and validating fault condition…
[*] Stage 1: recursive truncation (round 1, input = 53/53)
[*] Stage 1: recursive truncation (round 2, input = 27/53)
[*] Stage 1: recursive truncation (round 3, input = 14/53)
[*] Stage 1: recursive truncation (round 4, input = 10/53)
[*] Stage 1: recursive truncation (round 5, input = 8/53)
[*] Stage 1: recursive truncation (round 6, input = 7/53)
[*] Stage 2: block skipping (round 1, input = 7/53)
[*] Stage 2: block skipping (round 2, input = 6/53)
[*] Stage 2: block skipping (round 3, input = 5/53)
[*] Stage 3: alphabet normalization (round 1, charset = 5/5)
[*] Stage 3: alphabet normalization (round 2, charset = 5/5)
[*] Stage 4: character normalization (round 1, characters = 4/5)
[*] All done - writing output to ‘testcase.small’…
== Final statistics==
Original size : 53 bytes
Optimized size : 5 bytes (-90.57%)
Chars replaced : 1 (1.89%)
Efficiency : 9 good / 49 bad
Round counts : 1:6 2:3 3:2 4:1
$ cat testcase.small
el0wo
Detalhes
A ferramenta procura por um arquivo chamado testcase.in no mesmo diretório, e irá escrever um testcase.small minimo para aquele teste em especial. Para otimizar o test case para uma aplicação alvo, você pode simplesmente executar:
./tmin /path/to/program
Deste modo, tmin irá executar /path/to/program a cada ciclo, alimentando com o test case modificado o stdin do programa, e examinando a saída. O programa saindo com um sinal igual SIGSEGV será interpretado que o test case ainda esta funcionando. Você pode também utilizar –x command-line switch para modificar a lógica e tratar non-zero return codes como condições de erro.
non-zero return codes as fault conditions likewise, and -w file to save data to a specified location to be read by the tested application, instead of supplying it on stdin.
Para testes remotes, tmin suporta o –s command-line switch. Neste modo, o comportamento do programa especificado é ignorado e o tool espera por um sinal SIGUSR1 (clean execution) e SIGUSR2 (fault execution). Dois exemplos comuns são os abaixo:
./tmin -s -w local_file.txt /bin/true
./tmin -s nc 127.0.0.1 1234
Como mostrado acima, o nc será utilizado como um wrapper para a interação com o network service, e /bin/true será utilizado como um “decoy” enquanto o tmin escreve em arquivos locais.
Download:
Pode ser baixado aqui.

















