
Interaktives Datenvisualisierungstool für Blue Teams zur Analyse von Erkennungsdaten, zum Verständnis von Zusammenhängen, zur Reduzierung von Alert-Müdigkeit und zur Verbesserung der Incident Response.
Detectree ist ein Datenvisualisierungstool für Blue Teams. Es bietet eine grafische Darstellung von Erkennungsdaten, die es einem Analysten ermöglicht, nahezu sofort Einschätzungen über die Art der zugrunde liegenden Aktivität zu treffen und komplexe Beziehungen zwischen den Datenpunkten zu verstehen. Letztendlich kann dies dazu beitragen, die Reaktionszeit zu verkürzen, die Alarmmüdigkeit zu reduzieren und die Kommunikation zwischen Analysten innerhalb der Teams zu erleichtern.
Detectree ist in Svelte geschrieben und basiert auf der JavaScript-Bibliothek force-graph.
Um Detectree in Ihrer Umgebung zu verwenden, müssen die Erkennungen eine Mindestmenge an Eigenschaften erfüllen. In der folgenden Tabelle sehen Sie, welche Felder in jeder Erkennung enthalten sein müssen und welche optional sind.
| Feld | Erforderlich |
|---|---|
| Endpoint-ID | ja |
| Kategorie | ja |
| Schweregrad | ja |
| Erkennungsname | ja |
| Name des übergeordneten Prozesses | ja |
| ID des übergeordneten Prozesses | ja |
| Prozessname | ja |
| Prozess-ID | ja |
| Benutzer | nein |
| Befehlszeile | nein |
| Dateiname | nein |
| Registrierungsschlüssel | nein |
| Netzwerkadresse | nein |
| Name des Zielprozesses | nein |
| ID des Zielprozesses | nein |
Die Zuordnungen für jedes Feld sind in der Datei schema.yml definiert; eine Beispieldatei schema.yml.example wird bereitgestellt. Diese Datei definiert, welche Felder aus den Daten im Backend extrahiert werden sollen und wie sie intern zugeordnet werden. Insbesondere enthält der Zuordnungsteil links die Detectree-Zuordnung und rechts die Backend-Zuordnung; Sie müssen die Zuordnung entsprechend Ihrer Umgebung ausfüllen.
Das Schema enthält auch die Backend-Konfiguration; für Elastic sollte dies unkompliziert sein, aber die Bedeutung der verschiedenen Felder ist wie folgt:
primaryId ist die eindeutige Kennung für den Endpoint. Dies wird verwendet, um die Erkennungen abzurufen.
timeField ist das Zeitfeld, das verwendet wird, um die Abfrage einzuschränken.
source ist das Feld, das den Erkennungstyp identifiziert; im Beispielschema ist dies auf NewProcess, RegistryWrite, FileAccess usw. abgebildet.
Anschließend identifiziert in den mappings das Feld type eine bestimmte Erkennung; wenn Ihr Backend beispielsweise nur NewProcess-Erkennungen unterstützt (oder wie auch immer der entsprechende Name lautet), benötigen Sie nur eine Zuordnung. Eng damit verbunden verknüpft das Feld kind den Erkennungstyp mit dem Detectree-Typ. Wenn kind beispielsweise file ist, sollte die Zuordnung einen filePath bereitstellen, der verwendet wird, um einen Kontextknoten zu zeichnen.
Derzeit wird nur Elastic als Backend unterstützt, aber es sollte trivial sein, einen Adapter für jedes neue Backend zu erstellen. Weitere Informationen finden Sie im Abschnitt Hinzufügen eines neuen Backends.
Um die Anwendung in Ihrer Umgebung bereitzustellen, müssen Sie die erforderlichen Abhängigkeiten mit npm install (oder pnpm install oder yarn) installieren. Anschließend müssen Sie den richtigen Adapter für Ihre Umgebung auswählen; folgen Sie dieser Anleitung für die aktuellsten Informationen.
Wenn Sie beispielsweise Node als Ihr Backend verwenden möchten, müssen Sie @sveltejs/adapter-node installieren und Ihre svelte.config.js ändern, indem Sie @sveltejs/adapter-auto durch @sveltejs/adapter-node ersetzen. Das Projekt kann dann mit dem folgenden Befehl erstellt werden; die Ausgabe befindet sich im Ordner output.
npm run build
Ein Entwicklungsserver kann mit dem folgenden Befehl gestartet werden; dies ermöglicht es, die Anwendung lokal bereitzustellen.
npm run dev
# oder starten Sie den Server und öffnen Sie die App in einem neuen Browser-Tab
npm run dev -- --open
Ein Beispielgraph ist im folgenden Screenshot zu sehen

Um ein neues Backend zu unterstützen, müssen Sie eine dedizierte TypeScript-Datei im Ordner backend_adapters erstellen. Sie können die Elastic-Datei als Vorlage verwenden; das neue Modul sollte eine Abfragefunktion bereitstellen, die als Eingabe dieselben Parameter wie die in der Elastic-Datei verwendet. Sie können dann das gewählte Backend auf die bevorzugte Weise abfragen. Die Abfragefunktion sollte ein Objekt zurückgeben, das die Daten gemäß der im Schema.yaml definierten Zuordnung enthält. Schließlich müssen Sie das Backend, damit es korrekt ausgewählt wird, auch im folgenden Objekt innerhalb von draw_tree.ts hinzufügen; die Objektschlüssel hier sind auch die Art und Weise, wie das Backend in der schema.yml referenziert wird.
const backendTypes = {
elastic: '../backend_adapters/elastic'
};