AgentProvenance

Agent 执行观测与证据验证示例 文档
示例/文档

AgentProvenance v0.8.0

English | 中文

v0.8.0 增加原生 amd64 采集和经过验收的 KVM/K3s 部署,沿用本地记录使用的证据模型。该版本还明确了常驻采集、TLS 覆盖和存储故障的行为边界。

从已有证据开始

快速上手可在 macOS 或 Linux 上导入已有的带签名多 Agent 采集记录,校验后打开 Dashboard。回放不需要虚拟机、Docker 或模型 API 密钥。之后可用 doctor 检查环境,再通过 launch 运行已安装的 Agent;签名需要提供 --sign-key。示例索引按单 Agent、多 Agent 团队、跨 Pod 执行的顺序组织材料。

主要变化

  • 增加 Linux amd64 支持。 按架构选择 BPF 对象,覆盖系统调用和原生 TLS 探针。amd64 增加内核采集时间戳、旧版 open/unlink 路径,并分别处理 C 和 Go 调用约定。
  • 完成 KVM 和 K3s 部署验收。 systemd 采集服务在客体内使用 local-record;节点侧 informer 为外部调度的 Pod 归属事件。单个传感器可观测多个工作负载,无需引入虚拟机调度器或另建核心图模型。
  • 容器 TLS 与 Go 响应采集。 自动发现并持续核对可见的 OpenSSL 和保留符号的 Go 目标,包括共享 overlay 库。amd64 Go ABIInternal 1.23–1.26 响应采集使用 goroutine、栈帧和解码后的返回位置配对,并有并发栈增长回归测试。
  • 原生采集持久化。 已接收批次可在采集器中断后恢复,迟到绑定可补回归属,事务避免重放产生重复事件。容量、丢失、文件缺失和清理失败均可查询,见缓冲与恢复约定。
  • 正确性与诊断。 共用摄入路径保证原子性,JSONL 行处理失败不会留下部分证据。采集时间与保留策略按真实时刻比较。数据库就绪状态与 HTTP 存活、历史覆盖缺口分别报告。

验证依据

实验室验收报告记录了各自环境和检查项。以下是已保存的结果,并非此次文档翻译重新生成的测试数据:

  • WSL2 和 KVM 客体:27 项真实系统调用/TLS 检查,包括排队事件的采集时间,以及 Go TLS 请求与响应明文。
  • KVM 客体内的 K3s:一个传感器、8 个工作负载、8 个 cgroup、1,289 个事件,图校验错误和警告均为 0。
  • 本地与 Pod 对照:共同工作负载的命令和运行时图语义一致;不要求物理标识、时间戳、事件数量及额外应用上下文完全相同。
  • 容器 TLS:针对两代 Go/OpenSSL 工作负载完成 30 项检查。
  • 迟到绑定与崩溃恢复:在数据库格式版本 17 上完成 13 项检查,包括已关闭的绑定区间,以及第二次重启后事件标识保持不变。
  • 升级:9,500 个历史事件从格式版本 16 升级到 17,并在客体正常重启后保持不变。这不模拟突然断电。

CI运行竞态测试、vet、格式检查、可移植的第一阶段验收、服务 HTTP 故障检查、Linux amd64/arm64 构建、生成绑定一致性检查,以及 Go 1.23–1.26 的 amd64 实机系统调用/TLS 测试。CI 和实验室报告分别提供验证依据。

升级与限制

升级前应备份数据目录。打开存储时会迁移数据库格式;遇到程序不支持的较新版本,会在迁移写入前拒绝打开。已有压缩签名示例包保持兼容,不会被重写。部署步骤见 KVM/K3s 指南。

  • 传感器观测其所在的内核,包括 KVM 客体内核;不能从宿主机直接检查任意客体。
  • TLS 覆盖取决于符号、ABI 和挂载时间。ARM64 Go TLS 读取、BoringSSL,以及任意去符号或静态 TLS 程序不在该版本覆盖范围内。短命进程可能在自动发现挂载前结束,报告须保留这一缺口。
  • Falco 专用缓冲的重启恢复行为未改变。共用摄入路径的原子性修复适用,但原生流的恢复保证不能直接套用于兼容 worker。
  • 10 万事件测试是单节点基线,不是 SLA。多日持续运行、真实磁盘故障及按执行记录统计的覆盖范围仍需进一步验证。
  • 本地签名证明的是相对于可信密钥或检查点的数据完整性,不能证明已失陷主机上的采集完整、真实。
  • 中心证据服务仍处于设计阶段,该版本不是多租户 SaaS 发布。

完整变更见 CHANGELOG,交付边界见项目收尾标准。