analyzing-linux-elf-malware

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

9 stars

Best use case

analyzing-linux-elf-malware is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

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

Teams using analyzing-linux-elf-malware should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/analyzing-linux-elf-malware/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/analyzing-linux-elf-malware/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/analyzing-linux-elf-malware/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How analyzing-linux-elf-malware Compares

Feature / Agentanalyzing-linux-elf-malwareStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

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

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 分析 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 头部和基本属性:

```bash
# 文件类型识别
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
# 基于 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 和功能线索:

```bash
# 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:分析系统调用和库使用

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

```bash
# 列出导入函数(动态链接)
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 进行动态分析

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

```bash
# 使用二进制文件启动 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 特定持久化机制

检查持久化机制:

```bash
# 检查 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 滥用以拦截系统库调用 |
| **strace** | Linux 系统调用追踪器,记录进程发出的所有系统调用和信号,揭示文件、网络和进程操作 |
| **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 读取中隐藏
```

Related Skills

reverse-engineering-rust-malware

9
from killvxk/cybersecurity-skills-zh

使用 IDA Pro 和 Ghidra 对 Rust 编译的恶意软件进行逆向工程,掌握处理非空终止字符串、提取 crate 依赖项和 Rust 特有控制流分析的专项技术。

reverse-engineering-malware-with-ghidra

9
from killvxk/cybersecurity-skills-zh

使用 NSA 的 Ghidra 反汇编器和反编译器对恶意软件二进制文件进行逆向工程,在汇编和伪 C 代码层面理解其内部逻辑、密码学例程、C2 协议和规避技术。适用于恶意软件逆向工程、反汇编分析、反编译、二进制分析或理解恶意软件内部机制等请求。

reverse-engineering-dotnet-malware-with-dnspy

9
from killvxk/cybersecurity-skills-zh

使用 dnSpy 反编译器和调试器对 .NET 恶意软件进行逆向工程,分析 C#/VB.NET 源代码,识别混淆技术,提取配置信息,理解包括信息窃取器、远程访问木马(RAT)和加载器在内的恶意功能。适用于 .NET 恶意软件分析、C# 恶意软件反编译、托管代码逆向工程或 .NET 混淆分析等请求。

reverse-engineering-android-malware-with-jadx

9
from killvxk/cybersecurity-skills-zh

使用 JADX 反编译器对恶意 Android APK 文件进行逆向工程,分析 Java/Kotlin 源代码,识别包括数据窃取、C2 通信、权限提升和覆盖攻击在内的恶意功能。检查 Manifest 权限、Receiver、Service 及原生库。适用于 Android 恶意软件分析、APK 逆向工程、移动端恶意软件调查或 Android 威胁分析等请求。

performing-static-malware-analysis-with-pe-studio

9
from killvxk/cybersecurity-skills-zh

使用 PEStudio 对 Windows PE(可移植可执行文件)恶意软件样本进行静态分析, 检查文件头、导入表、字符串、资源和指标,无需执行二进制文件。 识别可疑特征,包括加壳、反分析技术和恶意导入。适用于静态恶意软件分析、 PE 文件检查、Windows 可执行文件分析或执行前恶意软件分级等请求场景。

performing-privilege-escalation-on-linux

9
from killvxk/cybersecurity-skills-zh

Linux 权限提升是指在已控制的系统上从低权限用户账户提升至 root 访问权限。红队通过利用错误配置、存在漏洞的服务、内核漏洞利用和弱权限来实现 root 访问。

performing-malware-triage-with-yara

9
from killvxk/cybersecurity-skills-zh

使用 YARA 规则对文件模式、字符串、字节序列和结构特征进行匹配,快速分级和分类恶意软件样本, 识别已知恶意软件家族及可疑指标。涵盖规则编写、扫描和与分析流程的集成。适用于 YARA 规则创建、 恶意软件分类、模式匹配、样本分级或基于签名的检测等请求场景。

performing-malware-persistence-investigation

9
from killvxk/cybersecurity-skills-zh

系统性地调查 Windows 和 Linux 系统上的所有持久化机制,以识别恶意软件如何在重启后存活并维持访问。

performing-malware-ioc-extraction

9
from killvxk/cybersecurity-skills-zh

恶意软件 IOC(失陷指标)提取是指通过分析恶意软件,识别可操作的失陷指标,包括文件哈希、网络指标(C2 域名、IP 地址、URL)、注册表修改、互斥体名称、嵌入字符串和行为产物。

performing-malware-hash-enrichment-with-virustotal

9
from killvxk/cybersecurity-skills-zh

使用 VirusTotal API 富化恶意软件文件哈希,获取检测率、行为分析、YARA 匹配和上下文威胁情报,用于事件分类和 IOC 验证。

performing-linux-log-forensics-investigation

9
from killvxk/cybersecurity-skills-zh

对 Linux 系统日志(包括 syslog、auth.log、systemd journal、kern.log 和应用程序日志)进行取证调查,以重建用户活动、检测未授权访问并在被入侵的 Linux 系统上建立事件时间线。

performing-firmware-malware-analysis

9
from killvxk/cybersecurity-skills-zh

分析固件镜像中嵌入的恶意软件、后门和未授权修改,目标包括路由器、IoT 设备、UEFI/BIOS 和嵌入式系统。涵盖固件提取、文件系统分析、二进制逆向工程和 Bootkit 检测。适用于固件安全 分析、IoT 恶意软件调查、UEFI Rootkit 检测或嵌入式设备入侵评估等请求场景。