tjs24/ThIOClaw

GitHub: tjs24/ThIOClaw

ThIOClaw 是一个帮助安全团队以透明、可复现、可版本控制的方式构建和运行 LLM 驱动漏洞调查代理的框架。

Stars: 0 | Forks: 0

# ThIOClaw — 漏洞调查框架 ## 为什么选择 ThIOClaw? LLM 正在以加速的趋势被整合到检测与响应工作流中——但大多数团队将其作为**不透明的黑盒**采用。你无法检查其推理过程、重现判定结果、对逻辑进行版本控制,也无法评估代理是否真正改善了你的安全态势。 ThIOClaw 基于五项工程原则构建: | 原则 | ThIOClaw 如何实现 | |---|---| | **透明度** | 每次 LLM 工具调用、证据查找和判定结果都会记录在结构化的 JSONL 和 OpenTelemetry spans 中。可完整重构任何调查过程。 | | **可重复性** | 一级信号评分是**确定性的** pandas 数学运算——每次都是相同的输入,相同的输出。LLM 在可重现的基础*之上*进行推理。 | | **可配置性** | 信号规则、权重、判定阈值和漏洞利用链描述均为 YAML 文件。代理的 prompt 和工具是 Python 源代码。没有隐藏的控制面板。 | | **版本控制** | 检测逻辑、代理行为和信号规则全部存在于 Git 中。更改会产生清晰的 diffs。使用标准的工程工作流进行审查、批准和回滚。 | | **可衡量性** | 使用不同的模型、prompts 或工具配置运行相同的调查。将一级基准与二级 LLM 判定结果进行比较。Prometheus 指标会随时间跟踪代理的性能。 | **本项目专为希望在迈向 LLM 驱动的 SecOps 之旅中获得工程控制权和可观测性的安全团队而设计。** ## macOS 设置与快速入门 ### 1. 设置环境 ``` git clone https://github.com/tej-nik/ThIOClaw.git cd ThIOClaw python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ### 2. 配置 LLM(本地或云端) ThIOClaw 使用 [LiteLLM](https://github.com/BerriAI/litellm) 作为其控制平面,这意味着你可以接入**任何** LLM 提供商(Ollama、Anthropic、OpenAI、AWS Bedrock 等)而无需更改代码。 #### 选项 A:本地(Ollama) 为了完全的隐私,可以在你的 Mac 上本地运行 LLM: ``` ollama serve # Start the server ollama pull llama3.1:8b # Pull the default model ``` #### 选项 B:直接连接云端(Anthropic / OpenAI) 导出你的提供商 API key 并通过 `THIOCLAW_MODEL` 设置模型: ``` # Anthropic Claude 3.5 Sonnet export ANTHROPIC_API_KEY="sk-ant-..." export THIOCLAW_MODEL="claude-3-5-sonnet-20241022" # OpenAI GPT-4o export OPENAI_API_KEY="sk-proj-..." export THIOCLAW_MODEL="gpt-4o" ``` #### 选项 C:AWS Bedrock 身份验证使用 boto3 默认凭证链(环境变量、`~/.aws/credentials` profile 或 IAM role)。必须显式设置区域: ``` export AWS_REGION_NAME="us-east-1" export AWS_PROFILE="default" # or rely on env-var credentials export THIOCLAW_MODEL="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0" ``` #### 选项 D:Google Vertex AI 适用于 Vertex 上的 Claude 和 Gemini。需要 service-account 密钥文件: ``` export VERTEXAI_PROJECT="your-gcp-project" export VERTEXAI_LOCATION="us-central1" export GOOGLE_APPLICATION_CREDENTIALS="/abs/path/to/service-account.json" export THIOCLAW_MODEL="vertex_ai/gemini-1.5-pro" # 或:export THIOCLAW_MODEL="vertex_ai/claude-3-5-sonnet@20240620" ``` #### 选择代理框架 ThIOClaw 提供了两个并行的二级代理循环实现,可在每次运行时进行选择: ``` # 原生 LiteLLM tool-calling 循环(默认) export THIOCLAW_FRAMEWORK=litellm-direct # Strands SDK 循环(AgentCore 原生,多智能体原语,支持 MCP) export THIOCLAW_FRAMEWORK=strands ``` 这两个实现共享相同的提供商路由和判定契约。`openclaw-bench/models.yaml` 中的 `framework` 轴让你可以针对每个模型对它们进行并排比较。 ### 3. 运行调查 ``` # 使用本地样本数据的单一调查周期 python -m harness.orchestrator --raw-telemetry local --once # 调查特定 CVE python -m harness.orchestrator --cve CVE-2026-31431 --once # 持续监控循环(默认:每 300 秒) python -m harness.orchestrator --raw-telemetry local ``` ### 4. 预期结果 在执行过程中,代理可能会暂停并请求你的批准: ``` [ThIOClaw Agent] Proposing Query Execution: Rationale: The existing Q6 staging query missed /var/tmp paths... Performance Impact: Medium — scanning ~50,000 file events Query: SELECT * FROM file_events WHERE path LIKE '/var/tmp/%' Approve execution? (y/N): _ ``` 这就是**人机协同(HITL)**门控——代理会清楚地说明*为什么*需要该查询以及*成本是多少*,然后由你决定是否批准。 ## 遥测数据源 两个正交的轴决定了遥测数据的来源及其组织方式: **1. 数据位置** (`--raw-telemetry`) —— 框架从哪里读取事件: | 标志 | 来源 | 凭证 | |---|---|---| | `--raw-telemetry local` | `data/events.json` | 无 | | `--raw-telemetry s3` | 通过 `data/s3_manifest.json` 访问的 S3 存储桶 | `~/.aws/credentials` 指定的 profile | **2. 采集器格式** (`harness.yaml` 中的 `telemetry.event_source`) —— 框架将摄取哪种事件流格式: | 值 | 采集器 | 备注 | |---|---|---| | `osquery` (默认) | osquery `process_events`, `socket_events`, `kernel_module_events`, `file_events` 等 | 内置的示例数据 (`data/sample_events.json`) 即为此格式。所有六个 Q1-Q6 参考查询均针对此格式。 | | `auditd` | Linux 内核 auditd,通过 `auditctl` 规则 + `ausearch`/`auparse` 实现 | 通过 [`rules-emerging-threats/2026/Exploits/CVE-2026-31431/`](https://github.com/SigmaHQ/sigma/pull/6052) 中的 SigmaHQ 规则实现镜像覆盖。验证手册:[`runbooks/CVE-2026-31431_sigma_validation.md`](runbooks/CVE-2026-31431_sigma_validation.md)。 | | `both` | 两者的并集 | 适用于同时运行两种采集器的环境。数据平面与来源无关——它会对输入的任何 DataFrame 进行评分。 | 每个信号的来源支持在 `signals/.yaml` 中通过每条规则的 `supported_sources:` 进行声明。 ### S3 设置 1. 使用你的存储桶、区域和密钥路径编辑 `data/s3_manifest.json` 2. 使用指定的 profile 配置你的 `~/.aws/credentials` 3. 如果使用非默认 profile,请在 `harness.yaml` 中设置 `aws.profile_name` ## 项目结构 ``` ThIOClaw/ ├── CLAUDE.md # Comprehensive project guide & design rationale ├── README.md # This file ├── harness.yaml # Main harness configuration ├── targets.yaml # CVE investigation targets ├── requirements.txt # Python dependencies │ ├── data_plane/ # DATA PLANE — Modular investigation scripts │ └── cve_2026_31431.py # Deterministic pandas analysis (Q1–Q6) │ ├── scripts/ # CONTROL PLANE — LLM Agent │ ├── thioclaw.py # CLI entry point │ └── thioclaw_agent/ │ ├── agent.py # Agentic loop (Ollama + tool calling + HITL) │ ├── prompts.py # System prompt │ └── tools.py # Tool definitions + implementations │ ├── signals/ # Signal rule definitions (YAML) │ └── CVE-2026-31431.yaml # Rules, weights, verdict logic, LLM context │ ├── queries/ # Reference Detection Queries (e.g., SQL, KQL) │ └── CVE-2026-31431/ # Example query files │ ├── harness/ # Orchestrator engine │ ├── orchestrator.py # CLI + run loop + concurrent dispatch │ ├── config.py # Typed dataclasses from YAML │ └── ingester.py # CSV → SQLite inventory ingestion │ ├── observability/ # Instrumentation │ ├── logger.py # Thread-safe structured JSONL logger │ ├── metrics.py # Prometheus metrics via OpenTelemetry │ └── traces.py # OTel distributed tracing │ ├── data/ # Sample data (replace with real telemetry) │ ├── sample_events.json # 9 events simulating a full exploit chain │ ├── sample_inventory.csv # 8 workloads with mixed statuses │ └── s3_manifest.json # S3 config template (no secrets) │ ├── findings/ # Output: YAML findings + JSONL log (gitignored) ├── docs/ # Output: per-run Markdown + HTML reports ├── logs/ # Output: Structured JSONL logs (gitignored) └── tests/ # Unit tests (pytest) ``` ## 架构 ``` graph TD A["Inventory Telemetry (e.g. auditd/EDR)"] -->|Ingester| B["inventory.db (SQLite)"] C["Event Telemetry (Local/S3/API)"] -->|Data Plane| D["data_plane/.py"] B -->|vulnerable workloads| D D -->|"Deterministic queries (e.g. pandas)"| E["Tier 1: Deterministic Signal Scoring"] E -->|tier1.json| F["Tier 2: ThIOClaw LLM Agent"] F <-->|"HITL Approval Gates"| G(("Analyst Terminal")) F --> H["findings/*.yaml"] F --> I["docs/*.md + *.html"] style E fill:#ff8c00,color:#fff style F fill:#4488ff,color:#fff style G fill:#22aa44,color:#fff ``` ### 工作原理 1. **数据摄取** — 主机清单遥测数据被加载到 SQLite 中。匹配 `trigger_assessments`(例如 `vulnerable_or_not_confirmed_fixed`)的工作负载将被选中以进行调查。 2. **一级(数据平面)** — 模块化的 Python 脚本针对原始遥测事件运行确定性查询。每个查询都会检查特定的漏洞利用指标。信号使用可配置的权重进行评分,以产生确定性的判定结果:`exploited`、`suspicious`、`benign` 或 `inconclusive`。 3. **二级(控制平面)** — ThIOClaw LLM 代理接收一级结果和 CVE 的理论漏洞利用链。它关联证据,请求更深层次的遥测检查,并可以提出新的查询——但在执行之前必须通过终端获得**分析师的批准**。 4. **输出** — 调查结果以 YAML、Markdown 和 HTML 格式按运行持久化保存。所有事件均通过 OpenTelemetry 进行埋点监测。 ## 内置示例:CVE-2026-31431 ThIOClaw 内置了一个针对 **CVE-2026-31431**(Linux 内核 `algif_aead` 本地权限提升)的完整调查,包括模拟完整漏洞利用链的示例遥测数据。 | 查询 | 信号 | 权重 | 层级 | |---|---|---|---| | Q1 | 清单中加载了 `algif_aead` 模块 | 0.3 | Suspicious | | Q2 | 非特权用户打开 `AF_ALG` socket | 0.5 | Suspicious | | Q3 | 打开 `AF_ALG` 后发生 UID 提升 **(主要)** | 1.0 | **Exploited** | | Q4 | 来自非 root 父进程的 root shell | 0.9 | **Exploited** | | Q5 | `algif_aead` 模块加载事件 | 0.4 | Suspicious | | Q6 | 在 `/tmp`、`/dev/shm`、memfd 中进行漏洞利用暂存 | 0.6 | Suspicious | **判定逻辑:** 如果任何 exploited 层级的信号触发且总权重 ≥ 1.0,则为 `exploited`。如果总权重 ≥ 0.5,则为 `suspicious`。如果总权重 = 0,则为 `benign`。否则为 `inconclusive`。 **Auditd 形态覆盖** — 相同的漏洞利用链也由在 [SigmaHQ/sigma#6052](https://github.com/SigmaHQ/sigma/pull/6052) 中提交的三个 SigmaHQ 规则(AF_ALG socket 创建、`algif_aead` 模块加载、setuid 路径上的 splice 操作)覆盖。使用 [`runbooks/CVE-2026-31431_sigma_validation.md`](runbooks/CVE-2026-31431_sigma_validation.md) 针对实时的 audit 遥测数据进行重现和验证。 ## 可观测性 | 层级 | 实现 | Endpoint / 位置 | |---|---|---| | 结构化日志 | 线程安全的 JSONL 写入器 | `logs/agent_runs.jsonl` | | 指标 | OpenTelemetry → Prometheus | `http://localhost:9090/metrics` | | Traces | OpenTelemetry spans | stdout(默认)或 OTLP gRPC endpoint | ## 调查任意漏洞 ThIOClaw 被设计为**通用型**工具。只需三个步骤即可添加新的 CVE 目标: 1. **定义目标** — 在 `targets.yaml` 中添加一个条目,包含 CVE-ID、数据平面脚本模块路径和信号文件。 2. **配置信号** — 创建 `signals/.yaml`,包含加权规则,并在 `agent_context` 块中为 LLM 描述漏洞利用链。 3. **编写数据平面** — 创建 `data_plane/.py`,实现带有针对该漏洞遥测特征定制的 pandas 查询的 `run_investigation()` 函数。 请参阅 [CLAUDE.md](CLAUDE.md) 获取详细的说明和设计原理。 ## 运行测试 ``` pytest tests/ -v pytest tests/ -v --cov=harness --cov=observability --cov-report=term-missing ``` ## 许可证 详情请参阅 [LICENSE](LICENSE)。
标签:AI风险缓解, API集成, DLL 劫持, LLM代理, Python, 可观测性, 大语言模型, 安全运营, 扫描框架, 无后门, 用户代理, 自定义请求头, 逆向工具