brockbeck7/huntbot

GitHub: brockbeck7/huntbot

一个基于本地大模型的自主式 SOC 威胁狩猎工具,用自然语言驱动日志查询、MITRE 映射和自动补救,全程数据不出环境。

Stars: 0 | Forks: 0

# HuntBot — 自主式 SOC AI 分析师 [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![LLM: Any OpenAI-compatible](https://img.shields.io/badge/LLM-OpenAI--compatible-orange)](https://ollama.com/) ## 概述 HuntBot 是一个用 Python 构建的自主式 SOC 分析师。只需输入一个简明的英文威胁狩猎问题;它就会自主构建查询上下文,检索相关的日志数据,选择合适的本地 LLM,运行结构化的威胁狩猎,并输出包含 IOC、MITRE 技术映射以及针对 Microsoft Defender for Endpoint 的可选补救措施的可行性调查结果。 无需 OpenAI 账户。任何日志数据都不会离开您的环境。 ### 工作原理 ``` Analyst question (natural language) │ ▼ ┌──────────────────┐ │ Round 1 LLM │ Small, fast model translates NL → structured query context │ (tool call) │ (table, fields, time window, device/user filters) └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Guardrails │ Validates table, fields, lookback, row count, model └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Log Source │ mock (built-in IOCs) | file (JSONL export) | azure (live KQL) └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Round 2 LLM │ Larger model hunts for anomalies, maps MITRE, extracts IOCs │ (threat hunt) │ Returns strict JSON findings schema └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Remediation │ Isolate device, block IP, disable account (MDE API or dry-run) └──────────────────┘ ``` ## 功能特性 - **100% 本地化** — 连接到 Ollama、LM Studio、vLLM 或任何兼容 OpenAI 的服务器 - **两轮自主流水线** — 专用模型分别用于查询构建和深度分析 - **双重工具调用策略** — 原生 `tool_choice="required"`,并为不支持该特性的模型提供 JSON 回退机制 - **三种日志后端** — 内置包含真实 IOC 的模拟数据、JSONL 文件导出,或通过 KQL 连接实时的 Azure Monitor / Microsoft Sentinel - **六种日志表架构** — DeviceLogonEvents、DeviceProcessEvents、DeviceNetworkEvents、DeviceFileEvents、SigninLogs、EmailEvents - **MITRE ATT&CK 映射** — 调查结果包含来自 ATT&CK 框架的技术 ID - **安全护栏** — 表/字段允许列表、14 天回溯上限、5 万行上限、上下文窗口安全检查 - **自主补救** — MDE 隔离、IP 封禁、账户禁用(默认为试运行模式;配置 Azure AD 凭证后可实际执行) - **持久化** — 调查结果附带 UTC 时间戳追加到 `threats.jsonl` - **`--autonomous` 模式** — 跳过确认提示,适用于自动化流水线 ## 快速开始 ### 前置条件 - Python 3.10+ - [Ollama](https://ollama.com/) (或 LM Studio / vLLM) ### 1. 克隆并安装 ``` git clone https://github.com//huntbot.git cd huntbot pip install -r requirements.txt ``` ### 2. 拉取模型 ``` ollama pull llama3.1:8b # Round 1 — query context (fast) ollama pull qwen2.5:14b # Round 2 — threat hunt (default) ollama serve ``` ### 3. 运行狩猎 ``` # 交互式 prompt python main.py # 内联 question python main.py "Any brute force attempts on WIN-DC-01 in the last 12 hours?" # 跳过 remediation 确认 python main.py "Lateral movement from WORKSTATION-07?" --autonomous ``` 默认的 `LOG_BACKEND=mock` 模式针对植入了 IOC 的合成日志数据运行,因此流水线可以立即工作——无需连接 SIEM。 ## 配置 将 `.env.example` 复制到 `.env` 并设置您需要的变量: ``` cp .env.example .env ``` | 变量 | 默认值 | 描述 | |---|---|---| | `LOCAL_LLM_BASE_URL` | `http://localhost:11434/v1` | LLM 服务器 endpoint | | `LOCAL_LLM_API_KEY` | `not-needed` | API 密钥(Ollama 不需要) | | `LOG_BACKEND` | `mock` | `mock` \| `file` \| `azure` | | `LOCAL_LOG_DIR` | `./logs` | JSONL 日志文件的目录(文件后端) | | `AZURE_WORKSPACE_ID` | — | Azure Log Analytics 工作区 ID | | `AAD_TENANT_ID` | — | Azure AD 租户 ID(Sentinel + MDE 补救) | | `AAD_CLIENT_ID` | — | Azure AD 应用注册客户端 ID | | `AAD_CLIENT_SECRET` | — | Azure AD 应用注册密钥 | ## 日志后端 ### Mock(默认) 无需设置。生成带有真实植入 IOC 的合成日志行: | 表 | 植入的威胁 | |---|---| | DeviceLogonEvents | 来自 `203.0.113.77` 的暴力破解(15 次失败 → 成功) | | DeviceProcessEvents | `winword.exe` → `powershell -enc` → `certutil` 下载链 | | DeviceNetworkEvents | 每 60 秒向 `203.0.113.77:8443` 发送 C2 信标 | | DeviceFileEvents | 大批量 `.locked` 文件重命名(勒索软件) | | SigninLogs | 不可能旅行:5 分钟内从纽约移动到哈萨克斯坦 | | EmailEvents | 来自 `micros0ft-support.com` 的钓鱼邮件,未通过 SPF/DKIM/DMARC | ### 文件 将任何 SIEM 的日志导出为 JSON Lines 并放入 `./logs/` 中: ``` logs/ DeviceLogonEvents.jsonl DeviceProcessEvents.jsonl SigninLogs.jsonl ... ``` 每一行必须是一个有效的 JSON 对象。字段名应与 `modules/guardrails.py` 中定义的 schema 匹配。 ``` export LOG_BACKEND=file export LOCAL_LOG_DIR=./logs python main.py "Any suspicious logon activity in the last 24 hours?" ``` ### Azure Monitor / Microsoft Sentinel(实时) 在 `requirements.txt` 中取消 Azure 包的注释,安装它们,并配置 Azure 环境变量: ``` pip install azure-identity azure-monitor-query export LOG_BACKEND=azure export AZURE_WORKSPACE_ID= export AAD_TENANT_ID= export AAD_CLIENT_ID= export AAD_CLIENT_SECRET= python main.py "Password spray against any account in the last 6 hours?" ``` Azure 后端在每次调用时构建并运行针对您实时工作区的 KQL 查询。 ## 模型配置 模型在 `modules/model_management.py` 中配置。添加本地服务器中可用的任何模型: ``` MODELS = { "llama3.1:8b": {"context_window": 128_000, "good_for": "fast tool-calling"}, "qwen2.5:14b": {"context_window": 32_000, "good_for": "balanced reasoning (default)"}, "mistral-nemo:12b": {"context_window": 128_000, "good_for": "long-context fallback"}, # Add your own: "deepseek-r1:14b": {"context_window": 64_000, "good_for": "strong reasoning"}, } TOOL_CALL_MODEL = "llama3.1:8b" # Round 1 DEFAULT_HUNT_MODEL = "qwen2.5:14b" # Round 2 ``` HuntBot 根据估算的 prompt token 自动选择狩猎模型,当默认模型的上下文窗口太小时,会回退到大型上下文模型。 ## 调查结果 Schema 由第二轮 LLM 生成的每个调查结果都遵循以下 schema: ``` { "title": "Brute Force Success — svc_backup from 203.0.113.77", "severity": "High", "confidence": "High", "summary": "15 failed logon attempts followed by a successful authentication ...", "mitre": ["T1110.001"], "iocs": { "ips": ["203.0.113.77"], "hosts": ["WIN-DC-01"], "users": ["svc_backup"], "processes": [], "files": [], "hashes": [] }, "evidence_row_ids": [0, 1, 2, 15], "recommended_actions": [ "Reset the svc_backup credential immediately", "Block 203.0.113.77 at the perimeter firewall", "Review all sessions authenticated as svc_backup in the last 24h" ] } ``` 所有调查结果都会附带 UTC `_detected_at` 时间戳追加到 `threats.jsonl` 中。 ## 补救措施 对于严重性为 `High` 或 `Critical` 且置信度为 `Medium` 或 `High` 的调查结果,HuntBot 提供补救措施: | 操作 | 实现方式 | 要求 | |---|---|---| | 隔离设备 | MDE API `/machines/{id}/isolate` | AAD 凭证 | | 封禁 IP | 存根(可扩展至您的防火墙) | — | | 禁用账户 | 存根(可扩展至 Azure AD / AD) | — | 在未配置 AAD 凭证的情况下,所有操作都将在**试运行模式**下运行,并记录它们将执行的操作。 使用 `--autonomous` 跳过交互式确认提示: ``` python main.py "Active C2 beaconing?" --autonomous ``` ## 项目结构 ``` huntbot/ ├── main.py # 9-step orchestrator (entry point) ├── requirements.txt ├── .env.example # Environment variable template ├── .gitignore └── modules/ ├── __init__.py ├── keys.py # Environment-driven configuration ├── model_management.py # Model catalog + auto-selection ├── prompt_management.py # All prompts, tool schemas, table guidance ├── guardrails.py # Input validation and safety limits ├── log_source.py # Mock / file / Azure log backends ├── llm_client.py # OpenAI-compatible client (tool-call + JSON fallback) ├── executor.py # Remediation actions (MDE, stubs) └── utilities.py # ANSI output, display helpers, JSONL persistence ``` ## 扩展 HuntBot **添加新的日志表** — 在 `guardrails.py` 中添加表名和允许的字段,在 `prompt_management.py` 中添加狩猎指南,在 `log_source.py` 中添加模拟生成器。 **添加新的日志后端** — 在 `log_source.query_logs()` 中添加一个新分支,并为 `LOG_BACKEND` 添加相应的环境变量值。 **添加新的补救措施** — 在 `executor.py` 中添加一个函数,并从 `consider_remediation()` 中调用它。 **使用不同的 LLM 提供商** — 将 `LOCAL_LLM_BASE_URL` 更改为任何兼容 OpenAI 的 endpoint。支持 LM Studio、vLLM、llama.cpp server、Groq 等。 ## 灵感来源 根据 Josh Madakor 的 [Agentic Cybersecurity AI SOC Analyst 课程](https://www.youtube.com/) 中的架构构建,经过重新工程设计,可通过任何兼容 OpenAI 的服务器完全在本地 LLM 上运行。 ## 许可证 MIT — 详情请参阅 [LICENSE](LICENSE)。
标签:AI安全, AI智能体, AI风险缓解, Azure Sentinel, Chat Copilot, Cloudflare, IOC, IP 地址批量处理, JSONL, KQL, LLM评估, LM Studio, MDE, Microsoft Defender for Endpoint, MITRE ATT&CK, Ollama, Python, SOAR, SOC分析师, vLLM, Web报告查看器, 人工智能, 入侵指标, 威胁情报, 子域名变形, 安全合规, 安全运营中心, 开发者工具, 开源安全工具, 异常检测, 无后门, 本地大模型, 用户模式Hook绕过, 端点安全防御, 网络代理, 网络安全, 网络安全审计, 网络映射, 自动化响应, 逆向工具, 逆向工程平台, 隐私保护