fuzzbench icon indicating copy to clipboard operation
fuzzbench copied to clipboard

Testing AFL++ variant Fish++-nonLTO

Open kdsjZh opened this issue 2 years ago • 56 comments

Hi dongge,

@Alan32Liu I developed a variant of FishFuzz (USENIX Security23) to make it compatible with fuzzbench (the original version in the paper rely on LTO mode, which fails/timeout on loots of fuzzbench targets), and I would like to request an evaluation to see if it works. Could you help me run the fuzzer aflplusplus_ff_cmp, aflplusplus_fishfuzz and aflplusplus_fishfuzz_allbb?

gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-10-04-ff --fuzzers aflplusplus_ff_cmp aflplusplus_fishfuzz aflplusplus_fishfuzz_allbb

Thanks! Han

kdsjZh avatar Oct 04 '23 10:10 kdsjZh

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-10-05-fishfuzz --fuzzers aflplusplus_ff_cmp aflplusplus_fishfuzz aflplusplus_fishfuzz_allbb

DonggeLiu avatar Oct 05 '23 00:10 DonggeLiu

Hi @kdsjZh Thanks for writing down the command! That makes my work a lot easier : )

Just two minor notes:

  1. The --experiment-name and --fuzzers parameters need to be swapped with your values (See the example command above)
  2. We need to make a trivial modification to service/gcbrun_experiment.py to launch experiments in this PR. Here is an example to add a dummy comment : )

Please feel free to ping me once you finished 2. Thanks!

DonggeLiu avatar Oct 05 '23 00:10 DonggeLiu

Hi dongge,

Thanks for the reminding. I've finished the dummy comment.

@Alan32Liu

kdsjZh avatar Oct 05 '23 07:10 kdsjZh

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-10-05-fishfuzz --fuzzers aflplusplus_ff_cmp aflplusplus_fishfuzz aflplusplus_fishfuzz_allbb

DonggeLiu avatar Oct 05 '23 23:10 DonggeLiu

Experiment 2023-10-05-fishfuzz data and results will be available later at: The experiment data. The experiment report.

DonggeLiu avatar Oct 06 '23 00:10 DonggeLiu

Hello Dongge @Alan32Liu,

I fixed some build errors in libpcap/zlib and optimized the exploration stage, could you help me run the aflplusplus_ff_cmp, aflplusplus_fishfuzz_allbb and aflplusplus_fishfuzz_exp again?

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-10-12-fishfuzz --fuzzers aflplusplus_ff_cmp aflplusplus_fishfuzz_exp aflplusplus_fishfuzz_allbb

Thanks!

kdsjZh avatar Oct 12 '23 12:10 kdsjZh

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-10-12-fishfuzz --fuzzers aflplusplus_ff_cmp aflplusplus_fishfuzz_exp aflplusplus_fishfuzz_allbb

DonggeLiu avatar Oct 12 '23 22:10 DonggeLiu

Experiment 2023-10-12-fishfuzz data and results will be available later at: The experiment data. The experiment report.

DonggeLiu avatar Oct 12 '23 23:10 DonggeLiu

Hi Dongge @Alan32Liu ,

I fix the builder script/exploration stage and updated the llvm-12 to llvm-15.0.0 (to be coherent with fuzzbench's). Besides, existing fuzzers are working on ASan version binary, I want to include non-ASan to compare with existing main results. Could you help me start another campaign? Thank!

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-10-19-fishfuzz --fuzzers aflplusplus_ff_cmp aflplusplus_fishfuzz_allbb aflplusplus_fishfuzz_noasan aflplusplus_fishfuzz_noasan_all

kdsjZh avatar Oct 19 '23 14:10 kdsjZh

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-10-21-fishfuzz --fuzzers aflplusplus_ff_cmp aflplusplus_fishfuzz_allbb aflplusplus_fishfuzz_noasan aflplusplus_fishfuzz_noasan_all

DonggeLiu avatar Oct 21 '23 10:10 DonggeLiu

Experiment 2023-10-21-fishfuzz data and results will be available later at: The experiment data. The experiment report.

DonggeLiu avatar Oct 22 '23 10:10 DonggeLiu

Hi Dongge @Alan32Liu ,

I'm plaining to do an ablation study about how each component works, with aflpp's tracepc option only (I found one possible bug with cmplog feature, so I opt for the tracepc only). Therefore I'm wondering could you help me with that? Many thanks for your patience and help!


/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-10-25-fishfuzz --fuzzers aflplusplus_ff_cmp aflplusplus_fishfuzz aflplusplus_fishfuzz_noexploit


kdsjZh avatar Oct 25 '23 18:10 kdsjZh

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-10-25-fishfuzz --fuzzers aflplusplus_ff_cmp aflplusplus_fishfuzz aflplusplus_fishfuzz_noexploit

DonggeLiu avatar Oct 26 '23 04:10 DonggeLiu

Sure! Experiment 2023-10-25-fishfuzz data and results will be available later at: The experiment data. The experiment report.

DonggeLiu avatar Oct 26 '23 04:10 DonggeLiu

Hi @Alan32Liu Dongge,

I profile the fuzzer and find out that the sampling in exploitation stage has super high overhead, therefore I reduce the sampling frequency a bit and want another round of campaign if possible. Thank!

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-11-01-fishfuzz --fuzzers aflplusplus_ff_cmp aflplusplus_fishfuzz aflplusplus_fishfuzz_noexploit

kdsjZh avatar Nov 01 '23 18:11 kdsjZh

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-11-01-fishfuzz --fuzzers aflplusplus_ff_cmp aflplusplus_fishfuzz aflplusplus_fishfuzz_noexploit

DonggeLiu avatar Nov 02 '23 04:11 DonggeLiu

Experiment 2023-11-01-fishfuzz data and results will be available later at: The experiment data. The experiment report.

DonggeLiu avatar Nov 02 '23 04:11 DonggeLiu

Hi Dongge,

@Alan32Liu Recently, I contacted Marc and located the cmplog issue. I integrated the fix and rewritten fishpp based on the latest AFL++. Could you help me with a dry run to test if my fix/latest integration is correct?

BTW, recently Marc tried the Fish++ vs AFL++ on bug benchmark, results shows that Fish++ is able to improve based on AFL++ baseline (ff_cmp_3). So I would like to request a bug evaluation as well.

# coverage
/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-12-04-fishfuzz --fuzzers fishpp_new fishpp_new_nocmp aflplusplus aflplusplus_nocmp
# bug
/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-12-04-fishfuzz-bug --fuzzers fishpp_new fishpp_new_nocmp aflplusplus aflplusplus_nocmp --benchmarks bloaty_fuzz_target_52948c harfbuzz_hb-shape-fuzzer_17863b libxml2_xml_e85b9b mbedtls_fuzz_dtlsclient_7c6b0e php_php-fuzz-parser_0dbedb

Thanks!

kdsjZh avatar Dec 04 '23 10:12 kdsjZh

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-12-06-fishfuzz --fuzzers fishpp_new fishpp_new_nocmp aflplusplus aflplusplus_nocmp

DonggeLiu avatar Dec 06 '23 00:12 DonggeLiu

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-12-06-fishfuzz-bug --fuzzers fishpp_new fishpp_new_nocmp aflplusplus aflplusplus_nocmp --benchmarks bloaty_fuzz_target_52948c harfbuzz_hb-shape-fuzzer_17863b libxml2_xml_e85b9b mbedtls_fuzz_dtlsclient_7c6b0e php_php-fuzz-parser_0dbedb

DonggeLiu avatar Dec 06 '23 00:12 DonggeLiu

Experiment 2023-12-06-fishfuzz data and results will be available later at: The experiment data. The experiment report.

Experiment 2023-12-06-fishfuzz-bug data and results will be available later at: The experiment data. The experiment report.

DonggeLiu avatar Dec 06 '23 02:12 DonggeLiu

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-12-06-fishfuzz --fuzzers fishpp_new fishpp_new_nocmp aflplusplus aflplusplus_nocmp

jonathanmetzman avatar Dec 10 '23 01:12 jonathanmetzman

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-12-06-fishfuzz-bug --fuzzers fishpp_new fishpp_new_nocmp aflplusplus aflplusplus_nocmp --benchmarks bloaty_fuzz_target_52948c harfbuzz_hb-shape-fuzzer_17863b libxml2_xml_e85b9b mbedtls_fuzz_dtlsclient_7c6b0e php_php-fuzz-parser_0dbedb

jonathanmetzman avatar Dec 10 '23 01:12 jonathanmetzman

Hi @Alan32Liu ,

I analyzed the data from this experiment and found that the path frequency sampling introduced notable overhead (in execution speed), while Fishpp already implemented a cheaper alternative in its exploitation mode. Therefore I added an explore mode Fishpp to avoid this overhead.

Could you help me run another campaign to verify? Thanks!

# cov (we only need cmplog version)

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-12-11-fishfuzz --fuzzers fishpp_new fishpp_new_exp aflplusplus 

# bug (nocmp seems to be better in some scenarios, therefore we need both cmp and nocmp for Fishpp explore)
/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-12-11-fishfuzz-bug --fuzzers fishpp_new_exp aflplusplus fishpp_new_nocmp_exp aflplusplus_nocmp --benchmarks bloaty_fuzz_target_52948c harfbuzz_hb-shape-fuzzer_17863b libxml2_xml_e85b9b mbedtls_fuzz_dtlsclient_7c6b0e php_php-fuzz-parser_0dbedb

kdsjZh avatar Dec 11 '23 14:12 kdsjZh

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-12-11-fishfuzz --fuzzers fishpp_new fishpp_new_exp aflplusplus

DonggeLiu avatar Dec 11 '23 23:12 DonggeLiu

/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-12-11-fishfuzz-bug --fuzzers fishpp_new_exp aflplusplus fishpp_new_nocmp_exp aflplusplus_nocmp --benchmarks bloaty_fuzz_target_52948c harfbuzz_hb-shape-fuzzer_17863b libxml2_xml_e85b9b mbedtls_fuzz_dtlsclient_7c6b0e php_php-fuzz-parser_0dbedb

DonggeLiu avatar Dec 11 '23 23:12 DonggeLiu

Experiment 2023-12-11-fishfuzz data and results will be available later at: The experiment data. The experiment report.

Experiment 2023-12-11-fishfuzz-bug data and results will be available later at: The experiment data. The experiment report.

DonggeLiu avatar Dec 11 '23 23:12 DonggeLiu

Hi Dongge @Alan32Liu ,

I checked the data in existing reports and found out that h264 is not run.

The reports (both standard-cov and recent ff reports) are using cached data. e.g., in data.csv.gz from 2023-12-11-standard-cov, the data of openh264_decoder_fuzzer afl is copied from 2023-09-21-libafl. while aflfast's data are copied from 2023-03-20-ecofuzz.

BTW, I also notice that the aflplusplus is also not evaluated in 2023-12-11-standard-cov. and in the report, they cached results from 2023-12-10-aflpp, which uses a different aflplusplus commit. I don't know if it's an intended behavior. So this is just a head up.

kdsjZh avatar Dec 15 '23 09:12 kdsjZh

I just updated the fishpp to the AFL++ 4.09c. could you help us do another round of test? Thanks!


/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-12-15-fishfuzz --fuzzers fishpp_new fishpp_new_exp fishpp_new_fast aflplusplus


/gcbrun run_experiment.py -a --experiment-config /opt/fuzzbench/service/experiment-config.yaml --experiment-name 2023-12-15-fishfuzz-bug --fuzzers fishpp_new_exp aflplusplus fishpp_new_fast fishpp_new --benchmarks bloaty_fuzz_target_52948c harfbuzz_hb-shape-fuzzer_17863b libxml2_xml_e85b9b mbedtls_fuzz_dtlsclient_7c6b0e php_php-fuzz-parser_0dbedb


kdsjZh avatar Dec 15 '23 09:12 kdsjZh

The reports (both standard-cov and recent ff reports) are using cached data. e.g., in data.csv.gz from 2023-12-11-standard-cov, the data of openh264_decoder_fuzzer afl is copied from 2023-09-21-libafl. while aflfast's data are copied from 2023-03-20-ecofuzz.

BTW, I also notice that the aflplusplus is also not evaluated in 2023-12-11-standard-cov. and in the report, they cached results from 2023-12-10-aflpp, which uses a different aflplusplus commit. I don't know if it's an intended behavior. So this is just a head up.

Using data from old experiments is expected and default behavior. If a fuzzer-benchmark pair is not modified, there is no solid reason for re-generating its result, which can be expensive and time-consuming.

If you'd like to re-run all fuzzer-benchmark pairs, then you need to change this config. However, this is strongly discouraged due to the reasons above.

If you'd like to use a different version of a fuzzer, then please commit/merge the version into this PR. This protects your experiment from unexpected changes from other fuzzers, and ensures a clean and easy-to-access experiment environment/baseline for each report.

DonggeLiu avatar Dec 15 '23 10:12 DonggeLiu