# AutoIR_MCP

AutoIR_MCP 是一个基于 FastMCP 的 Linux 应急响应 MCP 服务。它通过 SSH 连接目标主机，向 MCP 客户端暴露用户、进程、网络、文件、WebShell、持久化、日志、容器和 Rootkit 排查工具。

> 工具结果用于辅助分析，最终结论仍需结合现场环境人工复核。

## 架构

```plain
AutoIR_MCP/
├── AutoIR_MCP.py              # 启动入口，运行 core.server:mcp
├── core/
│   ├── server.py              # FastMCP app、工具注册和取证工具
│   ├── prompts.py             # MCP instructions、工具分组和报告规范
│   ├── functions.py           # SSH 命令、SFTP、SafeLine、本地规则、IOC/格式化 helper
│   └── session.py             # SSH session 状态模型
├── config.json                # SafeLine 检测接口配置
├── extensions/                # HeMa、rkhunter 等本地资产
├── requirements.txt           # Python 依赖
└── README.md
```

## 安装与运行

```bash
pip install -r requirements.txt
python AutoIR_MCP.py
```

## 使用原则

AutoIR_MCP 只暴露纯 MCP 工具和工具结果，不提供任何预设排查路径。AI 客户端应根据用户目标、现场上下文和已有工具输出，自行决定调用哪个单个工具，并自行组织 IOC、时间线、攻击链和结论。

## 功能清单

### 基础与报告

- `get_ssh_client`：建立 SSH 会话。
- `check_ssh_session`：检查 SSH 会话是否可用。
- `close_ssh_client`：关闭当前 SSH 会话。
- `reset_session`：重置连接和会话状态。
- `shell`：在已连接的 SSH 目标主机执行命令，返回统一执行结果。
- `check_safeline`：检查 SafeLine WAF 检测能力。
- `get_system_info`：采集 hostname、内核、系统版本、时间和 uptime。
- `get_tool_inventory`：返回工具分类。
- `extract_iocs`：兼容分析工具；从文本提取 IP、域名、URL、路径和端口，支持 `limit` 控制每类数量。
- `generate_timeline`：兼容分析工具；从文本提取事件时间线。
- `analyze_attack_chain`：兼容分析工具；从文本生成攻击阶段表、攻击路径判断、IOC 和时间线数据。
- `generate_report`：兼容报告工具；优先基于结构化 `case`、`findings`、`timeline`、`iocs`、`answers` 渲染规范化报告，`extra_context` 仅作为旧调用兜底，支持 `output_mode='file'` 落盘避免返回截断。

### 文件、取证与 WebShell

- `stat_file`：读取远程文件元数据。
- `hash_file`：计算 md5、sha1 或 sha256。
- `profile_suspicious_file`：快速画像单个可疑文件，包含 stat、hash、file、预览、strings 和风险提示。
- `download_file`：下载远程文件到本地取证目录。
- `upload_file`：上传本地 `extensions/` 或 `downloads/` 内文件到目标主机。
- `collect_evidence_bundle`：采集系统、用户、进程、网络、服务、计划任务和日志摘要。
- `check_bin`：检查 `/usr/bin` 近期修改、权限和属主异常。
- `check_tmp`：列举 `/tmp` 下文件。
- `check_recent_files`：检查指定目录近期变更文件。
- `discover_webroots`：自动发现常见 Web 根目录和配置中的站点目录。
- `check_webshell`：扫描 webroot 中的疑似 WebShell。

### 用户与权限

- `check_home`
- `check_history`
- `check_passwd`
- `check_shadow`
- `check_sudoers`
- `check_ssh_keys`
- `check_auth_log`

### 进程

- `get_ps`
- `check_mine`
- `check_exec`
- `check_pid`
- `check_exe`
- `check_mount`
- `check_deleted_exe`

### 网络

- `get_localhost`
- `check_network`
- `check_listening_ports`
- `check_eth`
- `check_hosts`
- `check_dns_config`

### 后门与持久化

- `check_ld_so_preload`
- `check_env_preload`
- `check_alias`
- `check_cron`
- `check_user_crontabs`
- `check_at_jobs`
- `check_ssh`
- `check_ssh_wrapper`
- `check_inetd`
- `check_xinetd`
- `check_setuid`
- `check_startup`
- `check_profile`
- `check_rc`
- `check_fstab`
- `check_systemd_timers`
- `check_service_execstart`

### 服务、容器、日志与 Rootkit

- `list_services`
- `check_enabled_services`
- `check_recent_systemd_changes`
- `check_docker_containers`
- `check_container_mounts`
- `check_container_processes`
- `check_log`
- `check_web_logs_auto`
- `check_login_success`
- `check_login_fail`
- `RookitUpload`

## SafeLine 配置

编辑根目录 `config.json`：

```json
{
  "SafeLineWAF": {
    "Server": "https://check.ihk-one.top/"
  }
}
```

接口应接收 `input` GET 参数，命中恶意内容时返回 HTTP 403。离线环境可留空，工具会使用本地规则继续检测。

## 容错与安全

- SSH 命令统一返回状态、stdout/stderr、退出码、超时和截断标记。
- 常见检测提供 fallback，例如 `ss → netstat`、`ip → hostname -I`、`last/lastb → auth.log/secure`。
- SafeLine 不可用时自动降级到本地规则，并要求报告中说明。
- 大日志默认只分析最近 `max_lines` 行。
- WebShell 扫描限制文件数量、单文件大小，并阻断 tar 路径穿越和链接逃逸。
- 可疑文件画像只读取限定头部和限定 strings 片段，不整文件输出。
- 兼容分析工具会把工具输出归一为 `status/result/data/error/meta` 结构；兼容报告工具返回可读报告文本，直接检测工具仍优先保持简洁可读。
- 所有工具必须区分“未发现明显异常”和“检测失败”。

## AI 客户端分析与兼容报告工具

默认设计是纯工具采证：MCP 工具返回主机证据，IOC、时间线和攻击链由 AI 客户端根据提示词自行组织。用户提供 IP、账号密码、入口说明、靶机信息、CTF 题目或应急响应任务时，AI 客户端不得只根据题面直接回答，必须先调用 `get_ssh_client` 建立 SSH 会话。`generate_report` 是调查结束、交付结论或用户要求总结前必须调用的最终汇总工具，用于把已有工具证据整理为规范化报告。

最终汇总报告会输出 banner、案件背景/摘要、检测结果表、IOC 摘要、时间线摘要、攻击流程分析、风险分析、处置原则和 AI 编排说明。分析只做证据化阶段判断，证据不足时必须标注待检测或需人工复核，不编造完整攻击链。

常用参数语义：

- `generate_report(case=...)`：结构化案件背景，建议包含 `title`、`target`、`system`、`webroot`。
- `generate_report(findings=...)`：结构化检测结论列表，固定字段为 `item`、`finding`、`risk`、`evidence`；检测结果表直接由该 schema 渲染，不再靠长文本猜测。
- `generate_report(timeline=...)`：结构化时间线列表，建议字段为 `time`、`event`、`source`；也可直接传 `generate_timeline` 的工具结果。
- `generate_report(iocs=...)`：结构化 IOC 字典，支持 `ips`、`domains`、`urls`、`paths`、`ports`；也可直接传 `extract_iocs` 的工具结果。
- `generate_report(answers=...)`：专项题目、CTF 或调查问答的结构化答案，支持字典或 `question/answer` 列表。
- `generate_report(output_mode=...)`：默认 `inline`，保持旧版完整 markdown 返回；`preview` 返回短预览；`file` 写入 `downloads/reports/<timestamp>/report.md`，并在 `result` 返回可直接展示的短报告、完整报告路径和末尾答案；`both` 同时返回完整报告和交付预览。
- `generate_report(extra_context=...)`：兼容旧调用的兜底摘要字段；不要直接传入大段原始日志，应先 `raw_log -> filter/slice -> structured_events/findings -> report`。
- `generate_report(report_profile=...)`：调查结束前必须调用；`standard`、`executive`、`technical`、`handoff` 仅影响报告表达侧重点。
- `generate_report(focus=...)`：声明关注方向，例如 Web、账户、持久化、挖矿；只影响报告聚焦文本，不代表已确认风险。
- `generate_report(max_findings=..., max_timeline_events=..., max_iocs_per_type=..., evidence_limit=...)`：只控制输出密度，不改变原始证据。
- `generate_report(include_iocs=False)`：只关闭报告里的 IOC 摘要展示。
- `generate_report(include_timeline=False)`：只关闭时间线摘要章节。
- `generate_report(include_next_tools=...)`：兼容参数；无论取值如何，MCP 服务都不预设后续工具、排查路径或固定顺序。
- `extract_iocs`、`generate_timeline`、`analyze_attack_chain` 是中间分析工具；`generate_report` 是最终交付前的汇总工具。
- `extract_iocs(text=...)`、`generate_timeline(text=...)`、`analyze_attack_chain(text=...)`：当前纯工具模式只分析显式传入的 `text`。

检测结果表固定字段：

```markdown
| 检测项 | 关键发现 | 风险 | 依据 |
|---|---|---|---|
```

风险等级只使用：`高`、`中`、`低`、`信息`、`未发现明显异常`。工具失败、权限不足、WAF 不可用、输出截断、待检测和需人工复核必须作为报告事实明确呈现。

## 开发命令

```bash
python -m compileall -q AutoIR_MCP.py core
git diff --check
```

当前仓库未配置单元测试或 lint 工具。
