Was macht trailmark?
Erstellt und durchsucht mehrsprachige Quellcode-Graphen für Sicherheitsanalysen. Enthält Voranalyse-Pässe für Explosionsradius, Taint-Propagation, Privilegiengrenzen und Einstiegspunkt-Enumeration. Verwenden Sie dies beim Analysieren von Aufrufpfaden, Kartieren der Angriffsfläche, Finden von Komplexitäts-Hotspots, Enumerieren von Einstiegspunkten, Verfolgen von Taint-Propagation, Messen des Explosionsradius oder Erstellen eines Code-Graphen zur Audit-Priorisierung. Bevorzugen Sie trailmark.parse.detect_languages() oder --language auto, wenn die Zielsprache unbekannt oder polyglott ist.
Funktionen
- Mehrsprachige Unterstützung: Python, JavaScript, TypeScript, Java, Go, Rust, C, C++, C#, Ruby, PHP, Swift, Kotlin, Solidity, Vyper
- Voranalyse-Pässe:
- Privilegiengrenzen (z. B.
admin_required) - Taint-Quellen und -Senken
- Explosionsradius-Berechnung
- Aufrufpfad-Analyse
- Privilegiengrenzen (z. B.
- Graph-Erstellung: Generiert interaktive Code-Graphen im DOT-Format
- Abfrage-Engine: Durchsuchen Sie den erstellten Graphen nach bestimmten Mustern oder Beziehungen
Plattformen
- CLI: Bietet einen flexiblen Kommandozeilen-Modus für Batch-Verarbeitung und Skripterstellung
- Python API: Ermöglicht die Integration in benutzerdefinierte Analyse-Pipelines
So funktioniert es
Trailmark analysiert Quellcode-Dateien und erstellt einen abstrakten Syntaxbaum (AST) für jede unterstützte Sprache. Es identifiziert dann wichtige Code-Strukturen wie Funktionen, Klassen, Importe und Aufrufbeziehungen. Basierend auf dieser Analyse werden die folgenden Voranalyse-Pässe durchgeführt:
- Privilegiengrenzen: Findet Stellen im Code, die Zugriffskontrollen implementieren (z. B. Decoratoren wie
@admin_requiredin Python) - Taint-Propagation: Identifiziert Eingabequellen (z. B. HTTP-Anfragen) und Senken (z. B. SQL-Datenbanken) für Datenflüsse
- Explosionsradius: Berechnet, wie viele Code-Pfade von einer gegebenen Änderung betroffen wären
- Einstiegspunkt-Enumeration: Listet alle öffentlich zugänglichen Funktionen oder API-Endpunkte auf
Die Ergebnisse werden als gerichteter Graph im DOT-Format ausgegeben, der die Beziehungen zwischen den Code-Elementen visualisiert. Optional können die Ergebnisse auch als JSON oder CSV exportiert werden.
Verwendung
CLI
trailmark parse --language python --input /path/to/code --output graph.dot
trailmark query --input graph.dot --type taint_sources
Python API
import trailmark
# Erstelle einen Parser für Python-Code
parser = trailmark.Parser(language="python")
# Parse ein Verzeichnis
graph = parser.parse("/path/to/code")
# Führe Voranalyse-Pässe durch
privilege_boundaries = graph.find_privilege_boundaries()
taint_sources = graph.find_taint_sources()
entry_points = graph.enumerate_entry_points()
# Exportiere den Graphen
graph.export("graph.dot")
Konfiguration
--language auto: Automatische Erkennung der Sprache (für polyglotte Projekte)--output-format dot|json|csv: Ausgabeformat--analyze-blst-radius: Explosionsradius-Analyse aktivieren--taint-passthrough: Taint-Propagation-Pass aktivieren--privilege-patterns: Benutzerdefinierte Privilegiengrenzen-Muster
Beispielausgabe
digraph G {
node [shape=box, style=filled, fillcolor=lightblue];
"main" -> "parse_input";
"parse_input" -> "validate";
"main" -> "handle_request";
"handle_request" -> "authenticate" [label="@admin_required"];
}
Fehlerbehebung
- Sprachfehlererkennung: Wenn die automatische Erkennung fehlschlägt, geben Sie die Sprache explizit mit
--languagean - Große Projekte: Verwenden Sie
--limit-files N, um die Anzahl der zu analysierenden Dateien zu begrenzen - Graph-Größe: Aktivieren Sie
--simplify, um redundante Knoten zu entfernen