无论银幕或文字如何渲染,进攻性安全测试的本质往往极其枯燥且冷酷无情。它要求组织力、纪律性、耐心、体系化思维,以及一颗能够并行运转的大脑。进攻性安全工程师始终在尝试将测试方法论中至少一部分工作自动化,以获得更干净、更一致且更注重细节的流程。围绕这一目标,一个活跃的社区多年来打造了大量出色的工具——那些真正改变了行业格局的作品,包括 NMAP、Hydra、Metasploit、BurpSuite、aMASS、Impacket、masscan、Ghidra、Nikto 等等。我们也听过 "完全自动化渗透测试" 和 "完全自动化红队" 之类的说法,但从来没有任何方案真正落地,并像我们日常使用的那些半自主、最终仍由人类操作员驱动的工具那样深刻影响社区。
然后,LLM 来了。
多家公司和个人迅速跟进,推出了 LLM 增强乃至全自动的测试套件,其中一些还取得了相当亮眼的成绩。社区里有许多人靠提供进攻性安全测试谋生,通常的模式是高水平的人加上精良的工具。然而,那些辅助人类的工具如今正在经历一场令人激动的变革。Agentic coding 能把一个普通的聊天式 LLM 变成驻留在你终端里的搭档,它可以操控你的整个技术栈——前提是你能迈过 "存在性威胁" 这道坎。LLM 已经是、并将持续成为变革的强力催化剂,但变革之中也必然伴随着复杂而棘手的新问题。
本着构建、打破并驯服新技术的精神,一位 BLS 操作员打造了 red-run。这是一个设计运行在 Claude Code 之上的进攻性安全测试框架。它的开发周期大约两周,烧掉了海量 token,至少还搭上了一个通宵。如果这段经历教会了我们什么,那就是:未来几年注定精彩纷呈 (也令人胆寒)。作为一个可用的原型,它的能力远超我们所有人的预期。
red-run 是一个 Claude Code 项目,它将 skills、MCP 服务器和 agents 与路由逻辑相结合,引导 Claude 和操作员依次完成针对 IT 基础设施的定向攻击的各个阶段。作为一款进攻性安全工具包,它与国家级威胁行为者武器库中那些精密的 LLM 驱动工具相比无疑还有很大差距。
red-run 在进攻性安全领域对 Claude Code 做了全方位增强:
而且,用 Claude Code 搞渗透和迭代简直爽到不行。它就是一台加速器。Claude Code 以及其他 "AI" 编码代理类工具很可能成为任何正经进攻性安全团队的标配。没有它们,你注定落后。别忘了——坏人手里同样有这些东西。
大语言模型 (LLM) 的上下文窗口是模型在某一时刻能够 "记住" 的文本总量。可以把上下文窗口类比为易失性内存,只不过单位是 token 而不是 GB。一个 token 大致相当于 0.75 个英文单词。
Claude skills 是以 Markdown 格式编写的文件,在被调用时加载到上下文中。Skills 的作用是告诉 Claude 按照 你 期望的方式来完成任务。Claude 本身已经知道 怎么 做几乎所有事——它能调研、能推理、能排障、能迭代、能渗透。难点在于让它以正确的方式、按正确的顺序、并带有可追责性地执行操作。
当 Claude Code 会话逼近上下文限制时,上下文窗口会被自动压缩 (本质上就是摘要化)。这对长会话而言是个大问题:你可能已经获得了初始访问、完成了横向移动,正在提权——然后上下文窗口突然被压缩,早期的关键信息就此丢失。
red-run 用 orchestratorskill 来解决这一问题——它是启动时唯一加载进上下文的 skill。orchestrator扮演主函数的角色,设计在启用了 adaptive thinking 的 Opus 模型上运行。
首要任务:orchestrator负责在执行过程中通过 SQLite 数据库持续跟踪整个任务的状态。一个频繁更新的状态数据库能让 orchestrator在上下文压缩这场 "脑叶切除术" 之后重新串联起所有关键线索。实际上,即使是冗长的任务也能在一个全新会话中恢复,生产力几乎不会受损。
orchestrator的第二项同等重要的职能是 skill 和 agent 路由。路由机制引导任务经历各个阶段——枚举、初始访问、横向移动、跳板、权限提升、数据外传。每当 orchestrator获取到关于目标的新信息,它就会通过以下两种方式之一来决定接下来调用哪些 skill、分派哪些 agent:
network-reconweb-discoveryad-discoverynetwork-recon-agent发现 Apache Tomcat AJP 连接器orchestrator没有对应的硬编码逻辑orchestrator向 skill-routerMCP 服务器发送查询 "Apache Tomcat AJP connector"skill-router返回 ajp-ghostcatskill 为最相关结果,相似度 76%orchestrator将 ajp-ghostcatskill 分派给 web-exploit-agent执行当攻击路径出现分叉时,agent 可以被派遣并行处理不同的任务。orchestrator或人类操作员随时可以介入,将偏离方向的 agent 拉回正轨。当 agent 汇报结果后,orchestrator会根据更新的目标数据点做出新的路由决策。
Agent 在任务执行过程中会将中间发现写入状态数据库,因此 orchestrator可以在几分钟内发现新线索并委派后续 agent,而无需等待原始 agent 跑完全程。例如,如果 ad-discovery遇到了一个新的 Web 服务,orchestrator会立刻知晓并可以马上分派 web-discovery,而不是等上十分钟直到 ad-discovery完成全部流程。这种迭代式 agentic tasking 工作流使 Opus 驱动的主上下文窗口可以专注于操作员交互,主循环将一直运转下去,直到操作员定义的所有目标全部达成。
任务结束之后,才是 red-run 真正大放异彩的时候。retrospectiveskill 在主上下文窗口中运行,回顾整个任务期间的所有步骤。Skill 路由决策会被逐一分析。Agent 行为会被深入审查,细致到 agentic 任务中执行的每一条命令。攻击载荷和方法论中的漏洞会被识别出来。所有人工干预都会被标注。
Claude 生成一份按优先级排序的清单,内容涵盖 skill 方法论更新、agent 改进、待构建的新 skill,以及 orchestrator路由修复。
警告:retrospectiveskill 会引出一些存在主义问题,比如 "我到底为什么会在这里?"
red-run 已经从一个简单的进攻性安全 skill 库,进化成了一个基于 RAG 的按需 agent 调度器,配备偏好并行化的分层规划系统 (试试快速连说三遍)。它正逐步变成一个 "一键启动" 的工具,能够从 IP 地址一路打到 root flag,征服大多数基础设施类 CTF——不成功便成仁 (要么就是你烧光了投给 Anthropic 的钱)。在熟练操作员手中,当 agent 不可避免地钻进兔子洞或犯错时,只需轻轻一推就能将其拉回正轨,效果成倍放大。
话虽如此,red-run 目前仍然 非常 处于概念验证 (PoC) 阶段。当前形态下的 orchestrator本质上是一个高级 CTF 解题器,并非为面向客户的正式任务而设计。它的目标是完成靶场练习,并通过 retrospectives不断自我改进——类似于一个初级渗透测试员的成长方式。
orchestratorskill 将持续进化和成熟。red-run 有朝一日可能实现完全模块化,让操作员可以将面向 CTF 的 orchestrator替换为偏好隐蔽和规避的客户安全版本,或者替换为用于培训操作员新技术的版本。Skills 将扩展至云基础设施、运营技术 (OT) 和逆向工程 (RE) 领域。MCP 服务器将被构建以支持自定义命令与控制 (C2) 基础设施、钓鱼活动,以及用于数据处理和报告的本地模型。
我们正处于 agentic coding 的极早期,但它对进攻性安全社区的影响不容小觑。不久之后,授权渗透测试任务开始配备辅助人类操作员的半自主编排 agent,这毫不意外。同样毫不意外的是,怀有恶意的威胁行为者会在真实攻击中部署此类工具。
为了展示这些工具的速度,以下是 red-run 对阵 Flight.HTB (警告:前方剧透)。
这次运行实际耗时 1 小时 24 分钟,但 red-run 解这个靶机最长花过 3 小时,最短仅 45 分钟。CTF 测试充分暴露了 LLM 真正的不确定性。即使操作员提示完全相同,agent 每次通过同一个靶机走的路径都略有差异。有时 agent 会卡在时钟偏差这类琐碎问题上——尽管它们加载的 skill 里有明确的排障步骤。它们还经常因为 prompt 压力而无视 agent 和 skill 层面的指令,比如 "不要从互联网下载工具"。而且这些加载着 Claude 所构建 skill 的 agent 完全没有 OPSEC 意识。Claude 完全不知道收敛。 red-run 会让你的 SOC 警报大亮,与此同时你的敏感数据正被发往 Anthropic 服务器。不要在生产环境中运行此工具 。
即便拥有最新的模型和精心编写的 skill,"AI" 也不过是攻击者和防御者武器库中的又一件工具 (至少目前如此)。每天使用 LLM 的人都清楚,它们时不时仍会做出离谱的错误决策。当 LLM 被放在威胁行为者的位置上、对着你的生产环境发起攻击时,这些错误决策可以 瞬间 演变为 灾难。事实上,一种新型的威胁行为者已经诞生——过度信任且缺乏经验的 agentic 工具用户。
LLM 不是确定性的。相同的输入永远不保证产出相同的输出。这正是为什么每当 LLM 可能在资产上执行代码时,都必须有熟练的人类在回路中——负责监督,负责执行约束。
以当前的变化速度来看,一年后进攻性安全的工作会是什么样子尚不明朗,更不用说五年后了。人类操作员当然会继续执行键盘操作任务,但这些任务本身会不断演进 (正如它们一贯以来那样)。