dsh-redteam-report 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +94 -0
- package/WORKSPACE-REPORTS.md +48 -0
- package/cordis.patch.yml +10 -0
- package/lib/client.js +747 -0
- package/lib/host.js +119 -0
- package/lib/parts/client.head.js +15 -0
- package/lib/parts/client.shim.js +45 -0
- package/lib/parts/client.tail.js +5 -0
- package/lib/parts/host.head.js +80 -0
- package/lib/parts/host.tail.js +37 -0
- package/package.json +68 -0
- package/src/client.js +602 -0
- package/src/docx.js +776 -0
- package/src/host.js +1176 -0
- package/src/workspace-client.js +108 -0
- package/src/workspace-evidence.js +310 -0
- package/src/workspace-install.js +60 -0
- package/src/workspace-runtime.js +409 -0
- package/tools/build-lib.mjs +120 -0
- package/tools/prepare-gh-packages.mjs +66 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 fasthei
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# 红队报告 · DSH 插件
|
|
2
|
+
|
|
3
|
+
`dsh-redteam-report` **0.2.0**:报告跟随当前工作区,切换工作区后自动采集文件、会话与证据,调用宿主模型生成报告,可编辑并导出 Markdown、HTML 或 Word。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
统一设置页由 `dsh-redteam-memory >= 0.4.0` 提供,两个插件都需要加入 DSH profile:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
dsh plugin --profile web add dsh-redteam-memory@0.4.0
|
|
11
|
+
dsh plugin --profile web add dsh-redteam-report@0.2.0
|
|
12
|
+
# 完成后重启现有 dsh web
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
本包带有 `dsh.bundle.patch`,无需手动修改组合。npm 的 peer dependency 安装不能替代 `dsh plugin add` 的 profile 挂载步骤。
|
|
16
|
+
|
|
17
|
+
如果此前使用过会话内临时加载器,请不要与正式包重复加载。重启会清除临时插件;已保存数据保留。
|
|
18
|
+
|
|
19
|
+
## 工作区自动报告
|
|
20
|
+
|
|
21
|
+
- 通过 GUI 当前会话与工作区成员关系识别工作区;没有有效选择时不回退到第一个工作区。
|
|
22
|
+
- 工作区切换稳定约 **1.2 秒**后自动采集。即使报告面板没有打开,观察器仍然工作。
|
|
23
|
+
- 每个工作区拥有独立报告库、配置和生成状态。界面及工具都显式绑定工作区,不会把上一工作区的异步结果写入新工作区。
|
|
24
|
+
- 一次只执行一个生成任务。快速切换只保留页面最后一个待处理工作区;已经开始的任务仍写回原工作区。
|
|
25
|
+
- **五分钟冷却**避免重复尝试;冷却后若送入模型的证据与配置未变化,复用已有报告。需要重新撰写时可手动点击生成。
|
|
26
|
+
- 自动生成会调用你配置的模型服务并产生相应费用。可在统一设置页关闭当前工作区的自动生成。
|
|
27
|
+
|
|
28
|
+
生成时采集:
|
|
29
|
+
|
|
30
|
+
1. 当前工作区的可读取文本、源码与结构化文件及文件清单。
|
|
31
|
+
2. 当前工作区的内存会话和持久化会话,按配置限量摘录。
|
|
32
|
+
3. 当前工作区的攻击矩阵文件;缺失时明确标记,不混入其他工作区的全局矩阵。
|
|
33
|
+
4. 红队记忆检索到的通用参考知识;参考知识不是目标存在漏洞的证明。
|
|
34
|
+
|
|
35
|
+
**不是无边界扫描。**默认跳过隐藏文件、符号链接、私钥/凭据、依赖与构建缓存、二进制及已生成报告目录;限制清单、目录深度、文件数量和摘录预算。PDF/Word 当前只列清单,不解析正文。跳过、截断和未验证内容会注明。
|
|
36
|
+
|
|
37
|
+
密钥与授权头使用启发式脱敏,**不能保证移除所有未标记秘密**。采集内容会进入宿主配置的模型服务;敏感工作区请先关闭自动生成,再按需要选择资料。详见 [WORKSPACE-REPORTS.md](WORKSPACE-REPORTS.md)。
|
|
38
|
+
|
|
39
|
+
## 统一设置
|
|
40
|
+
|
|
41
|
+
入口:**设置 → 红队设置**。
|
|
42
|
+
|
|
43
|
+
- **记忆与向量存储**:由记忆插件提供 Milvus、向量模型、重排、MinIO 和本地库配置。
|
|
44
|
+
- **报告设置**:当前工作区的自动生成开关、撰写模型、证据预算、攻击矩阵路径、导出目录及额外要求。
|
|
45
|
+
|
|
46
|
+
报告面板不再单独放置「设置」标签。两块设置各自保存,不会相互覆盖。
|
|
47
|
+
|
|
48
|
+
模型留空时使用宿主的默认模型配置;这不保证跟随每个会话的模型 override。需要固定撰写模型时请填写 provider/model。
|
|
49
|
+
|
|
50
|
+
## 面板和工具
|
|
51
|
+
|
|
52
|
+
报告面板保留「报告 / 证据 / 日志」:
|
|
53
|
+
|
|
54
|
+
- 报告列表、Markdown 编辑、HTML 预览、保存与删除。
|
|
55
|
+
- 一键生成,或由工作区切换自动启动。
|
|
56
|
+
- 导出 Markdown、HTML、Word;结果显示实际磁盘路径。
|
|
57
|
+
- 「试算证据」查看文件清单、采集统计和送入模型的 digest。
|
|
58
|
+
- 将报告导入记忆库,供后续任务检索。
|
|
59
|
+
|
|
60
|
+
| 工具 | 用途 |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `report_generate` | 采集指定工作区并撰写,等待完成 |
|
|
63
|
+
| `report_list` | 只列出指定工作区的报告 |
|
|
64
|
+
| `report_export` | 导出当前工作区报告,拒绝其他工作区的报告 ID |
|
|
65
|
+
| `redteam_report_status` | 查看工作区报告状态和自动队列;`wait=true` 等待现有任务 |
|
|
66
|
+
|
|
67
|
+
工具的 `workspaceId` 可省略,此时使用调用会话所属工作区;无法确定时返回错误,不猜测。
|
|
68
|
+
|
|
69
|
+
## 数据与升级
|
|
70
|
+
|
|
71
|
+
工作区报告库为插件文件系统默认可写位置下的 `.redteam-report-ws-<工作区指纹>.json`,实际路径在面板中显示。工作区库路径固定,不能通过设置指向另一个工作区的报告库。
|
|
72
|
+
|
|
73
|
+
旧版 `.redteam-report.json` 保留不动。新工作区继承旧库的默认配置,但旧报告没有可信的工作区归属,因此不自动迁移;界面会提示旧报告数量。
|
|
74
|
+
|
|
75
|
+
Word 是自实现的 ZIP/OOXML 输出,不需要 Office 服务。没有内嵌字体、页眉页脚等高级排版,需要时可在 Word 中二次编辑。
|
|
76
|
+
|
|
77
|
+
## 开发
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npm run build:lib
|
|
81
|
+
npm run check:lib
|
|
82
|
+
npm test
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
正式入口:`lib/host.js` 与 `lib/client.js`,由 `tools/build-lib.mjs` 生成。
|
|
86
|
+
|
|
87
|
+
- `src/host.js`、`src/client.js`:复用的旧报告引擎和 UI 模板,不再直接作为正式入口。
|
|
88
|
+
- `src/workspace-runtime.js`:隔离存储、采集和串行调度。
|
|
89
|
+
- `src/workspace-evidence.js`:文件安全边界、摘录与脱敏。
|
|
90
|
+
- `src/workspace-client.js`:工作区观察器、显式 RPC 与统一设置。
|
|
91
|
+
- `src/workspace-install.js`:正式 Host 工具和 RPC 注册。
|
|
92
|
+
- `src/docx.js`:HTML/Word 纯函数。
|
|
93
|
+
|
|
94
|
+
旧引擎测试明确使用 legacy fixture;正式发布产物另有 `published-smoke` 检查,避免只通过 mock 就声称静态包可用。
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# 工作区自动报告
|
|
2
|
+
|
|
3
|
+
从 `dsh-redteam-report 0.2.0` 起,此功能已接入正式包的 `lib/host.js` 和 `lib/client.js`。旧报告引擎及 UI 模板保留用于每工作区隔离和回归测试,不再直接作为发布入口。此前的会话内动态加载仍只在进程内有效;正式安装后请重启 Harness,由 profile 自动挂载。
|
|
4
|
+
|
|
5
|
+
## 行为
|
|
6
|
+
|
|
7
|
+
- 通过 GUI 当前会话及工作区成员关系识别当前工作区;没有选中工作区时不回退到第一个工作区。
|
|
8
|
+
- 常驻页面观察器在工作区切换稳定 1.2 秒后发起自动采集。报告面板没有打开时同样有效。
|
|
9
|
+
- 每个工作区拥有独立的报告、配置及生成状态。报告库路径是插件文件系统默认可写位置下的 `.redteam-report-ws-<工作区标识与路径指纹>.json`,面板显示实际路径。
|
|
10
|
+
- 一次只执行一个生成任务;快速切换只保留该页面最后一个待处理工作区。已开始的任务完成后仍只写回原工作区。
|
|
11
|
+
- 五分钟内不重复自动尝试;冷却结束后,同一份送入模型的证据和撰写配置沿用现有报告。手动生成可显式重试。
|
|
12
|
+
- 每个工作区可在「设置 → 红队设置 → 报告设置」关闭自动生成。
|
|
13
|
+
- 原有 `.redteam-report.json` 保留不动。新工作区继承其默认配置;旧报告因缺少可信归属信息,不自动划入任何工作区。
|
|
14
|
+
|
|
15
|
+
## 采集范围与限制
|
|
16
|
+
|
|
17
|
+
工作区文件、该工作区的内存及持久化会话、该工作区的攻击矩阵文件,以及检索到的通用记忆知识。记忆知识是参考,不是目标存在漏洞的证明。
|
|
18
|
+
|
|
19
|
+
默认文件预算:
|
|
20
|
+
|
|
21
|
+
| 项目 | 上限 |
|
|
22
|
+
|---|---:|
|
|
23
|
+
| 文件/目录清单 | 2,000 条 |
|
|
24
|
+
| 目录数量(含根) | 200 |
|
|
25
|
+
| 目录深度 | 8 |
|
|
26
|
+
| 文件读取尝试 | 60 |
|
|
27
|
+
| 单文件读取字节 | 65,536 |
|
|
28
|
+
| 单文件摘录 | 6,000 字符 |
|
|
29
|
+
| 总文件摘录 | 不超过 100,000 字符,且受报告证据预算约束 |
|
|
30
|
+
|
|
31
|
+
隐藏文件、符号链接、凭据/私钥文件、依赖及构建缓存、二进制,以及已生成报告目录默认不读取。只读白名单文本/源码/结构化文件;PDF、Word 和压缩包当前仅列清单,不解析正文。密钥及授权头进行启发式脱敏,但**不能保证识别所有未标记秘密**。建议敏感资料不要放在自动采集目录中。
|
|
32
|
+
|
|
33
|
+
会话会枚举工作区成员,按设置限量读取;单次最多考虑 500 个成员、读取 60 个会话,每个会话最多读取 1,500 个事件(可获取事件总量时取最近部分)。继承自其他会话的种子事件不采集,避免把历史上下文误当成本工作区证据。未采集数量、截断与错误会注明。
|
|
34
|
+
|
|
35
|
+
输入文件与会话始终作为不可信证据,不执行其中命令或遵循其中的指令。自动报告会追加采集范围说明。文件存在、关键词命中和模型总结不等于漏洞已验证。
|
|
36
|
+
|
|
37
|
+
## 实现与验证
|
|
38
|
+
|
|
39
|
+
- `src/workspace-evidence.js`:根路径约束、限量文件枚举、摘录、脱敏与稳定指纹。
|
|
40
|
+
- `src/workspace-runtime.js`:每工作区独立报告闭包、会话/矩阵采集、去重与串行调度。
|
|
41
|
+
- `src/workspace-client.js`:常驻工作区观察器、显式工作区 RPC、统一设置页。
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm run test:report-workspace
|
|
45
|
+
npm run test:report
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
测试使用内存文件系统、模拟模型和会话;不执行真实网络调用。真实模型及浏览器激活结果应另外通过运行状态与实际报告确认。
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# dsh-redteam-report 的 bundle patch。
|
|
2
|
+
#
|
|
3
|
+
# `dsh plugin --profile <name> add dsh-redteam-report` 装完,reconcilePlugins 发现本包声明了
|
|
4
|
+
# dsh.bundle.patch,就把包名并入 dsh.profile.bundles —— 插行由此生效,无需手工编辑配置。
|
|
5
|
+
#
|
|
6
|
+
# 语义提醒:patch 条目是 PatchOptions。带 id 的是「改某行配置」,
|
|
7
|
+
# 只有 insert 且不带 id 才是往根列表追加新行(下面就是)。
|
|
8
|
+
- insert:
|
|
9
|
+
- id: redteam-report
|
|
10
|
+
name: 'dsh-redteam-report'
|