Skip to content

Implementation of differential fuzz testing for TLS handshake messages

License

Notifications You must be signed in to change notification settings

hso-esk/tls-diff-testing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Differential fuzz testing of the TLS handshake

This is the software implementing our differential fuzz test approach for the TLS handshake as presented in our manuscript "Exploiting Dissent: Towards Fuzzing-based Differential Black-Box Testing of TLS Implementations". The paper will soon appear in IEEE Transactions on Dependable and Secure Computing (TDSC). A preprint is available from our institute's homepage.

The software consists of two main components:

  • A shell script ("tls-server-batch") allowing to set up the five TLS server implementations we used in our paper (OpenSSL, MatrixSSL, wolfSSL, mbedTLS and BoringSSL).
  • A C++ framework and some Python scripts ("tls-diff-testing") for generating TLS test messages, stimulating the five TLS servers, and for analyzing and visualizing data.

Please note: our software is evolving and is likely going to be subject to refactoring and restructuring. We cannot guarantee API stability in any form.

How to use the code?

In order to use our software:

  1. Download and build cryptopp

Our software uses the Crypto++ Cryptographic Library for cryptographic operations. You need to download and build Crypto++ before building our software. Everything is condensed in the shell script setup_cryptopp.sh:

# Download and build cryptopp
./setup_cryptopp.sh
  1. Setup TLS implementations (servers). Some of them might require additional software/libraries to be installed.
pushd tls-server-batch
# Download and build OpenSSL, MatrixSSL, wolfSSL, mbedTLS and BoringSSL
./setup.sh
popd
  1. Build tls-diff-testing components
pushd tls-diff-testing
# Build tls-diff-testing components
make
  1. Generate test input (TLS ClientHello messages)
pushd generator
# Run input generation tool multiple times (adapt parameters to your needs within shell script)
./macros/generate_multi.sh
popd
popd
  1. Send test input to TLS servers
pushd tls-server-batch
# Launch servers (20 instances per implementation, adapt the number "20" to the performance of your machine)
# You will need the "screen" tool for that.
./launch.sh 20
popd

pushd tls-diff-testing/apps/stimulator
# Stimulate TLS servers (adapt "-s20" to the number chosen above)
for fin in $(ls ../../generator/iteration-*/stimuli.hex); do
    ./stimulator -S5 -s20 $fin | tee ${fin}.responses
done
popd
  1. Plot data. You need to have Python 2.7.x and Matplotlib for Python installed.
pushd tls-diff-testing/apps/python_plot_urs
# Read response data and plot (adapt paths within Python script before)
./plot_urs.py
popd

Contact

In case you have any questions or suggestions regarding our approach or our software tools, please contact: Andreas Walz [[email protected]].

Copyright and License

This software is licensed under the 3-clause BSD license. This license gives everyone the right to use and distribute the code, either in binary or source code format, as long as the copyright license is retained in the source code.

Copyright (C) 2017
Andreas Walz [[email protected]]
Offenburg University of Applied Sciences
Institute of Reliable Embedded Systems and Communications Electronics (ivESK)
[https://ivesk.hs-offenburg.de/]
All rights reserved.

About

Implementation of differential fuzz testing for TLS handshake messages

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published