新闻公告使用手机扫一扫查看
< 返回

不可信主机下的应急取证:LinIR 的零信任实践

2026-04-06 18:14 作者:数掘云算 阅读量:1

在应急响应中,我们往往第一步就是查看系统状态,比如运行进程、网络连接和定时任务:

 
ps aux
netstat -tnlp
ss -tnp
crontab -l
systemctl list-units
 

这些命令在日常运维中非常可靠,但在主机可能已被入侵的情况下,它们反而可能误导你。原因很简单:一旦系统被 rootkit 控制,这些工具本身就可能被篡改。

比如:

  • ps 可能被替换,自动隐藏恶意进程
  • netstat/ss 可通过 LD_PRELOAD 劫持,屏蔽异常连接
  • crontab -l 可能被 hook,看不到恶意任务
  • systemctl 依赖复杂链路(如 D-Bus),任一环节都可能被污染
  • 甚至 PATH 都可能被指向恶意目录

也就是说,你以为在“取证”,实际上是在看攻击者“精心伪装后的结果”。


LinIR:从“零信任”出发的取证工具

LinIR(Linux Incident Response)正是为了解决这个问题而设计。它的核心理念只有一句话:

不信任目标系统上的任何用户态工具

它完全绕过常规命令,直接读取底层数据:

  • 不用 ps → 直接读取 /proc/<pid>/ 信息
  • 不用 netstat → 解析 /proc/net/tcp 并反查 PID
  • 不用 crontab → 扫描原始定时任务文件
  • 不用 systemctl → 解析 systemd unit 文件
  • 不用 lsof → 自建 inode 与 PID 映射

在 macOS 上也是类似思路,直接调用系统底层接口(如 proc_pidinfo)。

整个工具是 Go 静态编译单文件(无依赖),拷贝过去即可运行,不依赖目标环境。


和传统方案的区别

vs 手工命令

  • 手工方式:完全信任系统
  • LinIR:零信任 + 多源交叉验证
  • 输出:结构化(JSON/CSV)+ 自动评分

vs 脚本工具(LinPEAS 等)

  • 脚本依赖系统命令,容易被篡改
  • LinIR 直接读取内核数据,不经过用户态

vs EDR

  • EDR:持续监控、需要部署、通常联网
  • LinIR:一次性取证、离线运行、无驻留

👉 更像一把“应急手术刀”:
用完即走,不留痕迹


核心能力

1️⃣ 一键取证采集

 
sudo ./linir collect --yara-rules /opt/rules/ --bundle
 

自动完成:

  • 环境检测(PATH / LD_PRELOAD)
  • 进程与网络采集
  • 持久化机制扫描
  • 完整性检查
  • YARA 扫描
  • 风险评分
  • 输出报告(JSON / CSV / tar.gz)

2️⃣ IOC 实时监控

 
sudo ./linir watch --iocs ./iocs.txt
 

多层机制捕获连接:

  • conntrack(事件级)
  • /proc/net 轮询
  • TCP fallback

命中后自动补全:

  • 进程信息
  • 文件哈希
  • 持久化关联
  • YARA 检测

3️⃣ Web 可视化界面

 
sudo ./linir gui
 

提供:

  • 风险评分展示
  • 进程/网络过滤
  • 实时 IOC 流
  • 全部嵌入单二进制,无需额外资源

4️⃣ 风险评分机制

不是简单“命中就报警”,而是组合判断:

例如:

  • /tmp 可执行文件(+10)
  • 存在网络连接(+10)
  • 有持久化(+10)
  • 命中 YARA(+20)
  • 组合规则(+10)

👉 最终评分:60(高风险)

同时:

  • 正常进程(如 apt)会降权
  • 不可信环境降低 confidence,而不是直接加分

局限与现实问题

PID 归属难题

短生命周期进程(<100ms)可能无法关联:

  • 进程退出 → /proc 信息立即消失
  • 属于 Linux 设计限制(连 ss 也一样)

LinIR 的策略:

  • 事件驱动提前捕获
  • 快速 inode → PID 查找
  • 多次重试 + pending 队列

但仍无法 100% 解决(除非使用 eBPF)。


macOS 限制

  • /proc
  • SIP 限制接口
  • BPF 对回环支持复杂
  • 结构体偏移可能随版本变化

评分模型局限

  • 基于规则,不是 AI
  • 新型攻击可能绕过
  • 白名单可被伪装利用

为什么不用 eBPF?

虽然强大,但不符合设计目标:

  • 依赖内核版本和配置
  • 需要适配不同环境
  • 破坏“零依赖单文件”原则

👉 LinIR选择:
兼容性优先,而非极致能力


设计理念总结

LinIR 不做“判断”,只提供“证据”:

它不会说:

“这台机器被黑了”

而是告诉你:

  • 某进程在 /tmp 运行
  • 有可疑外联
  • 存在持久化
  • 命中恶意规则

👉 最终判断,交给人来做。


总结一句话

在不可信系统里,最大的风险不是看不到,而是“看到的是假的”。

LinIR 的价值就在于:

 

尽可能绕过被污染的用户态,直接从底层获取可信证据。

联系我们
返回顶部