• [^] # Re: Rien de nouveau

    Posté par . En réponse au journal Fuzzing : éprouver les entrées de vos développements. Évalué à 3.

    oui, mais non. Sage n'a rien à voir.

    Tout d'abord, Sage est closed source, et on en sait que ce que les gens veulent bien en dire...
    Ensuite, Sage fait de la résolution de contraintes, ce qui implique un solveur (Z3). Et généralement, les papiers qui en parlent disent que la résolution de contraintes sur un projet trop gros a tendance à exploser et donc on limite le scope à un sous ensemble, ou une sous fonction, ce qui limite beaucoup la chance de trouver des bugs.

    Dans le monde réél, je ne crois pas avoir lu: "This bug has been found with Sage". Par contre, j'ai beaucoup lu "Alors le bug machin qui a été trouvé, on a essayé de le reproduire avec Sage, on a monitoré la fonction coupable et on a réussi à retrouver la faille, regardez comme Sage c'est génial et ça écrase les fuzzers".
    Pour résumer, on a Sage qui est apparemment génial, qui demande un bac+18 pour être mis en oeuvre, sur un sous-ensemble réduit de fonctionnalités.

    De l'autre, on a afl. On prend un prog, on le recompile (ou pas), on le balance à afl même si on ne connait rien à son format d'entrée, on attend un peu et il trouve des bugs, des vrais, et il en trouve vite, et beaucoup.

    On pourrait croire que je suis anti-Sage, mais non, je veux juste dire que afl et Sage n'ont rien à voir. Afl, c'est bon, c'est simple, ça augmente réellement la qualité de vos programmes.
    Sage, bah tant que ça restera cantonné chez MS research, ça fournira des papiers enthousiastes, ça n'augmentera pas la sécurité de vos programmes.

    Le papier que tu cites en commentaire, si on le prends page 2:

    void top(char input[4]) {
    int cnt=0;
    if (input[0] == ’b’) cnt++;
    if (input[1] == ’a’) cnt++;
    if (input[2] == ’d’) cnt++;
    if (input[3] == ’!’) cnt++;
    if (cnt >= 3) abort(); // error
    }
    le papier dit: Random fuzzing ne trouvera jamais la condition.
    Bah si, afl le trouve, et très vite même. Sage le trouve encore plus vite, oui. Mais fuzzer un programme de 8 lignes, ça n'intéresse personne (même moi, sans ordinateur rien qu'en lisant le code source je peux trouver la condition d'erreur \o/ )