
Beagle ist ein Tool für Incident Response und digitale Forensik, das Sicherheitslogs und Daten in Graphen umwandelt.
Beagle ist ein Tool für Incident Response und digitale Forensik, das Datenquellen und Logs in Graphen umwandelt. Unterstützte Datenquellen umfassen FireEye HX Triages, Windows-EVTX-Dateien, SysMon-Logs und rohe Windows-Arbeitsspeicherabbilder. Die resultierenden Graphen können an Graphdatenbanken wie Neo4J oder DGraph gesendet oder lokal als Python-NetworkX-Objekte gespeichert werden.
Beagle kann entweder direkt als Python-Bibliothek oder über eine bereitgestellte Weboberfläche genutzt werden.
Die Bibliothek kann entweder als Sequenz funktionaler Aufrufe aus einer einzelnen Datenquelle verwendet werden.
>>> from beagle.datasources import SysmonEVTX
>>> graph = SysmonEVTX("malicious.evtx").to_graph()
>>> graph
<networkx.classes.multidigraph.MultiDiGraph at 0x12700ee10>
Als Graph, der aus einer Reihe mehrerer Artefakte erzeugt wird
>>> from beagle.datasources import SysmonEVTX, HXTriage, PCAP
>>> from beagle.backends import NetworkX
>>> nx = NetworkX.from_datasources(
datasources=[
SysmonEVTX("malicious.evtx"),
HXTriage("alert.mans"),
PCAP("traffic.pcap"),
]
)
>>> G = nx.graph()
<networkx.classes.multidigraph.MultiDiGraph at 0x12700ee10>
Oder indem jeder Zwischenschritt des Datenquellen-zu-Graph-Prozesses streng aufgerufen wird.
>>> from beagle.backends import NetworkX
>>> from beagle.datasources import SysmonEVTX
>>> from beagle.transformers import SysmonTransformer
>>> datasource = SysmonEVTX("malicious.evtx")
# Transformatoren nehmen eine Datenquelle und transformieren jedes Ereignis
# in ein Tupel aus einem oder mehreren Knoten.
>>> transformer = SysmonTransformer(datasource=datasource)
>>> nodes = transformer.run()
# Transformatoren geben ein Array von Knoten aus.
[
(<SysMonProc> process_guid="{0ad3e319-0c16-59c8-0000-0010d47d0000}"),
(<File> host="DESKTOP-2C3IQHO" full_path="C:\Windows\System32\services.exe"),
...
]
# Backends nehmen die Knoten und wandeln sie in Graphen um
>>> backend = NetworkX(nodes=nodes)
>>> G = backend.graph()
<networkx.classes.multidigraph.MultiDiGraph at 0x126b887f0>
Graphen konzentrieren sich auf die Aktivitäten einzelner Prozesse und dienen hauptsächlich dazu, Analysten bei der Untersuchung von Aktivitäten auf Hosts zu helfen, nicht zwischen ihnen.
Beagle ist als Docker-Image verfügbar:
docker pull yampelo/beagle
mkdir -p data/beagle
docker run -v "$PWD/data/beagle":"/data/beagle" -p 8000:8000 yampelo/beagle
Es ist auch als Bibliothek verfügbar. Die vollständige API-Dokumentation ist unter https://beagle-graphs.readthedocs.io abrufbar.
pip install pybeagle
Hinweis: Derzeit wird nur Python 3.6+ unterstützt.
Rekall wird nicht automatisch installiert. Um Rekall zu installieren, führen Sie stattdessen den folgenden Befehl aus:
pip install pybeagle[rekall]
Jeder Eintrag in der Konfigurationsdatei kann mithilfe von Umgebungsvariablen geändert werden, die dem folgenden Format folgen: BEAGLE__{SECTION}__{KEY}. Um beispielsweise den VirusTotal-API-Schlüssel zu ändern, der bei der Verwendung des Docker-Images verwendet wird, würden Sie den Parameter -e verwenden und die Variable BEAGLE__VIRUSTOTAL__API_KEY setzen:
docker run -v "data/beagle":"/data/beagle" -p 8000:8000 -e "BEAGLE__VIRUSTOTAL__API_KEY=$API_KEY" beagle
Umgebungsvariablen und Verzeichnisse können mit Docker Compose einfach definiert werden:
version: "3"
services:
beagle:
image: yampelo/beagle
volumes:
- /data/beagle:/data/beagle
ports:
- "8000:8000"
environment:
- BEAGLE__VIRUSTOTAL__API_KEY=$key$
Das Docker-Image von Beagle wird mit einer Weboberfläche geliefert, die sowohl die Umwandlung von Daten in Graphen als auch deren Verwendung zur Untersuchung von Daten umschließt.
Das Upload-Formular umschließt den Graphenerstellungsprozess und verwendet automatisch NetworkX als Backend. Abhängig von den Parametern, die die Datenquelle erfordert, fordert das Formular entweder einen Dateiupload oder eine Texteingabe an. Zum Beispiel:
Jeder erstellte Graph wird lokal in dem Ordner gespeichert, der unter dem Schlüssel dir im Abschnitt storage der Konfiguration definiert ist. Dies kann durch Setzen der Umgebungsvariable BEAGLE__STORAGE__DIR geändert werden.
Optional kann jedem Graph ein Kommentar hinzugefügt werden, um ihn besser zu beschreiben.
Jede Datenquelle extrahiert automatisch Metadaten aus dem bereitgestellten Parameter. Die Metadaten und der Kommentar sind später sichtbar, wenn die vorhandenen Graphen der Datenquelle angezeigt werden.
Durch Klicken auf eine Datenquelle in der Seitenleiste wird eine Tabelle aller analysierten Graphen für diese Datenquelle angezeigt.
Das Anzeigen eines Graphen in Beagle bietet eine Weboberfläche, die es Analysten ermöglicht, schnell durch einen Vorfall zu navigieren.