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-Eingaben
  • coverage.py für ungetestete Codebereiche
  • Invariant-Verletzungen analysieren

Best Practices

  • Fuzz in Sandbox
  • Ressourcen begrenzen
  • Automatisierte Crash-Analyse

Ressourcen