Question:
Comment déterminer la couverture du code lors du fuzzing
mrduclaw
2013-03-31 00:58:10 UTC
view on stackexchange narkive permalink

Disons que j'aimerais commencer à utiliser le lecteur PDF d'Acme Corp. Je voudrais essayer de suivre ce que Miller a fait en téléchargeant un tas de fichiers PDF bénins et en les mutant.

Miller a commencé par réduire son corpus d'échantillons PDF au minimum en élaguant les échantillons qui avaient une couverture de code similaire.

Comment cette étape spécifique est-elle effectuée? Autrement dit, comment a-t-il déterminé ce qu'était une couverture de code similaire?

Je peux imaginer un outil qui trace l'exécution et enregistre les JMP / CALLs pour obtenir un graphe d'exécution, et je suppose que vous pourriez comparer ces graphes. Mais qu'en est-il du code JIT? Ces graphiques ne seraient-ils pas très différents puisque le JIT se trouverait probablement à différents endroits de la mémoire?

Deux réponses:
#1
+5
mncoppola
2013-03-31 01:17:45 UTC
view on stackexchange narkive permalink

Bien qu'il soit fortement associé à GCC, le projet gcov est populaire en tant qu'outil de couverture de code Linux. Cela nécessite cependant de compiler votre programme avec les indicateurs -fprofile-arcs -ftest-coverage , ce qui peut ne pas être une option si vous ciblez un logiciel à code source fermé. Vous trouverez plus d'informations ici: http://gcc.gnu.org/onlinedocs/gcc/Gcov.html

C'est une excellente suggestion, mais j'espérais des suggestions de logiciels à code source fermé.
#2
+5
0xea
2013-03-31 01:50:00 UTC
view on stackexchange narkive permalink

Je ne sais pas comment cela se compare à une application avec du code compilé JIT, mais peach a un utilitaire minset pour créer un ensemble minimal de fichiers avec la couverture de code la plus élevée:

Cet outil exécutera chaque exemple de fichier via un programme cible et déterminera la couverture du code. Il trouvera alors le moins de fichiers nécessaires pour couvrir le plus de code. Ce sera l'ensemble minimum de fichiers à utiliser lors du fuzzing.

Mais pour autant que je sache, il utilise la méthode que vous avez proposée, surveillant les hits de tous les blocs de base de l'application. Il utilise un pintool pour ce faire.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...