
Runtime behavioral analysis tool, das verdächtige Pakete in Docker sandboxt, Systemaufrufe mit strace verfolgt, Prozesskaskaden in gerichtete Graphen abbildet und Supply-Chain-Angriffe mithilfe von YARA-Signaturen, ML-Anomalieerkennung und zeitlicher Musteranalyse erkennt.

TraceTree-Demo
TraceTree (cascade-analyzer) ist ein autonomer Sicherheitsorganismus, der für die agentische Ära entwickelt wurde. Es geht über einfaches Scannen hinaus und schafft ein robustes, gehärtetes und skalierbares Erkennungsökosystem. Wie sein Maskottchen, die Spinne, webt TraceTree mit seinen acht spezialisierten „Beinen" ein umfassendes Schutznetz um Ihren Entwicklungsworkflow.
TraceTree kann als Prüfinstanz verwendet werden, bevor Agenten oder Menschen einer Paketinstallation vertrauen. Siehe Export von Verhaltensbelegen für eine kleine JSON/SARIF-kompatible Belegform, die Ziel-Hash, Sandbox-Richtlinie, beobachtetes Verhalten, Artefakt-Hashes, Bewertung und Datenschutz-Standardeinstellungen zusammenfasst, ohne die rohen Syscall-Protokolle offenzulegen.
TraceTree/ ├── api/ # API stubs ├── codebase-analysis-docs/ # Architecture documents and knowledge guides ├── data/ # Behavioral signatures, rules, and training datasets ├── docs/ # Documentation assets ├── examples/ # Demo scripts and usage examples ├── frontend/ # Next.js/React web dashboard ├── graph/ # NetworkX directed graph builder ├── hooks/ # Git/Shell hooks for background monitoring ├── logs/ # Execution trace logs and strace outputs ├── macapp/ # Native macOS menu bar app ├── mascot/ # Console ASCII spider mascot ├── mcp/ # MCP server security testing module ├── ml/ # Machine learning classification and anomaly detection ├── monitor/ # Core syscall parser, YARA matching, and timelines ├── orchestrator/ # TypeScript multi-agent coordination server ├── repocheckai/ # Repository analysis engine (TypeScript/Node) ├── samples/ # Malware and benign files for sandbox tests ├── sandbox/ # Docker container manager and strace sandbox ├── test_targets/ # Mock packages/servers for detection testing ├── tests/ # Unit, integration, and system tests ├── watcher/ # File system change listener daemon └── worker/ # Background task execution worker
## Die 8 Beine der TraceTree-Spinne
1. **Bein 1: Sandbox-Isolation (Die Falle)** — Führt Ziele in isolierten Docker-Containern (oder einem leistungsstarken `direct`-Modus) aus, in denen Bedrohungen physisch eingeschlossen sind.
2. **Bein 2: Syscall-Parsing (Das Nervensystem)** — Eine hochpräzise Engine, die jede „Vibration“ (Systemaufruf) eines Prozesses an das Betriebssystem überwacht.
3. **Bein 3: Verhaltensgrafik (Das Netz)** — Zeichnet die „Kaskade“ auf, wie Prozesse, Dateien und Netzwerkknoten interagieren, unter Verwendung von NetworkX-Directed-Graphen.
4. **Bein 4: ML-Anomalieerkennung (Die Intuition)** — Ein benutzerdefiniert trainiertes Random-Forest-Modell (trainiert auf einem kleinen, repräsentativen Datensatz sauberer/bösartiger Pakete, plus optionalen Live-MalwareBazaar-Feeds), das mit hoher Zuversicht bösartige Absichten vorhersagt.
5. **Bein 5: YARA-Signaturvergleich (Die Erinnerung)** — Eine integrierte Bibliothek bekannter Malware-DNA und Exploit-Muster (Reverse Shells, Cryptominer, etc.).
6. **Bein 6: MCP-Sicherheitsprotokoll (Der Agentenschild)** — Spezialisierter Schutz für Model-Context-Protocol-Server, die die von KI-Agenten verwendeten Werkzeuge verteidigen.
7. **Bein 7: Security Guardian AI (Das proaktive Netz)** — Ein Pre-Commit „Smart Scanner“, der lokale LLMs (Qwen-Coder) verwendet, um Lecks und Injections abzufangen, bevor sie in Ihrem Verlauf landen.
8. **Bein 8: Zeitliche & N-Gramm-Analyse (Der DNA-Scan)** — Identifiziert Bedrohungen anhand des *Rhythmus* und der *Sequenz* ihrer Aktionen über die Zeit.
## So funktioniert es```
target ──► Docker sandbox (network dropped) ──► strace -t -f
│
▼
strace log
│
┌────────────────┼────────────────┐
▼ ▼ ▼
strace parser signature temporal
(parser.py) matcher (sigs) analyzer
│ │ │
└───────┬────────┴────────────────┘
▼
NetworkX graph
(builder.py)
│
▼
ML anomaly detection
(RandomForest / IsolationForest)
│
▼
verdict
ip link set eth0 down), sodass ausgehende Verbindungsversuche zwar protokolliert, aber blockiert werden.strace -t -f -e trace=all getrace. Das Flag -t fügt Zeitstempel für die zeitliche Analyse hinzu, -f folgt Kindprozessen.monitor/parser.py) – Regex-basierter Parser, der mehrzeilige strace-Ausgaben sowie sowohl [pid]- als auch reine PID-Formate verarbeitet. Extrahiert Prozesserstellung, Dateizugriffe, Netzwerkverbindungen und Speicheroperationen. Jeder Syscall erhält ein Schweregrad-Gewicht (0–9) basierend auf seiner sicherheitsrelevanten Bedeutung.monitor/signatures.py) – Gleicht den geparsten Ereignisstrom mit 8 in data/signatures.json definierten Verhaltenssignaturmustern ab. Jede Übereinstimmung liefert Belege, die die auslösenden Ereignisse auflisten.monitor/timeline.py) – Erkennt 5 zeitbasierte Verhaltensmuster aus dem mit Zeitstempeln versehenen Ereignisstrom (z.B. Lesezugriff auf Anmeldeinformationen, gefolgt von einer externen Verbindung innerhalb von 5 Sekunden).Definiert in data/signatures.json. Jedes hat einen Schweregrad (1–10), erforderliche Syscalls, Dateimuster, Netzwerkbedingungen und eine geordnete Sequenz zum Abgleich.
Erkannt aus der mit Zeitstempeln versehenen strace-Ausgabe. Erfordert das strace-Flag -t (standardmäßig aktiviert).
Jeder der 24 Syscall-Typen hat ein Basis-Schweregrad-Gewicht. Beispiele:
mprotect mit PROT_EXEC: 9,0dup2 nach einem connect: 9,0execve eines unerwarteten Binärprogramms: 7,0connect zu Cloud-Metadaten (169.254.x.x): 8,0connect zu PyPI/npm-CDN: 0,0 (gutartig)openat von /usr/lib/python/*: 0,0 (gutartig)Der gesamte Schweregrad-Score fließt in die ML-Konfidenzberechnung ein.
Jeder connect-Syscall wird in eine von vier Kategorien eingeteilt:
git clone --depth 1 https://github.com/tejasprasad2008-afk/TraceTree.git cd TraceTree pip install -e .
### Eine Analyse durchführen```bash
cascade-analyze --help
Ausgabe:``` ┌──────────────────────────────────────┐ │ TraceTree Security Analyzer │ │ Target: requests │ │ Analyzer Type: PIP │ └──────────────────────────────────────┘ ✔ Sandboxing requests (pip)... ✔ Parsing requests... ✔ Graphing requests... ✔ Detecting requests...
┌─ Cascade Graph: requests ────────────┐ │ pip install requests │ │ └─ pip (root) │ │ └─ net_151.101.1.69:443 (connect)│ │ └─ file_/usr/lib/python3.11/... │ └──────────────────────────────────────┘
┌─ Flagged Behaviors ──────────────────┐ │ No suspicious footprints flagged. │ └──────────────────────────────────────┘
┌──────────┐
│ CLEAN │
└──────────
Confidence Score: 72.3%
Für ein bösartiges Paket (z.B. ein bekanntes Typosquat):```
┌─ Behavioral Signatures Matched ──────┐
│ 🔴 credential_theft (severity 9/10) │
│ Step 1: openat /etc/shadow │
│ Step 2: connect 45.33.32.156:4444 │
└──────────────────────────────────────┘
┌─ Temporal Execution Patterns ────────┐
│ 🔴 connect_then_shell (severity 10/10)│
│ Window: 1500-4200 ms — External... │
└──────────────────────────────────────┘
┌───────────┐
│ MALICIOUS │
└───────────┘
Confidence Score: 99.9%
Signatures: credential_theft | Temporal: connect_then_shell
cascade-analyze <target>Analysiert ein einzelnes Paket, eine Binärdatei oder eine Bulk-Datei.```bash
cascade-analyze requests cascade-analyze urllib33 # known typosquat
cascade-analyze package.json
cascade-analyze suspicious_app.dmg cascade-analyze payload.exe
cascade-analyze requirements.txt cascade-analyze package.json
cascade-analyze ./some_file --type pip cascade-analyze ./some_file --type npm cascade-analyze ./some_file --type dmg cascade-analyze ./some_file --type exe
**Unterbefehl: `cascade-analyze mcp`** — MCP-Server-Sicherheitsanalyse (siehe Abschnitt MCP unten).
**Unterbefehl: `cascade-analyze watch <repo>`** — Sitzungswächter (siehe Abschnitt Session Guardian).
**Unterbefehl: `cascade-analyze check <file>`** — Schneller Scan auf Abruf.
### `cascade-watch <repo>`
Eigenständiger Sitzungswächter. Überwacht ein Verzeichnis auf Paketmanifeste und führt Hintergrund-Sandbox-Analysen durch.```bash
cascade-watch ./my-project
cascade-watch ./my-project --check setup.py # on-demand scan
cascade-watch https://github.com/user/repo.git # URL accepted but not cloned
Zeigt ein Spider-Maskottchen im Terminal an und fragt den Status in einer Schleife ab. Drücken Sie Ctrl+C zum Beenden. Pro Verzeichnis ist nur ein Watcher erlaubt (Sperrdatei unter /tmp/tracetree_sessions/).
cascade-check <file>Schnelle einmalige Analyse einer bestimmten Datei. Startet einen neuen Sandbox-Durchlauf und gibt ein Urteil zurück.```bash cascade-check setup.py cascade-check ./payload.exe
### `cascade-install-hook`
Installiert einen Shell-Hook, der `cascade-watch` automatisch nach jedem `git clone` ausführt.```bash
cascade-install-hook
Dies hängt eine source-Zeile an ~/.bashrc oder ~/.zshrc an. Das Hook-Skript befindet sich unter ~/.local/share/tracetree/hooks/shell_hook.sh. Nach der Installation startet jedes git clone einen Hintergrund-Watcher und protokolliert in /tmp/tracetree_<reponame>.log.
cascade-trainInteraktive Trainings-Pipeline. Fragt nach einem MalwareBazaar-API-Key (optional – kann übersprungen werden, um nur mit lokalen Datensätzen zu trainieren), dann:
ml/model.skops und macht den Cache ungültig```bash
export MALWAREBAZAAR_AUTH_KEY="your-key"
cascade-train## MCP Server Sicherheitsanalyse
Der Unterbefehl `cascade-analyze mcp` analysiert Model Context Protocol-Server auf schädliches Verhalten. Er führt den Server in einem abgesicherten Container aus, agiert als simulierter MCP-Client, um jedes Werkzeug zu entdecken und aufzurufen, und klassifiziert dann die resultierende Systemaufrufverfolgung.```bash
# Analyze an npm MCP server
cascade-analyze mcp --npm @modelcontextprotocol/server-github
# Analyze a local MCP server project
cascade-analyze mcp --path ./my-mcp-server
# Allow network (for servers that legitimately need internet)
cascade-analyze mcp --npm @modelcontextprotocol/server-github --allow-network
# Force transport
cascade-analyze mcp --npm some-package --transport stdio
cascade-analyze mcp --npm some-package --transport http --port 3000
# JSON output
cascade-analyze mcp --npm some-package --output json
strace -f.initialize-Handschlag, tools/list-Erkennung, sichere Ausführung jedes Tools mit synthetischen Argumenten.; ls /etc, ../../../etc/passwd, <script>alert(1)</script>).filesystem, github, postgres, fetch, shell.sandbox/ — Lebenszyklusverwaltung von Docker-Containern. Baut cascade-sandbox:latest aus einem Dockerfile basierend auf python:3.11-slim mit strace, wine64, p7zip-full, cabextract, Node.js und npm. Deaktiviert die Netzwerkschnittstelle (ip link set eth0 down) vor der Ziel-Ausführung. Unterstützt Pip-, npm-, DMG- und EXE-Ziele. Gibt einen strace-Log-Pfad oder eine leere Zeichenkette bei Fehlschlag zurück.
monitor/parser.py — Regex-basierter strace-Log-Parser. Verarbeitet mehrzeilige Syscall-Einträge, sowohl [pid]- als auch reine-PID-Formate sowie timestamp-ausgegebene (-t) Ausgaben. Verfolgt 24 Syscall-Typen in 5 Kategorien (Prozess, Netzwerk, Datei, Speicher, IPC). Weist jedem Ereignis Gewichtungen für den Schweregrad zu, klassifiziert Netzwerkziele und markiert sensible Dateizugriffe. Gibt strukturierte Ereignisdaten mit Zeitstempeln und relativen Millisekunden-Offsets zurück.
monitor/signatures.py — Abgleich-Verhaltenssignaturen. Lädt 8 Muster aus data/signatures.json. Unterstützt sowohl ungeordneten Abgleich (erforderliche Syscalls + Datei-/Netzwerkmuster müssen vorhanden sein) als auch geordneten Sequenzabgleich (Syscall-Bedingung-Paare müssen in Reihenfolge erscheinen). Gibt abgeglichene Signaturen mit Nachweisen zurück, die die spezifischen Ereignisse auflisten, die jeden Treffer ausgelöst haben.
monitor/timeline.py — Zeitlicher Musteranalysator. Erkennt 5 zeitbasierte Verhaltensmuster aus dem geordneten, mit Zeitstempel versehenen Ereignisstrom. Jedes Muster gibt einen Schweregrad, ein Zeitfenster und die auslösenden Bedingungen an. Gibt Treffer absteigend nach Schweregrad sortiert zurück. Nur aktiv, wenn strace mit -t ausgeführt wurde (was der Standard ist).
graph/builder.py — Erstellung gerichteter Graphen mit NetworkX. Erstellt Knoten für Prozesse, Dateien und Netzwerkziele. Fügt Kanten für Clone-Beziehungen, Syscall-Ziele und zeitliche Beziehungen (aufeinanderfolgende Ereignisse mit derselben PID innerhalb von 5 Sekunden) hinzu. Knoten und Kanten werden mit Signaturtreffern und Schweregrad-Gewichtungen versehen. Gibt Cytoscape-kompatibles JSON und interne Statistiken aus.
ml/detector.py — Anomalieerkennung. Extrahiert einen 10-Merkmals-Vektor (Knotenanzahl, Kantenanzahl, Netzwerkverbindungen, Dateilesevorgänge, execve-Anzahl, Gesamtschweregrad, verdächtige Netzwerke, sensible Dateien, maximaler Schweregrad, Anzahl zeitlicher Muster). Verwendet RandomForestClassifier, wenn ein trainiertes Modell lokal verfügbar ist oder von GCS heruntergeladen werden kann; falls nicht, fällt es auf IsolationForest zurück, trainiert auf 10 fest codierten Sauber-Paket-Basislinien. Schweregrad-Scores und Anzahl zeitlicher Muster erhöhen die endgültige Konfidenz unabhängig von der ML-Vorhersage.
mcp/ — MCP-Server-Analysemodul. Sechs Dateien: sandbox.py (Docker-Sandbox für MCP-Server), client.py (JSON-RPC 2.0-Client mit Tool-Erkennung und adversarialen Tests), features.py (MCP-spezifische Merkmal-Extraktion mit Server-Typ-Erkennung), classifier.py (regelbasierte Bedrohungsklassifizierung), report.py (Rich-Konsole + JSON-Berichterstellung).
watcher/session.py — Sitzungswächter. Die Klasse SessionWatcher läuft in einem Hintergrund-Daemon-Thread. Entdeckt Pakete durch Scannen nach requirements.txt, package.json, setup.py und pyproject.toml. Führt jedes durch die Sandbox-Pipeline. Stellt Status über get_status() und Ergebnisse über eine Queue bereit. Sitzungssperrung über Sperrdatei unter /tmp/tracetree_sessions/.
mascot/spider.py — Klasse SpiderMascot. ASCII-Spinne mit 5 Zuständen (idle, success, warning, scanning, confused). Wird in der CLI für visuelles Feedback während der Analyse verwendet.
hooks/ — Shell-Hook-System. shell_hook.sh umschließt den Befehl git, um git clone abzufangen und cascade-watch im Hintergrund zu starten. install_hook.py ist ein plattformübergreifender Installer, der bash/zsh erkennt und die Source-Zeile an die entsprechende RC-Datei anhängt.
cli.py — Typer-CLI-Einstiegspunkt. Registriert alle Unterbefehle. Orchestriert die Analyse-Pipeline mit Rich-Fortschrittsbalken und formatierten Ausgabe-Panels.
cascade-train mit einem großen, gelabelten Datensatz aus. Der IsolationForest-Fallback ist eine heuristische Basislinie, kein produktionsreifes Modell.ip link set eth0 down) vor dem Ausführen/Installieren des Pakets, um eine aktive Datenexfiltration während des Scannens zu verhindern. Das ist zwar sicher, bedeutet aber, dass Schadsoftware, die während der Installation Netzwerk-Handshakes oder C2-Verbindungen benötigt, möglicherweise ihre Nutzlast nicht ausführt, oder dass einige legitime Installer, die Internetverbindung benötigen, fehlschlagen. Um dies zu umgehen, übergeben Sie die Option --controlled-network, um den kontrollierten/Sinkhole-Netzwerkmodus zu aktivieren.strace/ptrace-Überwachung stehen (durch Aufruf von ptrace(PTRACE_TRACEME, ...) oder Überprüfung von TracerPid in /proc/self/status). Wird eine solche Umgehung ausgelöst, kann die Schadsoftware vorzeitig beenden oder nur gutartige Aktionen ausführen und so der Erkennung entgehen.Pull-Requests sind willkommen. Bitte halten Sie neue Funktionen entkoppelt von bestehenden Modulen.
MIT
graph/builder.py) – Baut einen gerichteten NetworkX-Graphen mit Prozess-, Datei- und Netzwerkknoten. Fügt zeitliche Kanten zwischen aufeinanderfolgenden Ereignissen derselben PID innerhalb eines 5-Sekunden-Fensters hinzu.ml/detector.py) – Extrahiert einen 10-Feature-Vektor aus dem Graphen und den geparsten Daten. Verwendet einen RandomForestClassifier, falls ein trainiertes Modell verfügbar ist, andernfalls einen IsolationForest, der auf 10 fest codierten Clean-Package-Baselines trainiert wurde. Schweregrad-Scores und zeitliche Musterzählungen erhöhen die endgültige Konfidenz.| Signatur | Schweregrad | Was es erfasst |
|---|
reverse_shell | 10 | Externer Connect → dup2 → execve /bin/sh |
container_escape | 10 | openat von /proc/1/, /sys/fs/cgroup, /var/run/docker.sock |
credential_theft | 9 | openat von /etc/shadow, .ssh/, .aws/ → externer Connect |
typosquat_exfil | 9 | Geheimnis gelesen (.env, .npmrc) → Connect zu pastebin/file.io/transfer.sh |
process_injection | 9 | mprotect PROT_EXEC → execve eines nicht standardmäßigen Binärprogramms |
crypto_miner | 8 | clone → clone → Connect zu Mining-Pool-Port (3333, 4444, 14444, 45700) |
dns_tunneling | 7 | getaddrinfo + sendto + socket auf Port 53/5353 |
persistence_cron | 7 | openat des Crontab-Pfads → write |
| Muster | Schweregrad | Auslösebedingung |
|---|
connect_then_shell | 10 | Externer Connect → execve /bin/sh innerhalb von 3 Sekunden |
credential_scan_then_exfil | 9 | Lesen sensibler Dateien → externer Connect innerhalb von 5 Sekunden |
delayed_payload | 8 | >10s Lücke, gefolgt von einem Ausbruch verdächtiger Aktivität (Dropper-Verhalten) |
rapid_file_enumeration | 7 | 10+ Dateiöffnungen innerhalb von 1 Sekunde (Scannverhalten) |
burst_process_spawn | 7 | 5+ clone/execve innerhalb von 2 Sekunden |
| Kategorie | Kriterien | Risikoscore |
|---|
safe_registry | IP stimmt mit bekannten PyPI/npm/GitHub-CDN-Bereichen überein | 0,0 |
known_benign | Standard-Webport (80/443) zu nicht klassifiziertem Host | 0,5 |
suspicious | Cloud-Metadaten (169.254.x.x), private IP aus Container oder verdächtiger Port (4444, 1337, 31337, usw.) | 8,0–9,0 |
unknown | Standard | 3,0 |
| Zieltyp | Funktionsweise | Hinweise |
|---|
| PyPI-Pakete | pip download (mit Netzwerk), dann pip install --no-index (ohne Netzwerk) unter strace | Zuverlässigste Methode. Netzwerk wird vor der Installation deaktiviert. |
| npm-Pakete | npm install unter strace, Netzwerk nach Dry-Run deaktiviert | Erfordert Node.js im Sandbox-Image. |
| DMG-Dateien | Extrahieren mit 7z im Container. Gefundene Skripte (.sh, .py, .command), .pkg-Installer, .app-Bundles und reine Mach-O-Binärdateien werden jeweils unter strace ausgeführt. | Erfordert p7zip-full im Sandbox-Image. Die DMG-Extraktion kann bei verschlüsselten oder ungewöhnlichen Formaten fehlschlagen. Skripte werden in einem Linux-Container ausgeführt, daher wird macOS-spezifisches Verhalten nicht ausgeführt. |
| EXE-Dateien | Ausführung unter wine64 mit strace -t -f und einem 30-Sekunden-Timeout. Wine-Initialisierungsrauschen wird aus dem strace-Log gefiltert. | Erfordert wine64 im Sandbox-Image. GUI-Apps, die auf Benutzereingaben warten, werden das Timeout erreichen. Die Übersetzungsschicht von Wine bedeutet, dass Syscalls Linux-Syscalls sind, keine nativen Windows-Syscalls – einige Windows-spezifische Verhaltensweisen sind möglicherweise nicht sichtbar. |
| Bedrohung | Schweregrad | Beschreibung |
|---|
COMMAND_INJECTION | Kritisch | Shell wurde als Reaktion auf Tool-Argumente erzeugt |
CREDENTIAL_EXFILTRATION | Kritisch | Geheimer Schlüssel gelesen, gefolgt von Netzwerkverbindung |
COVERT_NETWORK_CALL | Hoch | Ausgehende Verbindung während eines Tool-Aufrufs zu unerwartetem Ziel |
PATH_TRAVERSAL | Hoch | Dateilesevorgänge außerhalb des Arbeitsverzeichnisses |
EXCESSIVE_PROCESS_SPAWNING | Mittel | Unverhältnismäßig viele Kindprozesse |
PROMPT_INJECTION_VECTOR | Hoch | Tool-Beschreibungen enthalten Zero-Width-Zeichen oder Injection-Sprache |
api/main.py ist so verdrahtet, dass es die eigentliche TraceTree-Analyse-Pipeline in Hintergrundaufgaben ausführt. Es verwendet eine In-Memory-Datenbank (mock_db) für die Jobverfolgung und erfordert, dass die Umgebungsvariable TRACETREE_API_KEYS gesetzt ist, um zu starten.cascade-watch akzeptiert ein URL-Argument, führt aber kein git clone aus. Es überwacht das lokale Verzeichnis oder fällt auf das aktuelle Arbeitsverzeichnis zurück.