The PASTIS project is a fuzzing framework aiming at combining various software testing techniques
within the same workflow to perform collaborative fuzzing also called ensemble fuzzing.
At the moment it supports the following fuzzing engines:
Quick start
Installation
The PASTIS framework can be installed with:
pip install pastis-framework
The pip package will install all dependencies and the tritondse
engine.
AFL++
To install AFL++ please refer to the official documentation.
Honggfuzz (>= v2.6)
To install Honggfuzz please refer to the official documentation.
Usage
The main component is the broker that will serve the appropriate configurations to fuzzing
engines and that will aggregate results. An example is the following:
tar xvf doc/figs/fsm-demo.tar.gz && cd fsm-demo
make
pastis-broker -b bin -s initial -w output
It will run the broker using binaries in the bin directory. Initial corpus
is initial and the whole output workspace will be save in output. By default
it will listen on the local interface on port 5555.
Then fuzzing engines can be launched to start testing the software.
pastis-aflpp online
Or:
pastis-tritondse online
Full documentation is available: here
Adding a Fuzzer
Integrating a fuzzer requires writing a Python driver using the libpasts library
installed by the package. It requires implementing some callbacks to receive the initial
configuration and also to receive inputs from the broker. Conversely the API enables
sending newly generated inputs to the broker.
The process is further detailed in the documentation.
Note
We warmly welcome any Pull Request to add the support for a new fuzzing engine.
Docker
You can also run PASTIS using Docker:
# Pull from GitHub's registry.
docker pull ghcr.io/quarkslab/pastis:latest
# Or build the image.
docker build -t pastis .
# And run a container.
docker run -v <HOST-WORKSPACE>:/workspace --cap-add=SYS_PTRACE --user $(id -u $USER):$(id -g $USER) -it ghcr.io/quarkslab/pastis # or pastis if you buily the image locally.
To open another terminal to an already running container:
docker exec -it $(docker ps | grep 'pastis' | awk '{print $1}') /bin/bash
The PASTIS Docker image has already installed all the needed dependencies such as AFL++ and Honggfuzz.
Papers and conference
-
Symbolic Execution the Swiss-Knife of the Reverse Engineer Toolbox
Venue: KLEE Workshop, 2022 [:books:] [:movie_camera:]
Authors: Robin David, Richard Abou Chaaya, Christian Heitman
-
From source code to crash test-case through software testing automation
Venue: European Cyber Week, C&ESAR Workshop, 2021 paper slides
Authors: Robin David, Jonathan Salwan, Justin Bourroux
Cite Pastis
soon
Contributors
Pastis is powered by Quarkslab and initially financed by DGA-MI.
Release files for pastis-framework 1.0.13
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pastis-framework-1.0.13.tar.gz | 89.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pastis_framework-1.0.13-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 195.0 kB
Release files / pastis-framework-1.0.13.tar.gz
| Download URL | pastis-framework-1.0.13.tar.gz |
|---|---|
| Size | 89.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bae83cd70a4f7008b506d117a89e27404273911887df7bc2c3a2ecdf0e2e3149
|
|
BLAKE2b-256 checksum How to use checksums |
8282c659e045b488699b54388756cef8f2029cf6a5f8fab1cad3af3e4c35a25f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.11.9
|
Release files / pastis_framework-1.0.13-py3-none-any.whl
| Download URL | pastis_framework-1.0.13-py3-none-any.whl |
|---|---|
| Size | 105.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e24da5b184c6f2f0eacd9eee21f200c7ccf63ba11769e7537bc6557af8b95aa3
|
|
BLAKE2b-256 checksum How to use checksums |
57eb93805dde916e8cf91494b53f0816abea82e6e41636ab96b8b79e639ced52
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.11.9
|