首页/安全/取证与溯源速查/ELF 文件鉴定与安全提取方式
Linux 取证135 条

ELF 文件鉴定与安全提取方式

对可疑二进制先做非侵入式鉴定:file 判断类型、readelf 读头部与依赖、strings 提取线索;对不可信样本用 readelf 替代 ldd。

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

先做非侵入式鉴定

拿到一个可疑的 Linux 可执行文件时,第一步不是运行它,而是做静态鉴定:file 判断实际类型(很多样本命名与真实格式不符),readelf 读取 ELF 头部与动态依赖,strings 提取可读字符串寻找地址、路径与命令片段。这三个命令都不执行样本代码,在任何环境下都相对安全。

不要用 ldd 看依赖

ldd 判断依赖的方式是让动态链接器去解析目标文件,对不可信的样本来说,这个过程可能触发样本中的代码,等于间接执行了它。替代方法是用 readelf -d 读取动态段里的依赖条目,得到的信息与 ldd 基本一致,但不会运行任何代码。

基本信息

适用平台Linux(binutils 套件:file、readelf、strings、objdump)
常用命令file、readelf -h / -d / -S、strings -a
安全原则全程不执行样本,ldd 不用于不可信文件
输出要点架构与类型、依赖库、节区结构、可读字符串
隔离要求分析在隔离环境的副本上进行

典型使用场景

  • 确认文件真实类型:扩展名与实际格式不符时以 file 输出为准
  • 判断编译平台:架构与链接方式可解释为何在某主机上无法运行
  • 提取外联线索:字符串里常能找到地址、路径与计划任务名称
  • 查看节区与依赖:判断是否被加壳或存在可疑的自定义节区
  • 为报告取证:记录哈希与关键输出,附在样本分析小节

静态鉴定

静态鉴定
# 真实文件类型与架构
file /tmp/suspicious.bin
sha256sum /tmp/suspicious.bin

# ELF 头部:类型、架构、入口点
readelf -h /tmp/suspicious.bin | head -20

# 动态依赖(替代 ldd,不执行样本)
readelf -d /tmp/suspicious.bin | grep -E 'NEEDED|RPATH|RUNPATH' | head

# 节区结构:是否被加壳或存在异常节名
readelf -S /tmp/suspicious.bin | head -20

# 字符串线索:地址、临时目录、编码痕迹
strings -a /tmp/suspicious.bin | grep -E 'http|/tmp|/dev/shm|base64|chmod|crontab' | head

输出要点读法

来源字段含义
fileELF 类型与架构与主机架构不符则无法运行
readelf -hType 与 Entry point可判断是可执行还是共享库
readelf -dNEEDED 条目需要的动态库,替代 ldd 输出
readelf -S节区名与大小异常节名或高熵指示加壳
strings -a可读字符串外联地址与命令片段常在此
任何涉及执行的动作(包括 ldd、直接运行、用调试器加载)都应在隔离环境并对副本进行,生产机上只做读取类操作。
字符串编码或加密后,strings 可能一无所获,这本身就是信息:说明样本做了处理,需要转为动态分析获取解密后的内容。

易错点

  • 用 ldd 查看依赖:会触发加载逻辑,等于间接执行样本
  • 按扩展名判断类型:样本常伪装后缀,必须以文件头为准
  • 在生产机上直接运行验证:立即执行破坏或外联动作
  • 只看字符串不看节区:加壳或异常结构信息被忽略
  • 不记录样本哈希:后续与自己或他人分享的样本无法确认是否同一份

数据来源与参考

  • man 1 file
  • man 1 readelf(binutils)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌