| name | host-intrusion-analysis |
| version | 4.3.0-external |
| triggers | ["入侵检测","后门","webshell","异常进程","入侵排查"] |
| description | 入侵分析 Skill。由主机上的日志数据生成结构化的入侵分析报告。当用户说"入侵分析"、"日志分析"、"安全排查"时触发。 |
| allowed-tools | python3, search_content, run_command, read_file |
入侵分析 Skill
调用约定(适配说明)
本 Skill 文档使用 run_command(...) 作为通用占位符,表示"在 skill 根目录下执行一条 shell 命令并取回 stdout"。请将其映射到你的 AI Agent 框架对应的 shell 执行 API(例如 Bash / shell_exec / 自定义 tool)。映射时需保证:
- **工作目录(cwd)**自动设置为本 skill 根目录,使相对路径(如
scripts/analysis/preanalyze.py、templates/...)可直接使用;
- stdout 完整回传给 AI Agent 用于后续分析;
- 超时默认建议 ≥ 120 秒(预分析单主机日志通常 < 60s,多主机 ZIP 可能更长)。
唯一正确的调用方式
本 Skill 为可执行工具型,通过 shell 命令调用预分析脚本(详见上方"调用约定"),然后 AI 基于预分析输出撰写报告。
正确用法
run_command('python3 scripts/analysis/preanalyze.py "/absolute/path/to/log.xxx"')
run_command("cat templates/analysis_report_template.md")
核心规则
- 禁止直接读取原始日志和脚本。为减少上下文负担,禁止
read_file 原始日志或脚本源码。
- 证据驱动。每个结论必须有预分析数据支撑,无证据则标注"无法判定"。宁可误报不可漏报。
- 交叉验证。单源发现只是线索,多源交叉(同 IP/时间窗口出现在多个数据源)才是证据。
- 零信任 + 数据缺失 ≠ 安全。不假设任何操作合法。日志段为空可能是攻击者清除痕迹,标注"数据不可用,无法排除"。
- 时间线必需(Mermaid 流程图)。无论风险高低不可省略。从所有数据源合并统一时间线,以 Mermaid
graph LR(左到右)流程图输出,用 classDef 颜色区分正常(绿)/可疑(橙)/高危(红)事件,≤8 个节点。禁止使用 graph TD。无攻击时呈现运维时间线。⚠️ 关键:节点标签和边标注中的文本必须用双引号包裹,如 A["04-02 15:55 暴力破解"]
- 报告是独立文档且必须落盘。禁止对话式语言,可直接交付安全团队。报告必须写入工作空间的
.md 文件并通过 present_files 展示给用户,禁止仅在对话中输出而不落盘。唯一提问场景:输入不是日志报告。
- 严格遵循模板结构。禁止新增模板未定义的顶级章节。补充信息内嵌到对应的模板章节中。
- 预分析脚本是唯一脚本。只存在
scripts/analysis/preanalyze.py 唯一脚本,不存在其他任何脚本,报告的编写需要由 AI+模板 完成,不存在报告编写脚本。
- 采集脚本位于专家包内。
scripts/linux/ 和 scripts/windows/ 直接位于本 skill 的 scripts 目录,AI 运行时通过 find ~/.workbuddy/plugins -name "get_log_all_in_one.*" 定位实际绝对路径,并通过 present_files 工具把脚本文件本身展示给用户下载。
步骤 0:确认日志来源(用户未提供日志文件时触发)
当用户触发入侵分析但尚未提供日志文件时,用专家包内源路径在第一句话中主动引导,并调用 present_files 展示脚本文件本体供用户下载:
检测到您需要进行入侵分析。请在目标服务器上运行采集脚本生成日志文件:
Windows 服务器:
Linux 服务器:
采集完成后,将生成的 log_*.txt 文件路径告诉我即可。
🚫 门控检查:用户是否提供了日志文件路径?
- ✅ 提供了文件路径 → 进入步骤 1
- ❌ 用户表示无法采集 → 告知"无日志文件无法进行分析",终止流程
步骤 1:运行预分析脚本
使用 run_command 执行预分析脚本(cwd 已自动设置为 skill 根目录,脚本路径用 scripts/analysis/preanalyze.py,日志路径必须是绝对路径)。
run_command('python3 scripts/analysis/preanalyze.py "<绝对路径>"', timeout=120)
🚫 门控检查:预分析脚本是否成功返回了结构化数据?
- ✅ 返回了
## 摘要 + 各章节数据 → 继续步骤 2
- ❌ 返回错误/异常 → 检查日志路径是否正确(必须是绝对路径),修正后重试一次。两次失败则告知用户并终止
- ❌ 返回数据但所有章节均为
not_found → 告知用户"日志文件可能格式不匹配或为空",终止流程,禁止生成空报告
步骤 1.5:日志来源校验(预分析成功后执行)
预分析脚本成功返回后,检查日志是否由标准采集脚本生成。同时检查两项:
检查 A — 文件名模式:
标准采集脚本生成的文件名匹配 log_*.txt 模式。
检查 B — 预分析输出头部标记:
预分析输出头部包含 platform: 行。若日志来自标准采集脚本,头部不含 data_source: raw_var_log_folder 或 LinuxCheck.sh 等非标准来源标识。
判断规则: 文件名不匹配 log_*.txt 或 预分析头部含非标准来源标识 → 判定为"非标准采集脚本日志"。
若判定为非标准日志,在最终分析报告最开头插入以下提醒块,然后继续输出完整分析报告:
> ⚠️ **日志来源提醒**
>
> 当前分析的日志并非由标准采集脚本生成,部分分析维度可能数据不完整。
>
> 建议下次使用标准采集脚本以获得更全面的入侵分析覆盖(9 大维度):
>
> | 平台 | 脚本路径(专家包内源路径) | 运行方式 |
> |------|---------|---------|
> | Windows | `references/intrusion-analysis/host-intrusion-analysis/scripts/windows/get_log_all_in_one.ps1` | 管理员 PowerShell 运行 |
> | Linux | `references/intrusion-analysis/host-intrusion-analysis/scripts/linux/get_log_all_in_one.sh` | `sudo bash` 运行 |
>
> ---
>
提醒块之后不要中断,继续按步骤 2、步骤 3 完成完整分析报告。
步骤 2:基于预分析输出进行按需精准回查
基于预分析输出,按需精准回查:仅当数据状态为 error 或预分析数据不足以支撑研判时,用 search_content 按关键词搜索原始日志补充证据。
Token 安全限制:
- ❌ 禁止
read_file 整个原始日志
- ✅ 仅用
search_content 搜索特定关键词,单次回查结果控制在 50 行以内
- ✅ 如需更多上下文,缩小搜索范围(加时间戳/IP 过滤),不要放大
🚫 门控检查:是否已获得足够的入侵攻击时间线数据(用于生成 Mermaid 流程图)?
步骤 3:报告生成
3a. 读取模板(必须在生成报告前执行):
通过 run_command + cat 读取模板文件(cwd 已自动设置为 skill 根目录):
run_command("cat templates/analysis_report_template.md")
⚠️ 禁止用 read_file 读取模板文件——模板没有固定的绝对路径,read_file 会失败。
3b. 撰写报告、落盘并展示
严格以模板结构为骨架填充数据,不得自行改变章节顺序或标题格式。
报告必须落盘,按以下流程执行(禁止仅在对话中输出而不写文件):
-
写入文件:将完整报告写入当前工作空间的 reports/ 目录(若不存在则先创建)。
- 文件命名规则:
入侵分析报告_<主机名或事件名>_<YYYYMMDD-HHmmss>.md
- 单主机示例:
入侵分析报告_lavm-xile9vly1p_20260721-1445.md
- 多主机示例:
入侵分析报告_2000-00入侵事件_20260721-1445.md
- 时间戳通过 shell 命令
date +%Y%m%d-%H%M%S 获取,禁止硬编码。
-
展示文件:落盘后必须调用 present_files 工具把报告文件展示给用户,让用户可直接查看/下载/转发。
-
对话回复:在对话中给出简要结论(风险等级 + 最关键 2-3 条发现 + 报告文件路径),不要把整份报告内容复制到对话中(用户已通过 present_files 看到完整报告)。
边缘情况处理
| 场景 | 处理方式 |
|---|
| 预分析返回错误 | 检查路径后重试一次,两次失败则告知用户并终止 |
预分析所有章节 not_found | 告知用户"日志格式不匹配或为空",终止,禁止生成空报告 |
| 精准回查找不到数据 | 标注"数据不可用,无法排除",不要编造 |
| 报告生成中断/截断 | 标注"⚠️ 报告不完整:以下章节因上下文限制未能生成" |
质量检查清单