davfd/council-sift

GitHub: davfd/council-sift

一个用于自主 DFIR 调查的对抗式验证框架,通过 Council 审查层在人工审核前基于实际证据反驳和纠正 AI 代理的取证发现,从而降低幻觉误报。

Stars: 0 | Forks: 0

# Council-SIFT ![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg) ![Platform: SIFT / Linux](https://img.shields.io/badge/platform-SANS%20SIFT%20%2F%20Linux-blue) ![Frameworks: Claude Code + OpenClaw](https://img.shields.io/badge/agents-Claude%20Code%20%2B%20OpenClaw-orange) ![MCP: 10 tools](https://img.shields.io/badge/MCP-10%20tools-purple) ![Status: FIND EVIL! submission](https://img.shields.io/badge/SANS-FIND%20EVIL!-red) Council-SIFT 是一个用于自主 SIFT 调查的验证层。一个 Claude Code 分析师会选择取证工具并草拟发现;Council 会根据实际工具输出尝试反驳每一条发现。未经证实的声明会被退回,分析师无需人工介入即可自我纠正,而保留下来的发现会获得链接回精确命令输出的哈希链收据。 审查/记忆底座包含一个 Model Context Protocol (MCP) server,位于 `claw-memory-core/src/mcp/index.ts`,在隔离的 Neo4j 溯源图上暴露 10 个工具(`remember`、`recall`、`forget`、`what_do_you_know_about`、`supersede`、`mark-wrong`、`list-sources`、`recall_at_time`、`list_memories`、`corroborate`)。 ## 评委请从这里开始 — 5 分钟路径 **需要记住什么:** Council-SIFT 并不声称自己是一个一键案件的预言机。它通过在人类检查员看到每一条声明之前,强制其经过基于证据的 Council 审查,从而使自主的 DFIR 发现更难产生幻觉。 | 评委问题 | 快速回答 | 验证位置 | |---|---|---| | 代理是真实的还是脚本化的? | **真实代理:** 跨磁盘 + 内存的 9 次 Claude Code 调查;`analyst/*_demo.sh` 文件仅是无密钥的重放测试工具。 | [`execution-logs/AGENTIC.md`](execution-logs/AGENTIC.md) | | 它能自我纠正吗? | **能:** 10 次实时自我纠正;典型的演示是 SRL-2018 中关于 `Rar.exe` 的过度声明在 Council 退回后被缩小范围。 | [单个发现的端到端过程](#one-finding-end-to-end-what-the-loop-actually-does) | | 它能减少产生幻觉的 IR 发现吗? | **能,且有具体范围数据:** 注入的未经证实的声明从 **85/85 全部进入审查** 降低到 **0/85**;盲测重评结果为 **98.6% recall / 98.6% precision**,并指明了 1 个 FP 和 1 个漏报。 | [`accuracy-report/bench_real_report.md`](accuracy-report/bench_real_report.md) | | 约束是架构层面的吗? | **是:** 默认拒绝 `bin/sift`,HMAC 范围限制的能力,无分析师自我批准,只读证据挂载,防篡改审计。 | `python3 tests/test_bypass.py`, `python3 eval/gate_redteam.py` | | 我可以在没有 API 密钥或证据的情况下运行核心吗? | **可以:** 核心验证关卡在本地通过 Docker + Node + Python 运行。 | [设置](#setup-step-by-step),然后查看下方命令 | **设置后的无 API 密钥快速冒烟测试:** ``` set -a; source claw-memory-core/.env; set +a node eval/smoke_lifecycle.mjs # expect: SMOKE PASS node eval/ablation.mjs # expect: precision=1.000 recall=1.000 node eval/adversarial_evasions.mjs # expect: 67/67 caught, 0/36 false positives python3 tests/test_bypass.py # expect: identity-kernel bypass suite: 13/13 passed ``` **一目了然的六项标准评分卡:** | 标准 | 信号 | |---|---| | 自主执行 | Claude Code 是主要引擎;9 次真实运行,46 条草拟发现,10 次自我纠正。 | | IR 准确率 | 发现结果区分了观察/解释/置信度/溯源;漏报和误报均被公开披露。 | | 广度 + 深度 | 官方 ROCBA、SRL-2015、SRL-2018;通过 Sleuth Kit 进行磁盘分析,通过 Volatility 3 进行内存/网络遥测分析,以及通过 Plaso/psort 进行 SRL-2018 时间线关联。 | | 约束实现 | 13/13 绕过测试套件 + 52/52 破坏性关卡红队测试被拒绝;基于 MCP 的记忆/审查底座暴露了 10 个工具。 | | 审计追踪 | 发现 -> ToolExecution + `output_sha256` -> Council Receipt -> 基于 MCP 的记忆图 -> `trace` / 可选的 `trace --rerun`。 | | 易用性 | 无密钥核心在本地运行;官方证据演示需要 SIFT + 组织者数据集。 |
范围与诚信声明 — 为什么数据是严谨的而不是夸大的 Council-SIFT 是人类 HMAC 批准步骤(例如参考的 Valhuntir 提交)的**补充**:它只向该步骤输入已经在验证中存活的发现。它保障了推理的**正确性** — *为什么一个发现值得被批准* — 而将这一层留给今天的人类。 它在两个层级上运行: 1. **确定性底线**,可由任何没有 API 密钥的评委复现,其反驳是机械化可验证的(例如,“引用的 token `185.220.101.45` 不在工具输出中”);以及 2. **附加的 LLM 怀疑者小组**(OpenClaw / Claude-Agent-SDK),它提高了对正则表达式无法枚举的过度解读的召回率。 该小组只能对一个已经通过底线的发现**增加**一次退回;它永远无法挽救一个被反驳的发现。退回需要 ≥2/3 的独立怀疑者多数同意,因此一个冲动的 LLM 无法拒绝一个真实的发现。 强化的规避测试套件在自然语言防护上捕获了 **67/67** 个测试,且仅有 **0/36** 个误报,但该套件曾用于强化这些检验节点,因此它是作为回归测试报告的,而不是作为留出的基准测试。留出的、非循环的数据来自于 [`eval/blind_redteam.mjs`](eval/blind_redteam.mjs):一个独立的 LLM 攻击者编写了 130 个新发现(56 个有支持 · 74 个是幻觉)。当前的检测器重评分捕获了 **73/74** 个未经证实的发现(**98.6% recall**),精度(precision)为 **98.6%**,其中有一个误报和一个漏报被列出而不是被隐藏。
## 🔴 实时自主代理 — 跨磁盘*和*内存(主要执行引擎) Council 是新颖的验证层,但**执行引擎是一个真正的 Claude Code 代理。** 在 [`analyst/autorun.sh`](analyst/autorun.sh) 的驱动下,它读取自己的契约,**选择自己的工具**,起草**自己的**发现,将其提交给 Council,并**在每次被退回时自我纠正 — 没有人工介入,没有任何硬编码。** 我们跨证据类型和案例运行了它: | 案例 | 证据 | 发现 | 已验证 | 自我纠正 | 代理发现的工件 | |---|---|---:|---:|---:|---| | SRL18-DC-DISK | 磁盘 / MFT | 8 | 4 | **4** | 在 `C:\temp` 中暂存的 `ntds.dit` 域凭据转储 (`ntdsutil ifm`) | | SRL18-FILE-DISK | 磁盘 / MFT | 6 | 5 | 1 | `StarFury.zip` 归档/暂存工件 (+ 已删除的 RAR 子树,MFT 恢复) | | ROCBA-DISK | 磁盘 | 5 | 5 | 0 | `fredr` 配置文件中的 Stark Research Labs IP 盗窃文件 | | SRL18-WKSTN-MEM | 内存 (8 个 vol3 插件) | 4 | 4 | 0 | LISTENING 后门套接字;`subject_srv.ex` Wow64 进程 | | SRL18-RD-NET | 内存 / 网络 | 8 | 5 | **3** | `subject_srv.ex` 后门 `0.0.0.0:3262`;可疑的 `powershell.exe` | | ROCBA-MEM | 内存 | 3 | 3 | 0 | `svchost.exe` 套接字所有权;118 条入站 TCPv4 记录 | | SRL2015-NFURY | 内存 **+** 磁盘 | 9 | 8 | 1 | PyInstaller 恶意软件,回收的 `svchost.exe` 伪装,`winclient.reg` 持久化 | | SRL-LIVE | 内存 | 1 | 1 | 0 | 纪律严明的第一遍 — 选择了 `subject_srv.ex` 而不是明显的 `Rar.exe` | | SRL-LIVE2 | 内存 / 网络 | 2 | 1 | 1 | 实时纠正了一个内网 IP "C2" 的过度解读;重新运行了工具本身 | **9 次真实运行 · 46 条草拟发现 · 36 条经 Council 验证 · 10 次实时自我纠正 · 磁盘、内存和网络遥测 · 3 个案例(SRL-2018、ROCBA、SRL-2015)。** 仅 ROCBA 就通过 30 多次迭代的 Council-SIFT 调查/纠正轮次进行了探索;公开仓库提供的是精心挑选的已验证收据和叙述性报告,而不是原始草稿。 真实的脱敏记录(工具调用 + 时间戳 + token 使用量)、按案例划分的调查叙述以及哈希链收据 — 索引在 **[`execution-logs/AGENTIC.md`](execution-logs/AGENTIC.md)** 中,叙述位于 [`reports/`](reports/)。 确定性的 `*_demo.sh` 脚本是一个独立的**无 API 密钥可复现测试工具**,而不是代理本身。有界的 [`analyst/srl_timeline_demo.sh`](analyst/srl_timeline_demo.sh) 附加组件在官方的 SRL-2018 文件服务器磁盘上运行真实的 Plaso/psort,以展示内存纠正所要求的磁盘/时间线关联。 ### 单个发现的端到端过程(循环实际做了什么) 在 SRL-2018 文件服务器内存镜像上,代理运行了 `vol3 windows.psscan` 并起草了: Council **退回了它** — 两个节点,各自独立地: - **工具语义:** *进程列表 (psscan) 无法确定网络活动;需要 netscan 才能声称存在 C2。* - **推断:** *无法从单一工件得出针对特定攻击者的归因。* 分析师阅读了异议并在**无人类介入的情况下自我纠正**,仅重新提交了证据所支持的内容: → 所有节点支持 (SUPPORTED) → **COUNCIL_VERIFIED** + 哈希链收据。`csift trace --rerun F-analyst-SRL-MEM-002`(需要位于 `bolt://localhost:7690` 的隔离 Neo4j 图;请参阅[设置](#setup-step-by-step)步骤 2–4)重新执行记录的 `vol3` 命令,并确认输出哈希匹配。*(在磁盘上,文件服务器运行随后发现了实际的 `StarFury.zip` 归档/暂存工件 — 在第二种证据类型上证实了暂存归档的解读。)* ## ✅ 提交合规性 (FIND EVIL!) — 每个必选项的位置 | 必选项 | 位置 / 状态 | |---|---| | 公开代码仓库 | ✅ [`https://github.com/davfd/council-sift`](https://github.com/davfd/council-sift) — 公开的 `main` 分支包含润色后的数据包/工件;请勿推送本地归档引用 | | **开源许可 (MIT)** | [`LICENSE`](LICENSE) — MIT,由 GitHub 检测 -> 显示在 **About** 中 | | 包含设置的 README | 本文件 -> **[设置](#setup-step-by-step)** | | 针对证据的分步运行说明 | **[设置](#setup-step-by-step)** + **[运行演示](#run-the-demos)** | | 文本描述(特性/功能) | 本 README + [`ARCHITECTURE.md`](ARCHITECTURE.md) + [`NOVELTY.md`](NOVELTY.md) | | 演示视频(<5 分钟,终端,自我纠正) | 运营者拥有的最终 URL 将放在 Devpost 上;最终提示卡准备在 [`docs/FINAL_RECORDING_CUE_CARD.md`](docs/FINAL_RECORDING_CUE_CARD.md),更详细的理由在 [`docs/DEMO_SCRIPT.md`](docs/DEMO_SCRIPT.md) | | 架构图 | [`docs/architecture.png`](docs/architecture.png) + [`docs/architecture.svg`](docs/architecture.svg) + [`ARCHITECTURE.md`](ARCHITECTURE.md) 中的 mermaid 图以及下文 | | 证据集文档 | [`evidence-docs/EVIDENCE.md`](evidence-docs/EVIDENCE.md) | | 准确率报告 | [`accuracy-report/bench_real_report.md`](accuracy-report/bench_real_report.md)(`node eval/bench_real.mjs` 会在真实证据上大规模重新生成) | | 代理执行日志 | **[`execution-logs/AGENTIC.md`](execution-logs/AGENTIC.md)** — **9 次真实自主运行**的索引(真实的 stream-json 记录:工具调用 + 时间戳 + token 使用量);通过 `node eval/export_execution_log.mjs ` 生成结构化的按案例日志 | | Devpost 文案 / 运营者数据包 | [`docs/DEVPOST_SUBMISSION_COPY.md`](docs/DEVPOST_SUBMISSION_COPY.md) + [`docs/SUBMISSION_PACKET.md`](docs/SUBMISSION_PACKET.md) | | 分析推理(结构化的调查叙述,而非原始日志) | [`reports/`](reports/) — `node eval/narrative_report.mjs ` 将已验证的发现渲染为分析师式的散文(置信度、证据*不*支持的内容、自我纠正记录、收据链接) | **成功指标(根据组织者要求):*比 Protocol SIFT 基线更少的幻觉发现。*** 我们直接在**所有三个官方场景的真实工具输出**上进行了测量(ROCBA + SRL-2015 + SRL-2018,数十台主机):**Council-OFF = Protocol SIFT 基线**让每一个注入的未经证实的声明都到达人类面前;**Council-ON** 捕获了所有 85 个注入的未经证实的声明,并且**在该注入类别的支持集上零误报**。盲测红队重评另外显示了 98.6% recall / 98.6% precision(1 个 FP,1 个 FN),因此这些数据是界定过范围的,而不是全球准确性声明。请参阅 [`accuracy-report/bench_real_report.md`](accuracy-report/bench_real_report.md) — 使用 `node eval/bench_real.mjs` 重新生成。 ## 我们如何达到评判标准 | 标准 | Council-SIFT 如何应对 | |---|---| | **自主执行质量** | 分析师 (Claude Code) 起草 -> Council 反驳 -> 分析师**无人工介入自我纠正** -> 重新审查 -> 收据。在合成磁盘 + 官方磁盘 + 官方内存上进行了演示。 | | **IR 准确性** | 发现结果分为观察/解释/置信度;幻觉被**捕获并记录**(而不是被悄悄丢弃);检测到 4 种不同的错误类别(见下文)。**在所有 3 个官方场景的真实证据上进行了大规模基准测试** — 在注入类别的支持集上为 0 FP,盲测红队准确率单独报告(见准确率报告)。 | | **广度与深度** | 深度胜于广度:在官方 ROCBA + SRL 数据集上,深入于**内存 (Volatility 3)**、**磁盘 (Sleuth Kit)**、**时间线关联 (Plaso/log2timeline + psort)** 以及源自内存的**网络遥测**。在挂载的官方证据中未发现独立的 PCAP,因此不声称进行了数据包有效载荷分析。 | | **约束实现** | 在 `bin/sift` 处实时强制执行的**架构化、默认拒绝**身份内核:只有在只读白名单上的命令才能运行 — 其他一切(`shred`、`truncate`、`parted`、对镜像进行 `cp`/`mv`、`find -delete`、`sed -i`、混淆的 `rm`、未知二进制文件)都会在执行前被*拒绝*,并带有双用途 + 混淆防护。此外还有 HMAC 范围限制的能力、无自我批准、提示注入拒绝、防篡改审计,以及一个 10 工具的 **Model Context Protocol (MCP)** 内存/审查层。证据**也**被挂载为只读(操作系统强制后备)。**13/13 绕过测试套件** — 包括审查者使用过的确切绕过方法。 | | **审计追踪质量** | 每个发现 -> `DERIVED_FROM` tool-execution 节点 (+ `output_sha256`);Tier 3 添加了 `csift capture` 可信执行记录,因此新发现从经过哈希验证的本地捕获中导入工具标准输出,而不是信任调用者提供的 `output`;`csift trace` 重新对存储的输出进行哈希计算,而 `trace --rerun` 是对具体的记录命令/证据路径进行的更强有力的可选检查(典型演示:`F-analyst-SRL-MEM-002`);带时间戳的执行日志;哈希链收据。 | | **易用性与文档** | 一键演示;可复现的核心不需要 API 密钥;干净、无种子的 MIT 仓库;本 README。 | **强制性项目要求:** 无需人工的自我纠正 ✓ · 准确性可追溯到工件/偏移量/日志 ✓ · 结构化的调查叙述(非原始日志) ✓ — 由 `node eval/narrative_report.mjs ` 从验证底座生成 -> [`reports/.md`](reports/):一份分析师风格的报告(推理过程、置信度、*证据**不**支持的内容*、自我纠正记录,每个声明都链接到其收据,以及在记录命令具体时的 `trace`/重运行检查),这与原始的 [`execution-logs/`](execution-logs/) 事件流是不同的。 ## 架构 ``` flowchart LR EV["Evidence
disk · memory · logs"] --> TOOLS["SIFT tools
vol3 · plaso · Sleuth Kit · yara"] TOOLS --> ANALYST["Analyst agent
(Claude Code)"] ANALYST -- "tool calls via bin/sift" --> KERNEL["Identity Kernel (live at bin/sift)
default-deny tool gate · HMAC caps · refusals · hash-chain audit"] KERNEL --> BRIDGE["csift bridge
record · trace · refute"] BRIDGE --> MEM[("claw-memory-core MCP server (10 tools)
Neo4j @7690
MemoryClaim · ToolExecution
ConflictRecord · Receipt")] MEM --> COUNCIL["5 deterministic refutation seats
Citation · Tool-semantics
Contradiction · Inference · Scope"] COUNCIL --> SYN["Synthesis aggregator
adjudicate → receipt | bounce"] SYN -- "REFUTE → ConflictRecord" --> ANALYST SYN -- "VERIFIED" --> RECEIPT["Council Receipt
(hash-chained)"] RECEIPT -. "COUNCIL_VERIFIED only" .-> HUMAN["Human examiner
(HMAC approve)"] ``` 完整图表 + 数据流:[`ARCHITECTURE.md`](ARCHITECTURE.md) · 光栅图像:[`docs/architecture.png`](docs/architecture.png) · 矢量图像:[`docs/architecture.svg`](docs/architecture.svg)。 ## 循环(血液流) ``` evidence → `csift capture` runs the forensic command through `bin/sift` and writes a hash-verified local execution record → analyst drafts a 4-part finding (observation / interpretation / confidence / execution_ref) → `record-finding` imports the captured stdout, refuses caller-supplied output, and stores DERIVED_FROM provenance + output_sha256 → Council seats try to REFUTE it → if refuted: ConflictRecord + bounce → analyst SELF-CORRECTS (no human) → if it survives: hash-chained Council Receipt → `trace` re-resolves the pointer and re-hashes the tool output (integrity) ``` ## 我们证明了什么(基于真实证据) | 演示 | 证据 | 结果 | |---|---|---| | `analyst/rocba_demo.sh` | **官方 ROCBA** `rocba-cdrive.e01` (真实 NTFS, Sleuth Kit, 零拷贝) | 伪造的“BitLocker 容器 @ inode 999999” -> **引用反驳**(不存在) -> 自我纠正 -> **已验证** -> 追踪完整性已验证 | | `analyst/srl_memory_demo.sh` | **官方 SRL-2018** `base-file-memory.img` (真实 **Volatility 3 psscan**) | “Rar.exe -> 渗透到攻击者的 C2” -> **被工具语义 + 推断捕获** -> 自我纠正 -> **已验证** | | `analyst/srl_timeline_demo.sh` | **官方 SRL-2018** `base-file-cdrive.E01` (真实 **Plaso/log2timeline + psort** 加上 Sleuth Kit `fls`/`istat`) | `StarFury.zip` 和稀土文件被放置在有界的时间线中;实时 + 已删除的归档条目证实了暂存,同时保留了边界:没有 PCAP 有效载荷,没有完成的渗透收据,没有人类身份声明。 | | `analyst/rocba_questions_demo.sh` | **官方 ROCBA** `Users/fredr` (真实 `fls`) | 处理案件的*关键问题*;“8.4 GB -> 185.220.101.45” **被反驳**;基于证据的简报(开放问题保持开放) | | `analyst/sift_demo.sh` | SIFT 中的合成 ext4 镜像 (真实 `fls`) | inode-99 rootkit 声明被反驳 -> 自我纠正 -> 已验证 | | `eval/bench_real.mjs` | **真实的** Sleuth Kit + vol3 输出,**所有 3 个官方场景**(ROCBA + SRL-2015 + SRL-2018,多台主机) | Council **关闭:每个注入的未经证实的声明都进入审查 -> 开启:被捕获**;**在注入类别的支持集上 FP=0** — 见准确率报告 | | `eval/ablation.mjs` | 小型标记的健全性集(内存/磁盘/哈希) | Council **关闭 6/6 -> 开启 0/6** | | `eval/adversarial_evasions.mjs` | 红队回归测试套件,旨在规避节点词汇表 + 子字符串/零 token/PID/范围/RFC1918/因果关系漏洞 | 强化的底线 **67/67 被捕获,0/36 FP**(回归测试,非留出测试) | | `eval/gate_redteam.py` | 广泛的实时关卡红队测试 — 涵盖 9 种规避类别的 52 次证据破坏尝试(编码/eval、间接、解释器、包装器、路径前缀、引用、归档提取、工具自带写入、重定向) | **全部 52 次均被拒绝,0 次错误拒绝** | | `eval/blind_redteam.mjs` / `eval/blind_rescore.mjs` | **留出、非循环** — 独立的 LLM 攻击者语料库,当前检测器对 130 个未见过发现的重评分 | 确定性底线 **98.6% recall @ 98.6% precision**(73/74 未经证实的被捕获,列出 1 个 FP,1 个漏报) | | `eval/skeptic_panel_test.mjs` | 附加小组关卡逻辑(模拟投票,无 API 密钥) | 2/3->退回 · 1/3->通过 · 无认证时弃权 · 仅附加 | | `eval/skeptic_live_demo.mjs` | **实时** LLM 小组针对通过强化底线的二阶规避 | 多数派**退回了底线漏掉的过度解读**;在纪律严明的发现上 **0 FP** | | `tests/test_bypass.py` | 身份内核 | **13/13**(自我批准被阻止,证据提示注入被拒绝,伪造/过期/范围限制,shell-token 绕过回归,防篡改审计) | ## 设置(分步) **前置条件** - **Docker**(用于隔离的 Neo4j),**Node ≥ 20**,**Python ≥ 3.10**。 - 对于 SIFT 演示:一个可以通过 SSH 访问的 **SANS SIFT Workstation**,以及(对于官方证据演示)HACKATHON-2026 数据集。该仓库绝不包含证据。 ``` # 1. clone git clone https://github.com/davfd/council-sift council-sift && cd council-sift # 2. 独立的 Neo4j(它有自己的 graph — 切勿使用您的其他 graphs) docker run -d --name councilsift-neo4j -p 7690:7687 -p 7476:7474 \ -e NEO4J_AUTH=neo4j/councilsiftpw -e NEO4J_PLUGINS='["apoc"]' neo4j:5.26-community # 3. 构建 audit-substrate 引擎 cd claw-memory-core && npm install --legacy-peer-deps --no-audit && npm run build && cd .. # 4. 将引擎指向隔离的 graph printf 'NEO4J_URI=bolt://localhost:7690\nNEO4J_USER=neo4j\nNEO4J_PASSWORD=councilsiftpw\n' > claw-memory-core/.env # 5. 应用 schema(在 container 内部运行 cypher-shell — 无需在 host 上安装) bash scripts/migrate.sh ``` ### 运行演示 **核心验证 — 不需要 SIFT/API 密钥(可在任何地方运行):** ``` set -a; source claw-memory-core/.env; set +a node eval/smoke_lifecycle.mjs # substrate: deposit → refute → ConflictRecord → corrected claim node eval/ablation.mjs # quick sanity ablation (small labelled set) node eval/adversarial_evasions.mjs # red-team regression: 67/67 caught, 0/36 FP (token-boundary + narrowed hedging + Tier 2 scope/PID/RFC1918 + causation checks) node eval/trusted_execution_test.mjs # Tier 3: trusted execution records + caller-supplied-output refusal node eval/bounded_skeptic_prompt_test.mjs # Tier 3: LLM panel sees bounded evidence excerpts, not unbounded raw output node eval/skeptic_panel_test.mjs # additive-panel gate logic with mocked votes (2/3→bounce, 1/3→pass) python3 tests/test_bypass.py # identity-kernel bypass suite (13/13) # 纯 no-SIFT 检查到此结束。`trace --rerun` 需要一个 demo receipt 以及 SIFT wrapper/evidence 路径。 ``` **取证演示 — 将分析师指向你的 SIFT Workstation。** 编辑 `bin/sift`,使其通过 SSH 连接到你的 SIFT 机器(该包装器只是一个简单的 `ssh … "$@"`),然后: ``` export PATH="$PWD/bin:$PATH" bash analyst/sift_demo.sh # synthetic image, real Sleuth Kit, full self-correction loop # official evidence(先以 read-only 模式挂载;不复制任何内容): # 使用以下命令启动 SIFT VM:-virtfs local,path=,mount_tag=evidence,security_model=none,readonly=on bash scripts/mount_evidence.sh bash analyst/rocba_demo.sh # official ROCBA disk (Sleuth Kit) bash analyst/srl_memory_demo.sh # official SRL-2018 memory (Volatility 3) bash analyst/srl_timeline_demo.sh # official SRL-2018 file-server timeline (Plaso/psort + Sleuth Kit) # 在内存 demo 将 F-analyst-SRL-MEM-002 记录到隔离的 graph 中之后: node bridge/csift.mjs trace --rerun F-analyst-SRL-MEM-002 # Receipt 重跑诚实性:council/receipts/manifest.json 将 placeholder/prose-command receipt 标记 # 为 STORED_OUTPUT_ONLY;`trace --rerun` 会为这些报告 NOT_RERUNNABLE,而不是假装它们重新运行了。 # 基于 REAL evidence 的大规模 Accuracy Report(需要从 SIFT 提取 corpus — 参见 evidence-docs): # node eval/bench_real.mjs bash analyst/rocba_questions_demo.sh # official ROCBA "Key Questions" + evidence-grounded brief ``` **实时自主分析师(真正的自我纠正) — 需要经过认证的 Claude Code。** 这是**主要的执行引擎**,也是 [`AGENTIC.md`](execution-logs/AGENTIC.md) 中 9 次索引记录的产生方式(代理读取 [`analyst/CLAUDE.md`](analyst/CLAUDE.md),**选择自己的工具**,起草**自己的**发现 — 没有任何硬编码): ``` export PATH="$PWD/bin:$PATH" # Headless — 复现/扩展一次真实的运行(将真实的 Claude Code stream-json 捕获到 execution-logs/AGENTIC-.jsonl): analyst/autorun.sh SRL18-DC-DISK "Triage the DC C-drive E01 at for compromise/persistence; submit findings to the Council." analyst/process_run.sh SRL18-DC-DISK # redact transcript → investigative narrative (reports/) → structured execution log → trace # Interactive — 在 Claude Code 会话中亲自驱动同一个 agent: bash analyst/run.sh # launches Claude Code with analyst/CLAUDE.md + sift/csift/council on PATH # 然后提示:“Case DEMO。Evidence:。进行调查并将结果提交给 Council;遇到任何 bounce 则进行自我纠正。” ``` *(上述确定性的 `*_demo.sh` 脚本是一个独立的无 API 密钥可复现测试工具,带有**硬编码**的发现 — 它们为没有凭证的评委重放该循环。`autorun.sh` 才是**真正的代理**:工具选择和发现均出自模型自身。)* **附加的 LLM 怀疑者小组(提高正则表达式无法捕获的过度解读的召回率):** ``` # 在 live review 路径上启用该 panel — 它仅在 deterministic floor 通过后运行, # 仅在 ≥2/3 skeptic 多数时才 bounce,并且在没有经过身份验证的 `claude` 的情况下弃权(无影响): COUNCIL_LLM_SKEPTIC=1 node council/council.mjs review node eval/skeptic_live_demo.mjs # live: panel bounces second-order evasions the floor passed, 0 FP node eval/blind_redteam.mjs # private/auth path: independent LLM attacker over the blind corpus node eval/blind_rescore.mjs # requires eval/corpus/ or embedded outputs; public snapshot fails closed and preserves the committed report node council/run_agentic.mjs # OpenClaw seat narration view (Claude Agent SDK if authenticated) ``` ## 组件 | 路径 | 作用 | |---|---| | `claw-memory-core/` | 无种子的 Neo4j 审计底座 (MemoryClaim / ToolExecution / ConflictRecord / VerificationRecord / CouncilReceipt;仅追加;`content_sha256`;溯源边)。基础组件。 | | `identity-kernel/` | 架构护栏 — HMAC 范围限制/过期机制、禁止工具 + 提示注入拒绝、双边批准、防篡改的哈希链审计。`kernel.py`(分层网关),`dfir_gateway.py`(DFIR 策略:只读/高权限/禁用工具集 + 关系),`authorize.py`(`bin/sift` 调用的**实时** `--scan-command` 关卡)。 | | `council/seats.mjs` | 确定性验证节点(**精度底线**) — token 边界引用、工具语义、矛盾、推断和范围。 | | `council/trusted_execution.mjs` | Tier 3 可信执行工具:哈希验证的 `csift capture` 记录,拒绝调用者提供的输出,以及有界的证据摘录。 | | `council/llm_skeptic.mjs` | **附加的** LLM 怀疑者小组 — 3 个独立的审视视角(透镜),≥2/3 多数同意,无认证时权;查看有界的证据摘录和完整输出的哈希,而非无界的原始标准输出。 | | `council/council.mjs` | 审查循环:确定性底线 ->(如果通过)附加 LLM 小组 -> 退回或哈希链收据。 | | `council/run_agentic.mjs` | 代理(OpenClaw / Claude-Agent-SDK)节点,基于相同的检查。 | | `council/agents/` | OpenClaw 节点定义(人设 + 授权 + 基础工具)。 | | `analyst/CLAUDE.md` | 分析师的**操作契约** — 四部分发现准则(观察 vs 解释 vs 置信度 + `cited_tokens`)以及在被退回时自我纠正的循环,这使得发现能够被反驳。 | | `analyst/autorun.sh`, `analyst/process_run.sh` | **真正的实时代理** — 运行了 9 次索引调查的无头启动器 + 后处理器(脱敏 -> 叙述 -> 执行日志)。 | | `analyst/run.sh`, `analyst/*_demo.sh` | 交互式代理启动器 + 确定性(硬编码发现)可复现演示。 | | `bridge/csift.mjs` | 引擎上的 `capture` / `record-finding` / `trace [--rerun]` / `refute` / `list`。`capture` 创建本地可信执行记录;`record-finding` 导入这些记录并拒绝调用者提供的标准输出。 | | `bin/` | `sift`(实时身份内核关卡) / `csift` / `council` 代理的 PATH 包装器。 | | `eval/` | `smoke_lifecycle` · `ablation`(包括 timestomp **矛盾**案例) · `bench_real`(大规模注入基准) · **`blind_redteam.mjs`**(留出非循环底线召回率,私有/认证路径) · `blind_rescore.mjs`(当存在 `eval/corpus/` 或嵌入输出时的检测器重评分;公开快照以关闭状态失败,而不是伪造一个空输出的重评分) · `adversarial_evasions.mjs`(底线回归测试,67/67) · `gate_redteam.py`(52/52 实时关卡拒绝) · `skeptic_panel_test`/`skeptic_live_demo`(小组) · `vigia_score.mjs`(外部基准) · `narrative_report.mjs` · `redact_agentic.mjs` · `export_execution_log.mjs`。 | | `tests/test_bypass.py` | 身份内核绕过套件 (13/13)。 | | `evidence-docs/`, `accuracy-report/`, `execution-logs/`, `docs/` | 提交的交付物。 | ## 取证反驳节点与综合聚合器 | 反驳节点 | 反驳问题 | 判定 | |---|---|---| | **引用** | 声明*引用*的每一个证据 token 是否都出现在工具输出中? | `UNSUPPORTED`(列出缺失/伪造的 token) | | **工具语义** | 工具是否被正确解读?(psscan ≠ C2,Shimcache ≠ 执行…) — 具备否定意识 | `MISREAD_TOOL` | | **矛盾** | 是否存在反证工件?(例如 timestomp `$SI` vs `$FN`) | `CONTRADICTED` | | **推断** | 解释是否过度延伸?(归因 / 意图 / 因果关系 / 不合理的确定性) | `UNSUPPORTED` | | **范围** | 是否将一个工件硬套用到所有主机 / 整个环境 / 整个组织的影响上? | `UNSUPPORTED` | 上述五个反驳节点是**确定性底线**(`council/seats.mjs`,无 API 密钥)。**综合聚合器**将这五个节点的判定裁决为 `COUNCIL_VERIFIED` 或 `BOUNCE_FOR_CORRECTION`。在此之上的是**附加 LLM 怀疑者小组**(`council/llm_skeptic.mjs`),**仅在底线已经通过**的发现上进行咨询: | 级别 | 作用 | 保障 | |---|---|---| | **确定性底线** | 5 个反驳节点 + 综合聚合器;机械化的反驳 | 可复现;在注入类回归支持集上 FP=0;盲测红队准确率单独报告 | | **LLM 怀疑者小组**(附加) | 3 个独立的怀疑者(工具语义/推断/范围视角)捕获没有正则触发的过度解读 | **仅对**通过底线的发现**增加**退回(绝不挽救);需要 **≥2/3 多数同意**;小组 recall/FP 单独计量 | ## 准确性与诚信 [准确率报告](accuracy-report/bench_real_report.md) 由 `node eval/bench_real.mjs` 从**在官方 ROCBA + SRL-2015 + SRL-2018 镜像(数十台主机)上捕获的真实 Sleuth Kit + Volatility 3 输出**重新生成 — 发现基于真实的工件;真值 = 真实输出中 token 的存在与否。它随附了明确的**诚信声明**: - **注入类回归集上的精确度 / FP 率:** 在模板界定范围的支持发现中,Council 提出了**零**误报。盲测红队重评分是未见的准确率信号,并记录了 1 个 FP;请勿将回归 FP=0 视为全局保证。 - **注入集上的召回率是构造性的**(其幻觉类别映射到了各个节点上)— 因此该数字**不能**替代外部密钥。因此,我们保留了强化的底线回归套件([`eval/adversarial_evasions.mjs`](eval/adversarial_evasions.mjs)):旨在规避节点词汇表的规避现在达到 **67/67 被捕获,0/36 FP**。坦率地说,该套件曾用于强化这些节点,因此它是一个**回归测试,而不是留出的基准测试**。 - **非调优的召回率信号是盲测语料库加上附加小组。** 持久化的盲测语料库现在的重评分结果为 **98.6% recall / 98.6% precision**,具有 1 个 FP 和 1 个 FN。对于甚至通过强化底线的二阶规避,≥2/3 的怀疑者多数派会将其退回 — 已进行过**实时**演示([`eval/skeptic_live_demo.mjs`](eval/skeptic_live_demo.mjs)):它捕获了底线放过的过度解读,同时对 **0/n** 条纪律严明的发现进行了标记。关卡逻辑已通过模拟投票([`eval/skeptic_panel_test.mjs`](eval/skeptic_panel_test.mjs),无 API 密钥)进行了确定性证明。 - **外部基准(支持性证据,有范围限制):** 对社区 `vigia-cases` 进行评分,但此路径是实时的 LLM 特异性提示词比较(`eval/vigia_score.mjs`),**而非**确定性的 `runSeats` 验证器。`score_against` 级别有 3 个案例,全部为 MALICE 真值;Council-OFF 和 Council-ON 在那里都达到了 100% 的判定准确率,因此 Council 差异约为 0。误报关卡 PASS (VIGIA-REAL-005);IOC 召回率为 85%;见 [`accuracy-report/vigia_external_report.md`](accuracy-report/vigia_external_report.md)。 - 基准测试本身**发现并修复了一个真实的漏洞**(netscan 的“连接 = 渗透到 C2”的过度解读,通常涉及回环/内网 IP)— 这也正是它应有的使用方式。 ## 新颖性与溯源 `claw-memory-core` 和身份内核机制是一个**预先存在的、无种子的 MIT 基础**(记录在 [`NOVELTY.md`](NOVELTY.md) 中)。**新的黑客松工作**是 DFIR 声明模式、验证节点、针对 SIFT 工具的自我纠正循环、Council Receipt、DFIR 身份封装 + 绕过套件、消融实验以及官方证据集成。**本仓库的任何位置都没有出现密封的框架内部结构**,并且该图是一个隔离的实例。 ## 许可证 MIT — 见 [`LICENSE`](LICENSE)。 ## 致谢 为 SANS **FIND EVIL!** 黑客松而构建,基于 SANS SIFT Workstation 和 Protocol SIFT。 MITRE ATT&CK 是 The MITRE Corporation 的商标;SIFT Workstation 是 SANS Institute 的产品。
标签:AI智能体, Clair, DLL 劫持, HTTP工具, MCP, MITM代理, 大语言模型, 子域名变形, 数字取证, 自动化取证, 自动化攻击, 自动化脚本, 自我纠错, 请求拦截, 逆向工具