AbhinashBadugu/SANS---Find-Evil-_-AI-Hackathon

GitHub: AbhinashBadugu/SANS---Find-Evil-_-AI-Hackathon

一款运行在 SANS SIFT 工作站上的自主 DFIR Agent,通过只读的 MCP 取证工具边界和确定性规则引擎,将多主机入侵调查转化为零幻觉、带完整证据引用的可复现事件报告。

Stars: 0 | Forks: 0

# Find Evil! — 自主事件响应 Agent 一个自主的 DFIR Agent,它以机器速度对多主机入侵进行分类,并 生成一份**引用详尽、可复现的事件报告 — 且绝不产生幻觉。** 它 驱动一个**只读取证 MCP 服务器**(Volatility 3, The Sleuth Kit, Plaso, EZ Tools, bulk_extractor, YARA),将数千行原始工具输出转化为 结构化的叙述,其中**每一项发现都引用了其来源的确切工件。** 专为 SANS / Protocol SIFT **Find Evil!** 黑客松构建。已在 4 主机的 **SRL-2015** 案例上进行了端到端验证(磁盘 + 内存)。 ## 核心成果 — 准确率对比经验证的标准答案 根据 **`oracle_v2`**(10 个基于证据裁决的攻击里程碑)进行确定性评分 — 与原生的 Claude 基线进行同口径对比: | 指标 | 原生基线 | **本 Agent** | |--------|----------------|----------------| | **召回率** | 0.90 | **1.00 — 全部 10 个里程碑** | | **幻觉**(无引用/未解析的声明) | ~1 次 / 运行 | **0** | | **错误结论**(如错误的感染源) | — | **0** | | **引用质量** | 部分 | **100% 的发现包含 `{tool, artifact, provenance_id}`** | 几秒钟内即可复现(确定性,无需 LLM,**无需 API 密钥**) — 见[快速开始](#quick-start-for-judges)。 完整的自我评估 — 误报、遗漏的工件、证据完整性与篡改 测试,以及诚实的局限性说明 — 在 **[ACCURACY_REPORT.md](ACCURACY_REPORT.md)** 中。 ## 核心理念:代码决策,LLM 仅负责叙述 防幻觉保证是**架构层面的,而非依赖于提示词:** - **Agent 没有 shell,也没有直接的证据访问权限。** 每一项证据操作都是一次 有类型的 MCP 工具调用;只读工具的菜单*本身就是*安全边界。 - **两个独立的根目录,且经过路径验证:** `EVIDENCE_ROOT`(只读)与 `CASE_ROOT` (所有输出)。服务器在物理层面无法写入或执行证据。 - **置信度、关联、去重和矛盾检测都是确定性的 Python** (`agent/dfir_agent/rules/`) — 绝不依赖模型的判断。 - **每一项发现都引用了一个 `provenance_id`**,该 ID 会在不可变的日志中解析,否则 引用检查器将**剔除该发现。** 杜绝未引用的声明。 - LLM 唯一的工作是将结构化的事实转化为文本。它无法凭空捏造 工件,无法更改置信度等级,也无法触碰证据。 相同的证据 + 相同的代码 → 每次运行都是相同的 10/10。 ## 架构 ![自主 DFIR Agent 架构](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/b25f9c9238143753.png) 用户 → 本地 Web UI → **DFIR Agent / 编排器**(LLM 引导的推理 + **确定性**工作流节点) → **只读的 MCP 安全边界**(有类型的工具,*无 shell*,*不对证据进行写入*,路径经过验证,来源被记录) → 经过法庭检验的 **SIFT** 工具 → **只读证据**。LLM 负责解释案例,但**绝不直接 访问原始证据**;每一次输出都是由来源账本支撑的**结构化、带引用的发现**。 ## 仓库结构 ``` ├─ install.sh One-command setup (venv + deps + tool preflight + tests) ├─ requirements.txt Pinned Python dependencies ├─ webui/ Conversational UI (localhost:8077) — chat, trigger runs, verify citations ├─ agent/ Autonomous DFIR agent — pipeline nodes + deterministic rules + scorer │ ├─ eval/ Entry points: run_from_evidence, run_case, score_profile │ └─ validation_profiles/srl2015.yml The graded answer key (ported from oracle_v2) ├─ mcp_server/ 28 typed, read-only forensic tools (the evidence boundary) └─ LICENSE MIT ``` ## 依赖项 **1. Python 3.10+** 以及 [`requirements.txt`](requirements.txt) 中的包 (`install.sh` 会将这些安装到本地的 `.venv` 中):`anthropic`, `mcp`, `pydantic`, `starlette`/`uvicorn` (UI), `PyYAML`, `pefile`, `pytest`。 在 Debian/Ubuntu 上,请先确保安装了 venv 构建器: `sudo apt install -y python3-venv`(或对应版本的 `python3.12-venv`)。`install.sh` 会检查它,如果缺失会提示您。 **2. 系统取证工具** — 该 Agent *直接调用经过法庭验证的二进制文件*;它不会 重新实现它们。这些工具随 **SANS SIFT** 一起提供;`install.sh` 会运行预检, 报告任何缺失的工具: | 功能 | 二进制文件 | |---|---| | 内存取证 | Volatility 3 (`vol`) | | 时间线 | Plaso (`log2timeline.py`, `psort.py`) | | 文件系统 / 挂载 | The Sleuth Kit (`fls`, `icat`, `ifind`), `ewfmount` | | Carving | `bulk_extractor` | | Windows 工件 | 通过 .NET (`dotnet`) 运行的 EZ Tools — MFTECmd, EvtxECmd, RECmd… | | IOC 扫描 | `yara` | 如果缺少某个工具,需要它的步骤将被**跳过并在报告中标记** — 绝不会伪造。 **3. Anthropic API 密钥 — 可选;运行或评估分析结果不需要此密钥。** 完整的流水线、带引用的单主机及跨主机报告、来源账本, 以及确定性评分器均可在**无 API 密钥**的情况下运行。密钥仅会增加两个*附加的* 额外功能:报告中执行摘要的 LLM 叙述文本(无论哪种方式,事实和引用 都是相同的 — 只是摘要被标记为 `_(deterministic)_` 还是 `_(LLM-narrated)_`),以及对话式聊天 UI。**评委可以直接在终端运行并评估整个案例,无需密钥。** 如果您需要聊天 UI,请将您自己的密钥放入 `webui/.env` 中。 ## 快速开始(供评委使用) ``` git clone && cd find-evil ./install.sh # venv + deps + tool preflight + 158 unit tests source .venv/bin/activate # 分析和评分(以下步骤 1-3)不需要 Anthropic API key。 ``` ### 1. 运行完整分析 — **无需 API 密钥** 为其提供磁盘/内存镜像;它会引导整个流水线(清单 → 哈希 → 挂载 → 内存 + 磁盘 + 时间线 → 关联 → 跨主机报告),完全使用经过法庭验证的 工具。它会自动分类磁盘和内存,并根据文件名按主机分组;所有内容 都保留在一个只读的 `EVIDENCE_ROOT` 下。**这是评委在终端运行的路径 — 不需要 Anthropic 密钥。** ``` cd agent PYTHONPATH="$PWD/../mcp_server:$PWD" python -m eval.run_from_evidence \ --case srl2015 \ --evidence-root /path/to/SRL-2015 \ --host xp-tdungan disk=/path/xp-tdungan-c-drive.E01 memory=/path/xp-tdungan-memory-raw.001 \ --host win2008R2-controller disk=/path/win2008R2-controller-c-drive.E01 memory=/path/win2008R2-controller-memory-raw.001 \ --host win7-64-nfury disk=/path/win7-64-nfury-c-drive.E01 memory=/path/win7-64-nfury-memory-raw.001 \ --host win7-32-nromanoff disk=/path/win7-32-nromanoff-c-drive.E01 memory=/path/win7-32-nromanoff-memory-raw.001 # 添加 --dry-run 以预览 plan + manifest 而不运行 ``` 缺失或试图逃逸出 `EVIDENCE_ROOT` 的路径将被**拒绝**。对于不可读的 证据,Agent 将**不产生任何发现并披露所有信息缺口** — 绝不会提供捏造的 结果。(在没有密钥的情况下,报告摘要是确定性的;密钥仅增加可选的叙述文本。) ### 2. 将其与标准答案进行评分 — **无需 API 密钥** 确定性的,无需 LLM,无需网络 — 根据答案 (`validation_profiles/srl2015.yml`,从 `oracle_v2` 原样移植)对本次运行的发现和报告进行评分: ``` cd agent PYTHONPATH="$PWD/../mcp_server:$PWD" python -m eval.score_profile \ --case srl2015 --case-root /path/to/CASE_ROOT \ --profile validation_profiles/srl2015.yml # 写入 /agent/validation_score.{md,json} ``` ### 3. 重新运行测试 — **无需 API 密钥** ``` cd agent && PYTHONPATH="$PWD/../mcp_server:$PWD" python -m pytest -q # 145 rule/scoring tests cd ../mcp_server && PYTHONPATH="$PWD" python -m pytest -q # 13 path-safety / allowlist tests ``` ### 4. (可选)对话式 UI — 唯一需要密钥的部分 一个用自然语言探索案例的聊天界面。需要在 `webui/.env` 中放入**您自己的** Anthropic 密钥(仪表板/报告视图在没有密钥的情况下依然可用;只有聊天框 会调用模型)。 ``` PYTHONPATH="$PWD" python -m webui.server # → open http://127.0.0.1:8077 ``` 询问*“谁是感染源,你是怎么知道的?”* — 每一个回答都会引用真实的 `provenance_id`,并且*“删除证据”*在设计上会被拒绝。聊天 LLM 仅充当 编排器/解释器:只读工具,无 shell。 ## 使用的数据集 / 证据 提交的内容已在 **SANS SRL-2015** 入侵案例上验证 — 这是一个位于 `shieldbase.local` 域(子网 `10.3.58.0/24`)中的 4 主机 Windows 网络,每台主机都被捕获为**磁盘镜像 (`.E01`) + 物理内存镜像 (`.001` raw)**: | 主机 | IP | 角色 | 操作系统 | |---|---|---|---| | `xp-tdungan` | 10.3.58.7 | 工作站(感染源) | Windows XP SP3 | | `win7-32-nromanoff` | 10.3.58.5 | 工作站 | Windows 7 x86 | | `win7-64-nfury` | 10.3.58.6 | 工作站(数据外发暂存) | Windows 7 x64 | | `win2008R2-controller` | 10.3.58.4 | 域控制器 | Windows Server 2008 R2 | 证据镜像**不**包含在此仓库中(因为体积和授权原因)。通过 `--evidence-root` / 上述的主机标志 提供您自己的磁盘+内存镜像 — 该流水线是 与具体案例无关的,可运行于任何磁盘 (`.E01`) + 内存镜像集。证据被严格视为 **只读**(FUSE `ewfmount`,偏移量为 0 的 NTFS);该架构无法对其进行修改。 Agent 必须重建(并依据其进行评分)的攻击链:在 `tdungan` 上的 Java 偷渡式攻击 → `httppump` RAT + `spinlock` 植入 → Run-key 持久化 → 凭据窃取 → PsExec 横向移动至 DC → 在 `nfury` 上通过 `system4.rar` 外发数据 — 外加一个植入的 良性服务,Agent **绝不能**将其标记(即自我纠错测试)。 📂 **详细的数据集文档** — 标准答案 (`oracle_v2`)、SIFT 基线, 以及 Agent 针对 SRL-2015 **和** SRL-2018 的评分结果 — 位于 **[`dataset-documentation/`](dataset-documentation/)** 中。 ## 运行内容及结果 对所有 4 台主机进行的一次**从零开始**的运行(无缓存的工件 — 每台主机都进行了完整的 Plaso 构建): - **547+ 次取证工具执行**,每次都记录在不可变的 `provenance.jsonl` 中。 - 生成了 `CASE_REPORT.md`(跨主机活动)+ 4 份带引用的单主机报告 + `case_summary.json`。 - 针对 `oracle_v2` 评分为 **10/10 里程碑,召回率 1.00,0 幻觉,0 错误结论** (`validation_score.md`)。 - 捕获了完整的时间戳执行和工具日志,用于审计追踪。 感染源 (`tdungan`)、`httppump`/`spinlock` 植入、针对 DC 的 PsExec 横向移动、 `system4.rar` 数据外发,以及良性服务的自我纠错均已 恢复并单独引用。 ## 输出(按案例,位于 `CASE_ROOT` 下) - `hosts//agent/_report.md` — 带引用的单主机报告 - `CASE_REPORT.md` — 跨主机活动(感染源 → 扩散) - `provenance.jsonl` — 不可变的证据审计账本(每次工具调用 + 命令) - `agent/validation_score.{md,json}` — 针对 `oracle_v2` 的召回率 + 引用质量 ## 28 个 MCP 工具(只读证据边界) | 领域 | 工具 | |------|-------| | 完整性 | `hash_evidence`, `hash_file`, `compare_hashes_across_hosts`, `verify_ewf` | | 内存 | `run_volatility_plugin` (10 个白名单插件), `carve_network_artifacts` | | 磁盘 (无需管理员权限) | `open_ewf`, `close_ewf`, `inspect_disk`, `extract_artifacts` | | 解析器 | `parse_mft`, `parse_registry`, `parse_evtx`, `parse_shimcache`, `parse_evt_legacy` | | 注册表 / 配置 | `parse_reg_export`, `extract_c2_from_registry` | | PE 与 Dropper 分诊 | `extract_strings`, `extract_pe_metadata`, `detect_pyinstaller`, `extract_pdb_paths`, `extract_embedded_urls` | | Carving | `carve_files` | | 浏览器 / Java | `parse_java_cache` | | 归档 | `extract_archive` | | 时间线 | `generate_timeline`, `filter_timeline` | | 回读 | `read_artifact` | 不存在 shell 工具;命令是作为 argv 列表以 `shell=False` 方式构建和运行的。每次运行 (无论成功、失败还是拒绝)都会在 `provenance.jsonl` 中追加一行。 ## 适用范围 / 诚实声明 已在 **SRL-2015(4 台主机)** 上进行了验证和调优尚未证明能推广至未见过的案例 (SRL-2018 是延伸目标)。Agent 只能发现它有对应规则的内容 — 在 面对新型攻击时,人类依然占据优势。工具执行(尤其是 Plaso)占据了绝大部分运行时间 (从零开始完整运行 4 台主机大约需要 45–90 分钟);审查和评分仅需几秒钟。 **迈向全面企业覆盖的路线图** — 实时/分诊数据以及 **Linux、macOS 和 网络设备** Agent(OS/设备系列分析器架构已存在于代码中; 扩展只需添加更多有类型的只读工具 + 工件解析器) — 位于 **[AGENT_CAPABILITY_EXPANSION_REPORT.md](AGENT_CAPABILITY_EXPANSION_REPORT.md)** 中。 ## 许可证 MIT — 见 [LICENSE](LICENSE)。
标签:AI智能体, DLL 劫持, MCP, 大语言模型, 数字取证, 自动化应急响应, 自动化脚本, 逆向工具