
Beagle es una herramienta de respuesta a incidentes y forense digital que transforma registros de seguridad y datos en gráficos.
Beagle es una herramienta de respuesta a incidentes y forense digital que transforma fuentes de datos y registros en grafos. Las fuentes de datos compatibles incluyen Triajes de FireEye HX, archivos EVTX de Windows, registros de SysMon e imágenes de memoria RAM de Windows. Los grafos resultantes pueden enviarse a bases de datos de grafos como Neo4J o DGraph, o mantenerse localmente como objetos NetworkX de Python.
Beagle puede usarse directamente como biblioteca de Python, o a través de una interfaz web proporcionada.
La biblioteca puede utilizarse como una secuencia de llamadas funcionales desde una única fuente de datos.
>>> from beagle.datasources import SysmonEVTX
>>> graph = SysmonEVTX("malicious.evtx").to_graph()
>>> graph
<networkx.classes.multidigraph.MultiDiGraph at 0x12700ee10>
Como un grafo generado a partir de un conjunto de múltiples artefactos
>>> 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>
O llamando estrictamente a cada paso intermedio del proceso de fuente de datos a grafo.
>>> from beagle.backends import NetworkX
>>> from beagle.datasources import SysmonEVTX
>>> from beagle.transformers import SysmonTransformer
>>> datasource = SysmonEVTX("malicious.evtx")
# Los transformadores toman una fuente de datos y transforman cada evento
# en una tupla de uno o más nodos.
>>> transformer = SysmonTransformer(datasource=datasource)
>>> nodes = transformer.run()
# Los transformadores devuelven un array de nodos.
[
(<SysMonProc> process_guid="{0ad3e319-0c16-59c8-0000-0010d47d0000}"),
(<File> host="DESKTOP-2C3IQHO" full_path="C:\Windows\System32\services.exe"),
...
]
# Los backends toman los nodos y los transforman en grafos
>>> backend = NetworkX(nodes=nodes)
>>> G = backend.graph()
<networkx.classes.multidigraph.MultiDiGraph at 0x126b887f0>
Los grafos se centran en la actividad de procesos individuales y están pensados principalmente para ayudar a los analistas a investigar la actividad en los hosts, no entre ellos.
Beagle está disponible como un archivo docker:
docker pull yampelo/beagle
mkdir -p data/beagle
docker run -v "$PWD/data/beagle":"/data/beagle" -p 8000:8000 yampelo/beagle
También está disponible como biblioteca. La documentación completa de la API está disponible en https://beagle-graphs.readthedocs.io
pip install pybeagle
Nota: Solo se admite Python 3.6+ actualmente.
Rekall no se instala automáticamente. Para instalar Rekall ejecute el siguiente comando en su lugar:
pip install pybeagle[rekall]
Cualquier entrada en el archivo de configuración se puede modificar usando variables de entorno que sigan el siguiente formato: BEAGLE__{SECTION}__{KEY}. Por ejemplo, para cambiar la clave API de VirusTotal utilizada al usar la imagen Docker, usaría el parámetro -e y establecería la variable BEAGLE__VIRUSTOTAL__API_KEY:
docker run -v "data/beagle":"/data/beagle" -p 8000:8000 -e "BEAGLE__VIRUSTOTAL__API_KEY=$API_KEY" beagle
Las variables de entorno y los directorios se pueden definir fácilmente usando docker compose
version: "3"
services:
beagle:
image: yampelo/beagle
volumes:
- /data/beagle:/data/beagle
ports:
- "8000:8000"
environment:
- BEAGLE__VIRUSTOTAL__API_KEY=$key$
La imagen Docker de Beagle viene con una interfaz web que envuelve el proceso de transformación de datos en grafos, así como su uso para investigar datos.
El formulario de carga envuelve el proceso de creación del grafo y utiliza automáticamente NetworkX como backend. Dependiendo de los parámetros requeridos por la fuente de datos, el formulario solicitará una carga de archivo o una entrada de texto. Por ejemplo:
Cualquier grafo creado se almacena localmente en la carpeta definida bajo la clave dir de la sección storage en la configuración. Esto se puede modificar estableciendo la variable de entorno BEAGLE__STORAGE__DIR.
Opcionalmente, se puede agregar un comentario a cualquier grafo para ayudar a describirlo mejor.
Cada fuente de datos extraerá automáticamente metadatos del parámetro proporcionado. Los metadatos y el comentario son visibles más adelante al ver los grafos existentes de la fuente de datos.
Al hacer clic en una fuente de datos en la barra lateral se renderiza una tabla con todos los grafos analizados para esa fuente de datos.
Ver un grafo en Beagle proporciona una interfaz web que permite a los analistas pivotar rápidamente alrededor de un incidente.