自动化与脚本
分析 Linux ELF 恶意软件(僵尸网络、挖矿木马…
当 Linux 服务器、容器或云基础设施被入侵并发现可疑 ELF 二进制时,通过静态检查、动态追踪和逆向工程确认其功能与 IOC。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
分析 Linux ELF 恶意软件(僵尸通用
解决思路
- 识别 ELF 二进制属性:用 file 判断文件类型,readelf -h 查看 ELF 头,readelf -S 查看节头,readelf -l 查看程序头(段),readelf -s 和 nm 查看符号表(若未 strip),readelf -d 和 ldd 查看动态链接信息(ldd 仅在架构匹配时使用),md5sum/sha256sum 计算哈希,upx -t 检查是否被 UPX 加壳。
- 用 Python 的 pyelftools 做程序化 ELF 分析:读取文件计算 SHA-256,用 ELFFile 输出 class(位数)、字节序、e_machine、e_type、入口点,检查 .symtab 是否存在以判断是否 stripped,并对每个节计算熵值,熵大于 7.0 的节标记为高熵可疑节。
- 提取字符串与 IOC:用 strings 导出全部字符串,grep 搜索 URL(http/https/ftp)、IP 地址、域名(.com/.net/.org/.io/.ru/.cn)、shell 命令(bash/sh/wget/curl/chmod//tmp//dev/)、挖矿特征(stratum/xmr/monero/pool./mining)、SSH 与凭据窃取特征(ssh/authorized_keys/id_rsa/shadow/passwd)、持久化特征(crontab/systemd/init.d/rc.local/ld.so.preload);如有 FLOSS 则用其提取混淆字符串。
- 分析系统调用与库调用:用 readelf -r 列出导入函数并 grep socket/connect/exec/fork/open/write/bind/listen;在隔离 VM 中用 strace -f -e trace=network,process,file -o strace_output.txt 追踪网络、进程、文件相关系统调用;用 ltrace -f -o ltrace_output.txt 追踪库调用;重点关注网络类(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,在 main、socket、connect、execve、fork 等关键函数下断点;run 后用 info registers 查看寄存器、x/20s $rdi 查看字符串参数、bt 查看调用栈、continue 继续执行;对 stripped 二进制用 readelf 得到的入口点地址下断点(如 break *0x400580);另开终端用 ss -tlnp 查看监听套接字、ss -tnp 查看已建立连接以监控网络行为。
- 用 Ghidra 逆向:File -> Import 导入 ELF 二进制,Ghidra 自动识别 ELF 格式与架构,接受默认分析选项;重点分析 main()(或 stripped 时的入口点)、socket 创建与连接函数、命令分发逻辑(对接收数据的 switch/case)、加解密/编码例程、持久化安装代码、自传播/扫描函数;对 Mirai 类僵尸网络查找暴力破解凭据列表(telnet/SSH)、攻击模块选择(UDP flood/SYN flood/ACK flood)、扫描模块(扫描脆弱设备端口)、killer 模块(杀死竞争僵尸网络);对挖矿木马查找矿池连接(stratum 协议)、钱包地址字符串、CPU/GPU 占用函数、进程隐藏技术。
- 分析 Linux 特有持久化:用 strings 配合 grep 检查 LD_PRELOAD rootkit(ld.so.preload,写入 /etc/ld.so.preload 可劫持所有动态库调用)、crontab 持久化(cron)、systemd 服务创建(systemd/.service/systemctl)、init 脚本创建(init.d/rc.local/update-rc)、SSH 密钥注入(authorized_keys)、内核模块 rootkit 加载(insmod/modprobe/init_module)、进程隐藏(proc/readdir/getdents)。
适用边界 · 注意事项
- 不适用于 Windows PE 二进制分析,Windows 恶意软件应使用 PEStudio、Ghidra 或 IDA。
- 不要在非隔离环境(沙箱/分析 VM 之外)运行 ldd,因为 ldd 可能执行二进制中的代码。
- 在尝试 x86_64 执行前必须先确认样本架构,避免对 ARM/MIPS 样本误操作。