philcantcode/go-forensic-artifacts

GitHub: philcantcode/go-forensic-artifacts

一个本地优先的 Go 取证制品管理库,通过 SHA-256 内容存储与 SQLite 溯源目录实现不可变的证据保全、完整溯源链与可复现的研究工作流。

Stars: 0 | Forks: 0

# Go 取证制品存储 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/993938d8ce5e902ccfb9d6747725c320d855dea3235ed9a304cedf0d94c9321f.svg)](https://github.com/philcantcode/go-forensic-artifacts/actions/workflows/ci.yml) [![Go Reference](https://pkg.go.dev/badge/github.com/philcantcode/go-forensic-artifacts.svg)](https://pkg.go.dev/github.com/philcantcode/go-forensic-artifacts) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) `forensic` 是一个本地优先的 Go 库,用于不可变的取证证据和漏洞研究制品。 一个 repository 配置即可管理持久且独立的 case。每个 case 结合了 SHA-256 内容存储和事务性的 SQLite 溯源目录。 该实现涵盖了设计的版本 1 基准以及完整的第一个垂直切片: - repository 和 case 的创建、发现、重新打开以及并发访问; - 分阶段的、原子化的文件与源码树导入,具有独立的 evidence/object occurrence ID 以及惰性的 symlink 元数据; - agent、session、不可变的 activity、封装的 input、output 和审计链; - 类型化的 artifact、source locator、断言以及版本化的 finding; - 类型化的结构化查询、精确的冻结选择以及溯源追踪; - 确定性的仅复制目录 projection,具有安全路径和清单; - FTS5 元数据搜索,以及有界的流式字面量/正则表达式字节搜索; - 确定性的 Markdown 和 JSONL 导出,以及经过验证的 BagIt 交付物; - 快速、原始、完整以及 projection 的完整性验证; - 签名的外部 checkpoint;以及 - 可通过稳定 ID 进行验证和恢复的实时 SQLite 快照。 ## 快速开始 ``` repo, err := forensic.Open(ctx, forensic.Config{ Root: "/srv/forensics", DefaultAgent: forensic.AgentSpec{ Kind: forensic.AgentSoftware, Name: "research-agent-7", }, }) if err != nil { return err } defer repo.Close() c, err := repo.CreateCase(ctx, forensic.CaseSpec{Name: "router-firmware"}) if err != nil { return err } defer c.Close() evidence, err := c.ImportEvidenceFile(ctx, "firmware.bin", forensic.EvidenceSpec{ Label: "Vendor firmware 3.2.1", Acquisition: forensic.AcquisitionSpec{Method: "vendor-download"}, }) if err != nil { return err } session, err := c.StartSession(ctx, forensic.SessionSpec{Label: "config review"}) if err != nil { return err } defer session.Close(ctx) run, err := session.BeginActivity(ctx, forensic.ActivitySpec{ Type: forensic.ActivityExtract, Label: "Extract configuration", }) if err != nil { return err } if err := run.Use(ctx, evidence.RootObject, "firmware-image"); err != nil { return err } config, err := run.CaptureFile(ctx, "config.json", forensic.ObjectSpec{ Role: "extracted-file", Source: forensic.PathLocator{Display: "etc/config.json", Separator: "/"}, }) if err != nil { return err } if err := run.Finish(ctx, forensic.OutcomeSucceeded()); err != nil { return err } selection, err := session.Freeze(ctx, forensic.FreezeSpec{ Name: "JSON configuration", Query: forensic.And( forensic.KindIs(forensic.EntityObject), forensic.PathGlob("**/*.json"), ), }) ``` 每个选定的 artifact 都可以通过其生成 activity 和具名 input 进行追踪, 并使用 `Case.Trace` 回溯到原始的受管字节。`Case.Verify` 会检查 catalog、外键、审计链、blob 引用、摘要或物化的 projection,且不会修改 case。 ## 存储与安全 实时布局记录在[设计文档](docs/design.md)中。受管 blob 会在 catalog 引用提交之前发布。物化操作始终复制字节; 它们绝不会硬链接到内容存储。导入操作会拒绝 symlink,生成的 path 组件会被净化,并且 projection/package 的目标位置必须位于 权威的 case 目录之外。 支持在单个主机上的跨 goroutine 和协作进程的并发。在 NFS/SMB 上打开 case、分布式写入、实时获取、 物理删除已提交的 evidence,以及对恶意解析器进行沙盒处理,均不在 核心库的范围内。 ## 架构决策 简短的决策记录位于 [`docs/adr`](docs/adr) 中: 1. 本地文件系统和 SQLite; 2. 每个 case 独立的 SHA-256 内容存储; 3. 不可变的 activity 溯源; 4. 类型化的 UUIDv7 标识符和规范的审计事件; 5. projection 前冻结;以及 6. Go/SQLite 实现基准。 ## 开发 需要 Go 1.25.8 或更高版本。此基准版本包含了 repository、checkpoint 和导出路径所使用的标准库安全修复。 ``` go test ./... go test -race ./... go vet ./... ``` 测试涵盖了在 race detector 下运行的 100 个并发混合 worker、 多进程的导入/查询/标记/冻结、在持久化边界处的强制进程终止、导出故障注入、确定性 projection、可移植恢复、 path/manifest 模糊测试种子,以及故意的 blob/catalog/package 损坏。 验收证据映射在 [docs/implementation-status.md](docs/implementation-status.md) 中。 ## 发布与安全 发布使用语义化版本控制,并在完整测试套件通过后从签名或带注释的 `v*` 标签发布。请参阅 [RELEASING.md](RELEASING.md) 和 [CHANGELOG.md](CHANGELOG.md)。在版本 1.0 之前,次要版本可能包含 破坏性的 API 更改。 请使用 GitHub 的安全公告表单私下报告疑似漏洞, 如 [SECURITY.md](SECURITY.md) 中所述。 ## 许可证 本项目基于 [MIT 许可证](LICENSE) 提供。
标签:EVTX分析, Go, Ruby工具, SQLite, Zenmap, 审计日志, 情报收集, 数字取证, 数据完整性, 日志审计, 漏洞研究, 自动化脚本