首页/安全/取证与溯源速查/内核模块与 taint 状态核查
Linux 取证135 条

内核模块与 taint 状态核查

内核模块可以隐藏进程、网络与文件;lsmod 列出已加载模块,配合 taint 标记与模块路径时间可发现非发行版来源的模块。

取证与溯源速查安全更新于 2026-10-13

加载内核模块

lsmod 读取 /proc/modules,列出已加载模块、占用大小与被引用次数。内核级 rootkit 多以模块形式加载,也可能在加载后把自己从模块链表中摘除。因此核查不能只看清单,还要看模块文件来源、签名状态与内核污点标记。

基本信息

适用平台Linux 内核 2.6 及以上
命令lsmod、modinfo <模块>、cat /proc/modules、dmesg
污点标记/proc/sys/kernel/tainted 位掩码,非 0 需逐位解释
模块目录/lib/modules/$(uname -r)/
签名信息modinfo 的 signer、sig_id、sig_hashalgo 字段(视发行版)
附加属性/sys/module/<模块>/taint、refcnt、coresize(视内核版本)

典型使用场景

  • 排查内核级后门与 rootkit 模块
  • 变更前后对比模块清单,确认是否新增加载
  • 核对第三方驱动来源与签名是否合规
  • 结合 dmesg 查模块加载时间与报错
  • 内存镜像分析时与 Volatility 的模块插件结果互校

最小示例

最小示例
lsmod | head -20                                                  # 当前加载的模块清单
cat /proc/sys/kernel/tainted                                      # 非 0 表示内核被污染
modinfo nf_conntrack | grep -E 'filename|version|signer|sig_id'   # 模块来源与签名信息
grep -H . /sys/module/*/taint 2>/dev/null | head                  # 部分内核提供该属性
dmesg | grep -iE 'module|taint' | tail -20                        # 加载时间与异常提示
lsmod | awk 'NR>1{print $1}' | sort > /tmp/mod_now.txt            # 生成当前清单供基线比对

输出逐列读法

列含义异常信号
Module模块名不在发行版仓库中的陌生名字
Size模块占用字节数与已知模块明显不符或异常大
Used by被引用次数与引用者被未知模块引用或计数长期为 0
filename模块文件路径(modinfo)位于 /tmp、用户家目录等非标准路径
tainted内核污点位掩码出现未签名、树外或强制加载相关位
污点标记是位掩码,含义随内核版本变化;应参照本机内核源码目录下的文档解释每一位,再判断是否构成风险。
模块加载后可能自我隐藏(从模块链表摘除),此时 lsmod 为空但功能仍在。清单为空不等于无内核痕迹,需结合 dmesg、内存镜像与 /sys/kernel 相关节点。
直接 rmmod 可疑模块可能触发内核崩溃、破坏内存证据或中断业务驱动;先记录信息、评估影响,再决定是否卸载。

易错点

  • 把第三方驱动一律当恶意:备份、存储、虚拟化与安全产品驱动本身就会加载树外模块,需结合来源与签名判断
  • 只比模块名不比文件哈希:同名模块可被替换,要对比 modinfo filename 指向文件的 sha256 才有意义
  • 忽略加载时间:只有把 dmesg 中的加载时间放进事件时间轴,才能定位入侵窗口
  • 没有保存基线清单:事后只见当前状态,无法说明哪些模块是新增的

数据来源与参考

  • Linux 内核文档(tainted kernels)
  • man 8 lsmod(kmod)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌