ltlfuzzer / LTL-Fuzzer

Linear-time Temporal Logic guided Greybox Fuzzing (ICSE'22)
Apache License 2.0
51 stars 6 forks source link
fuzzing model-checker model-checking network-fuzzer protocol-fuzzing runtime-verification test-oracles testing testing-tools

LTL-Fuzzer

LTL-Fuzzer is a greybox fuzzer to find violations of arbitrary Linear-time Temporal Logic(LTL) properties. It is built on top of the AFL fuzzer and involves additional program instrumentation to check if a particular execution trace is accepted by the Büchi automaton representing the negation of the given LTL property. Our framework takes as input a sequential program written in C/C++, and an LTL property. It finds violations, or counterexample traces, of the LTL property in stateful software systems.

LTL-Fuzzer substantially extends directed greybox fuzzing to witness arbitrarily complex event orderings. We note that existing directed greybox fuzzing approaches are limited to witnessing reaching a location or witnessing simple event orderings such as crashes or use-after-free. This is the main contribution of our work: algorithms and an implementation of our ideas in a tool that is able to validate any LTL property, thereby covering a much more expressive class of properties than crashes or use-after-free. Our work adapts directed greybox fuzzing (which directs the search towards specific program locations) to find violations of temporal logic formulae.

Publication

The paper PDF can be found at https://arxiv.org/abs/2109.02312.

    @InProceedings{ltlfuzzer,
     title={Linear-time Temporal Logic guided Greybox Fuzzing},
     author={Meng, Ruijie and Dong, Zhen and Li, Jialin and Beschastnikh, Ivan and Roychoudhury, Abhik},
     booktitle={proceedings of the 37th IEEE International Conference on Software Engineering (ICSE 2022)},
     year={2022},
     publisher={ACM}
    }

Building

Requirements

Installing dependencies

   wget -q -O - https://www.lrde.epita.fr/repo/debian.gpg | sudo apt-key add -
   sudo echo 'deb http://www.lrde.epita.fr/repo/debian/ stable/' >> /etc/apt/sources.list
   sudo apt update
   sudo apt install -y spot libspot-dev libgtest-dev
   sudo install python3 python3-dev python3-pip
   sudo pip3 install --upgrade pip
   sudo pip3 install networkx pydot pydotplus

Installing LTL-Fuzzer

RERS Example

Testing Framework Introduction

Preparing for Instrumentation

Starting Instrumentation

Launching Fuzzing

Protocol Example

Testing Framework Introduction

Preparing for Instrumentation

Starting Instrumentation

Launching Fuzzing

Contributions

Contributors

Other Contributors

We use AFLGo as one component to direct fuzzing towards a particular program location. Thanks to AFLGo's developers. We also welcome other contributors to improve and extend LTL-Fuzzer.

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.