
Manul ist ein abdeckungsgesteuerter paralleler Fuzzer für Open-Source- und Blackbox-Binärdateien unter Windows, Linux und macOS.

Manul ist ein abdeckungsgesteuerter paralleler Fuzzer für Open-Source- und Black-Box-Binärdateien unter Windows, Linux und macOS (Beta), geschrieben in reinem Python.
pip3 install psutil
git clone https://github.com/mxmssh/manul
cd manul
mkdir in
mkdir out
echo "AAAAAA" > in/test
python3 manul.py -i in -o out -n 4 "linux/test/test_afl @@"
sudo apt-get install gcc make git wget
git clone https://gitlab.com/akihe/radamsa.git && cd radamsa && make && sudo make install
Es ist nicht erforderlich, Radamsa unter Windows zu installieren. Manul wird auf dieser Plattform mit der nativen Radamsa-Bibliothek ausgeliefert.
| CVE-IDs | Produkt | Finder |
|---|---|---|
| CVE-2019-9631 CVE-2019-7310 CVE-2019-9959 | Poppler | Maksim Shudrak |
| CVE-2018-17019 CVE-2018-16807 CVE-2019-12175 | Bro/Zeek | Maksim Shudrak |
Wenn Sie mit Manul einen neuen Fehler gefunden haben, kontaktieren Sie mich bitte, und ich werde Sie in die Liste aufnehmen.

pip install pywin32) auf Windows-Plattform (nur für DBI-Persistenzmodus erforderlich).Derzeit unterstützt Manul zwei Arten der Instrumentierung: AFL-basiert (afl-gcc, afl-clang und afl-clang-fast) und DBI.
Instrumentieren Sie Ihr Ziel mit afl-gcc oder afl-clang-fast und Address Sanitizer (empfohlen für bessere Ergebnisse). Zum Beispiel:
CC=afl-gcc CXX=afl-g++ CFLAGS=-fsanitize=address CXXFLAGS=-fsanitize=address cmake <pfad_zu_ihrem_ziel>
make -j 8
USE_ASAN=1 CC=afl-clang-fast CXX=afl-clang-fast++ cmake <pfad_zu_ihrem_ziel>
make -j 8
Weitere Details finden Sie in diesen Anweisungen.
Sie müssen Ihr Ziel in diesem Modus nicht instrumentieren, müssen aber die neueste Version des DynamoRIO-Frameworks für Windows oder Linux herunterladen.
Manul wird mit vorcompilierten x86/x64-Clients für Linux und Windows ausgeliefert. Sie finden sie in den folgenden Ordnern:
linux/dbi_32|dbi_64/libbinafl.so (DynamoRIO-Client)
win/dbi_32|dbi_64/binafl.dll
Leider wird DynamoRIO unter macOS nicht offiziell unterstützt.
Sie finden die neuesten DynamoRIO-Releasepakete auf der DynamoRIO-Downloadseite.
Sie müssen die folgenden Zeilen in der Datei manul.config auskommentieren und den korrekten Pfad zum DynamoRIO-Launcher und -Client angeben.
# Wählen Sie das DBI-Framework, um die Abdeckung an Manul zurückzugeben ("dynamorio" oder "pin"). Beispiel: dbi = dynamorio
dbi = dynamorio
# Wenn der dbi-Parameter nicht None ist, sollten der Pfad zum DBI-Engine-Launcher und zum DBI-Client angegeben werden.
dbi_root = /home/max/DynamoRIO/bin64/drrun
dbi_client_root = /home/max/manul/linux/dbi_64/libbinafl.so
dbi_client_libs = None
Zusätzlich können Sie die Leistung Ihrer Black-Box-Fuzzing-Kampagne durch persistentes In-Memory-Fuzzing steigern. In diesem Modus sollten Sie Manul anweisen, eine bestimmte Funktion zu instrumentieren (ja, Sie müssen sie durch Disassemblieren Ihrer Binärdatei finden), und es wird diese in einer Schleife ausführen, indem Sie die folgenden Zeilen auskommentieren:
dbi_persistence_mode = 1
dbi_target_module = afl_test
dbi_target_method = open_file
#dbi_target_offset = 0x3198 # optional können Sie den Offset dieser Funktion anstelle des Namens angeben
dbi_fuzz_iterations = 1000
Die Autoren von winAFL erklären sehr gut, wie das funktioniert, hier. Manul verwendet einen großen Teil des winAFL-Instrumentierungsbibliothekscodes, um mit einem Ziel zu kommunizieren und es zu instrumentieren.
WICHTIGER HINWEIS: Sie sollten einen 32-Bit-Launcher und 32-Bit-Client verwenden, um 32-Bit-Binärdateien zu fuzzen, und einen 64-Bit-Launcher und 64-Bit-Client für 64-Bit-Binärdateien!
Um die Instrumentierungsbibliothek zu kompilieren, müssen Sie die neueste Version von DynamoRIO verwenden. Der Quellcode der Instrumentierungsbibliothek befindet sich in dbi_clients_src im Hauptordner von Manul.
64-Bit Linux
cd dbi_clients_src
wget <DynamoRIO-x86_64-Linux-X.XX.XXXX-X.tar.gz> - Laden Sie das neueste DynamoRIO herunter
tar xvf DynamoRIO-x86_64-X.XX.XXXX-X.tar.gz
mkdir client_64
cd client_64
cmake ../dr_cov/ -DDynamoRIO_DIR=/home/max/manul/dbi_clients_src/DynamoRIO-x86_64-Linux-X.XX.XXXX-X.tar.gz/cmake
make
32-Bit Linux
cd dbi_clients_src
wget <DynamoRIO-i386-Linux-X.XX.XXXX-X.tar.gz> - Laden Sie das neueste DynamoRIO herunter
tar xvf DynamoRIO-x86_64-X.XX.XXXX-X.tar.gz
mkdir client_64
cd client_64
CFLAGS=-m32 CXXFLAGS=-m32 cmake ../dr_cov/ -DDynamoRIO_DIR=/home/max/manul/dbi_clients_src/DynamoRIO-i386-Linux-X.XX.XXXX-X.tar.gz/cmake
make
Unter Windows ist der einfachste Weg, die Bibliothek zu kompilieren, Visual Studio zu installieren (getestet mit Versionen 2017 & 2013), VS20XX Cross Tools Command Prompt zu starten und die folgenden Befehle auszuführen:
64-Bit Windows
cd dbi_clients_src
<Laden Sie die neueste Version von DynamoRIO herunter und extrahieren Sie sie>
mkdir client_64
cd client_64
cmake -G"Visual Studio 15 Win64" ..\dr_cov\ -DDynamoRIO_DIR=C:\Users\max\manul\dbi_clients_src\DynamoRIO-Windows-XXXX.XX.X.X\cmake
cmake --build . --config RelWithDebInfo (oder nur Debug, falls erforderlich)
32-Bit Windows
cd dbi_clients_src
<Laden Sie die neueste Version von DynamoRIO herunter und extrahieren Sie sie>
mkdir client_32
cd client_32
cmake -G"Visual Studio 15" ..\dr_cov\ -DDynamoRIO_DIR=C:\Users\max\manul\dbi_clients_src\DynamoRIO-Windows-XXXX.XX.X.X\cmake
cmake --build . --config RelWithDebInfo (oder nur Debug, falls erforderlich)
Manul unterstützte ursprünglich Intel PIN-unterstütztes abdeckungsgesteuertes Fuzzing, wird aber aufgrund geringer Leistung und hohem Wartungsaufwand nicht mehr unterstützt.
Die am häufigsten verwendeten Optionen können über die Befehlszeile bereitgestellt werden. Weitere Optionen werden über eine Konfigurationsdatei (manul.config) unterstützt.
Beispiel: python3 manul.py -i corpus -o out_dir -n 40 "target @@"
positionale Argumente:
target_binary Die auszuführende Ziel-Binärdatei und Optionen (vergessen Sie nicht, Anführungszeichen zu setzen, z.B. "target e @@").
optionale Argumente:
-h, --help Zeigt diese Hilfemeldung an und beendet sich.
-n NFUZZERS Anzahl paralleler Fuzzer
-s Führt dummes Fuzzing aus (keine Code-Instrumentierung)
-c CONFIG Pfad zur Konfigurationsdatei mit zusätzlichen Optionen (siehe Abschnitt Konfigurationsdatei-Optionen unten)
-r Vorherige Sitzung wiederherstellen