ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

一个单位名称拉起一支六角色 AI 红队:dsh-purge 渗透演练链路解析

一个单位名称拉起一支六角色 AI 红队:dsh-purge 渗透演练链路解析

一个单位名称拉起一支六角色 AI 红队:dsh-purge 渗透演练链路解析

【免费下载链接】dsh-purgeDeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐ 如要二开,请查看署名要求部分项目地址: https://gitcode.com/GitHub_Trending/ds/dsh-purge

dsh-purge 的红队模式(攻防演练模式)是内置于本机 DeepSeek Harness 的多智能体架构:在主会话里发一个靶标单位名称,它会把渗透演练拆成信息收集、资产梳理、漏洞发现、漏洞利用、内网渗透五个专职角色,按名额约束并行执行,所有发现统一写入本机 SQLite 资产库,最终能导出一份可复现的演练报告。本文按"为什么要拆角色 → 角色怎么分工 → 并发怎么控 → 结果怎么验证"的顺序,把这条链路拆开看。

为什么不让单个智能体从头干到尾

用一个模型同时做侦察、扫描、利用、写报告,会撞上三个工程问题:上下文被扫描输出撑爆;角色交叉导致漏步骤(比如一边收资产一边测漏洞,两边都做不深);成果只留在对话里,事后无法复现。红队预设(定义在 presets/redteam/preset.yml)针对这三点给了对应方案:主会话只指挥不动手、执行角色人设固化、成果一律落库。

六个角色:从指挥到内网渗透各管一段

角色清单集中在 lib/redteam/store-core.js 的ROLE_TITLES里,共六个 code:

  • plan(主会话/指挥):只做计划任务、派活、分析回报、向用户汇报四件事,不扫描、不爆破、不上传。它可直接调用的只有redteam_*查询类和派活前后的redteam_preflight/redteam_agent_slot等工具;
  • recon(信息收集):FOFA、crt.sh 被动源加主动探测,目标是把资产收全,明确不碰漏洞检测;
  • assess(资产梳理):逐条评估资产的易打性(priority / potential / reason)并全部落库,产出攻击顺序;
  • vuln-scan(漏洞发现):逐条过资产,先查库避免重复劳动,Nday/1day 优先,每条漏洞连同原始请求一起落库;
  • exploit(漏洞利用):拿服务器权限、上线 WebShell 并实测可连,立刻建 suo5 隧道并验证能访问内网;
  • internal(内网渗透):走 exploit 建好的隧道铺网段,必须用gogo-intranet铺面 +fscan-intranet打点,直到没有新网段为止。

子角色的人设不是靠临场提示词,而是存在engagements/<靶标>/agents/<code>.md。派活时任务书第一行写一个角色标记即可:

redteamRole: vuln-scan

lib/redteam/role-section.js 会据此把对应角色稿原样注入子会话的系统提示词;没有这一行就不猜角色,避免子会话拿着错误的人设开工。指挥的完整职责与硬约束写在预设人设 presets/redteam/agent.cordis.yml 中。

并发是怎么控制的:名额闸门加两道保险

靠提示词"劝"模型别乱并发并不可靠,这里的并发上限完全由代码实现。

名额闸门。派活前主会话先调redteam_agent_slot(action=status)看剩余额度,要派活再 action=acquire 占位;满了直接拒绝,不重试硬塞。计数不是简单自增,而是取"subagents 注册表里真正在跑的子会话数"与"预留数"的较大值(实现见 lib/redteam/tools.js),避免重复计数也避免漏计。子智能体结束时通过subagent/end事件自动释放名额,不依赖模型记得调 release。

上限从哪读。生效顺序是settings.json→ 环境变量REDTEAM_MAX_AGENTS→ 默认 3,硬上限 10(lib/redteam/settings.js)。面板与闸门读同一份配置,不会出现两处口径不一致。

叶子约束。委派工具在 agent.cordis.yml 中配了maxDepth: 1,同时把subagent_fork/workflow/ralph从子会话的工具目录里摘掉。也就是说子角色连"再派一层"的工具都看不到,无法产生超出预算的嵌套并发。

策略上默认顺序派:只有确实互不依赖的活才并行,且总数不超上限,这是省 token 又稳进度的默认节奏。

一次完整演练的五阶段流程

用户只给靶标单位名称时,主会话按红队攻击流程顺序推进:

① 信息收集(收全)→ ② 资产梳理(逐条评估落库)→ ③ 漏洞发现(Nday/1day 优先)→ ④ 漏洞利用(权限/隧道)→ ⑤ 内网渗透(有隧道且可达时)

两个执行细节值得注意。第一,每步结束后先核对落库数据再派下一步,不是一口气把五个阶段全派出去。第二,内网阶段是循环结构:internal自己顺序完成收集→梳理→发现→利用,任务书里写明走哪条隧道、监听地址贴真实值,指定 skills/redteam/gogo-intranet.md 走隧道铺面、skills/redteam/fscan-intranet.md 打点,每发现一个新网段就再跑一轮。

开工前还有预检环节:redteam_preflight会逐项检查环境变量(如 FOFA_KEY)、本机工具二进制与反弹 Shell 用的 VPS,缺什么一次性列清向用户要,补不齐就给降级方案(没有 FOFA 就走 crt.sh 与被动 DNS)。技能正文统一放在 skills/redteam/ 目录,随包技能启动时同步到$DSH_HOME/redteam/skills。

子智能体说"拿到了",凭什么可信

指挥不是听回报就记账,它必须回库里验证:资产是否落库(redteam_asset_query)、漏洞状态与证据(redteam_vuln_query)、隧道是否 active、攻击链是否写了实际命令(redteam_chain)。没落库的发现要求补落库再继续——报告里"凭据怎么来的、隧道怎么搭的"全靠攻击步骤的 tool/result 字段,缺这一步的报告交不出去。

数据底座是 SQLite,表结构定义在 lib/redteam/schema.js:segment(C 段)→ asset → port → service → fingerprint 层层关联,另有 vuln、credential、webshell、tunnel、score_point 等表记录战果与得分。每条发现强制带 provenance(passive/active)与 tool 名,界面上的来源标注因此可信;带 FTS5 的构建支持全文检索,缺失时自动降级。每个靶标有独立的assets.db,多会话并行时互不串写。

会话隔离的机制在 lib/redteam/tools.js:绑定键是沿parentSession走到最顶层的根会话 id,子智能体自动继承父会话靶标;若全局"当前靶标"指针已被别的会话占用,解析时直接抛错提示显式绑定,而不是静默挑一个——挑错靶标等于把 A 单位的成果写进 B 单位的库。

成果最终由 lib/redteam/report-replay.js 做可复现性处理,再经 scripts/export-engagement-report.mjs 导出"靶标名-红队成果复现报告.md"连同证据截图,交付出去别人也能照着跑。

⚠️ 授权边界与运行环境

红队模式会真实发包、上传文件、建立隧道,只用于你有权管理的本机、离线靶标或已书面授权的演练环境。首次进入演练台需阅读声明、滚到文末并勾选确认,确认记录由 lib/drill-grant.js 落在本机$DSH_HOME/dsh-purge/下。

推荐在专供演练的 Kali 虚拟机中运行,演练完可整机丢弃,避免扫描流量与私钥落盘影响日常环境;未授权的任何渗透、攻击、窃取与破坏行为一律禁止,由行为人独立承担全部法律责任。


收束:这套设计把"一个模型从头干到尾"拆成 1 个指挥 + 5 个专职角色,用名额闸门和叶子约束控并发,用 SQLite 落库加根会话隔离保证每一步有据可查、多会话互不串写。它适合已授权环境下需要并行提速且要求成果可复现的演练场景;超出授权范围,任何能力都不该被使用。

【免费下载链接】dsh-purgeDeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐ 如要二开,请查看署名要求部分项目地址: https://gitcode.com/GitHub_Trending/ds/dsh-purge

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进