「AI渗透测试」CyberStrike拆解:7600份Ed25519签名技能喂给Agent,把Claude订阅变成红队

admin 2026-10-02 05:08:21 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文拆解开源AI渗透测试工具cyberstrike,指出其基于opencode改名,集成13个安全agent与7662份技能,重点分析其ed25519技能签名方案(四态判定防篡改)及HTTP重放引擎设计(避免将不可信内容拼入shell命令)。强调技能签名保证完整性而非安全性,并提醒AGPL许可与授权边界。 综合评分: 85 文章分类: ai安全,渗透测试,红队,安全工具,安全开发


「AI渗透测试」CyberStrike拆解:7600份Ed25519签名技能喂给Agent,把Claude订阅变成红队

原创

句芒安全实验室 句芒安全实验室

句芒安全实验室

2026年9月30日 11:37 上海

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

你给 AI Agent 装了 7,600 份进攻性安全方法论,然后让它自己挑一份去扫目标。问题来了:这 7,600 份文档里,如果有一份被人改过一行字,谁会发现?

这是我翻 CyberStrikeus/CyberStrike 时最感兴趣的地方。它不是一个「AI 扫洞神器」,而是把两个经常被混为一谈的问题分开处理了:技能是谁发的,以及 Agent 的 payload 该怎么发。

先核身份

按老规矩,发布前用 GitHub API 当天核实:仓库 CyberStrikeus/CyberStrike,2,900 颗星、456 个 fork、41 个未关闭 issue;主语言 TypeScript,协议 AGPL-3.0;2026 年 2 月 14 日建仓,最近一次提交在 2026 年 9 月 29 日,仓库体积约 186 MB。npm 上包名 @cyberstrike-io/cyberstrike,最新稳定版 1.1.16,另有 1.1.17-beta.7 和 1.1.17-canary.8 两条预发布线,累计发布过 61 个版本。

它的自我介绍是「第一个为进攻性安全打造的开源 AI Agent」:接上 Claude、GPT 或任意 LLM 订阅,就变成一个 13+ 专家 Agent、7,600+ 安全技能、120+ OWASP 测试用例的终端红队。

但有一件事必须先说清楚:它不是从零写的新引擎。 GitHub 上它的 fork 字段是 false,可仓库根目录躺着一个 script/rebrand.ts,脚本注释直白写着「OpenCode → CyberStrike rebrand」,替换表里是 @opencode-ai/ → @cyberstrikeus/、opencode.ai → cyberstrike.io、OPENCODE_ → CYBERSTRIKE_、OpenCode → CyberStrike。packages/ui 里几十种语言的 i18n、provider 图标集,和 OpenCode 的目录结构一致。

也就是说,它是基于 OpenCode 代码库改名的产品:继承了 OpenCode 的 TUI、客户端-服务端架构、插件和 MCP 能力,也继承了它的全部技术债。README 没隐瞒这点,它用的词是「intelligence layer」。

13 个 Agent,8 个跑在流量上

packages/cyberstrike/src/agent/agent.ts 里能数到的安全 Agent 分两类。

领域 Agent 四个:web-application(OWASP WSTG、API 安全、会话测试)、mobile-application(Android/iOS、Frida/Objection、MASTG/MASVS)、cloud-security(AWS/Azure/GCP、IAM 错误配置、CIS 基线)、internal-network(Active Directory、Kerberos、横向移动与跳板)。加上主 Agent cyberstrike,共五个。

另外 8 个是跑在拦截流量上的子测试器,不需要你手动喂目标:IDOR(对象级越权)、Authorization Bypass(垂直提权)、Mass Assignment(role/price/balance/userId 这类意外可写字段)、Injection(SQL/命令/LDAP/模板注入)、Authentication(token 校验、会话固定、凭证暴露)、Business Logic(改价、优惠券复用、竞态、流程绕过)、SSRF(用户可控 URL 或跳转参数打内网)、File Attacks(路径穿越、无限制上传)。

README 里有个细节值得记:每个子测试器走三道确认门——先发一次基线请求,再发攻击请求,最后比对两边响应;只有出现可测量、可复现的差异才记一条 finding,同一个 endpoint 加同一个攻击向量的重复结果在会话内自动去重。这条设计比「AI 报了一堆洞」有用得多。

7,662 份技能,拆开看是什么

仓库 .cyberstrike/skill/ 下我数到 7,662 个 SKILL.md(README 宣称 7,600+)。分类计数:CIS_benchmarks 5,000 份、NIST/SP800-53 1,606 份、mitre_attack 691 份(另有 ICS、Mobile、Test 三个子集)、WEB 125 份。剩下的都是单目录技能:llm-security、ad-security、k8s-assessment、cloud-assessment、ci-assessment、kerberos-attacks、cicd-attacks、ebpf-attacks、recon-methodology,以及 19 个 attack-* 攻击方法论(JWT、SSRF、SSTI、竞态、请求走私、缓存投毒、CORS、GraphQL、原型链污染、XXE、WebSocket 等),最后还有 aws/azure/gcp/k8s/linux/macos/windows 七套 post-exploit 技能。

技能是按需加载的:一次只注入一份进 Agent 上下文,不一次性把 7,662 份塞进去。这一点对上下文预算来说是对的,但紧接着带来一个问题——这份技能是官方发的,还是别人塞进你技能目录的?

重点:Ed25519 技能签名

这是我觉得整份仓库最值得抄的部分。docs/skill-signing.md 把技能签名写成了完整方案。

公钥是直接编译进二进制的(文档里给出当前 base64 公钥,32 字节原始 Ed25519);私钥 .skill-signing-key 在 .gitignore 里、绝不入库,也可以用 CYBERSTRIKE_SKILL_PRIVATE_KEY 环境变量在 CI 里注入。哈希口径写得很细:SHA-256 取的是去掉 sha256、signature、signed_by 三行之后的完整文件内容——这样重新签名不会改变哈希,而改指令、改 payload、改 tags 里的任何一个字,哈希都会失配。签名对象不是文件内容,是十六进制哈希字符串:内容 → SHA-256 hex → Ed25519 sign。

技能加载时判成四态:

  • official:哈希对上,且 Ed25519 验签通过;
  • community:哈希对上,但没有签名,或签的不是官方密钥;
  • unverified:技能文件头里没有 sha256 字段,从没签过;
  • tampered:哈希失配或验签失败——直接拒绝加载。

威胁模型它自己写了两栏。能防的:篡改过的官方技能、伪造签名、冒充官方的恶意社区技能、技能仓库供应链投毒。不防的也写明了:用户自己改自己的二进制换掉公钥(定性为自伤,不是攻击面)、私钥泄漏(应对是轮换密钥并重签全部技能)、以及没签名的社区技能(仍可加载,只给 unverified 标记)。密钥轮换的后果同样说清楚:换密钥后,旧密钥签的技能在新二进制里会显示 tampered,这是故意的,逼用户重新下载。验证全程离线。命令行 cyberstrike skill verify [name],接口 POST /skill/:name/verify 返回 {name, verified}。

这一套值得抄。句芒写过不少 Agent 技能扫描器(SkillSpector、Snyk Agent Scan),它们回答的是「这个技能坏不坏」;CyberStrike 回答的是另一个问题——「这个技能还是不是我发出去的那一份」。前者是内容安全,后者是供应链完整性。这两个问题经常被混为一谈:签名解决不了第一个,扫描也解决不了第二个。

一个真实的 Agent 安全坑

docs/http-replay-engine-design.md 是一份 Draft(分支 feature/http-replay-engine,跟踪 issue #83),但它把问题写得很实在。

现状是:那 8 个流量子测试器在「确认 / 武器化」阶段,靠拼 curl 命令字符串丢进 bash 执行。作者列了三个具体后果:一是两层转义,payload 要过一遍 shell 再过一遍目标解析器,引号、反引号、$、换行经常把请求搞坏;二是反引号 payload 会在测试者本机执行,根本没到目标;三是 cookie、CSRF token 每个请求都要重新粘贴,掉一个 header 测试就悄悄失效。净结果是假阳性(坏请求被读成「安全」)和漏报。

修法是把 payload 当数据发,不走 shell。两层模型:结构化层用 undici(HTTP/1.1 加 HTTP/2,自动编码、连接池),表达不了的降到原始 TCP/TLS 字节层,任何字节序列都能发。设计上对标 Caido 的 RequestSpec / RequestSpecRaw,但不内嵌 Caido SDK。对做 AI Agent 的人,这段比功能列表有用:Agent 把不可信内容当命令行参数拼接,是提示注入之外更常见的一条路。

其它能力

HackBrowser 是内置 Chromium,手动模式你自己浏览、它抓背后真实 API 流量,自主模式给多账号凭证和 scope 让它自己爬,顺带建一张「哪个角色能碰哪些 endpoint」的会话上下文,直接喂给 8 个子测试器。Bolt 是远端工具执行:MCP over HTTPS 加 Ed25519 配对,本地一台 CyberStrike 可以管多台 Bolt,重扫丢到带宽好的服务器上。Web UI 用 cyberstrike web,绑 localhost:4096,对外走 Cloudflare Tunnel 出站连接,远端请求强制 Basic Auth、本地 localhost 免鉴权(靠 X-Forwarded-For / CF-Connecting-IP 判定)。tool/ 下另有 8 个 post-exploit hook(aws/azure/gcp/linux/mac/win/llm)。

避坑

  • AGPL-3.0:改它、对外提供服务都要开源。企业内网自用先过法务。
  • 技能签名只保证「没被改」,不保证「技能本身是对的」。官方签名的技能照样可能让你把扫描打到没授权的目标上。签名解决完整性,不解决安全性。
  • README 的数字有对不上的地方:MCP 工具写「176+ 覆盖 5 个域」,表格只列了 4 个(cloud-audit 38、github-security 39、cve 23、osint 37,合计 137),第 5 个域没写出来;技能数我数到 7,662,README 写 7,600+。看数字前先自己数一遍。
  • 版本线:latest 1.1.16,beta/canary 已经到 1.1.17。装 latest 是稳的,canary 每天在动。
  • 授权边界:这类工具能自己侦察、利用、出报告,默认跑的是通用 LLM,幻觉在「确认阶段」最容易变成假阳性。三道门只保证「响应有差异」,不保证「差异是漏洞」。跑之前把 scope 和书面授权定死。

适合谁

想把已有 LLM 订阅接成红队终端的安全工程师;做 Agent 技能和工具供应链治理、想直接抄这套签名设计的人;做 AI Agent 安全评测、想看「Agent 把不可信数据当命令」真实案例的研究者;想在 Kubernetes 里自托管 MCP 和安全 Agent 的团队。

不太适合:只想装个「一键扫洞」的人;以及不打算读 AGPL 和授权范围的人。

CyberStrike 最值得看的不是它 2,900 颗星,是它把两个问题分开写清楚了:技能是谁发的(Ed25519 签名、四态判定、tampered 拒载),以及 Agent 的 payload 该怎么发(当数据,不当命令)。做 AI Agent 安全的人,这两份文档比功能列表更值得读。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。

本文转载自:句芒安全实验室 句芒安全实验室 句芒安全实验室《「AI渗透测试」CyberStrike拆解:7600份Ed25519签名技能喂给Agent,把Claude订阅变成红队》

评论:0   参与:  0