Outils pour utilisateurs

Outils du site


prog:fuzzer:afl

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
prog:fuzzer:afl [2023/10/05 16:09] – [Sanitizers] : ajout des nouvelles variables d'environnement pour les sanitizer rootprog:fuzzer:afl [2023/10/06 09:55] (Version actuelle) – [Sanitizers] : mise à jour avec afl++ root
Ligne 80: Ligne 80:
   * ''AFL_USE_LSAN'' : ''-fsanitize=leak''   * ''AFL_USE_LSAN'' : ''-fsanitize=leak''
   * ''AFL_USE_CFISAN'' : ''-fcf-protection=full'' pour gcc, ''-fsanitize=cfi -fvisibility=hidden'' pour clang   * ''AFL_USE_CFISAN'' : ''-fcf-protection=full'' pour gcc, ''-fsanitize=cfi -fvisibility=hidden'' pour clang
- 
  
 Comme on est dans un environnement multithread, on compile une version de programme pour chaque sanitizer qui serviront lors du fuzzing (voir ci-après). Comme on est dans un environnement multithread, on compile une version de programme pour chaque sanitizer qui serviront lors du fuzzing (voir ci-après).
  
 <code bash> <code bash>
-CC=afl-gcc CXX=afl-g++ AFL_USE_ASAN=1 AFL_INST_RATIO=100 CFLAGS="-g -fno-omit-frame-pointer" CXXFLAGS="-g -fno-omit-frame-pointer" ./configure +CC=afl-clang-lto CXX=afl-clang-lto++ RANLIB=llvm-ranlib AR=llvm-ar AS=llvm-as AFL_USE_ASAN=1 AFL_INST_RATIO=100 CFLAGS="-g -fno-omit-frame-pointer" CXXFLAGS="-g -fno-omit-frame-pointer" cmake .
-CC=afl-clang CXX=afl-clang++ AFL_USE_MSAN=1 AFL_INST_RATIO=100 CFLAGS="-g -fno-omit-frame-pointer" CXXFLAGS="-g -fno-omit-frame-pointer" LDFLAGS="-lgcc_s" ./configure +CC=afl-clang-lto CXX=afl-clang-lto++ RANLIB=llvm-ranlib AR=llvm-ar AS=llvm-as AFL_USE_MSAN=1 AFL_INST_RATIO=100 CFLAGS="-g -fno-omit-frame-pointer" CXXFLAGS="-g -fno-omit-frame-pointer" cmake .
-CC=afl-gcc CXX=afl-g++ AFL_HARDEN=1 CFLAGS="-g -fno-omit-frame-pointer" CXXFLAGS="-g -fno-omit-frame-pointer" ./configure +CC=afl-clang-lto CXX=afl-clang-lto++ RANLIB=llvm-ranlib AR=llvm-ar AS=llvm-as AFL_HARDEN=1 CFLAGS="-g -fno-omit-frame-pointer" CXXFLAGS="-g -fno-omit-frame-pointer" cmake .
-CC=afl-gcc CXX=afl-g++ CFLAGS="-fsanitize=undefined -U_FORTIFY_SOURCE -g -fno-omit-frame-pointer" CXXFLAGS="-fsanitize=undefined -U_FORTIFY_SOURCE -g -fno-omit-frame-pointer" LDFLAGS="-lgcc_s" ./configure +CC=afl-clang-lto CXX=afl-clang-lto++ RANLIB=llvm-ranlib AR=llvm-ar AS=llvm-as AFL_USE_UBSAN=1 CFLAGS="-g -fno-omit-frame-pointer" CXXFLAGS="-g -fno-omit-frame-pointer" cmake .
-CC=afl-clang CXX=afl-clang++ CFLAGS="-fsanitize=cfi -U_FORTIFY_SOURCE -flto -fvisibility=hidden -g -fno-omit-frame-pointer" CXXFLAGS="-fsanitize=cfi -U_FORTIFY_SOURCE -flto -fvisibility=hidden -g -fno-omit-frame-pointer" LDFLAGS="-lgcc_s" ./configure +CC=afl-clang-lto CXX=afl-clang-lto++ RANLIB=llvm-ranlib AR=llvm-ar AS=llvm-as AFL_USE_TSAN=1 CFLAGS="-g -fno-omit-frame-pointer" CXXFLAGS="-g -fno-omit-frame-pointer" cmake .. 
- +CC=afl-clang-lto CXX=afl-clang-lto++ RANLIB=llvm-ranlib AR=llvm-ar AS=llvm-as AFL_USE_LSAN=CFLAGS="-g -fno-omit-frame-pointer" CXXFLAGS="-g -fno-omit-frame-pointer" cmake .
-CC=afl-gcc CXX=afl-g++ AFL_USE_ASAN=1 AFL_INST_RATIO=100 cmake +CC=afl-clang-lto CXX=afl-clang-lto++ RANLIB=llvm-ranlib AR=llvm-ar AS=llvm-as AFL_USE_CFISAN=1 CFLAGS="-g -fno-omit-frame-pointer" CXXFLAGS="-g -fno-omit-frame-pointer" cmake ..
-CC=afl-clang CXX=afl-clang++ AFL_USE_MSAN=1 AFL_INST_RATIO=100 cmake . +
-CC=afl-gcc CXX=afl-g++ AFL_HARDEN=1 cmake . +
-CC=afl-gcc CXX=afl-g++ CFLAGS="-fsanitize=undefined -U_FORTIFY_SOURCE" CXXFLAGS="-fsanitize=undefined -U_FORTIFY_SOURCE" cmake . +
-CC=afl-clang CXX=afl-clang++ CFLAGS="-fsanitize=cfi -U_FORTIFY_SOURCE -flto -fvisibility=hidden" CXXFLAGS="-fsanitize=undefined -U_FORTIFY_SOURCE -flto -fvisibility=hidden" cmake . +
- +
-AFL_USE_ASAN=1 AFL_INST_RATIO=100 afl-g++ -g -fno-omit-frame-pointer -O2 main.cc -o main_asan +
-LDFLAGS="-lgcc_s" AFL_USE_MSAN=1 AFL_INST_RATIO=100 afl-clang++ -g -fno-omit-frame-pointer -O2 main.cc -o main_msan +
-AFL_HARDEN=afl-g++ --fno-omit-frame-pointer -O2 main.cc -o main_harden +
-afl-g++ -fsanitize=undefined -U_FORTIFY_SOURCE -g -fno-omit-frame-pointer -O2 -lgcc_s main.cc -o main_undefined +
-afl-clang++ -fsanitize=cfi -U_FORTIFY_SOURCE -flto -fvisibility=hidden -g -fno-omit-frame-pointer -O2 -lgcc_s main.cc -o main_cli+
 </code> </code>
  
-<WRAP center round important 60%> 
 Si ''AFL_USE_ASAN'' ou ''AFL_USE_MSAN'' est utilisé, automatiquement, afl ne surveille de 33% (aléatoirement) des branches. Il faut mettre ''AFL_INST_RATIO'' à 100 pour surveiller toutes les branches. Si ''AFL_USE_ASAN'' ou ''AFL_USE_MSAN'' est utilisé, automatiquement, afl ne surveille de 33% (aléatoirement) des branches. Il faut mettre ''AFL_INST_RATIO'' à 100 pour surveiller toutes les branches.
-</WRAP> 
- 
-''AFL_USE_ASAN'' et ''AFL_USE_MSAN'',  : nécessite ''-m none''. 
- 
-Dans ces cas, 20 To est nécessaire. Mais cette taille n'est pas l'espace mémoire utile en RAM qui sera nécessaire mais seulement la mémoire virtuelle : 
- 
-    PID UTIL.     PR  NI    VIRT    RES    SHR S  %CPU %MEM    TEMPS+ COM.        
-  14810 name      20   0 20,000t   5916   3392 R  19,5  0,0   0:01.89 main        
- 
-<WRAP center round important 60%> 
-Une chute de performance est à prévoir. 
-</WRAP> 
- 
-Les valeurs ci-dessous sont basées sur l'utilisation du logiciel ''pdftohtml'' de ''poppler''. 
-^    Sanitizer    ^  Performance  ^     Chute      ^ 
-|  -              |     100%      |Vitesse maximale| 
-|address          |     40%       |Division par 2,5| 
-|undefined        |     20%       |Division par 5  | 
-|address,undefined|     8%        |Division par 12 | 
  
-Je conseille donc de lancer une version ''AFL_USE_ASAN'', ''AFL_USE_MSAN'', ''AFL_HARDEN'', ''-fsanitizer=undefined'' et ''-fsanitizer=undefined'' (soit 5 au total) et toutes les autres instances en parallèle sans ces optimisations.+Une chute de performance est à prévoir. Je conseille donc de lancer une exécution de afl-fuzz en mode esclave de chaque sanitizer et toutes les autres instances en parallèle sans ces vérifications.
  
 ====Dictionnaire==== ====Dictionnaire====
prog/fuzzer/afl.1696514965.txt.gz · Dernière modification : 2023/10/05 16:09 de root