凌晨三点,监控大屏突然弹出告警——某台生产 Linux 服务器出现异常外联流量,目标 IP 归属境外,持续时间已超过 40 分钟。
值班工程师打开终端,开始手动排查:
```
ss -antp | grep ESTABLISHED
ps auxf | grep -v grep
find /tmp -mtime -1
cat /var/log/auth.log | tail -500
...
```
一条一条命令跑下去,关联分析,再记录到文档里——没有两个小时根本出不了初步结论。
**如果有一个 AI 智能体帮你做这件事呢?**
这正是我们在 `linux-ir` Skill 中想解决的问题。
---
## 什么是 linux-ir Skill?
`linux-ir` 是一个运行在 **Claude Code / Trae IDE** 中的智能体技能包(Agent Skill)。它封装了 Linux 主机入侵检测与应急响应的完整方法论,让 AI 智能体能够:
1. **自主执行** 数十条排查命令
2. **自动关联** 跨阶段的发现(网络→进程→文件→日志)
3. **输出结构化** Markdown 报告,直接可提交工单
触发方式极其简单,在 IDE 对话框中输入:
```
对 192.168.1.100 做一次全面的应急响应
```
智能体会按照 **8 个检查阶段** 依次执行,全程无需人工干预。
---
## 8 阶段检查框架
### 架构总览
```
┌─────────────────────────────────────────────────────────┐
│ linux-ir 智能体应急响应流程 │
├──────────┬────────────────────────────────────────────────┤
│ 阶段 1 │ 网络连接与流量分析 │
│ 阶段 2 │ 账号与权限审计 │
│ 阶段 3 │ 进程与计划任务分析 │
│ 阶段 4 │ 持久化机制检测 │
│ 阶段 5 │ 日志审计(auth/system/应用日志) │
│ 阶段 6 │ Rootkit & 恶意软件检测 │
│ 阶段 7 │ 可疑文件与木马排查 │
│ 阶段 8 │ 生成完整 Markdown 报告 │
└──────────┴────────────────────────────────────────────────┘
```
---
### 阶段 1 — 网络连接与流量分析
这是智能体最先执行的阶段,也是最容易发现活跃威胁的环节。
智能体会自动运行:
```bash
# 查看所有活跃外联连接
ss -tnp state established
# 发现后门监听端口
ss -tlnp
# 检查 hosts 文件是否被劫持
diff /etc/hosts <(grep -v "^#" /etc/hosts | grep -v "^$")
# 检查防火墙是否存在异常 NAT 转发
iptables -t nat -L -n -v
```
**智能体的判断逻辑:**
| 发现 | 智能体判定 |
|------|-----------|
| 非业务端口 LISTEN + 未知进程 | 🔴 CRITICAL — 疑似后门 |
| 持续连接境外 IP | 🔴 CRITICAL — 疑似 C2 |
| `/etc/hosts` 被写入非预期条目 | 🟠 HIGH — DNS 劫持 |
| 接口处于混杂模式 | 🟠 HIGH — 网络嗅探 |
| iptables NAT 规则异常 | 🟠 HIGH — 流量重定向 |
---
### 阶段 2 — 账号与权限审计
攻击者最常见的持久化手法之一,就是创建隐蔽账号或植入 SSH 后门密钥。智能体会全面扫描:
```bash
# UID=0 的账号(除 root 外均异常)
awk -F: '$3==0 {print}' /etc/passwd
# sudoers 中的 NOPASSWD 配置
grep -r "NOPASSWD" /etc/sudoers /etc/sudoers.d/
# 检查所有用户的 authorized_keys
find /root /home -name "authorized_keys" -type f | while read f; do
echo "=== $f ===" && cat "$f"
done
# PAM 模块是否比 /etc/passwd 更新(PAM 后门特征)
find /lib/security /lib64/security -name "*.so" -newer /etc/passwd
```
> **特别提示:** PAM 后门是高级攻击者常用手法——植入一个恶意 `.so` 模块后,任意密码均可登录。传统排查中这个点非常容易被遗漏,而智能体会自动检查。
---
### 阶段 3 — 进程与计划任务分析
挖矿程序、C2 Agent、反弹 Shell——这些威胁最终都体现为异常进程。智能体不只看 `ps`,还会做**隐藏进程对比检测**:
```bash
# 方法:对比 /proc 目录与 ps 输出的 PID 差异
comm -23 \
<(ls /proc | grep -E '^[0-9]+$' | sort -n) \
<(ps -eo pid --no-headers | sort -n) \
| while read pid; do
echo "[隐藏进程] PID: $pid"
cat /proc/$pid/cmdline 2>/dev/null | tr '\0' ' '
done
```
这是 Rootkit 检测的一个关键环节——**Rootkit 会从 `ps` 输出中隐藏自身,但无法删除 `/proc` 目录中的条目**。智能体利用这一不一致性来揭露隐藏进程。
同时还会审计所有定时任务来源:
- `crontab -l`(各用户)
- `/etc/cron.*` 目录
- `systemd timer` 单元
- `/var/spool/cron/`
- `at` 任务队列
---
### 阶段 4 — 持久化机制检测
即使重启也能存活的威胁,才是真正棘手的。智能体会检测以下所有持久化载体:
| 持久化类型 | 检测方法 |
|-----------|---------|
| Systemd 服务后门 | 对比官方软件包安装的 `.service` 文件 |
| rc.local / init.d | 检查启动脚本内容 |
| LD_PRELOAD 劫持 | 检查 `/etc/ld.so.preload` |
| 动态链接库劫持 | 扫描 `/etc/ld.so.conf.d/` 中的异常路径 |
| Git Hook / MOTD 后门 | 检查常见脚本注入点 |
| .bashrc / .profile 反弹 Shell | 正则匹配 `nc`、`curl`、`bash -i` |
---
### 阶段 5 — 日志审计
日志是攻击者最想销毁的证据。智能体会在日志被清除前快速提取关键事件:
```bash
# SSH 暴力破解与成功登录
grep -E "Failed password|Accepted|Invalid user" /var/log/auth.log | \
awk '{print $1,$2,$3,$9,$11}' | sort | uniq -c | sort -rn | head -30
# 最近 su/sudo 记录(权限提升)
grep -E "sudo:|su:" /var/log/auth.log | tail -50
# Web 应用日志中的 Webshell 特征
grep -Ei "(eval|base64_decode|system|passthru|shell_exec)" \
/var/log/nginx/access.log /var/log/apache2/access.log 2>/dev/null
# 日志文件完整性(检测日志被清空)
find /var/log -name "*.log" -size 0 -newer /etc/passwd
```
---
### 阶段 6 — Rootkit & 恶意软件检测
这是技术含量最高的阶段。除了调用 `rkhunter`、`chkrootkit` 等专用工具外,智能体还会执行**手工 Rootkit 特征检测**:
```bash
# 检查系统关键命令是否被替换(文件哈希对比)
for cmd in ps netstat ls find; do
path=$(which $cmd)
echo "$path: $(md5sum $path 2>/dev/null)"
done
# 检查 /proc/modules 与 lsmod 差异(内核模块 Rootkit)
diff <(cat /proc/modules | awk '{print $1}' | sort) \
<(lsmod | awk '{print $1}' | tail -n +2 | sort)
# 检查异常内核模块(非发行版签名)
for mod in $(lsmod | awk 'NR>1{print $1}'); do
modinfo $mod 2>/dev/null | grep -E "filename|author|description" | head -3
echo "---"
done
# eBPF 程序检查(新型 Rootkit 手法)
bpftool prog list 2>/dev/null
ls /sys/fs/bpf/ 2>/dev/null
```
> **知识点:** 基于 eBPF 的 Rootkit 是近年来出现的新型威胁,例如 `ebpfkit`,它可以在不修改任何磁盘文件的情况下隐藏进程和网络连接,极难被传统工具发现。`linux-ir` 的阶段 6 专门加入了 eBPF 检测逻辑。
---
### 阶段 7 — 可疑文件与木马排查
```bash
# 最近 24 小时内被修改的文件(排除 /proc /sys)
find / -mtime -1 -type f \
! -path "/proc/*" ! -path "/sys/*" ! -path "/dev/*" \
2>/dev/null | head -100
# /tmp、/dev/shm、/var/tmp 下的可执行文件(常见落地路径)
find /tmp /dev/shm /var/tmp -type f -executable 2>/dev/null
# 大文件(可能是数据外泄暂存)
find / -size +50M -type f ! -path "/proc/*" 2>/dev/null
# 名称伪装成系统文件的木马(如 "sshd" 在 /tmp 下)
find / -name "sshd" -o -name "nginx" -o -name "httpd" \
2>/dev/null | grep -vE "^/(usr|sbin|bin|lib)"
```
---
### 阶段 8 — 自动生成报告
所有阶段完成后,智能体自动汇总输出标准化 Markdown 报告:
```markdown
# Linux 主机应急响应报告
**主机:** 192.168.1.100 | **时间:** 2026-04-21 03:47 | **检查时长:** 8分32秒
## 执行摘要
| 风险等级 | 数量 |
|---------|------|
| 🔴 CRITICAL | 2 |
| 🟠 HIGH | 3 |
| 🟡 MEDIUM | 5 |
| 🔵 LOW | 2 |
## 关键发现
### [CRITICAL] 发现 C2 外联连接
- **进程:** /tmp/.sshd (PID 14823)
- **连接:** 192.168.1.100:52341 → 45.77.x.x:443 ESTABLISHED
- **时长:** 持续 47 分钟
- **建议:** 立即隔离主机,保全内存镜像
### [CRITICAL] 发现后门账号
- **账号:** `sysupdate` (UID=0)
- **创建时间:** 2026-04-20 23:12
- **authorized_keys:** 包含未知公钥
- **建议:** 立即禁用,溯源攻击入口
...(完整报告继续)
```
---
## 智能体的"枢纽判断"能力
`linux-ir` 的一个核心设计是**条件分支执行**——智能体会根据前期发现动态调整后续检查策略:
```
发现活跃 C2 外联?
→ 立即提示隔离 + 优先执行阶段1+6(不等待其余阶段)
发现 Rootkit 特征?
→ 警告:系统工具可能不可信,建议从可信介质启动检查
发现挖矿进程?
→ 优先执行阶段3+6+7,重点关注 CPU/GPU 占用与矿池地址
仅有日志线索?
→ 优先执行阶段5,输出攻击时间线
```
这种"推理-行动"循环正是 **Agentic AI** 区别于传统脚本的核心价值:不只是执行命令,而是**理解上下文并做出判断**。
---
## 与传统应急响应的对比
| 对比维度 | 传统人工排查 | linux-ir 智能体 |
|---------|------------|----------------|
| **启动时间** | 人员到位 + 工具准备:15-30 分钟 | 输入一条指令:< 30 秒 |
| **覆盖深度** | 依赖工程师经验,容易遗漏 | 8 个阶段全覆盖,不遗漏 |
| **关联分析** | 手动关联,耗时 | 自动跨阶段关联发现 |
| **报告输出** | 事后整理:1-3 小时 | 检查结束即输出,零延迟 |
| **一致性** | 受疲劳/压力影响 | 每次执行标准一致 |
| **凌晨值班** | 需要叫醒专家 | 随时可用 |
---
## 快速上手
### 环境要求
- **IDE:** Claude Code 或 Trae IDE
- **访问方式:** 本地 Bash 访问目标主机,或通过 SSH 隧道
- **权限:** 建议 root 或具有 sudo 权限的账号(部分检查需要)
### 安装 linux-ir Skill
```bash
# 在 Trae IDE 中
~/.trae/skills/linux-ir/ ← 已内置,无需额外安装
# 在 Claude Code 中
~/.claude/skills/linux-ir/ ← 同步安装
```
### 触发关键词
在 IDE 对话框中,包含以下任意词汇即可触发完整流程:
- **应急响应**
- **入侵排查**
- **主机检查**
- **安全检查**
- **Rootkit 检测**
- **木马排查**
### 示例对话
```
用户:对 10.0.0.5 做一次完整的应急响应,怀疑有挖矿程序
智能体:收到。目标主机 10.0.0.5,开始执行 linux-ir 应急响应流程。
根据挖矿程序特征,将优先执行阶段3(进程)、阶段6(恶意软件)、
阶段7(可疑文件),同时完成全量 8 阶段检查。
[阶段 1/8] 网络连接分析...
✓ 发现 2 个活跃外联连接,1 个指向已知矿池地址(pool.xmr.pt:3333)
🔴 CRITICAL: 进程 /tmp/.kworker (PID 9821) → 矿池连接确认
[阶段 2/8] 账号与权限审计...
✓ 未发现异常账号
...
```
---
## 局限性与注意事项
**任何工具都不是银弹**,使用前请了解以下限制:
1. **Rootkit 对抗**:高级内核级 Rootkit 可能欺骗智能体使用的系统工具(`ps`、`ls` 等)。发现 Rootkit 特征时,应从可信的 LiveCD/USB 启动后再执行检查。
2. **权限依赖**:部分检查(内核模块、`/proc` 深度读取)需要 root 权限,低权限账号会有盲区。
3. **日志销毁**:如果攻击者已清除日志,阶段 5 的溯源能力会大幅下降。建议配合集中日志系统(如 ELK、Splunk)使用。
4. **授权前提**:`linux-ir` 仅用于**已获授权的系统**。在未经授权的系统上运行安全检查工具,可能违反相关法律法规。
---
## 写在最后
AI 智能体正在改变安全从业者的工作方式。`linux-ir` 不是要替代安全工程师,而是让工程师从**重复性的命令执行**中解放出来,把精力放在**判断、决策和处置**上。
凌晨三点的那台服务器,可以由智能体在 8 分钟内给出完整的排查报告。工程师看到报告,做出隔离决定,开始溯源——这才是人机协作的正确姿势。
> 🔖 **相关阅读**
> - 《AI 驱动的渗透测试工作流:6 阶段自动化框架》
> - 《从 CTF 到红队:智能体技能包的设计哲学》
> - 《eBPF Rootkit 检测:当攻击者躲进内核》
# Linux 主机应急响应报告(linux-ir)
- 目标: a.b.c.d(root)
- 采集时间: 2026-04-21 17:09 (Asia/Shanghai)
- 采集方式: 只读远程命令采集(SSH Key),未安装额外工具
## 一、执行摘要
综合威胁等级: 🟠 HIGH(以“高风险暴露面/错误配置”为主,暂未发现明确落地木马/挖矿进程证据)
本次排查的主要问题集中在“对外暴露面过大 + 防护缺失”:
- 🔴 CRITICAL: HAProxy 统计/管理接口 `:8404` 对外监听,且 `stats admin if TRUE`(无鉴权),同时主机防火墙未启用,等价于把 HAProxy 管理面板暴露在公网。
- 🟠 HIGH: SSH 允许 root 密码登录(`PermitRootLogin yes` + `PasswordAuthentication yes`),且日志显示持续暴力破解;同时未启用防火墙/Fail2ban 等基础防护。
- 🟠 HIGH: 发现 4 个 `python3 -m http.server` 进程对外监听 `0.0.0.0:8080-8083`,连接来源呈现大量随机公网 IP(疑似被扫描/被当作暴露服务持续访问)。即使内容仅为静态页,也属于不必要暴露面。
## 二、主机概况(基础信息)
- OS: Ubuntu 22.04.4 LTS (Jammy)
- Kernel: 5.15.0-100-generic
- 虚拟化: KVM
- 运行时长: 95 days
- 主机名: iv-ydytf6eh34xj
## 三、网络与暴露面
### 3.1 网卡与地址
- eth0: 192.168.1.97/16
### 3.2 监听端口(关键)
采集到的监听端口(节选):
- 22/tcp: sshd
- 25/tcp: postfix (master)
- 80/tcp: haproxy
- 443/tcp: haproxy(SSL 终止)
- 8404/tcp: haproxy(stats)
- 8080-8083/tcp: python3(`python3 -m http.server`)
### 3.3 外部连接(可疑/需关注)
`8080-8083` 的 `python3 -m http.server` 存在大量已建立连接,来源包含多组随机公网 IP(如 `45.79.211.97`、`45.33.12.122`、`167.94.146.51`、`168.100.9.75` 等)。该特征更像“公网扫描/爬虫/探测”持续命中,而不是业务稳定流量。
## 四、账号与认证(SSH/登录)
### 4.1 SSH 配置(有效配置)
关键项:
-`PermitRootLogin yes`
-`PasswordAuthentication yes`
-`MaxAuthTries 6`
-`X11Forwarding yes`
结论:当前 SSH 面向公网的攻击面非常大,且 root 口令暴力破解会持续发生。
### 4.2 认证日志(24h 内关键线索)
- 观察到大量 `Failed password for root`、`Invalid user <...>` 等暴力破解痕迹。
- 观察到 `Accepted publickey for root` 的记录(用于本次采集的公钥登录)。
建议将暴力破解来源 IP 纳入封禁/限速策略(fail2ban/防火墙白名单)。
## 五、进程与服务(运行态)
### 5.1 关键可疑进程:python http.server(对外监听)
发现 4 个长期运行的 Python 简易 HTTP Server(自 2026-01-16 起运行,约 95 天):
- PID 5878: `python3 -m http.server 8080`,cwd `/var/www/default`
- PID 5873: `python3 -m http.server 8081`,cwd `/var/www/site1`
- PID 5875: `python3 -m http.server 8082`,cwd `/var/www/site2`
- PID 5876: `python3 -m http.server 8083`,cwd `/var/www/api`
对应的启动脚本:
-`/usr/local/bin/start-backends`(创建时间:2026-01-16 09:49)
- 内容为启动 8080-8083 的 `python3 -m http.server`,并将输出重定向到 `/dev/null`
- 进程形态显示存在多个 `/bin/bash /usr/local/bin/start-backends` 常驻并处于 `do_wait`,需要进一步确认其启动方式与是否为预期设计
### 5.2 HAProxy 暴露面与配置风险
HAProxy 配置文件:
-`/etc/haproxy/haproxy.cfg`
关键风险点:
-`listen stats`:
-`bind *:8404`
-`stats admin if TRUE`(无鉴权、无访问控制)
该配置在防火墙未启用的情况下风险极高:任何可访问 8404 的人都可能对 HAProxy 执行管理操作。
## 六、防火墙与基线防护
- UFW: inactive
- iptables: INPUT/FORWARD/OUTPUT 默认 ACCEPT,无规则
结论:主机处于“裸奔”状态,所有对外监听服务均默认可被公网扫描与访问。
## 七、落地文件与 Rootkit 初筛
### 7.1 近期文件变更(7 天)
未发现 `/etc`、`/usr/local`、`/opt`、`/var/www` 下的可疑近期落地文件(近 7 天主要为已有服务日志滚动)。
### 7.2 ld.so.preload
-`/etc/ld.so.preload`: 不存在(未发现常见的 LD_PRELOAD 劫持持久化痕迹)
### 7.3 SUID/SGID(关键目录)
在常见目录中未发现异常新增的 SUID/SGID 文件(结果以系统常见项为主)。
## 八、IOC(指标)与证据摘要
### 8.1 暴力破解来源(示例)
- 51.195.7.8(多次 root 口令失败)
- 111.21.105.250(多次 invalid user/失败)
- 106.13.44.253(多次 root 口令失败/invalid user)
- 182.93.50.90(invalid user)
- 20.193.130.202(root 口令失败)
### 8.2 高风险暴露端口
- 8404/tcp(HAProxy stats/admin,无鉴权)
- 22/tcp(root 口令登录开启)
- 8080-8083/tcp(python http.server 对外监听)
### 8.3 可疑/需评估的关键文件(哈希)
-`/usr/local/bin/reset-authentication`
- sha256: `daf425664f40e38ef36b91e18a8b24b1c75397b8124ece86bf89009190025a2b`
- 类型: Go 静态链接 ELF(systemd 服务 `reset-authentication.service` 在开机阶段执行)
-`/opt/proxima/proxima`
- sha256: `442e71c8fa61405b2b0d42af4a1b3f3fd1c083d9180b0eba696ebe08c5741150`
- 类型: Go 动态链接 ELF(systemd 服务 `proxima.service` 常驻)
说明:上述二进制不一定是恶意软件,但属于“需要明确归属与供应链来源”的第三方组件,应纳入资产清单与完整性校验。
## 九、处置建议(按优先级)
### 9.1 立即处置(建议立刻做)
- 关闭/限制 HAProxy 管理面板
- 将 `stats` 仅绑定到 `127.0.0.1:8404` 或管理网段
- 增加 `stats auth <user>:<pass>` 或基于 ACL 的严格访问控制
- SSH 加固
- 关闭 root 口令登录:`PermitRootLogin prohibit-password` 或 `no`
- 关闭口令登录:`PasswordAuthentication no`
- 关闭 X11Forwarding(如无需求):`X11Forwarding no`
- 采用最小权限:创建普通运维用户 + sudo,禁止直接 root 登录
- 启用防火墙(默认拒绝入站)
- 仅放行必要端口(通常 22、80、443;8404 仅管理网或本机)
- 增加暴力破解防护
- 部署 fail2ban(sshd jail),或在防火墙层面做速率限制/黑名单
### 9.2 中期优化(1-3 天内完成)
- 处理 `8080-8083` 的 Python http.server
- 若为测试/临时用途:停止并移除启动脚本 `/usr/local/bin/start-backends` 与相关常驻进程
- 若必须存在:改为 `--bind 127.0.0.1` 并通过 HAProxy/反代暴露必要域名;或仅允许内网访问
- 资产核验与供应链确认
- 明确 `proxima`、`assist-client`、`cloud-monitor-agent`、`reset-authentication` 的供应商来源、版本、部署基线与更新渠道
- 对上述二进制做签名/Hash 基线与定期完整性监测
### 9.3 若怀疑已被入侵(增强动作)
- 对 `/var/log/auth.log` 做更长时间范围的回溯(Accepted/Session opened/sudo)
- 对外联目的地址做威胁情报查询(C2/扫描器/僵尸网络)
- 进行离线取证:打包关键日志与可疑目录,保全证据后再清理
---
**扫码关注,获取 linux-ir Skill 完整源码**
*本文所有命令和技术手法仅用于授权范围内的安全检查,请遵守所在地区网络安全法律法规。*
---