重要声明:本文仅用于技术讨论与学习,因使用文中信息而造成的任何直接或间接后果及损失,均由使用者本人承担,文章作者不为此承担任何责任。
Provena 是一套基于 Pi Agent 驱动的 自主红队AI系统,目标是真正做到无人值守自动完成各种渗透任务。
工具开源地址: https://github.com/youki992/Provena
功能与使用准备
运行环境要求
先看 Windows 平台下的运行要求:

模型配置
编辑 config.yaml,只需要改下面这几行:

这个配置走 OpenAI 兼容协议,base_url 填网关地址,api_key 和 model 对应你自己的模型信息。如果还没有合适的模型网关,可以试试 RouteFast.ai 这类 API 中转服务,拿到地址和 key 直接填入即可。
内置工具
工具内置了代码审计和静态分析相关的多类组件:

常用命令

run 命令常用参数

chat 命令常用参数

chat 交互会话
通过 CLI 进行对话式交互:

实际对话测试中,直接询问内置工具:


工具架构
┌──────────────────────┐
│ 模型(Pi harness) │ 只做决策:下一步干什么
└──────────┬───────────┘
│ 工具调用
┌──────────▼───────────┐
│ Provena 内核 │ 执行 · 采集证据 · 记账 · 出报告
│ ① 工具执行器 + RBAC │
│ ② FGS 图(只追加) │ ← 唯一的"记忆"
│ ③ 人机协同(HITL) │
│ ④ 报告(md/json/sarif)│
└──────────────────────┘
模型主要负责决定“下一步执行什么”,而 Provena 则负责裁定“能不能做”以及“把步骤记录清楚”。
设计上并不指望模型本身完全可靠,所以把可靠性放在了架构层:决策过程外置成图,结论必须靠证据生成,缺少证据就不算完成目标。
┌──────────┐
│ origin │ 起点
└────┬─────┘
│ motivates
┌────▼─────┐
│ goal │ 本次目标
└────┬─────┘
┌───────────┼────────────┐
┌────▼────┐ ┌────▼────┐ ┌────▼─────┐
│ step │ │ step │ │ sub_goal │ ← 运行时临时拆的子目标
└────┬────┘ └────┬────┘ └────┬─────┘
│ │ │
┌────▼────┐ ┌────▼─────┐ │
│ fact │ │ finding │◄─────┘
│ 客观观测 │ │ 待确认线索 │
└─────────┘ └──────────┘
节点状态:pending → active → confirmed / completed / blocked / abandoned
另有 intent / hint 两类节点
Java 代码审计流程
以 Java代码审计 为例,从 jar 文件开始:
.jar
│ jar-list 列条目(不解压)
▼
条目列表
│ jar-extract 抽目标 .class / 资源文件
├──────────────────────────────┐
▼ ▼
cfr 反编译 直接 read/grep
→ 可读 Java 源码 (web.xml、.properties、
│ mybatis 映射)
▼
joern-parse --language JAVASRC
│
▼
CPG(代码属性图)
│ joern-scan(官方查询库已内置,离线可用)
▼
完整 source→sink 路径 → 置信度可升到 dataflow_reachable
获取与历史成果
内测版本地址: https://wiki.freebuf.com/societyDetail/articleDetail?society_id=184&article_id=230351
历史审计能力参考:
类似红队与代码审计工具的讨论,可以在 云栈社区 找到更多同好交流。
|