bioless/sift-crs-argus

GitHub: bioless/sift-crs-argus

一个以证据为中心的 DFIR 网络推理系统,通过登记证据、运行类型化取证工具、确定性验证与有限自我纠正,生成可审计的结构化调查报告。

Stars: 1 | Forks: 0

# SIFT-CRS Argus SIFT-CRS 是一个受 Team-Atlanta 启发、为 Protocol 设计的 DFIR 网络推理系统 SIFT。它将取证调查转化为一个受控循环: ``` Register evidence -> run typed MCP tools -> generate candidate findings -> verify -> self-correct -> report ``` 不可商榷的规则: ``` No evidence reference -> no finding. No verifier pass -> no confirmed claim. No execution log -> no report inclusion. ``` 本仓库目前实现了第 1 至第 6 阶段: - 仓库和 Python 包骨架 - JSON Schemas 和验证用的 JSON 示例文件 - 使用 SHA-256 哈希的证据登记 - 证据账本写入 - 仅追加执行的 JSONL 日志 - 类型化的模拟取证工具以及一个真实的 EVTX 解析器封装,具备 经过 schema 验证的输入与输出 - 从工具输出中生成候选发现 - 针对发现状态和置信度的确定性验证器决策 - 包含针对性类型化工具后续操作的有限确定性自我纠正 - 仅基于已验证和 降级的发现生成结构化的 Markdown 调查报告 - 包含报告、账本、验证器输出和 仅追加执行日志的审计包导出 - 针对模式、证据登记、类型化工具以及 验证器/自我纠正/报告行为的确定性单元测试 它不实现任意 shell 执行或 Web UI。 ## 本地设置 使用 Python 3.10 或更新版本。在本机上,解释器为 `python3`。建议使用 虚拟环境,因为某些 Linux 发行版会阻止直接的 系统级 `pip` 安装。 ``` python3 -m venv .venv . .venv/bin/activate python -m pip install -e '.[test]' ``` 运行测试套件: ``` python3 -m pytest -q ``` 如果使用本机已有的系统包进行免安装检出,请在 CLI 命令前加上 `PYTHONPATH=src`。 ## 演示证据登记 登记内置的演示证据夹具: ``` python -m sift_crs demo examples/demo_evidence.txt --case-id case-001 --analysis-root analysis ``` 免安装等效命令: ``` PYTHONPATH=src python3 -m sift_crs demo examples/demo_evidence.txt --case-id case-001 --analysis-root analysis ``` 预期的第 2 阶段输出: ``` analysis/ case-001/ evidence_ledger.json execution_log.jsonl ``` 显式登记任何本地证据文件: ``` python -m sift_crs register-evidence /path/to/evidence.bin --case-id case-001 --analysis-root analysis --evidence-id ev-disk01 ``` 登记过程会读取证据字节以计算 SHA-256 和文件大小。它不会 写入证据路径。可变的项目输出保存在选定的 分析根目录下。 ## 验证器演示 运行第 4 阶段的验证器演示: ``` PYTHONPATH=src python3 -m sift_crs verifier-demo examples/demo_evidence.txt --case-id case-001 --analysis-root analysis --evidence-id ev-demo ``` 演示会登记证据,运行类型化的 `mock_analyze_prefetch` 工具,写入 一个从 Prefetch 执行输出中过度声称持久性的候选发现, 并确定性地将其降级。预期输出包括: ``` analysis/ case-001/ evidence_ledger.json execution_log.jsonl findings.json verifier_report.json tool_runs/ ``` 验证器决策会作为 `finding_verifier_decision` 事件追加到 `execution_log.jsonl` 中。被拒绝的发现不可报告; 面向报告的发现仅限于 `verified`、`downgraded` 或 `needs_human_review`。 ## 真实的 EVTX 解析器 `parse_evtx_real` 是一个围绕 python-evtx 的 `evtx_dump` 构建的类型化只读封装。它只接受已注册的 `evidence_id`;原始证据路径会 被输入 schema 拒绝。 该封装会在 `PATH` 中查找 `evtx_dump` 或 `evtx_dump.py`,然后是在 `~/.local/bin`,最后是 `/usr/local/bin/evtx_dump.py`。它以 只读子进程的方式针对已注册的证据路径运行该二进制文件,并仅在案例分析的 `tool_runs/` 目录下写入规范化的 JSON。 示例: ``` PYTHONPATH=src python3 -m sift_crs register-evidence /cases/security.evtx --case-id case-001 --analysis-root analysis --evidence-id ev-security ``` ``` PYTHONPATH=src python3 - <<'PY' from pathlib import Path from sift_crs.evidence import CaseStore from sift_crs.tools import builtin_tool_registry store = CaseStore(Path("analysis"), "case-001") tool_run = builtin_tool_registry().run( "parse_evtx_real", {"case_id": "case-001", "evidence_id": "ev-security"}, store, ) print(tool_run["status"]) print(tool_run["output_path"]) PY ``` 解析器输出包含 `artifact_type`、`evidence_id`、源 SHA-256、 记录数,以及带有 EventID、channel、provider、timestamp 和源记录元数据的规范化记录。如果 `evtx_dump` 缺失、文件为空、 输入不是 `.evtx`,或者子进程失败,类型化的工具运行将返回 `status: failure`,并写入一个结构化的失败工件,而不是崩溃。 ## 自我纠正演示 运行第 5 阶段的有限自我纠正演示: ``` PYTHONPATH=src python3 -m sift_crs self-correction-demo examples/demo_evidence.txt --case-id case-001 --analysis-root analysis --evidence-id ev-demo --max-iterations 2 ``` 演示会登记证据,运行 `mock_analyze_prefetch`,写入一个 从 Prefetch 输出中过度声称持久性的候选发现,让验证器 将其降级,然后运行针对性的 `mock_parse_registry_run_key` 后续操作。 只有在该类型化工具输出存在之后,发现才会被重新验证。 预期的第 5 阶段输出包括: ``` analysis/ case-001/ evidence_ledger.json execution_log.jsonl findings.json verifier_report.json correction_trace.json tool_runs/ ``` 纠正操作会作为 `self_correction_iteration` 事件追加到 `execution_log.jsonl` 中。每个事件记录迭代索引、 触发器、选定的类型化操作和结果。严格的 `--max-iterations` 上限 可防止失控的纠正尝试。 ## 报告生成 在验证器或 自我纠正输出存在后,生成第 6 阶段的结构化调查报告: ``` PYTHONPATH=src python3 -m sift_crs report --case-id case-001 --analysis-root analysis --reports-root reports ``` 预期输出: ``` reports/ case-001/ final_report.md ``` 报告是叙述性的,而不是原始的执行日志。它包括: - 执行摘要 - 仅基于 `verified` 和 `downgraded` 发现构建的结构化调查叙述 - 带有 evidence-ID 链接和选定审计日志链接的发现表 - 自我纠正摘要 - 包含 ID、路径、SHA-256、大小和只读意图的证据附录 被拒绝的发现会从报告结论中排除。 ## 审计包导出 将案例审计工件打包到一个导出目录中: ``` PYTHONPATH=src python3 -m sift_crs audit-package --case-id case-001 --analysis-root analysis --reports-root reports --export-root exports ``` 预期输出: ``` exports/ case-001/ audit_package/ evidence_ledger.json execution_log.jsonl findings.json verifier_report.json correction_trace.json final_report.md ``` 导出命令首先重新生成 `final_report.md`,追加一个 `audit_package_exported` 事件,然后将仅追加的执行日志复制到 包中。 ## Schema 示例 `examples/*.json` 中的示例针对 `schemas/` 中的 schema 进行验证。 单元测试使用 `jsonschema` 执行此验证。
标签:EVTX解析, Python, 安全规则引擎, 数字取证, 无后门, 自动化脚本, 逆向工具