Dynamisches Fuzz-Testing (coverage-guided) und Runtime-Invariant-Injektion sind unverzichtbar, um versteckte Fehler und Verletzungen von Geschäftsregeln aufzuspüren. In dieser deutschen Anleitung erfährst du:
- Einrichtung von AFL in Python
- Definition und Injektion von Invariants mittels
icontract
- Analyse von Abstürzen und zusätzliches Debugging
- Beste Sicherheits- und Performance-Praktiken
Was ist Dynamisches Fuzz-Testing?
Dynamisches Fuzzing erzeugt zufällige oder fehlerhafte Eingaben, misst die Codeabdeckung und passt die Testfälle an, um ungetestete Pfade zu finden.
Warum Invariants Injezieren?
Ein Invariant ist eine Bedingung, die stets true sein muss (z.B. sortierte Liste). Injektion ermöglicht:
- Echtzeit-Validierung von Annahmen
- Sofortiger Abbruch bei Verletzung
- Stack-Trace-Erfassung für Debugging
Tools & Bibliotheken
python-afl
icontract
coverage.py
logging
Schritt-für-Schritt
Installation
sudo apt-get install afl
pip install python-afl
Fuzz-Skript
import afl, sys
from mein_modul import parse_and_compute
afl.init()
for dat in sys.stdin:
parse_and_compute(dat.strip().encode('utf-8', errors='ignore'))
Invariant-Injektion
import icontract
@icontract.require(lambda x: x >= 0, "x muss ≥ 0 sein")
@icontract.ensure(lambda result, x: result >= x, "Ergebnis nicht gültig")
def compute(x: int) -> int:
return x * 2
Ergebnisse Auswerten
findings/
für Crash-Eingabencoverage.py
für ungetestete Codebereiche- Invariant-Verletzungen analysieren
Best Practices
- Fuzz in Sandbox
- Ressourcen begrenzen
- Automatisierte Crash-Analyse