Pysa

Der Python Static Analyzer Pysa führt Taint-Analysen durch um potenzielle Sicherheitsprobleme zu identifizieren. Dabei verfolgt Pysa Datenströme von ihrem Ursprung zu ihrem Endpunkt und identifiziert dabei anfälligen Code.

Konfiguration

Pysa verwendet zwei Dateitypen für die Konfiguration:

  • eine taint.config-Datei im JSON-Format, in der sources, sinks, features und rules definiert werden.

    {
      "comment": "UserControlled, Test, Demo sources are predefined. Same for Demo, Test and RemoteCodeExecution sinks",
      "sources": [],
      "sinks": [],
      "features": [],
      "rules": []
    }
    
  • Dateien mit der Endung .pysa in einem Verzeichnis, das mit taint_models_path in eurer .pyre_configuration-Datei konfiguriert wurde.

Praktische Beispiele findet ihr im Pyre-Repository.

Verwendung

Pyre kann aufgerufen werden, z.B. mit

$ $ pipenv run pyre analyze --save-results-to ./

Die Option --save-results-to speichert detaillierte Ergebnisse in ./taint-output.json.

Pysa Postprozessor

Installation

$ pipenv install fb-sapp

Verwendung

  1. Parsen der JSON-Datei, z.B. mit

    $ pipenv run sapp --database-name sapp.db analyze ./taint-output.json
    

    Die Ergebnisse werden in der lokalen SQLite-Datei sapp.db gespeichert.

  2. Erkunden der Probleme mit

    $ pipenv run sapp --database-name sapp.db explore
    

    Dies startet ein IPython-Interface, das mit der SQLite-Datenbank verbunden ist:

    issues

    listet alle Probleme auf

    issue 1

    wählt das erste Problem aus

    trace

    zeigt den Datenfluss von source bis sink an

    n

    springt zum nächsten Aufruf

    list

    zeigt den Quellcode des Aufrufs

    jump 1

    springt zum ersten Aufruf und zeigt den Quellcode an

Weitere Kommandos erhaltet ihr in Commands.