目录


一、引言:从"聊天机器人包装器"到"终端攻击工具"

过去两年,"AI 渗透测试"赛道涌入了大量项目,但绝大多数都停留在同一个阶段:把 ChatGPT/Claude 的对话接口包一层 UI,让用户用自然语言问"这个目标怎么打"。这类"聊天机器人包装器"有三个致命缺陷:

  1. 依赖持续人工提示:每一步都需要人输入下一步指令,本质上是"AI 辅助的人工测试",而非"AI 自主测试"。
  2. 工具集成停留在"复制粘贴":用户问"怎么扫端口",AI 回答"你可以运行 nmap -sV ...",然后用户自己手动执行——AI 不碰终端,无法形成自动化攻击链。
  3. 无状态、无记忆:每次对话独立,侦察结果无法自动流转到利用阶段,工作流碎片化。

CyberStrike 的定位与此截然不同:它是首个专为进攻性安全(offensive security)构建的 AI Agent,可将任何 Claude、GPT 或 LLM 订阅转化为自主红队操作员。关键差异化在于:

  • 不是聊天机器人,而是终端工具:CyberStrike 直接在终端运行,AI 自主执行侦察、漏洞发现、利用和报告,无需持续人工提示。
  • AI 原生架构:用 Go 语言从零构建,原生集成 100+ 安全工具(nmap、masscan、sqlmap、nikto、gobuster、Metasploit、pwntools、hashcat、John the Ripper、mimikatz、BloodHound、Impacket 等),通过智能编排引擎自动化完整攻击工作流。
  • 跨平台、多安装方式:支持 macOS/Windows/Linux,可通过 npm、Homebrew、Scoop、curl 脚本安装。
  • 免费 + 商业双轨:个人和开源使用免费,商业用途需付费许可。
  • MCP 支持:原生支持 Model Context Protocol,可扩展自定义 Agent 和 Skills。

本文将从架构、编排引擎、工具集成、MCP、决策机制、安全伦理等维度做深度技术拆解。


二、架构深度拆解

2.1 整体架构

CyberStrike 采用分层架构,从上到下依次为:LLM 后端层 → Agent 核心 → 智能编排引擎 → 工具层 → MCP 层。Agent 核心是决策中枢,编排引擎是工作流调度器,工具层与 MCP 层是执行底座。

┌─────────────────────────────────────────────────────────────────────────┐
│                     CyberStrike 整体架构 (Go 实现)                        │
└─────────────────────────────────────────────────────────────────────────┘

  ┌──────────────────────────────────────────────────────────┐
  │                  用户交互层 (CLI / TUI)                    │
  │   目标设定 │ 授权声明 │ 进度监控 │ 实时日志 │ 报告导出      │
  └──────────────────────┬───────────────────────────────────┘
                         │
            ┌────────────┴────────────┐
            ▼                         ▼
  ┌──────────────────┐     ┌─────────────────────────────┐
  │   LLM 后端层      │     │       上下文/记忆系统          │
  │ Claude│GPT│本地   │◄───►│  会话状态 │ 侦察发现 │ 攻击路径  │
  │ (统一抽象适配)     │ 注入 │  凭据库 │ 已验证漏洞 │ 失败教训  │
  └────────┬─────────┘     └──────────────┬──────────────┘
           │                              │
           ▼                              ▼
  ┌──────────────────────────────────────────────────────────┐
  │                 Agent 核心 (决策中枢)                       │
  │   意图理解 → 任务规划 → 工具选择 → 结果分析 → 下一步决策      │
  │   ReAct 推理循环 │ 幻觉检测 │ 证据验证                       │
  └──────────────────────┬───────────────────────────────────┘
                         │ 结构化任务
                         ▼
  ┌──────────────────────────────────────────────────────────┐
  │              智能编排引擎 (Orchestration Engine)            │
  │   攻击工作流状态机 │ 工具链选择 │ 并发调度 │ 依赖管理          │
  └──────────┬───────────────────────┬───────────────────────┘
             │                       │
             ▼                       ▼
  ┌─────────────────────┐  ┌──────────────────────────────┐
  │     工具层 (100+)     │  │       MCP 层 (扩展协议)         │
  │ nmap│masscan│sqlmap  │  │  MCP 客户端 │ 自定义 MCP 服务器  │
  │ nikto│gobuster│msf   │  │  Skills 注册 │ 工具动态发现       │
  │ pwntools│hashcat    │  │  (标准化上下文协议)              │
  │ john│mimikatz│BH     │  └──────────────────────────────┘
  │ Impacket│...        │
  │ (Go 封装 + 子进程)   │
  └──────────┬──────────┘
             │
             ▼
  ┌──────────────────────────────────────────────────────────┐
  │              输出层: 攻击报告 + PoC + 修复建议               │
  └──────────────────────────────────────────────────────────┘

各层职责:

层 职责 关键技术
用户交互层 接收目标与授权,展示进度与结果 TUI 实时渲染、流式日志
LLM 后端层 屏蔽不同模型差异,统一为工具调用协议 OpenAI 兼容协议适配、多供应商路由
上下文/记忆系统 贯穿会话的状态管理 结构化发现存储、去重、检索
Agent 核心 决策中枢,驱动 ReAct 循环 意图理解、工具选择、幻觉检测
智能编排引擎 工作流调度,管理攻击状态机 状态机、依赖图、并发控制
工具层 封装 100+ 安全工具 Go 子进程管理、I/O 标准化
MCP 层 扩展协议,支持自定义能力 MCP 客户端/服务器、Skills 注册

2.2 Go 语言实现的优势分析

CyberStrike 选择 Go 语言构建,这一选择在安全工具领域有深刻的工程考量:

并发模型:Go 的 goroutine + channel 模型天然适合安全测试的高并发场景。一次渗透测试可能同时进行多端口扫描、多子域名枚举、多漏洞探测。Go 的轻量级协程让 CyberStrike 能以极低开销并发调度数十个工具实例:

// CyberStrike 风格的并发工具调度示例
func (e *Orchestrator) RunReconPhase(ctx context.Context, target string) []Finding {
    var wg sync.WaitGroup
    findings := make(chan Finding, 100)

    tools := []string{"nmap", "masscan", "subfinder", "httpx"}

    for _, tool := range tools {
        wg.Add(1)
        go func(t string) {
            defer wg.Done()
            // 每个 goroutine 独立运行一个工具
            result := e.runTool(ctx, t, target)
            for _, f := range result {
                findings <- f
            }
        }(tool)
    }

    go func() {
        wg.Wait()
        close(findings)
    }()

    var all []Finding
    for f := range findings {
        all = append(all, f) // 收集所有工具的发现
    }
    return all
}

二进制部署:Go 编译为单一静态二进制,无运行时依赖。这对安全工具至关重要——渗透测试环境往往是被隔离的、受限的,无法保证 Python 解释器、pip 包、依赖库的存在。一个 curl | bash 即可部署的二进制,极大降低了使用门槛。这也是 CyberStrike 同时支持 npm/Homebrew/Scoop/curl 多种安装方式的基础。

性能:Go 的编译型特性带来接近 C 的执行效率,且内存占用远低于 Python。在长时间运行的渗透测试会话中,编排引擎本身不应成为瓶颈。Go 的 GC 虽有停顿,但对安全工具的 IO 密集型负载影响可忽略。

交叉编译:Go 的交叉编译能力让 CyberStrike 能轻松产出 macOS/Windows/Linux 全平台二进制,一行 GOOS=linux GOARCH=amd64 go build 即可。

2.3 与 PentesterFlow(Python)的架构对比

PentesterFlow 是同类竞品,采用 Python 构建。两者的架构差异体现了不同设计哲学:

维度 CyberStrike (Go) PentesterFlow (Python)
语言 Go (编译型, 静态二进制) Python (解释型, 需运行时)
部署 单二进制, curl 即装 需 Python 环境 + 依赖
并发 goroutine (轻量, 数万级) asyncio / 线程 (较重)
自主性定位 自主红队操作员 (低干预) 人在回路 (高干预, 强审批)
工具集成 100+ 工具原生封装 Skills 引擎 + MCP
权限模型 范围限制 + 高风险确认 四级 HITL 权限网关 + 硬阻断
交互 TUI 进度监控 CLI REPL
扩展 MCP 服务器 + Skills YAML/Python Skills
适用人群 自动化红队/赏金猎人 有监督的渗透分析师

最根本的差异在于自主性哲学:CyberStrike 追求"低干预自主"(设好目标和授权后尽量自动跑完攻击链),PentesterFlow 追求"强审批人在回路"(敏感操作必须人工批准)。这两种哲学各有适用场景——前者适合大规模自动化扫描与赏金狩猎,后者适合需要精细控制的专业渗透测试。下文的安全伦理章节会进一步对比两者的 HITL 设计。


三、智能编排引擎

智能编排引擎(Orchestration Engine)是 CyberStrike 区别于"聊天机器人包装器"的核心组件。它将离散的工具调用组织成连贯的攻击工作流,管理状态转移与工具间依赖。

3.1 攻击工作流的状态机设计

渗透测试本质是一个有状态的流程:侦察的产出是漏洞发现的输入,漏洞发现的产出是利用的输入。CyberStrike 用状态机建模这一流程:

                    CyberStrike 攻击工作流状态机

  ┌──────────┐    授权通过     ┌──────────────┐
  │  初始化    │──────────────▶│   侦察 (Recon) │
  │ 目标/授权  │               │ 子域/端口/服务  │
  └──────────┘               └──────┬───────┘
                                    │ 发现资产/服务
                                    ▼
                            ┌──────────────┐
                  ┌────────│ 漏洞发现 (Vuln)│
                  │         │ 自动识别漏洞    │
                  │         └──────┬───────┘
                  │ 无漏洞         │ 发现可利用漏洞
                  │                ▼
                  │         ┌──────────────┐
                  │         │  利用 (Exploit)│◀─── 失败重试/换路径
                  │         │ 选择+执行利用   │
                  │         └──────┬───────┘
                  │                │ 成功
                  │                ▼
                  │         ┌──────────────┐
                  │         │ 后渗透(Post)  │
                  │         │ 提权/横向/取证 │
                  │         └──────┬───────┘
                  │                │
                  └────────────────┴──────────┐
                                             ▼
                                      ┌──────────────┐
                                      │ 报告(Report) │
                                      │ PoC+修复建议  │
                                      └──────────────┘

每个状态都有明确的进入条件、退出条件和产出物。状态机的关键设计:

  • 授权前置:初始化状态必须先通过授权验证,未授权不进入侦察。
  • 数据驱动转移:状态转移由"上一阶段的产出"驱动。例如,只有当漏洞发现阶段产出了"可利用漏洞"时,才进入利用状态;无漏洞则直接跳到报告。
  • 回退与重试:利用失败时,可回退到漏洞发现阶段寻找替代路径,而非直接终止。
  • 范围约束:每个状态都在授权范围内执行,越界操作被拦截(详见第七节)。

3.2 攻击链编排代码示例

下面用 Go 风格的伪代码展示一个典型攻击链的编排(Recon → 发现漏洞 → 利用 → 报告):

package main

// AttackChain 定义一次完整的攻击链编排
type AttackChain struct {
    orchestrator *Orchestrator
    target       string
    scope        Scope          // 授权范围
    findings     []Finding      // 累积发现
    state        ChainState     // 当前状态
}

// Run 执行完整攻击链 —— 编排引擎的核心
func (c *AttackChain) Run(ctx context.Context) (*Report, error) {
    // 阶段1: 侦察
    c.state = StateRecon
    reconResult := c.orchestrator.RunReconPhase(ctx, c.target, c.scope)
    c.findings = append(c.findings, reconResult.Findings...)

    // 阶段2: 漏洞发现 (基于侦察结果)
    c.state = StateVulnDiscovery
    vulns := c.orchestrator.DiscoverVulns(ctx, reconResult.Assets)
    c.findings = append(c.findings, vulns...)

    if len(vulns) == 0 {
        return c.generateReport(), nil // 无漏洞直接报告
    }

    // 阶段3: 利用 (对每个可利用漏洞尝试)
    c.state = StateExploit
    for _, vuln := range filterExploitable(vulns) {
        // 范围检查: 利用必须在授权范围内
        if !c.scope.Allows(vuln.Target) {
            continue
        }
        exploitResult, err := c.orchestrator.Exploit(ctx, vuln)
        if err != nil {
            c.recordFailure(vuln, err) // 记录失败教训
            continue
        }
        c.findings = append(c.findings, exploitResult...)

        // 阶段3.5: 后渗透 (如获得初始访问)
        if exploitResult.GainedAccess() {
            postFindings := c.orchestrator.PostExploit(ctx, exploitResult)
            c.findings = append(c.findings, postFindings...)
        }
    }

    // 阶段4: 报告
    c.state = StateReport
    return c.generateReport(), nil
}

这段编排代码体现了编排引擎的三个能力:阶段顺序控制(侦察→漏洞→利用→报告)、数据流转(每阶段产出喂给下一阶段)、范围约束(每步检查 scope)。

3.3 工具链选择策略:AI 如何决定用哪个工具

面对 100+ 工具,编排引擎需要决定"当前任务该用哪个工具"。CyberStrike 的策略是AI 决策 + 规则约束的混合模式:

  1. AI 决策:Agent 核心基于当前上下文(目标信息、已发现的服务/漏洞、任务目标)让 LLM 选择工具。LLM 的角色是"理解任务语义 → 匹配工具能力"。

  2. 工具能力描述:每个工具都有一份结构化的能力描述(支持什么协议、什么阶段、什么输出),供 LLM 匹配:

// 工具能力描述 —— 供 AI 选择工具时参考
type ToolCapability struct {
    Name        string
    Phase       AttackPhase   // 适用于哪个阶段
    Targets     []string      // 适用的目标类型: web/host/service
    Inputs      []string      // 需要的输入: host/port/url/creds
    Outputs     []string      // 产出: ports/vulns/creds/shells
    Description string        // 自然语言能力描述
}

// 注册的工具能力示例
var toolRegistry = []ToolCapability{
    {Name: "nmap", Phase: PhaseRecon, Targets: []string{"host"},
     Inputs: []string{"host"}, Outputs: []string{"ports", "services"},
     Description: "端口扫描与服务识别, 适合主机侦察"},
    {Name: "sqlmap", Phase: PhaseExploit, Targets: []string{"web"},
     Inputs: []string{"url", "param"}, Outputs: []string{"db_access", "creds"},
     Description: "SQL 注入自动化利用, 需要可疑注入点"},
    {Name: "hashcat", Phase: PhasePostExploit, Targets: []string{"creds"},
     Inputs: []string{"hash"}, Outputs: []string{"plaintext"},
     Description: "密码哈希离线破解, 需要已获取的哈希"},
}
  1. 规则约束:AI 选择后,编排引擎做合理性校验——例如,"在侦察阶段选择了 hashcat"会被拦截(hashcat 需要哈希输入,侦察阶段还没有)。这防止 AI 跨阶段误用工具。
func (e *Orchestrator) selectTool(phase AttackPhase, context TaskContext) (string, error) {
    // 1. 让 LLM 基于上下文选择工具
    candidates, err := e.llm.SelectTool(context, toolRegistry)
    if err != nil {
        return "", err
    }

    // 2. 规则约束: 校验工具是否匹配当前阶段
    for _, toolName := range candidates {
        cap := lookupCapability(toolName)
        if cap.Phase == phase && hasRequiredInputs(cap, context) {
            return toolName, nil
        }
    }
    return "", fmt.Errorf("无合适工具匹配阶段 %v 与上下文", phase)
}

这种"AI 语义匹配 + 规则阶段约束"的混合策略,既利用了 LLM 的语义理解能力,又用确定性规则兜底了 AI 的潜在误判。


四、100+ 工具集成分析

CyberStrike 集成了 100+ 安全工具,覆盖渗透测试全生命周期。这是其"终端工具"定位的根基——AI 不只是"建议"用工具,而是真正"运行"工具。

4.1 工具分类

类别 代表工具 用途 攻击阶段
网络扫描 nmap, masscan, naabu 端口扫描、服务识别、指纹 侦察
子域枚举 subfinder, amass, gobuster 子域名发现、DNS 爆破 侦察
Web 探测 httpx, nuclei, nikto Web 服务探测、漏洞模板扫描 侦察/漏洞发现
目录爆破 gobuster, ffuf, dirsearch 目录与文件枚举 侦察
Web 漏洞 sqlmap, xsstrike, commix SQL注入/XSS/命令注入利用 利用
漏洞框架 Metasploit (msfconsole) 通用漏洞利用框架 利用
二进制利用 pwntools, ropper, ROPgadget 二进制漏洞利用、ROP 利用
密码破解 hashcat, John the Ripper 哈希离线破解 后渗透
凭据提取 mimikatz, secretsdump Windows 凭据提取 后渗透
AD 攻击 BloodHound, Impacket, kerbrute Active Directory 枚举与攻击 后渗透/横向
网络隧道 chisel, ligolo, proxychains 隧道与代理 横向移动
漏洞利用集合 searchsploit (ExploitDB) 公开 exploit 搜索 利用

4.2 工具封装层的设计模式

集成 100+ 工具的工程难点在于:每个工具有不同的输入参数、输出格式、退出码、错误行为。CyberStrike 用统一的工具封装层做标准化抽象,核心是适配器模式(Adapter Pattern):

// Tool 接口 —— 所有工具的统一抽象
type Tool interface {
    Name() string
    Execute(ctx context.Context, input ToolInput) (ToolOutput, error)
    Capability() ToolCapability
}

// ToolInput 统一输入 (不管原始工具用什么参数)
type ToolInput struct {
    Target   string            // 目标
    Options  map[string]string // 工具特定选项
    Timeout  time.Duration
    Stdin    string            // 部分工具需要标准输入
}

// ToolOutput 统一输出 (不管原始工具输出什么格式)
type ToolOutput struct {
    Stdout   string
    Stderr   string
    ExitCode int
    Findings []Finding         // 解析后的结构化发现
    Raw      []byte            // 原始输出 (调试用)
}

// NmapTool —— nmap 的具体封装
type NmapTool struct{}

func (n *NmapTool) Execute(ctx context.Context, input ToolInput) (ToolOutput, error) {
    // 1. 构造命令行参数 (从统一 Options 映射到 nmap 参数)
    args := buildNmapArgs(input)

    // 2. 以子进程方式运行 nmap
    cmd := exec.CommandContext(ctx, "nmap", args...)
    stdout, stderr := cmd.Output() // 实际是分离 stdout/stderr

    // 3. 解析 nmap 的 XML/文本输出为统一 Finding 结构
    findings := parseNmapOutput(stdout)

    return ToolOutput{
        Stdout:   string(stdout),
        ExitCode: cmd.ProcessState.ExitCode(),
        Findings: findings,
    }, nil
}

这种封装的关键价值:编排引擎和 Agent 核心不需要知道每个工具的细节,它们只与统一的 Tool 接口交互。新增工具只需实现 Tool 接口并注册,无需修改编排逻辑。这就是 CyberStrike 能快速集成 100+ 工具的架构基础。

4.3 工具输入输出的标准化处理

工具输出标准化是集成的最大工程量。不同工具的输出格式千差万别:nmap 输出 XML,sqlmap 输出 SQLite + 文本,BloodHound 输出 JSON。CyberStrike 的标准化处理分两层:

  1. 格式解析层:每个工具有专属解析器,将原始输出转为统一的 Finding 结构。
  2. 语义归一层:不同工具对同一概念的表述归一化。例如 nmap 的 "open"、masscan 的 "open"、naabu 的 "open" 都归一为统一的端口开放状态。
// Finding —— 统一的发现结构, 跨工具归一
type Finding struct {
    Type      FindingType // port / vuln / cred / subdomain / ...
    Source    string      // 来自哪个工具
    Target    string
    Port      int
    Service   string
    Severity  string
    Evidence  string      // 原始证据
    Timestamp time.Time
}

// parseNmapOutput 将 nmap XML 解析为统一 Finding
func parseNmapOutput(xmlBytes []byte) []Finding {
    var hosts []nmapHost
    xml.Unmarshal(xmlBytes, &hosts)

    var findings []Finding
    for _, h := range hosts {
        for _, p := range h.Ports {
            if p.State == "open" {
                findings = append(findings, Finding{
                    Type:    FindingPort,
                    Source:  "nmap",
                    Target:  h.Address,
                    Port:    p.PortID,
                    Service: p.Service.Name,
                })
            }
        }
    }
    return findings
}

标准化后的发现可直接喂给 Agent 核心做决策,也可累积到记忆系统供后续阶段复用。这种"一次解析、处处可用"的设计,是工具集成从"松散"走向"系统化"的关键。


五、MCP 协议支持

MCP(Model Context Protocol)是 CyberStrike 的扩展协议层,支持自定义 Agent 和 Skills。MCP 的引入让 CyberStrike 从"内置 100+ 工具"进化为"可无限扩展的工具生态"。

5.1 MCP 在安全工具集成中的优势

MCP 是一种标准化的"模型-工具"上下文协议,它定义了 LLM 如何发现、调用外部工具与资源。在安全工具集成场景,MCP 相比传统方式有几大优势:

  • 标准化发现:MCP 服务器自描述其能力(提供哪些工具、资源、提示模板),Agent 无需硬编码即可动态发现并调用。这意味着新增工具只需挂载一个 MCP 服务器,无需改 CyberStrike 主体代码。
  • 协议统一:不同工具通过统一的 MCP 协议暴露能力,屏蔽了底层工具的命令行差异。这与第四节"工具封装层"的目标一致,但 MCP 把标准化提升到了协议层。
  • 跨进程隔离:MCP 服务器是独立进程,工具崩溃不会拖垮主 Agent。这对安全工具尤其重要——许多安全工具本身不稳定,进程隔离提升了整体鲁棒性。
  • 可组合:多个 MCP 服务器可同时挂载,Agent 根据任务组合调用。例如一个 MCP 提供 AD 攻击工具,另一个提供 Web 漏洞工具,Agent 按需调用。
  CyberStrike MCP 集成架构

  ┌─────────────┐      MCP 协议       ┌──────────────────┐
  │ CyberStrike  │◄──────────────────►│  AD 攻击 MCP 服务器│
  │  Agent 核心  │   (工具发现/调用)    │  BloodHound/Impacket│
  │             │                    └──────────────────┘
  │ (MCP 客户端) │      MCP 协议       ┌──────────────────┐
  │             │◄──────────────────►│  Web 漏洞 MCP 服务器│
  └─────────────┘                    │  sqlmap/nuclei    │
                                     └──────────────────┘
                                            MCP 协议       ┌──────────────────┐
                                     ◄──────────────────►│  自定义 MCP 服务器 │
                                                          │  (用户扩展)       │
                                                          └──────────────────┘

5.2 自定义 MCP 服务器的编写示例

下面展示如何为 CyberStrike 编写一个自定义 MCP 服务器,封装一个自定义的 API 漏洞扫描能力:

package main

import (
    "context"
    "encoding/json"
    "net/http"
)

// APIScannerMCPServer 自定义 MCP 服务器: 封装 API 漏洞扫描
type APIScannerMCPServer struct {
    client *http.Client
}

// Tool 定义: 向 Agent 暴露的工具能力
type ToolDefinition struct {
    Name        string                 `json:"name"`
    Description string                 `json:"description"`
    InputSchema map[string]interface{} `json:"inputSchema"`
}

// ListTools 向 CyberStrike Agent 声明可用工具
func (s *APIScannerMCPServer) ListTools() []ToolDefinition {
    return []ToolDefinition{
        {
            Name:        "scan_api_auth",
            Description: "扫描 API 端点的认证/授权缺陷 (BOLA/IDOR/越权)",
            InputSchema: map[string]interface{}{
                "type": "object",
                "properties": map[string]interface{}{
                    "base_url": map[string]interface{}{"type": "string"},
                    "token_a":  map[string]interface{}{"type": "string"}, // 用户A凭据
                    "token_b":  map[string]interface{}{"type": "string"}, // 用户B凭据
                },
                "required": []string{"base_url", "token_a", "token_b"},
            },
        },
    }
}

// CallTool 执行工具调用
func (s *APIScannerMCPServer) CallTool(ctx context.Context, name string, args map[string]interface{}) (string, error) {
    switch name {
    case "scan_api_auth":
        return s.scanAPIAuth(ctx, args)
    default:
        return "", fmt.Errorf("unknown tool: %s", name)
    }
}

// scanAPIAuth 核心逻辑: 用 token_b 访问 token_a 的资源, 检测越权
func (s *APIScannerMCPServer) scanAPIAuth(ctx context.Context, args map[string]interface{}) (string, error) {
    baseURL := args["base_url"].(string)
    tokenA := args["token_a"].(string)
    tokenB := args["token_b"].(string)

    // 1. 用 tokenA 获取自己的资源列表 (建立基线)
    resA := s.callAPI(ctx, baseURL+"/api/resources", tokenA)

    // 2. 用 tokenB 尝试访问 tokenA 的资源 (越权测试)
    var findings []Finding
    for _, resID := range extractResourceIDs(resA) {
        resB := s.callAPI(ctx, baseURL+"/api/resources/"+resID, tokenB)
        if resB.StatusCode == 200 {
            // tokenB 能访问 tokenA 的资源 → BOLA/越权漏洞
            findings = append(findings, Finding{
                Type:     "vuln",
                Severity: "HIGH",
                Evidence: fmt.Sprintf("BOLA: token_b 可越权访问 resource %s", resID),
            })
        }
    }

    result, _ := json.Marshal(findings)
    return string(result), nil
}

func main() {
    server := &APIScannerMCPServer{client: &http.Client{}}
    // 通过 MCP 协议注册并监听 (stdio 或 SSE 传输)
    serveMCP(server) // CyberStrike 通过 MCP 协议发现并调用 scan_api_auth
}

这个自定义 MCP 服务器封装了"API 越权扫描"这一能力。一旦挂载,CyberStrike 的 Agent 就能像调用内置工具一样调用它,无需修改主体代码。这就是 MCP 带来的"插件化扩展"能力。

5.3 与传统 API 集成的对比

维度 MCP 集成 传统 API/脚本集成
工具发现 自描述, 动态发现 需硬编码注册
协议 统一标准化 每个工具各异
隔离 进程级隔离 通常同进程
扩展成本 写个 MCP 服务器即可 需改主体代码
跨语言 协议层无关 通常绑定主语言
调试 协议级可观测 依赖工具自身日志

MCP 的本质是把"工具集成"从"代码级硬编码"提升为"协议级动态发现"。对于需要频繁扩展工具集的安全平台,这一抽象极大降低了维护成本。


六、AI Agent 决策机制

CyberStrike 的 Agent 核心是"自主红队操作员"的大脑,负责在攻击链的每一步做决策:分析当前结果、决定下一步操作、选择工具。本节拆解其决策机制。

6.1 LLM 如何分析扫描结果并决定下一步操作

Agent 核心采用 ReAct(Reason + Act)推理循环:观察(Observation)→ 思考(Thought)→ 行动(Action)。在渗透测试场景中,这表现为:

 ReAct 循环在渗透测试中的实例

  ┌─────────────────────────────────────────────────────────────┐
  │ 观察 (Observation): nmap 扫描结果                            │
  │   "目标 10.0.0.5 开放: 22(ssh), 80(http), 445(smb)"          │
  ├─────────────────────────────────────────────────────────────┤
  │ 思考 (Thought): LLM 推理                                    │
  │   "开放了 SMB(445), 可能存在 EternalBlue 或共享配置问题;      │
  │    开放了 HTTP(80), 应进一步做 Web 指纹与目录扫描;            │
  │    优先级: SMB 漏洞利用价值高, 但风险大; Web 扫描风险低先做"  │
  ├─────────────────────────────────────────────────────────────┤
  │ 行动 (Action): 选择工具                                      │
  │   1. httpx 探测 Web 指纹 (低风险)                            │
  │   2. gobuster 目录爆破 (低风险)                              │
  │   3. 记录 SMB 待后续 nuclei 模板扫描                          │
  ├─────────────────────────────────────────────────────────────┤
  │ 观察: httpx 返回 "nginx 1.18, 可能存在已知漏洞"              │
  │ 思考: "nginx 1.18 有 CVE, 用 nuclei 跑 nginx 模板"           │
  │ 行动: nuclei -t nginx 模板                                   │
  │ ... (循环直至攻击链完成)                                      │
  └─────────────────────────────────────────────────────────────┘

LLM 在这个循环中扮演"安全分析师"的角色,其决策质量取决于两个因素:

  1. 上下文质量:LLM 看到的观察结果是否结构化、完整。这正是第四节"输出标准化"的价值——标准化后的 Finding 让 LLM 能清晰理解扫描结果,而非面对一堆原始文本。
  2. 领域知识:LLM 是否知道"开放 445 → 可能 EternalBlue"这类关联。这依赖 LLM 自身的安全知识,以及 CyberStrike 注入的提示词/技能库。

6.2 上下文管理和记忆系统

长攻击链的上下文管理是 Agentic AI 的核心挑战。一次渗透测试可能持续数小时、产生大量中间结果,远超 LLM 的上下文窗口。CyberStrike 的记忆系统需要解决:

  • 上下文压缩:不是把所有原始输出塞给 LLM,而是只注入"结构化的关键发现"(开放的端口、发现的漏洞、已获得的凭据)。原始输出存档,按需检索。
  • 会话状态持久化:攻击链可中断续传。会话状态(当前阶段、已发现资产、已尝试路径)持久化到磁盘,重启后恢复。
  • 去重与关联:多个工具可能发现同一资产/漏洞,记忆系统做去重并关联(如"nmap 发现的 445 端口"与"smbclient 探测的 SMB 服务"关联为同一资产)。
// Memory 记忆系统 —— 管理攻击链上下文
type Memory struct {
    assets     map[string]*Asset    // 已发现资产 (去重)
    vulns      map[string]*Vuln     // 已发现漏洞 (去重)
    creds      []Credential         // 已获取凭据
    attempts   []Attempt            // 已尝试的攻击路径 (避免重复)
    lessons    []Lesson             // 失败教训
}

// InjectContext 为 LLM 构造精简上下文 (而非全量原始输出)
func (m *Memory) InjectContext() string {
    var ctx strings.Builder
    ctx.WriteString("## 已发现资产\n")
    for _, a := range m.assets {
        ctx.WriteString(fmt.Sprintf("- %s: %s\n", a.IP, a.Services))
    }
    ctx.WriteString("## 已发现漏洞\n")
    for _, v := range m.vulns {
        ctx.WriteString(fmt.Sprintf("- [%s] %s @ %s\n", v.Severity, v.Name, v.Target))
    }
    ctx.WriteString("## 已获取凭据\n")
    for _, c := range m.creds {
        ctx.WriteString(fmt.Sprintf("- %s\n", c.Mask())) // 脱敏
    }
    ctx.WriteString("## 已尝试路径(避免重复)\n")
    for _, a := range m.attempts {
        ctx.WriteString(fmt.Sprintf("- %s → %s\n", a.Tool, a.Result))
    }
    return ctx.String()
}

注意凭据在注入上下文时做了脱敏(Mask())——这是防止凭据通过 LLM 上下文泄露的安全措施。

6.3 幻觉检测结果验证机制

AI 渗透测试工具的最大风险是幻觉报告:LLM 在没有真实证据的情况下"编造"漏洞。CyberStrike 通过证据验证机制对抗幻觉:

  1. 无证据不报告:Agent 的每个漏洞发现都必须附带可验证的证据(工具输出、HTTP 响应、PoC 复现),纯 LLM 推断的"可能有漏洞"不进入最终报告。
  2. PoC 复现:对于声称的漏洞,编排引擎尝试构造 PoC 验证。例如 LLM 说"存在 SQL 注入",则用 sqlmap 实际验证;验证失败则降级为"疑似"而非"确认"。
  3. 交叉验证:高严重性发现要求多工具/多角度交叉验证。例如 EternalBlue 的判定不只依赖一个扫描器,而需多个信号一致。
// VerifyFinding 验证一个发现的真实性, 对抗幻觉
func (e *Orchestrator) VerifyFinding(finding Finding) FindingStatus {
    // 1. 必须有工具输出证据
    if finding.Evidence == "" {
        return StatusRejected // 无证据 → 拒绝(可能幻觉)
    }

    // 2. 尝试 PoC 复现
    if finding.RequiresPoC() {
        pocResult, err := e.runPoC(finding)
        if err != nil || !pocResult.Confirmed {
            return StatusSuspected // PoC 失败 → 降级为疑似
        }
        finding.PoC = pocResult.Proof
    }

    // 3. 高危发现交叉验证
    if finding.Severity == "CRITICAL" {
        if !e.crossValidate(finding) {
            return StatusSuspected // 交叉验证失败 → 降级
        }
    }

    return StatusConfirmed
}

这种"证据强制 + PoC 复现 + 交叉验证"的三层机制,是 CyberStrike 避免沦为"幻觉报告生成器"的关键防线。


七、安全与伦理设计

作为进攻性安全工具,CyberStrike 的安全与伦理设计至关重要。一个能自主执行攻击的 AI 工具,如果缺乏约束,本身就是巨大的风险。

7.1 授权验证机制

CyberStrike 的第一条铁律是未授权不执行。授权验证贯穿工具生命周期:

  • 启动时授权声明:用户必须显式声明对目标的测试授权(如授权书编号、scope 范围)。无授权声明不进入攻击流程。
  • 目标范围绑定:授权范围(scope)以结构化形式记录(IP 段、域名列表、允许的攻击类型),所有后续操作在范围内校验。
  • 范围持久化:授权范围随会话持久化,防止中途被篡改扩大。
// Authorization 授权模型
type Authorization struct {
    DocumentID   string    // 授权书编号
    Scope        Scope     // 授权范围
    IssuedAt     time.Time
    ExpiresAt    time.Time
    AttackTypes  []string  // 允许的攻击类型: recon/exploit/post
    Signed       bool      // 是否已签署确认
}

// ValidateTarget 校验目标是否在授权范围内
func (a *Authorization) ValidateTarget(target string) error {
    if !a.Signed {
        return fmt.Errorf("授权未签署, 拒绝执行")
    }
    if time.Now().After(a.ExpiresAt) {
        return fmt.Errorf("授权已过期")
    }
    if !a.Scope.Contains(target) {
        return fmt.Errorf("目标 %s 不在授权范围内", target)
    }
    return nil
}

7.2 范围限制(Scope Limiting)

范围限制防止 AI 在自主运行时"越界"攻击未授权目标。这在横向移动阶段尤为关键——AI 可能发现新的内网主机并尝试攻击,但这些主机可能不在授权范围内。

// Scope 授权范围
type Scope struct {
    AllowedCIDRs  []string   // 允许的 IP 段
    AllowedDomains []string  // 允许的域名
    Excluded      []string   // 明确排除的目标
}

// Allows 检查操作是否允许
func (s *Scope) Allows(target string) bool {
    // 排除列表优先
    for _, ex := range s.Excluded {
        if matchTarget(ex, target) {
            return false
        }
    }
    // 必须命中允许列表
    for _, cidr := range s.AllowedCIDRs {
        if ipInCIDR(target, cidr) {
            return true
        }
    }
    for _, domain := range s.AllowedDomains {
        if matchDomain(domain, target) {
            return true
        }
    }
    return false
}

范围检查横切所有工具调用——即使是 AI 自主发现的"新目标",也必须先通过 scope 校验才能攻击。这是防止自主 AI 失控的确定性防线。

7.3 高风险操作的人工确认

尽管 CyberStrike 定位为"低干预自主",但对高风险操作仍保留人工确认机制。这是自主性与可控性的平衡点:

操作类型 风险等级 处置策略
端口扫描、服务识别 低(只读) 自动执行
目录爆破、指纹探测 低-中 自动执行
漏洞利用(获取初始访问) 高 人工确认
提权操作 高 人工确认
横向移动到新主机 高 人工确认
数据外传/破坏性操作 极高 禁止或强确认
持久化植入(后门) 极高 强确认 + 审计

7.4 与 PentesterFlow 的 HITL 设计对比

CyberStrike 与 PentesterFlow 在 HITL(Human-in-the-Loop)设计上代表两种哲学:

维度 CyberStrike PentesterFlow
HITL 强度 弱(仅高风险确认) 强(四级权限网关 + 硬阻断)
自主性定位 低干预自主红队 强审批人在回路
默认放行 常规操作自动 低风险自动, 高风险必审
灾难性操作 强确认 + 审计 硬阻断(正则黑名单, 不可绕过)
适用场景 大规模自动化/赏金 专业渗透精细控制
风险倾向 效率优先, 风险次之 安全优先, 效率次之

两者的差异本质是效率与可控性的权衡。CyberStrike 牺牲部分可控性换取高自动化效率(适合可信目标的大规模扫描);PentesterFlow 牺牲效率换取强可控性(适合需要精细判断的专业测试)。值得注意的是,PentesterFlow 的"灾难性操作硬阻断"是基于确定性正则黑名单,不依赖 AI 判断——这意味着即使 AI 被提示注入操纵,也无法绕过。CyberStrike 若要达到同等安全水位,需在 AI 决策之外叠加确定性约束层。


八、实战场景

8.1 完整的 Web 应用渗透测试流程

下面展示 CyberStrike 对一个 Web 应用的完整渗透测试流程:

$ cyberstrike --target https://app.target.com --auth auth.json --scope scope.json

[+] 授权验证通过 (授权书: AUTH-2026-0815, 范围: app.target.com, *.target.com)
[+] 进入侦察阶段

[Recon] 并发执行: httpx | gobuster | subfinder | nuclei
[Recon] httpx: app.target.com → nginx/1.18, PHP/8.1, 200 OK
[Recon] gobuster: 发现 /admin (302), /api (200), /uploads (403), /backup.zip (200)
[Recon] subfinder: 发现 dev.target.com, staging.target.com (均在scope内)
[Recon] nuclei: 命中 nginx 版本相关模板 2 个

[+] 进入漏洞发现阶段
[Vuln] /backup.zip 可直接下载 → 分析内容
[Vuln] /api 端点枚举 → 发现 /api/users/{id}, /api/orders/{id}
[Vuln] nuclei 确认: nginx 路径穿越(低危)

[+] 发现可利用项, 进入利用阶段
[Exploit] /backup.zip 解压发现 config.php (含数据库凭据) ← 已确认(证据:文件内容)
[Exploit] 尝试 /api/users/1 IDOR → 用 user_B token 访问 user_A 数据
[Exploit] PoC 复现: GET /api/users/1 (Bearer userB) → 200 返回 userA 数据 ← 已确认(BOLA)
[Exploit] config.php 凭据尝试登录数据库 → 连接成功 ← 已确认(凭据有效)

[+] 高风险操作: 尝试数据库数据访问 → 等待人工确认 [Y/n]: Y
[Post]  数据库枚举: 发现 users 表, 暂不提取数据(范围限制)
[Post]  记录凭据: db_user:*** (脱敏存储)

[+] 进入报告阶段
[Report] 生成报告: reports/app.target.com-20260802.md
         - 已确认漏洞: 3 (BOLA-HIGH, 敏感文件泄露-MED, 凭据泄露-HIGH)
         - 含 PoC、影响评估、修复建议
[Report] 全程耗时: 18 分钟 (人工干预: 1次确认)

这个流程展示了 CyberStrike 的自主性:设定目标与授权后,AI 自主完成侦察→漏洞发现→利用→后渗透→报告的完整链路,仅在数据库访问这一高风险操作处暂停等待人工确认。

8.2 内网渗透测试流程

内网渗透涉及横向移动,对范围控制要求更高:

$ cyberstrike --target 10.0.0.0/24 --auth internal-auth.json --scope internal-scope.json

[+] 授权验证通过 (内网渗透, 范围: 10.0.0.0/24, 排除: 10.0.0.1 网关)
[+] 侦察阶段: masscan 全段快扫 + nmap 精扫存活主机

[Recon] 发现存活主机: 10.0.0.5, 10.0.0.8, 10.0.0.12 (均在scope内)
[Recon] 10.0.0.5: 445(SMB), 3389(RDP) → 可能 Windows 主机
[Recon] 10.0.0.8: 22(SSH), 80(HTTP) → 可能 Linux Web 服务器
[Recon] 10.0.0.12: 389(LDAP), 445, 88(Kerberos) → 可能域控

[+] 漏洞发现: 对域控(10.0.0.12)运行 BloodHound + Impacket
[Vuln] BloodHound: 发现 AS-REP-roast 可行用户 2 个
[Vuln] kerbrute: 枚举有效用户名 5 个

[+] 利用阶段
[Exploit] AS-REP roast 获取用户 hash → hashcat 破解
[Exploit] hashcat: 破解成功 (用户 svc_backup, 弱口令) ← 已确认
[Exploit] 高风险操作: 使用凭据横向访问 10.0.0.12 → 等待确认 [Y/n]: Y
[Post]  Impacket: 获取 10.0.0.12 访问, 枚举域内信息
[Post]  BloodHound: 发现 svc_backup → Domain Admin 路径 (Kerberoasting)
[Post]  高风险操作: Kerberoating 提权 → 等待确认 [Y/n]: Y
[Post]  获取 Domain Admin hash → 记录(不进行进一步横向, 范围内已达目标)

[+] 报告阶段
[Report] 内网渗透报告: reports/internal-20260802.md
         - 攻击路径: AS-REP roast → 凭据破解 → 横向 → Kerberoasting → 域管
         - 已确认: 4 个发现
         - 修复建议: 禁用 AS-REP, 强密码策略, Kerberos 加密降级防护

内网场景中,每次横向移动到新主机都触发人工确认——这是范围控制与风险管理的体现。AI 自主完成了攻击路径发现与执行,但"是否继续深入"的决策权保留在人类手中。

8.3 报告自动生成示例

CyberStrike 自动生成的报告包含 PoC、影响评估与修复建议。一个典型的漏洞报告片段:

## BOLA - 不安全的直接对象引用 (API 越权)
- **端点**: GET /api/users/{user_id}
- **严重性**: HIGH
- **来源工具**: 自定义 MCP (scan_api_auth)
- **证据**:
  - 基线(user_A 访问自己): 200 {"id":1,"name":"Alice","email":"alice@target.com"}
  - 越权(user_B 访问 user_A): 200 {"id":1,"name":"Alice","email":"alice@target.com"}
- **PoC**:
  ```bash
  curl -H "Authorization: Bearer [REDACTED]" https://app.target.com/api/users/1
  • 影响: 已认证低权限用户可越权枚举全站用户数据(PII), 含邮箱等敏感信息。
  • 修复建议:
    1. 在用户查询逻辑强制校验 user_id == current_user.id
    2. 采用不可枚举 UUID 替代自增 ID
    3. 引入对象级授权(ABAC)中间件统一拦截越权
  • 验证状态: 已确认 (PoC 复现成功)

注意报告中的"验证状态: 已确认"——这表示该漏洞通过了第六节的 PoC 复现验证,而非 LLM 的口头判断。凭据在 PoC 中也被脱敏为 `[REDACTED]`,防止报告本身成为凭据泄露渠道。

---

## 九、与同类工具对比

下表对比 CyberStrike 与主流 AI 渗透测试工具:

| 维度 | CyberStrike | PentesterFlow | PentAGI | PentestGPT |
|------|-------------|---------------|---------|------------|
| 定位 | 自主红队操作员 | 人在回路渗透工具 | 自主渗透 Agent | 渗透建议助手 |
| 语言 | Go | Python | Python | Python |
| 部署 | 单二进制, 多平台 | 需 Python 环境 | 需 Python+服务 | 需 Python |
| 自主性 | 高(低干预) | 低(强审批) | 高 | 极低(仅建议) |
| 工具集成 | 100+ 原生封装 | Skills+MCP | 内置若干 | 几乎无(靠提示) |
| 编排引擎 | 状态机+并发 | Skills 工作流 | Agent 循环 | 无 |
| MCP 支持 | 是 | 是 | 否 | 否 |
| 幻觉防护 | 证据验证+PoC | 证据强制确认 | 弱 | 无 |
| 范围控制 | scope 校验 | 权限网关+黑名单 | 弱 | 无 |
| HITL | 高风险确认 | 四级权限网关 | 弱 | 全程人工 |
| 报告生成 | 自动(含PoC) | 自动(经确认) | 自动 | 手动 |
| 适用场景 | 自动化红队/赏金 | 专业渗透精细控制 | 自动化测试 | 学习/建议 |

**选型建议**:

- **大规模自动化扫描与赏金狩猎**:CyberStrike。高自主性 + 100+ 工具 + MCP 扩展,适合需要高吞吐自动化的场景。
- **专业渗透测试(需精细控制)**:PentesterFlow。强 HITL + 证据强制 + 硬阻断,适合不能容忍误操作的生产环境测试。
- **学习与思路辅助**:PentestGPT。仅提供攻击思路建议,不执行实际操作,适合学习场景。

一个值得注意的趋势是:**工具集成的深度与自主性的高低,是这类工具的核心分水岭**。CyberStrike 与 PentesterFlow 都做到了"真正执行工具"(而非"建议用工具"),区别在于自主性哲学。而 PentestGPT 这类"建议型"工具,本质上仍停留在"聊天机器人"阶段。

从架构演进角度看,AI 渗透测试工具正在经历三个阶段的进化:

1. **建议型**(PentestGPT):AI 给建议,人执行。无工具集成。
2. **执行型**(PentesterFlow/CyberStrike):AI 执行工具,人审批。深度工具集成。
3. **自主型**(CyberStrike 的方向):AI 自主编排攻击链,人仅在关键节点介入。状态机编排 + 记忆系统 + 幻觉防护。

CyberStrike 处于"执行型"向"自主型"过渡的位置。其真正价值不在于"又一个 AI 渗透工具",而在于它示范了**如何用 Go 的并发模型、状态机编排、MCP 扩展协议、证据验证机制,把 AI 从"建议者"变成"自主操作员"**。同时,它的授权验证与范围限制设计,也为"自主攻击 AI"的安全可控提供了一个可参考的工程范式。

对于安全团队而言,无论选择哪款工具,都需要清醒认识一点:**AI 渗透测试工具的能力上限,不是模型有多强,而是工具集成有多深、编排有多智能、验证有多严谨、约束有多可靠。** 模型可以替换(Claude/GPT/本地模型皆可),但架构设计决定了一个工具的天花板。这正是本文拆解 CyberStrike 架构的意义所在。

---

## 免责声明
本文仅供安全研究和技术学习使用,文中涉及的漏洞分析、PoC 代码和攻击技术仅用于授权测试和安全防御建设。读者应遵守所在地区的法律法规,未经授权不得对任何系统进行渗透测试或攻击。因不当使用本文内容所造成的任何后果,作者不承担任何责任。