Beagle 是一款事件响应和数字取证工具,可将数据源和日志转换为图。支持的数据源包括 FireEye HX Triages、Windows EVTX 文件、SysMon 日志以及原始 Windows 内存镜像。生成的图可以发送到 Neo4J 或 DGraph 等图数据库,也可以作为 Python NetworkX 对象保存在本地。
Beagle 既可作为 Python 库直接使用,也可通过提供的 Web 界面使用。
该库可以以单个数据源的函数调用序列方式使用。
>>> from beagle.datasources import SysmonEVTX
>>> graph = SysmonEVTX("malicious.evtx").to_graph()
>>> graph
<networkx.classes.multidigraph.MultiDiGraph at 0x12700ee10>
也可以作为从多个工件生成的图来使用:
>>> 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>
或者通过严格调用数据源到图过程的每个中间步骤:
>>> from beagle.backends import NetworkX
>>> from beagle.datasources import SysmonEVTX
>>> from beagle.transformers import SysmonTransformer
>>> datasource = SysmonEVTX("malicious.evtx")
# 转换器接收一个数据源,并将每个事件转换为一个或多个节点的元组。
>>> transformer = SysmonTransformer(datasource=datasource)
>>> nodes = transformer.run()
# 转换器输出一个节点数组。
[
(<SysMonProc> process_guid="{0ad3e319-0c16-59c8-0000-0010d47d0000}"),
(<File> host="DESKTOP-2C3IQHO" full_path="C:\Windows\System32\services.exe"),
...
]
# 后端接收节点,并将其转换为图
>>> backend = NetworkX(nodes=nodes)
>>> G = backend.graph()
<networkx.classes.multidigraph.MultiDiGraph at 0x126b887f0>
图围绕单个进程的活动展开,主要旨在帮助分析人员调查主机上的活动,而非主机之间的活动。
Beagle 以 Docker 文件形式提供:
docker pull yampelo/beagle
mkdir -p data/beagle
docker run -v "$PWD/data/beagle":"/data/beagle" -p 8000:8000 yampelo/beagle
它也可作为库使用。完整的 API 文档位于 https://beagle-graphs.readthedocs.io
pip install pybeagle
注意:仅支持 Python 3.6 及以上版本。
Rekall 不会自动安装。要安装 Rekall,请改为执行以下命令:
pip install pybeagle[rekall]
配置文件中的任何条目都可以使用遵循以下格式的环境变量进行修改:BEAGLE__{SECTION}__{KEY}。例如,要更改使用 Docker 镜像时的 VirusTotal API 密钥,可以使用 -e 参数并设置 BEAGLE__VIRUSTOTAL__API_KEY 变量:
docker run -v "data/beagle":"/data/beagle" -p 8000:8000 -e "BEAGLE__VIRUSTOTAL__API_KEY=$API_KEY" beagle
环境变量和目录可以很容易地使用 docker compose 定义:
version: "3"
services:
beagle:
image: yampelo/beagle
volumes:
- /data/beagle:/data/beagle
ports:
- "8000:8000"
environment:
- BEAGLE__VIRUSTOTAL__API_KEY=$key$
Beagle 的 Docker 镜像附带一个 Web 界面,它封装了将数据转换为图以及使用图调查数据的过程。
上传表单封装了图创建过程,并自动使用 NetworkX 作为后端。根据数据源所需的参数,表单会提示上传文件或输入文本。例如:
创建的任何图都存储在配置中 storage 部分的 dir 键定义的本地文件夹中。这可以通过设置 BEAGLE__STORAGE__DIR 环境变量进行修改。
可选地,可以为任何图添加注释以帮助更好地描述它。
每个数据源会自动从提供的参数中提取元数据。元数据和注释稍后在查看该数据源的现有图时可见。
单击侧边栏上的数据源会显示该数据源所有已解析图的表格。
在 Beagle 中查看图提供了一个 Web 界面,允许分析人员快速围绕事件进行 pivot。
界面主要分为两部分:左侧部分包含图的不同视角(图视图、树视图、表格视图等),右侧部分允许您按类型过滤节点和边、搜索节点以及展开节点的属性。它还允许您撤消和重做在图上的操作。
图中任何带有上方分隔线的元素都是可折叠的:
图中的节点显示特定字段的前 15 个字符。例如,对于进程节点,将显示进程名称。
边仅显示边的类型。
单击节点或边会聚焦该节点,并在右侧边栏的“节点信息”面板中显示其信息。
双击节点会拉入任何相邻节点。相邻节点是指通过边连接到点击节点的任何节点。如果没有可拉入的邻居,图中将看不到任何变化。
长按单击节点会将其从图中隐藏,同时隐藏依赖于它的所有边。
右键单击节点会弹出一个上下文菜单,允许您运行 图变异器。变异器是接收图状态并返回新状态的函数。
两个非常有用的变异器是:
回溯节点非常有用,类似于在日志文件中进行根本原因感染分析。
展开节点的后代允许您立即查看由该节点引起的所有事件。此操作会显示以所选节点为根的子图。
有时,节点或边可能与当前事件无关,您可以切换边和节点类型的显示/隐藏。一旦切换类型,该类型的节点或边就会从可见图中移除。
关闭节点类型会阻止该节点类型在变异器或拉入邻居时被使用。
图中的任何操作都可以立即撤销!使用撤销/重做按钮可以还原您执行的任何操作。重置按钮会将图状态设置回其加载时的状态,免去刷新页面的麻烦。
当您使用上述操作更改图的当前状态时,您可能还希望从不同的视角查看当前可见的节点和边集合。图屏幕顶部的选项卡允许您将数据转换为多种视图:
每个视角都支持通过单击节点来聚焦节点。