
Beagle é uma ferramenta de resposta a incidentes e forense digital que transforma logs de segurança e dados em gráficos.
O Beagle é uma ferramenta de resposta a incidentes e perícia digital que transforma fontes de dados e logs em gráficos. As fontes de dados suportadas incluem Triagens FireEye HX, arquivos EVTX do Windows, logs do SysMon e imagens brutas de memória do Windows. Os gráficos resultantes podem ser enviados para bancos de dados de grafos como Neo4J ou DGraph, ou mantidos localmente como objetos NetworkX do Python.
O Beagle pode ser usado diretamente como uma biblioteca Python ou através de uma interface web fornecida.
A biblioteca pode ser usada como uma sequência de chamadas funcionais a partir de uma única fonte de dados.
>>> from beagle.datasources import SysmonEVTX
>>> graph = SysmonEVTX("malicious.evtx").to_graph()
>>> graph
<networkx.classes.multidigraph.MultiDiGraph at 0x12700ee10>
Ou como um gráfico gerado a partir de um conjunto de múltiplos artefatos.
>>> 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>
Ou chamando estritamente cada etapa intermediária do processo de fonte de dados para gráfico.
>>> from beagle.backends import NetworkX
>>> from beagle.datasources import SysmonEVTX
>>> from beagle.transformers import SysmonTransformer
>>> datasource = SysmonEVTX("malicious.evtx")
# Transformers recebem uma fonte de dados e transformam cada evento
# em uma tupla de um ou mais nós.
>>> transformer = SysmonTransformer(datasource=datasource)
>>> nodes = transformer.run()
# Transformers produzem uma matriz de nós.
[
(<SysMonProc> process_guid="{0ad3e319-0c16-59c8-0000-0010d47d0000}"),
(<File> host="DESKTOP-2C3IQHO" full_path="C:\Windows\System32\services.exe"),
...
]
# Backends recebem os nós e os transformam em gráficos
>>> backend = NetworkX(nodes=nodes)
>>> G = backend.graph()
<networkx.classes.multidigraph.MultiDiGraph at 0x126b887f0>
Os gráficos são centrados na atividade de processos individuais e têm como objetivo principal ajudar analistas a investigar atividades em hosts, não entre eles.
O Beagle está disponível como um arquivo docker:
docker pull yampelo/beagle
mkdir -p data/beagle
docker run -v "$PWD/data/beagle":"/data/beagle" -p 8000:8000 yampelo/beagle
Também está disponível como biblioteca. A documentação completa da API está disponível em https://beagle-graphs.readthedocs.io
pip install pybeagle
Nota: Apenas Python 3.6+ é atualmente suportado.
O Rekall não é instalado automaticamente. Para instalar o Rekall, execute o seguinte comando:
pip install pybeagle[rekall]
Qualquer entrada no arquivo de configuração pode ser modificada usando variáveis de ambiente que seguem o seguinte formato: BEAGLE__{SECTION}__{KEY}. Por exemplo, para alterar a chave de API do VirusTotal usada ao usar a imagem Docker, você usaria o parâmetro -e e definiria a variável BEAGLE__VIRUSTOTAL__API_KEY:
docker run -v "data/beagle":"/data/beagle" -p 8000:8000 -e "BEAGLE__VIRUSTOTAL__API_KEY=$API_KEY" beagle
Variáveis de ambiente e diretórios podem ser facilmente definidos usando docker compose
version: "3"
services:
beagle:
image: yampelo/beagle
volumes:
- /data/beagle:/data/beagle
ports:
- "8000:8000"
environment:
- BEAGLE__VIRUSTOTAL__API_KEY=$key$
A imagem Docker do Beagle vem com uma interface web que envolve o processo de transformação de dados em gráficos, bem como seu uso para investigar dados.
O formulário de upload envolve o processo de criação do gráfico e usa automaticamente o NetworkX como backend. Dependendo dos parâmetros exigidos pela fonte de dados, o formulário solicitará o upload de um arquivo ou entrada de texto. Por exemplo:
Qualquer gráfico criado é armazenado localmente na pasta definida na chave dir da seção storage na configuração. Isso pode ser modificado definindo a variável de ambiente BEAGLE__STORAGE__DIR.
Opcionalmente, um comentário pode ser adicionado a qualquer gráfico para ajudar a descrevê-lo melhor.
Cada fonte de dados extrairá automaticamente metadados do parâmetro fornecido. Os metadados e comentários ficarão visíveis posteriormente ao visualizar os gráficos existentes da fonte de dados.
Clicar em uma fonte de dados na barra lateral renderiza uma tabela de todos os gráficos analisados para essa fonte de dados.
Visualizar um gráfico no Beagle fornece uma interface web que permite aos analistas pivotar rapidamente em torno de um incidente.