Analyzes malicious Linux ELF binaries including botnets, miners, ransomware, rootkits on servers/containers/cloud via static/dynamic analysis and reverse engineering for x86_64/ARM.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cybersecurity-skills-zh:analyzing-linux-elf-malwareThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- Linux 服务器或容器被攻陷,发现可疑 ELF 二进制文件
不适用于 Windows PE 二进制文件分析;请使用 PEStudio、Ghidra 或 IDA 分析 Windows 恶意软件。
检查 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})")
搜索嵌入的 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
识别恶意软件使用的系统调用和库:
# 列出导入函数(动态链接)
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(文件监控)
调试恶意软件以观察运行时行为:
# 使用二进制文件启动 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 # 列出已建立的连接
对 ELF 二进制文件进行深度代码分析:
Ghidra 对 Linux ELF 的分析:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 导入:文件 -> 导入 -> 选择 ELF 二进制文件
- Ghidra 自动检测 ELF 格式和架构
- 接受默认分析选项
2. 关键分析目标:
- main() 函数(或去符号表时的入口点)
- 套接字创建和连接函数
- 命令分发逻辑(对接收数据的 switch/case)
- 加密/编码例程
- 持久化安装代码
- 自传播/扫描函数
3. 对于类 Mirai 僵尸网络,查找:
- 暴力破解凭据列表(telnet/SSH)
- 攻击模块选择(UDP 洪泛、SYN 洪泛、ACK 洪泛)
- 扫描模块(扫描易受攻击设备的端口)
- 清除模块(杀死竞争性僵尸网络)
4. 对于挖矿程序,查找:
- 挖矿池连接(stratum 协议)
- 钱包地址字符串
- CPU/GPU 利用函数
- 进程隐藏技术
检查持久化机制:
# 检查 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 僵尸网络;源代码泄露,导致许多变种出现 |
场景背景:一台云服务器显示 100% CPU 使用率。调查发现一个名称可疑的未知二进制文件从 /tmp 运行。需要分析该二进制文件以确认其为挖矿程序,并识别攻击者的钱包和矿池。
方法:
file 和 readelf 识别架构和链接类型常见陷阱:
ldd 分析恶意软件(ldd 可以执行二进制文件中的代码)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 读取中隐藏
npx claudepluginhub killvxk/cybersecurity-skills-zhAnalyzes malicious Linux ELF binaries including botnets, cryptominers, ransomware, and rootkits targeting servers, containers, and cloud infrastructure.
Analyzes malicious Linux ELF binaries including botnets, cryptominers, ransomware, rootkits targeting servers, containers, cloud infrastructure. Covers static analysis, dynamic tracing, reverse engineering for x86_64/ARM.
Analyzes malicious Linux ELF binaries (botnets, cryptominers, ransomware, rootkits) using static analysis, dynamic tracing, and reverse engineering with tools like Ghidra, readelf, strace, and GDB.