大模型下的深度强化学习的多智能体渗透测试(9)
PenGym 单智能体 izumi 当日进展报告:cross-family 边界继续向前推进,tiny 适配成功,tiny-small / tiny-hard 失败模式收敛,并开始转向示范轨迹与 BC warm-start 路线
一、今天这篇记录要说明什么
今天的工作重点,不再是继续纠结 medium family 内部训练细节,也不是回到 step-level LLM 的旧接法上,而是继续沿着当前已经收敛的主线,把 cross-family / cross-scenario 的边界再往前推一层,并进一步分析失败机制,尝试寻找不换 backbone 的修复路径。这一点与前一天已经确定的主线保持一致:当前最值得继续推进的方向仍然是 纯 DRL 的 cross-family 泛化边界刻画,而 LLM 更适合作为未来候选的高层统筹项,而不是当前底层动作主线。
今天真实完成并验证的事情可以概括为:
- 已基于当前统一动作空间 / 统一观测主线,继续补齐
small / tiny方向的 cross-family adaptation map; - 已确认:
small-honeypot仍然是当前最稳的 small family 正结果之一; - 已确认:
tiny在20k adaptation下可以成功; - 已确认:
tiny-small与tiny-hard在当前这套20k adaptation下仍然失败; - 已通过失败轨迹对比进一步看到:
tiny-small / tiny-hard的失败并不是“完全不会打”,而是前期 foothold 能建立,但中期会被坏分支带偏并持续浪费动作; - 已尝试两条“不换策略骨干”的修复线:
tiny -> tiny-small的 curriculum continuation;- 更强的 target-level failure-block;
但当前都未把tiny-small从0/15拉起来;
- 已开始转向 示范轨迹 / BC warm-start 路线,并确认仓库中旧的 rule-demo / BC 工具链仍然存在;
- 已进一步确认:现有
build_demo_dataset.py走的是原始 observation / 原始 action id 的 legacy 路线,当前产出的 demo datasetobservations shape = (22, 114),并不能直接用于现有 unified cross-family 主线,因此后续如果要做 BC warm-start,需要构建兼容 unified 主线的新 demo dataset 路线。
今天最重要的阶段性结论不是“已经把 tiny 全部打通”,而是:
当前纯 DRL 主线已经进一步显出一条更细的能力边界:
tiny已可适配成功,但tiny-small / tiny-hard仍然会在中期错误目标选择与坏分支循环中失效;而且轻量级 curriculum 与 failure-block 还不足以把它们直接救活。
二、今天的核心目标
今天的目标可以拆成三层:
1. 继续把当前 cross-family adaptation map 补完整
也就是把昨天已经明确的:
small-honeypottiny-small
继续向前扩成:
tinytiny-hard
并最终形成更清晰的能力层级曲线。
2. 在不更换当前 PPO / MaskablePPO 骨干的前提下,分析 tiny family 中失败与成功的分叉点
也就是说,不立刻换算法、不立刻推翻之前的训练成果,而是先回答:
- 为什么
tiny可以成功? - 为什么
tiny-small / tiny-hard仍然失败? - 它们的失败是同一种问题还是不同问题?
3. 如果当前轻量修补仍无效,就尝试把“示范轨迹 / BC warm-start”作为下一阶段的新增强路线引入
注意,这一步的目标不是换掉当前 backbone,而是为当前主线增加一个更强的 warm-start / imitation 入口。
三、今天具体做了什么
1. 继续补齐 small / tiny 方向的 cross-family 结果
今天首先继续确认了 current cross-family map:
(1)small-honeypot
前一阶段已经确认 small-honeypot 在 short adaptation 下是成功的,因此今天它继续作为当前最稳定的小 family 正例保留。
(2)tiny
随后对 tiny 做了 20k adaptation 并完成评估,最终结果为:
success = 15/15avg_steps = 15avg_reward = 189
这说明:
tiny并不是当前纯 DRL 主线的硬边界;在统一接口和当前 adaptation 路线上,它已经可以被成功拉起来。
(3)tiny-small
对 tiny-small 的现有适配模型做完整评估后,结果仍然是:
success = 0/15avg_steps = 200avg_reward = -810
之后又尝试了:
tiny -> tiny-small的 curriculum continuation;- 更强的 target-level failure-block;
但结果仍然是:
success = 0/15avg_reward = -806
说明:
tiny-small在当前配置下依旧没有被真正救活。
(4)tiny-hard
继续补完 tiny-hard 的 20k adaptation 训练与评估后,结果为:
success = 0/15avg_steps = 200avg_reward = -831
说明:
tiny-hard目前也仍然处于当前纯 DRL 主线的失败区间。
到这里,今天已经把当前这条边界进一步补清楚:
- medium family:稳定成功
small-honeypot:short adaptation 成功tiny:short adaptation 成功tiny-small:short adaptation 失败tiny-hard:short adaptation 失败。
2. 对 tiny-small 与 tiny-hard 做了失败轨迹分析
今天最关键的工作之一,不是停留在最终 0/15 这一行结果,而是去对比:
tiny的成功轨迹;tiny-small的失败轨迹;tiny-hard的失败轨迹。
(1)tiny-small 的失败模式
tiny-small 并不是开局完全失败。实际轨迹显示:
(1,0)上可以完成e_http -> process_scan -> pe_tomcat,建立前期 foothold;(2,0)上也可以继续拿到USER / ROOT;- 真正开始跑偏的是之后在
(3,1)、(3,0)这些目标上不断出现:permission_errorundefined_error- 重复无增量 scan / exploit
最后打满 200 步失败。
(2)tiny-hard 的失败模式
tiny-hard 与 tiny-small 同样不是“完全不会打”。
它也能在前期:
(1,0)上拿到USER(2,0)上继续推进
但相比 tiny-small,它在 (1,0) 上的提权更早失败,随后也很快进入:
permission_error- 失败提权
- 重复在坏目标上浪费动作
因此可以认为:
tiny-hard与tiny-small属于同一大类失败模式,只是tiny-hard暴露得更早、更重。
(3)今天因此得到的机制判断
当前这两个 harder tiny 变体更像是:
- 不是 observation / unified action 接口没打通;
- 也不是“完全学不会开局”;
- 而是在中期扩展阶段会被错误分支拖住,坏目标抑制和高层目标排序能力都还不够。
3. 在不换策略骨干的前提下,尝试了两条轻量增强路线
(1)tiny -> tiny-small 的 curriculum continuation
今天没有直接换算法,而是先尝试:
- 以
tiny_adapt_20k作为新 base; - 继续做
tiny -> tiny-small的 curriculum continuation; - 训练出:
maskable_ppo_izumi_tiny_small_from_tiny_curriculum_20k.zip
但评估结果仍然是:
success = 0/15avg_reward仅从-810轻微变化到-806
说明:
单靠把初始化来源从 medium 换成 tiny,还不足以救活
tiny-small。
(2)加强 target-level failure-block
随后又继续在 tiny-small 入口上做了更强的 target-level failure-block,加强对:
permission_errorundefined_error- 同目标重复 exploit / scan
的抑制,并训练出:
maskable_ppo_izumi_tiny_small_from_tiny_curriculum_failureblock_20k.zip
但最终评估仍然是:
success = 0/15avg_reward = -806
说明:
failure-block 虽然方向正确,但当前这版最小增强还不足以把
tiny-small从失败区间拉出来。
4. 开始转向示范轨迹 / BC warm-start 路线
(1)确认仓库中旧的 BC 工具链仍然存在
今天已经确认仓库里存在:
prototype/rl/build_demo_dataset.pyprototype/rl/train_bc.pyprototype/rl/eval_bc_dataset.pyprototype/rl/eval_bc_env.py
说明此前的:
rule / expert demo -> dataset -> BC
这条路线是完整存在的。
(2)确认旧 demo dataset builder 的工作方式
通过读取 build_demo_dataset.py 和历史 demo 文件,今天已经明确:
- 旧 demo 文件是由
HOST_NAMEActionName
组成的二维列表;
build_demo_dataset.py会把它们映射成 action id,并保存为:observationsactions
的.npz文件。
(3)实际构造并验证了一版 tiny-small 候选 demo
今天还基于:
ACTION_NAMESACTION_TARGETS- 现有
tiny-small轨迹信息
写出了一版 demo_tiny_small_candidate.json,并用 build_demo_dataset.py 实际回放。
结果表明:
- 前半段路径基本能走通;
- 还暴露出若干错误 privilege escalation 选择;
- 更关键的是:
最终 legacy builder 产出的 dataset 形状是:
observations shape = (22, 114)actions shape = (22,)
这说明:
当前这条 demo dataset builder 仍然是基于原始 observation / 原始 env action id 的 legacy 路线,不能直接用于当前 unified cross-family 主线。
四、今天做对了什么
1. 没有因为 tiny-small / tiny-hard 失败就立刻推翻整个 DRL 主线
今天很重要的一点是:
- 没有一看到
0/15就回头换算法; - 而是继续沿着“medium -> small -> tiny”的主线,把能力边界真正补清楚。
2. 首次把 tiny family 的内部层级也进一步拆开了
今天真正新推进出来的,不只是“tiny 好像难”,而是把它进一步拆成:
tiny:可适配成功tiny-small:失败tiny-hard:失败
这比笼统说“tiny family 不行”要精确得多。
3. 继续把失败真正归因到策略层,而不是接口层
通过今天的轨迹分析,已经能更清楚看到:
- unified action / unified observation 并非完全没接上;
- harder tiny 的失败主要来自中期坏分支与错误目标选择;
- 这属于 policy-level 问题,而不是单纯 env bug。
4. 没有在 curriculum 与 failure-block 上只停留在口头讨论
今天实际把:
tiny -> tiny-small curriculum- 更强 failure-block
都真正落到代码和实验上,虽然结果还没救活 tiny-small,但它们至少把“什么没用”也变成了可验证结论。
5. 及时把示范轨迹 / BC 路线从“想法”推进到了“可执行工具链层面`
今天不是只说“也许可以做 BC”,而是已经确认:
- demo builder 在;
- train_bc 在;
- eval_bc 在;
- 候选 demo 也实际回放生成过一版数据集。
因此,后续转向 BC warm-start 已经不是空想,而是有可接的代码起点。
五、今天的问题与不足
1. tiny-small / tiny-hard 仍然没有被真正救活
今天虽然做了:
- curriculum
- failure-block
但它们仍然在 0/15。
说明当前 problem 不是靠一层小修补就能解决的。
2. 当前示范轨迹路线虽然打开了工具链,但 expert demo 还不够成熟
今天构造的 demo_tiny_small_candidate.json 还只是候选版本:
- 其中某些 privilege escalation 选择仍然是错的;
- 轨迹还没形成完整稳定的成功样本。
3. legacy BC dataset 目前与 unified cross-family 主线不兼容
今天最关键的不足其实是这个:
- 当前
build_demo_dataset.py产出的 observation 是114维; - 而当前 unified cross-family 主线使用的是 unified observation;
- 因此不能直接拿这个 legacy dataset 去 warm-start 当前 unified PPO 主线。
4. 当前还没有真正完成 “unified-compatible demo dataset builder”
也就是说,今天虽然把路找到了一半,但还没完成最后一步:
- 如何把
tiny-small / tiny-hard的 expert 路径, - 转成当前 unified cross-family 可直接使用的 imitation dataset。
六、今天得到的阶段性结论
今天真正能站住脚的结论可以收成六条:
1. 当前 pure DRL 主线的能力边界又往前推进了一层
已经不只是:
- medium family 成功
small-honeypot成功
而是进一步确认:
tiny成功tiny-small / tiny-hard失败。
2. tiny-small 与 tiny-hard 属于同一类 harder tiny failure
它们都不是完全不会开局,而是:
- 建立一部分 foothold 后;
- 被坏分支带偏;
- 在错误 exploit / scan 上持续浪费动作。
3. 轻量 curriculum 与最小 failure-block 还不足以解决当前 harder tiny failure
它们是正确方向,但当前强度还不够。
也就是说,后续如果继续这条路,需要更强版本,而不能指望 20k 轻量 continuation 自己把问题消化掉。
4. 当前不需要立刻换 backbone,但也不能继续只靠小修补
今天的结果说明:
- 现在还没到必须换 PPO / MaskablePPO 的程度;
- 但也已经过了“继续微调一点点就会自动变好”的阶段。
5. 示范轨迹 / BC warm-start 是一条值得继续推进的新候选增强线
因为它针对的正是当前 hardest cases 的核心弱点:
- 不是开局不会;
- 而是中期不会正确扩展。
6. 当前 BC 路线真正的关键,不是训练脚本,而是构建兼容 unified 主线的 demo dataset
这才是下一阶段最关键的新工程点。
七、下一步最合理的推进方向
今天的结果已经足够说明:当前主线不该再简单重复:
- 再做一轮同样的 20k
- 再加一点小 failure-block
- 或者回头再试 step-level LLM override
更合理的后续方向有四类:
1. 先把 today 的 harder tiny failure 机制继续分析到底
也就是继续精确区分:
- 哪些动作是稳定错误分支;
- 哪些 host 上的 exploit / scan 应该整组压掉;
- harder tiny 之间是否还存在更细的失败差异。
2. 把示范轨迹路线真正推到 unified 主线兼容
最重要的不是继续看 train_bc.py,而是:
- 基于当前 unified observation / unified action;
- 写出一套新的 demo dataset builder;
- 让
tiny-small / tiny-hard的 expert path 可以直接喂给当前主线。
3. 在不换 backbone 的前提下,尝试更强的 imitation + PPO 组合
一旦 unified-compatible demos 到位,后面最自然的增强路径就是:
- demo / BC warm-start
- 然后 PPO fine-tune
而不是二选一地“纯 BC”或“纯 PPO”。
4. 等单智能体 harder tiny 的增强线更明确之后,再重新考虑 LLM 的高层引入方式
今天之后,LLM 仍然不该回到底层动作环;
它更适合等单智能体 harder tiny 失败机制看得更清楚以后,再作为:
- 高层规划
- 失败反思
- 跨 family 抽象总结
这一层重新接入。
八、明天开始时的第一件事
明天继续时,不要回头重跑已经明确无效的轻量 continuation,也不要回到旧的 step-level LLM 讨论。
直接从这里接:
第一目标
实现一套 兼容 unified cross-family 主线的 demo dataset builder。
它要解决的问题
把:
tiny-small / tiny-hard的 expert path- 从当前 legacy 的 raw env / 114-dim dataset
- 转成当前 unified observation / canonical action space 下可直接使用的 imitation dataset
这样做的意义
一旦这层统一 demo 数据管线打通,后面就可以在不更换当前 PPO backbone 的前提下,真正开始做:
- harder tiny 的 BC warm-start
- imitation + PPO fine-tune
- 再验证
tiny-small / tiny-hard是否能被真正救活
这才是下一阶段最实在、也最值得继续推进的工作。
