
Beagle è uno strumento di risposta agli incidenti e di digital forensics che trasforma log di sicurezza e dati in grafici.
Beagle è uno strumento di risposta agli incidenti e informatica forense che trasforma fonti di dati e log in grafici. Le fonti di dati supportate includono FireEye HX Triages, file EVTX di Windows, log di SysMon e immagini di memoria Raw di Windows. I grafici risultanti possono essere inviati a database di grafi come Neo4J o DGraph, oppure possono essere mantenuti localmente come oggetti Python NetworkX.
Beagle può essere utilizzato direttamente come libreria Python, oppure tramite un'interfaccia web fornita.
La libreria può essere utilizzata come una sequenza di chiamate funzionali da una singola fonte di dati.
>>> from beagle.datasources import SysmonEVTX
>>> graph = SysmonEVTX("malicious.evtx").to_graph()
>>> graph
<networkx.classes.multidigraph.MultiDiGraph at 0x12700ee10>
Come grafico generato da un insieme di molteplici artefatti
>>> 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>
Oppure chiamando rigorosamente ogni passaggio intermedio del processo dalla fonte di dati al grafico.
>>> from beagle.backends import NetworkX
>>> from beagle.datasources import SysmonEVTX
>>> from beagle.transformers import SysmonTransformer
>>> datasource = SysmonEVTX("malicious.evtx")
# I trasformatori prendono una fonte di dati e trasformano ogni evento
# in una tupla di uno o più nodi.
>>> transformer = SysmonTransformer(datasource=datasource)
>>> nodes = transformer.run()
# I trasformatori restituiscono un array di nodi.
[
(<SysMonProc> process_guid="{0ad3e319-0c16-59c8-0000-0010d47d0000}"),
(<File> host="DESKTOP-2C3IQHO" full_path="C:\Windows\System32\services.exe"),
...
]
# I backend prendono i nodi e li trasformano in grafici
>>> backend = NetworkX(nodes=nodes)
>>> G = backend.graph()
<networkx.classes.multidigraph.MultiDiGraph at 0x126b887f0>
I grafici sono centrati sull'attività di singoli processi e sono pensati principalmente per aiutare gli analisti a investigare l'attività sugli host, non tra di essi.
Beagle è disponibile come file Docker:
docker pull yampelo/beagle
mkdir -p data/beagle
docker run -v "$PWD/data/beagle":"/data/beagle" -p 8000:8000 yampelo/beagle
È disponibile anche come libreria. La documentazione completa dell'API è disponibile su https://beagle-graphs.readthedocs.io
pip install pybeagle
Nota: Al momento è supportato solo Python 3.6+.
Rekall non viene installato automaticamente. Per installare Rekall esegui invece il seguente comando:
pip install pybeagle[rekall]
Qualsiasi voce nel file di configurazione può essere modificata utilizzando variabili d'ambiente che seguono il seguente formato: BEAGLE__{SEZIONE}__{CHIAVE}. Ad esempio, per modificare la chiave API VirusTotal utilizzata quando si usa l'immagine Docker, si usa il parametro -e e si imposta la variabile BEAGLE__VIRUSTOTAL__API_KEY:
docker run -v "data/beagle":"/data/beagle" -p 8000:8000 -e "BEAGLE__VIRUSTOTAL__API_KEY=$API_KEY" beagle
Le variabili d'ambiente e le directory possono essere facilmente definite usando docker compose
version: "3"
services:
beagle:
image: yampelo/beagle
volumes:
- /data/beagle:/data/beagle
ports:
- "8000:8000"
environment:
- BEAGLE__VIRUSTOTAL__API_KEY=$key$
L'immagine Docker di Beagle viene fornita con un'interfaccia web che incapsula sia il processo di trasformazione dei dati in grafici, sia il loro utilizzo per investigare i dati.
Il modulo di caricamento incapsula il processo di creazione del grafico e utilizza automaticamente NetworkX come backend. A seconda dei parametri richiesti dalla fonte di dati, il modulo richiederà il caricamento di un file o l'input di testo. Ad esempio:
Ogni grafico creato viene memorizzato localmente nella cartella definita sotto la chiave dir della sezione storage nella configurazione. Questo può essere modificato impostando la variabile d'ambiente BEAGLE__STORAGE__DIR.
Opzionalmente, è possibile aggiungere un commento a qualsiasi grafico per descriverlo meglio.
Ogni fonte di dati estrae automaticamente i metadati dal parametro fornito. I metadati e il commento sono visibili successivamente quando si visualizzano i grafici esistenti della fonte di dati.
Cliccando su una fonte di dati nella barra laterale viene visualizzata una tabella di tutti i grafici analizzati per quella fonte.