L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

analyzing-linux-elf-malware

analyzing-linux-elf-malware

分析恶意 Linux ELF(可执行和可链接格式)二进制文件,包括针对 Linux 服务器、容器和云基础设施的僵尸网络、 挖矿程序、勒索软件和 rootkit。涵盖 x86_64 和 ARM ELF 样本的静态分析、动态追踪和逆向工程。 适用于 Linux 恶意软件分析、ELF 二进制文件调查、Linux 服务器被攻陷评估或容器恶意软件分析相关请求。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: analyzing-linux-elf-malware description: > 分析恶意 Linux ELF(可执行和可链接格式)二进制文件,包括针对 Linux 服务器、容器和云基础设施的僵尸网络、 挖矿程序、勒索软件和 rootkit。涵盖 x86_64 和 ARM ELF 样本的静态分析、动态追踪和逆向工程。 适用于 Linux 恶意软件分析、ELF 二进制文件调查、Linux 服务器被攻陷评估或容器恶意软件分析相关请求。 domain: cybersecurity subdomain: malware-analysis tags: [malware, Linux, ELF, reverse-engineering, server-malware] version: 1.0.0 author: mahipal license: Apache-2.0

分析 Linux ELF 恶意软件

适用场景

  • Linux 服务器或容器被攻陷,发现可疑 ELF 二进制文件
  • 分析 Linux 僵尸网络(Mirai、Gafgyt、XorDDoS)、挖矿程序或勒索软件
  • 调查针对云基础设施、Docker 容器或 Kubernetes Pod 的恶意软件
  • 逆向工程 Linux rootkit 和内核模块
  • 分析为 Linux x86_64、ARM 或 MIPS 架构编译的跨平台恶意软件

不适用于 Windows PE 二进制文件分析;请使用 PEStudio、Ghidra 或 IDA 分析 Windows 恶意软件。

前置条件

  • Ghidra 或支持 Linux ELF 的 IDA,用于反汇编和反编译
  • Linux 分析虚拟机(推荐 Ubuntu 22.04),已安装开发工具
  • strace、ltrace 和 GDB,用于动态分析和调试
  • GNU binutils 中的 readelf、objdump 和 nm,用于静态检查
  • Radare2,用于快速二进制分类和脚本化分析
  • Docker,用于隔离的基于容器的恶意软件执行

工作流程

步骤 1:识别 ELF 二进制文件属性

检查 ELF 头部和基本属性:

# 文件类型识别
file suspect_binary

# 详细 ELF 头部分析
readelf -h suspect_binary

# 节头部
readelf -S suspect_binary

# 程序头部(段)
readelf -l suspect_binary

# 符号表(如未去符号表)
readelf -s suspect_binary
nm suspect_binary 2>/dev/null

# 动态链接信息
readelf -d suspect_binary
ldd suspect_binary 2>/dev/null  # 仅在匹配架构上使用!

# 计算哈希值
md5sum suspect_binary
sha256sum suspect_binary

# 检查打包/UPX
upx -t suspect_binary
# 基于 Python 的 ELF 分析
from elftools.elf.elffile import ELFFile
import hashlib

with open("suspect_binary", "rb") as f:
    data = f.read()
    sha256 = hashlib.sha256(data).hexdigest()

with open("suspect_binary", "rb") as f:
    elf = ELFFile(f)

    print(f"SHA-256:      {sha256}")
    print(f"类型:          {elf.elfclass}-bit")
    print(f"字节序:        {'小端' if elf.little_endian else '大端'}")
    print(f"机器架构:      {elf.header.e_machine}")
    print(f"文件类型:      {elf.header.e_type}")
    print(f"入口点:        0x{elf.header.e_entry:X}")

    # 检查是否去符号表
    symtab = elf.get_section_by_name('.symtab')
    print(f"已去符号表:    {'是' if symtab is None else '否'}")

    # 节熵值分析
    import math
    from collections import Counter
    for section in elf.iter_sections():
        data = section.data()
        if len(data) > 0:
            entropy = -sum((c/len(data)) * math.log2(c/len(data))
                          for c in Counter(data).values() if c > 0)
            if entropy > 7.0:
                print(f"  [!] 高熵节:{section.name}({entropy:.2f})")

步骤 2:提取字符串和指标

搜索嵌入的 IOC 和功能线索:

# ASCII 字符串
strings suspect_binary > strings_output.txt

# 搜索网络指标
grep -iE "(http|https|ftp)://" strings_output.txt
grep -iE "([0-9]{1,3}\.){3}[0-9]{1,3}" strings_output.txt
grep -iE "[a-zA-Z0-9.-]+\.(com|net|org|io|ru|cn)" strings_output.txt

# 搜索 shell 命令
grep -iE "(bash|sh|wget|curl|chmod|/tmp/|/dev/)" strings_output.txt

# 搜索挖矿指标
grep -iE "(stratum|xmr|monero|pool\.|mining)" strings_output.txt

# 搜索 SSH/凭据窃取
grep -iE "(ssh|authorized_keys|id_rsa|shadow|passwd)" strings_output.txt

# 搜索持久化机制
grep -iE "(crontab|systemd|init\.d|rc\.local|ld\.so\.preload)" strings_output.txt

# FLOSS 用于混淆字符串(如可用)
floss suspect_binary

步骤 3:分析系统调用和库使用

识别恶意软件使用的系统调用和库:

# 列出导入函数(动态链接)
readelf -r suspect_binary | grep -E "socket|connect|exec|fork|open|write|bind|listen"

# 在执行期间追踪系统调用(仅在隔离虚拟机中)
strace -f -e trace=network,process,file -o strace_output.txt ./suspect_binary

# 追踪库调用
ltrace -f -o ltrace_output.txt ./suspect_binary

# 需要关注的关键系统调用:
# 网络:socket、connect、bind、listen、accept、sendto、recvfrom
# 进程:fork、execve、clone、kill、ptrace
# 文件:open、read、write、unlink、rename、chmod
# 持久化:inotify_add_watch(文件监控)

步骤 4:使用 GDB 进行动态分析

调试恶意软件以观察运行时行为:

# 使用二进制文件启动 GDB
gdb ./suspect_binary

# 在关键函数上设置断点
(gdb) break main
(gdb) break socket
(gdb) break connect
(gdb) break execve
(gdb) break fork

# 运行并分析
(gdb) run
(gdb) info registers    # 查看寄存器状态
(gdb) x/20s $rdi        # 检查字符串参数
(gdb) bt                # 调用栈回溯
(gdb) continue

# 对于去符号表的二进制文件,在入口点断点
(gdb) break *0x400580   # 来自 readelf 的入口点
(gdb) run

# 在执行期间监控网络连接
# 在另一个终端:
ss -tlnp  # 列出监听套接字
ss -tnp   # 列出已建立的连接

步骤 5:使用 Ghidra 逆向工程

对 ELF 二进制文件进行深度代码分析:

Ghidra 对 Linux ELF 的分析:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 导入:文件 -> 导入 -> 选择 ELF 二进制文件
   - Ghidra 自动检测 ELF 格式和架构
   - 接受默认分析选项

2. 关键分析目标:
   - main() 函数(或去符号表时的入口点)
   - 套接字创建和连接函数
   - 命令分发逻辑(对接收数据的 switch/case)
   - 加密/编码例程
   - 持久化安装代码
   - 自传播/扫描函数

3. 对于类 Mirai 僵尸网络,查找:
   - 暴力破解凭据列表(telnet/SSH)
   - 攻击模块选择(UDP 洪泛、SYN 洪泛、ACK 洪泛)
   - 扫描模块(扫描易受攻击设备的端口)
   - 清除模块(杀死竞争性僵尸网络)

4. 对于挖矿程序,查找:
   - 挖矿池连接(stratum 协议)
   - 钱包地址字符串
   - CPU/GPU 利用函数
   - 进程隐藏技术

步骤 6:分析 Linux 特定持久化机制

检查持久化机制:

# 检查 LD_PRELOAD rootkit
strings suspect_binary | grep "ld.so.preload"
# 写入 /etc/ld.so.preload 的恶意软件可钩住所有动态库调用

# 检查 crontab 持久化
strings suspect_binary | grep -i "cron"

# 检查 systemd 服务创建
strings suspect_binary | grep -iE "systemd|\.service|systemctl"

# 检查 init 脚本创建
strings suspect_binary | grep -iE "init\.d|rc\.local|update-rc"

# 检查 SSH 密钥注入
strings suspect_binary | grep -i "authorized_keys"

# 检查内核模块(rootkit)加载
strings suspect_binary | grep -iE "insmod|modprobe|init_module"

# 检查进程隐藏
strings suspect_binary | grep -iE "proc|readdir|getdents"

核心概念

术语定义
ELF(可执行和可链接格式)Linux 可执行文件、共享库和核心转储的标准二进制格式,包含头部、节和段
去符号表二进制文件删除了调试符号的 ELF 二进制文件,因函数名丢失而使逆向工程更困难
LD_PRELOAD指定在所有其他库之前加载的共享库的 Linux 环境变量;被 rootkit 滥用以拦截系统库调用
straceLinux 系统调用追踪器,记录进程发出的所有系统调用和信号,揭示文件、网络和进程操作
GOT/PLT全局偏移表和过程链接表;用于动态链接的 ELF 结构,可被劫持用于函数钩子
静态链接包含所有库代码的二进制文件;在物联网恶意软件中常见,以便在没有匹配共享库的系统上运行
Mirai通过 telnet 暴力破解针对物联网设备的知名 Linux 僵尸网络;源代码泄露,导致许多变种出现

工具与系统

  • Ghidra:NSA 逆向工程工具,完整支持 x86、x86_64、ARM、MIPS 和其他 Linux 架构的 ELF 格式
  • Radare2:开源逆向工程框架,具有命令行界面,用于快速二进制分析和脚本化
  • strace:Linux 系统调用追踪工具,用于观察包括文件、网络和进程操作在内的二进制行为
  • GDB:GNU 调试器,用于设置断点、检查内存和逐步执行 Linux 二进制文件
  • pyelftools:Python ELF 文件解析库,用于自动化分析流程

常见场景

场景:分析在被攻陷的 Linux 服务器上发现的挖矿程序

场景背景:一台云服务器显示 100% CPU 使用率。调查发现一个名称可疑的未知二进制文件从 /tmp 运行。需要分析该二进制文件以确认其为挖矿程序,并识别攻击者的钱包和矿池。

方法:

  1. 将二进制文件复制到分析虚拟机并计算 SHA-256 哈希值
  2. 运行 file 和 readelf 识别架构和链接类型
  3. 提取字符串并搜索矿池地址(stratum+tcp://)和钱包地址
  4. 在沙箱中配合 strace 运行以观察网络连接(矿池连接)
  5. 导入 Ghidra 以识别挖矿算法和配置提取
  6. 检查持久化机制(crontab、systemd 服务、SSH 密钥)
  7. 记录所有 IOC,包括矿池地址、钱包、用于更新的 C2 和持久化工件

常见陷阱:

  • 在沙箱外运行 ldd 分析恶意软件(ldd 可以执行二进制文件中的代码)
  • 未检查 ARM/MIPS 架构就尝试 x86_64 执行
  • 遗漏可能处理持久化和清理的伴随脚本(.sh 文件)
  • 忽略初始访问向量(挖矿程序如何部署:SSH 暴力破解、Web 漏洞利用、容器逃逸)

输出格式

LINUX ELF 恶意软件分析报告
====================================
文件:            /tmp/.X11-unix/.rsync
SHA-256:         e3b0c44298fc1c149afbf4c8996fb924...
类型:            ELF 64 位 LSB 可执行文件,x86-64
链接:            静态链接(所有库已嵌入)
已去符号表:      是
大小:            2,847,232 字节
打包器:          UPX 3.96(已解包用于分析)

分类
家族:            XMRig 挖矿程序(已修改)
变种:            带 C2 更新机制的自定义构建

功能
[*] 通过 RandomX 算法进行 XMR(门罗币)挖矿
[*] 通过 stratum 协议连接矿池提交工作
[*] C2 签到用于配置更新
[*] 进程名伪装(argv[0] = "[kworker/0:0]")
[*] 杀死竞争进程(杀死其他挖矿程序)
[*] SSH 密钥注入用于重新访问

网络指标
矿池:            stratum+tcp://pool.minexmr[.]com:4444
C2 服务器:       hxxp://update.malicious[.]com/config
钱包:            49jZ5Q3b...门罗币钱包地址...

持久化机制
[1] Crontab 条目:*/5 * * * * /tmp/.X11-unix/.rsync
[2] SSH 密钥添加到 /root/.ssh/authorized_keys
[3] Systemd 服务:/etc/systemd/system/rsync-daemon.service
[4] 修改 /etc/ld.so.preload 用于进程隐藏

进程隐藏
LD_PRELOAD:      /usr/lib/.libsystem.so
钩子:            readdir() 从 ls 结果中隐藏 /tmp/.X11-unix/.rsync
钩子:            fopen() 从 /proc/*/maps 读取中隐藏
Skills enregistrées