# Fuzzing OpenSSL # **Requirements** * honggfuzz * clang-4.0, or newer (5.0/6.0 work as well) * openssl 1.1.0 (or, the master branch from git) * libressl/boringssl/openssl-1.0.2 work as well, though they might require specific building instructions **Preparation (for OpenSSL 1.1.0/master)** 1. Compile honggfuzz 2. Unpack/Clone OpenSSL ```shell $ git clone --depth=1 https://github.com/openssl/openssl.git $ mv openssl openssl-master ``` 3. Use ```compile_hfuzz_openssl_master.sh``` to configure OpenSSL ```shell $ cd openssl-master $ /home/jagger/src/honggfuzz/examples/openssl/compile_hfuzz_openssl_master.sh [enable-asan|enable-msan|enable-ubsan] ``` 4. Compile OpenSSL ```shell $ make ``` 5. Prepare fuzzing binaries The _make.sh_ script will compile honggfuzz and libFuzzer binaries. Syntax: ```shell make.sh [address|memory|undefined] ``` ```shell $ cd .. $ /home/jagger/src/honggfuzz/examples/openssl/make.sh openssl-master address ``` **Fuzzing** ```shell $ /home/jagger/src/honggfuzz/honggfuzz -f corpus_server/ -P -- ./openssl-master.address.server $ /home/jagger/src/honggfuzz/honggfuzz -f corpus_client/ -P -- ./openssl-master.address.client $ /home/jagger/src/honggfuzz/honggfuzz -f corpus_x509/ -P -- ./openssl-master.address.x509 $ /home/jagger/src/honggfuzz/honggfuzz -f corpus_privkey/ -P -- ./openssl-master.address.privkey ```