Detectree 是一款面向蓝队的数据可视化工具。它提供检测数据的图形化表示,使分析人员能够几乎即时地对底层活动的性质形成判断,并理解数据点之间的复杂关系。最终,这有助于缩短响应时间、减少告警疲劳,并促进团队内分析人员之间的沟通。
Detectree 使用 svelte 编写,基于 force-graph JavaScript 库。
为了在您的环境中使用 Detectree,检测数据需要满足一组最低属性要求。在下表中,您可以查看每条检测必须包含哪些字段,以及哪些字段是可选的。
| 字段 | 是否必需 |
|---|---|
| 端点 ID | 是 |
| 类别 | 是 |
| 严重级别 | 是 |
| 检测名称 | 是 |
| 父进程名称 | 是 |
| 父进程 ID | 是 |
| 进程名称 | 是 |
| 进程 ID | 是 |
| 用户 | 否 |
| 命令行 | 否 |
| 文件名 | 否 |
| 注册表项 | 否 |
| 网络地址 | 否 |
| 目标进程名称 | 否 |
| 目标进程 ID | 否 |
每个字段的映射在 schema.yml 文件中定义,并提供了一个示例文件 schema.yml.example。该文件定义了应从后端数据中提取哪些字段,以及它们在内部如何映射。特别是,映射部分左侧为 detectree 映射,右侧为后端映射,您需要根据您的环境填充相应的映射。
schema 还包含后端配置,对于 elastic 来说应该很直接,但各字段的含义如下:
primaryId 是端点的唯一标识符。这是用于检索检测数据的标识。
timeField 是用于限制查询的时间字段。
source 是标识检测类型的字段,在示例 schema 中,它映射到 NewProcess、RegistryWrite、FileAccess 等。
随后在 mappings 中,type 字段标识特定的检测,例如,如果您的后端仅支持 NewProcess 检测(或任何对应的名称),则只需要一个映射。与此密切相关的是,kind 字段将检测类型与 detectree 的类型关联起来。例如,如果 kind 为 file,则映射应提供一个 filePath,用于绘制上下文节点。
目前唯一支持的后端是 elastic,但为任何新后端构建适配器应该非常简单。有关更多信息,请参阅添加新后端部分。
为了在您的环境中部署该应用程序,您需要使用 npm install(或 pnpm install 或 yarn)安装所需的依赖项。然后,您需要为您的环境选择正确的适配器,请参阅此指南获取最新信息。
例如,如果您想使用 node 作为后端,则需要安装 @sveltejs/adapter-node,并修改您的 svelte.config.js,将 @sveltejs/adapter-auto 替换为 @sveltejs/adapter-node。然后可以使用以下命令构建项目,输出将在 output 文件夹中。
npm run build
可以通过以下命令启动开发服务器,这将允许在本地提供应用程序服务。
npm run dev
# 或启动服务器并在新的浏览器标签页中打开应用程序
npm run dev -- --open
以下截图展示了一个示例图

为了支持新后端,您需要在 backend_adapters 文件夹中创建一个专用的 TypeScript 文件。您可以使用 elastic 适配器作为模板,新模块应导出一个查询函数,该函数应接受与 elastic 文件中相同的参数。然后,您可以以首选方式查询所选后端。查询函数应返回一个对象,其中包含根据 schema.yaml 文件中定义的映射进行映射的数据。最后,为了正确选择后端,您还需要将其添加到 draw_tree.ts 中的以下对象中,此处的对象键也将是后端在 schema.yml 中的引用方式。
const backendTypes = {
elastic: '../backend_adapters/elastic'
};