原文:https://blog.ensilo.com/darkgate-malware

近日一类在野活跃且隐秘型很好的多功能恶意软件感染了西班牙和法国的诸多用户主机,其功能复杂完善,近乎绕过了市面上所有AV的检测。

0x01 摘要

近日国外安全专家enSilo和Adi Zeligson发现了一款叫做DarkGate且从未被AV检测到的高度复杂的恶意软件。其设计是针对Windows工作站和支持一个反应性的命令和控制系统,DarkGate通过torrent文件传播。当用户执行时,DarkGate能够绕过多个AV产品的检测并执行恶意代码,包括加密货币挖掘、密码窃取、勒索和远程控制等。

DarkGate的特点:

0x02 技术分析

这种恶意软件名为DarkGate,通过分析得知其旨在感染整个欧洲,特别是西班牙和法国的目标。DarkGate的功能包括挖矿、从加密钱包窃取凭证、勒索以及对感染PC进行远程控制。

enSilo发现这个恶意软件的作者建立了一个执行命令和控制的机制,方便他们在接收到新感染的密码钱包的通知后采取行动。如果DarkGate检测用户有任何有趣的操作时,他们就可以在被感染的机器上安装一个定制的远程访问工具,方便进行手动操作。

日常研究恶意软件活动的过程中,为了其功能以及开发者在感染后的操作我们偶尔会主动让恶意软件感染自己的测试机器。比如某次与恶意软件的开发者的邂逅中,我们很确定对方检测到了我们的活动,并且对方立即使用了特制的勒索软件感染了我们的测试机器,从而阻止我们的分析。

DarkGate这款恶意软件的作者似乎投入了大量的时间和精力,利用多种规避技术来避免被发现。其中一种使用的技术是Hook用户模式来绕过,这种技术使得DarkGate可以在很长一段时间内逃避各种AV的检测。

enSilo研究小组跟踪了“DarkGate”及其变种,发现大多数AV厂商都没有发现它。也正是这个发现促使我们开始研究恶意软件的各种新特性,这些特性在技术分析部分有提到。DarkGate的每一个变种技术都在不断革新,值得关注。

虽然挖矿,盗密码和勒索这几个功能表明作者的动机是为了钱,但是作者是否还有其他动机有待商榷。

0x03 变种分析

通过技术分析我们可以发现DarkGate与此前检测到的Golroted恶意软有关联。其使用了Nt* API来调用并执行Process Hollowing。此外,Golroted还使用了UAC绕过技术,这是一种基于SilentCleanup计划任务的技术。DarkGate同时使用了这两种技术。

在分析Golroted和DarkGate二进制文件的差异后,我们发现了两者有大量重叠的代码。如图1所示,两种恶意软件的变异体都在进程vbc.exe上执行Process Hollowing函数。DarkGate稍作修改而已。

图1:Golrating和DARKGATE的二进制文件差异

0x04 感染策略

可以确定的是DarkGate和Golroted使用的两种截然不同的感染方法。恶意文件伪装为电影和电视剧的Torrent文件进行传播并在受害者的机器上执行VB脚本。

如图2所示众的第二个文件,the-walking-dead-9-5-hdtv-720p.torrent.vbe使用了一种更简单的方法来感染受害者,那就是直接发带有恶意文件的钓鱼邮件(图3)。

图2:TORRENT文件的截图

图3 包含THE-WALKING-DEAD-9-5-HDTV-720P.TORRENT.VBE文件的钓鱼邮件

0x05 DARKGATE执行四部曲

0x05_add_01 起

DARKGATE使用了一种独特的多级解压方法。执行的第一个文件是被混淆后的VB脚本,其功能类似于国内的Downloader,只执行一些简单的操作。紧随其后的第一阶段,几个文件会被放入一个隐藏后的文件夹C:\{username}。其中包括autoit3.exetest.au3, pe.binshell.txt。接下来test.au3这个AutoIt脚本会调用autoit3.exe的删除功能并执行。

图4 被混淆后的VB脚本

0x05_add_02 承

在第二阶段,AutoIt脚本会在自启目录下创建了一个名为bill.ink的快捷方式。创建完成后触发C:\{username}\shell.txt文件中的二进制代码。

0x05_add_03 转

第三个阶段将会解密并执行shell.txt中的代码。该脚本使用了一种非常少见的技术来执行二进制代码。主要流程如下:

图5 解密后的AUTOIT脚本

0x05_add_04 合

最后,在前面提到的多级解压技术下从shell.txt中加载的二进制代码并执行以下操作:

研究发现如果DarkGate检测到卡巴斯基的存在,它会将恶意软件加载到shellcode的一部分,而不是使用Process Hollowing技术。解密后的pe.bin文件是DarkGate的核心文件。负责与C&C服务器通信并执行接收到的命令。

总结一下这四个阶段的解压技术:

  1. 加载的初始代码是使用VB编写的,负责删除所有相关文件:

  2. autoit3.exe

  3. test.au3
  4. pe.bin
  5. shell.txt

一旦点击就会运行AutoIt脚本。

  1. AutoIt脚本用AutoIt解释器运行并解密二进制代码,然后将其加载到内存中。
  2. 执行二进制代码并绕过卡巴斯基的检测。
  3. 解密并执行最终的二进制文件pe.bin

图6 上诉四部曲流程图

最终的二进制文件会从C:\{computer_name}复制到C:\Program data并使用当前用户生成id的前8位数字作为文件名称(格式为:ID2-xxxxx 后面会解释)。

最后的二进制文件在注册表中写入一个键值:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

键名是用户生成id的前8位数字,键值是从C:\{computer_name}复制到C:\Program data文件夹的AutoIt脚本,如图7所示:

图7 写入的键值

0x06 挖矿分析

DarkGate会先从C&C服务器上获取挖矿的程序

图8 挖矿程序的下载请求

如图9所示, startminer命令请求作为响应的一部分,目的是告诉恶意软件开始挖掘。分离消息的不同部分,第一部分将被加密写入config.bin配置中。即矿工程序的命令行。第二部分是cpu.bin解密后的矿工可执行文件。挖掘代码本身是通过Process Hollowing技术注入到systeminfo.exe进程完成的。

图9:检索矿工负载

0x07 钱包凭证窃取分析

前面提到恶意软件的另一个功能是可以搜索并窃取加密钱包的凭证。恶意软件在windows前台进程的名称中查找与不同类型的加密钱包相关的特定字符串,如果找到匹配的字符串,则向C&C服务器发送特定的消息。

以下是受影响的网站/钱包程序列表:

检索值 目标
sign-in / hitbtc https://hitbtc.com/
binance - log in https://www.binance.com/login.html
litebit.eu - login https://www.litebit.eu/en/login
binance - iniciar sesi https://www.binance.com/login.html
cryptopia - login https://www.cryptopia.co.nz/Login
user login - zb spot exchange
sign in coinEx https://www.coinex.com/account/signin?lang=en_US
electrum https://electrum.org/#home
bittrex.com - input https://international.bittrex.com/
exchange - balances
eth) - log in
blockchain wallet https://www.blockchain.com/wallet
bitcoin core https://bitcoincore.org/
kucoin https://www.kucoin.com/#/
metamask https://metamask.io/
factores-Binance
litecoin core https://litecoin.org/
myether https://www.myetherwallet.com/

表1 受影响的网站及钱包程序

0x08 控制分析

以目前的情况来看,似乎DarkGate的作者使用了很复杂的技术来避免逆向分析以及网络安全产品的检测。

DarkGate将六个域名硬编码在了代码里面,如下所示:

值得一提的事作者似乎还使用了另一个混淆视听的技巧,即使用这些C2地址看起来像来自Akamai或Amazon的合法rDNS记录的NS记录。使用rDNS通信的原意是应该任何监视网络流量的人都很容易忽略和忽略它们。

0x09 两种避免AV检测的手法

DarkGate的作者最担心的似乎是AV的检测。所以其在反虚拟机和用户验证技术上投入了大量精力,而不是反调试技术。

0x09_add_01 反虚拟机

DarkGate用来避免被AV检测到的第一种方法是确定自身是否是在沙箱或者虚拟机中。基于所使用的策略,我们认为作者开发时检测沙箱/虚拟机的部分不多,事实如此,因为现在的沙箱经过了很多优化,过多的检测也无益。

在图10中,我们可以看到DarkGate使用Delphi的Sysutils::DiskSizeGlobalMemoryStatusEx来获取磁盘大小和物理内存。如果当前该计算机的磁盘空间小于101GB或内存小于4GB就会被视为虚拟机,DarkGate将自动终止运行。

图10 环境硬盘和RAM的检测

0x09_add_02 反AV

DarkGate会检测表2中列出的AV是否存在于受感染的机器上。除了卡巴斯基,Trend和IOBIt。对于其他大多数的AV来说,如果恶意软件检测到任何这些AV,它门也就只会通知服务器而已。

进程名 AV厂商
astui.exe Avast
avpui.exe Kaspersky
avgui.exe AVG
egui.exe Nod32
bdagent Bitdefender
avguard.exe Avira
nis.exe Norton
ns.exe Norton
nortonsecurity.exe Norton
uiseagnt.exe Trend Micro
bytefence.exe ByteFence
psuaconsole.exe Panda
sdscan.exe Search & Destroy mcshield.exe McAfee
mcuicnt.exe McAfee
mpcmdrun.exe Windows Defender
superantispyware.exe SUPER AntiSpyware
vkise.exe Comodo
mbam.exe MalwareBytes
cis.exe Comodo
msascuil.exe Windows Defender

表2 DarkGate检测的av列表

对于自卡巴斯基、IOBit或Trend Micro来说:

0x10 恢复工具

DarkGate还会通过表3中列出的进程名称来检测是否存在几种已知的恢复工具:

进程名 工具
adwcleaner.exe MalwareBytes Adwcleaner
frst64.exe Farbar Recovery Scan Tool
frst32.exe Farbar Recovery Scan Tool
frst86.exe Farbar Recovery Scan Tool

表3 DarkGate检测的恢复工具列表

一旦检测到这些存在DarkGate将发起一个新的线程,以每20秒的速度重新分配恶意软件文件,以确保如果文件在恢复工具的生命周期内被删除,它将被重新创建和重新定位到其他地方。

0x11 系统调用

为了隐藏Process Hollowing技术的使用,DarkGate使用了一种特殊的技术使其能够直接调用内核模式的函数。这可以帮助其逃离调试器设置的任何断点,并避开不同安全产品设置的用户域的Hook钩子。

0x11_add_01 如何调用系统内核函数

当DarkGate使用来自ntdll.exe的函数时。它会针对32位和64位系统之间的调用方式不同对内核进行系统调用,最终目的都是为了调用KiFastSystemCall函数。KiFastSystemCall函数用于在环3和环0之间进行切换。DarkGate会避免加载ntdll.dll后以正确的方式运行,而不是创建自己的KiFastSystemCall函数来生成syscall

DarkGate是一个32位的程序,因为切换到内核时系统之间存在差异,DarkGate在64位系统上运行时可能会出错。为了在进程中使用的是正确的KiFastSystemCall函数,DarkGate会搜索路径C: Windows\SysWOW64\ntdll.dll来检查它正在运行的架构。如果该路径存在,则意味着进程是在64位系统上运行。

图11 根据系统位数不同分配对应的功能函数

在32位系统中,KiFastSystemCall函数将如下所示:

图12 KiFastSystemCall函数在32位系统中的截图

在64位系统中,以下代码用于从32位进程调用64位函数:

图13 KiFastSystemCall函数在64位系统中的截图

偏移量fs:0C0h是wow64中TEB(线程信息块)到FastSysCall的指针。这个指针指向wow64cpu.dll中的地址。它负责跳转到64位的“KiFastSystemCall”函数。DarkGate将传递给指定的函数,即ntdll请求的函数syscall所需的参数。这样它就可以调用内核函数,而不需要从ntdll.dll中调用该函数。最后,DarkGate创建了自己的KiFastSystemCall来绕过ntdll.dll

与该功能类似的代码点我

0x12 UAC绕过

DarkGate使用了两种不同的UAC绕过技术来尝试提升权限。

0x12_add_01 磁盘清理

第一种UAC绕过技术利用一个被称为磁盘清理的计划任务。这个计划任务使用路径%windir%\system32\cleanmgr.exe。DarkGate用注册表键覆盖%windir%环境变量:HKEY_CURRENT_USER\Enviroment\windir,并使用另一个命令执行AutoIt脚本。这种绕过技术在Tyranid’s Lair里能找到更详细的介绍。

图14 磁盘清理绕过

0x12_add_02 EVENTVWR UAC

第二种UAC绕过利用了eventvwr.exe默认必须以高度完整性运行的特性,并执行mmc.exe二进制文件(微软管理控制台)。mmc.exe命令来自于HKCU\Software\Classes\mscfile\shell\open\command注册表项。这个注册表项也可以从较低的完整性级别写入,这使它能够以较高的完整性来执行AutoIt脚本。

图15 EVENTVWR UAC绕过

0x13 键盘记录

DarkGate会启动一个线程来责捕获所有键盘事件并将其记录到预定义的日志文件中。除了记录键日志外,它还记录前台窗口和剪贴板。日志以“当前日期”的名称保存。日志保存在下列目录:

C:\users\ {username}\appdata\roaming\{ID1}

图16 键盘记录的相关文件

0x14 信息窃取

DarkGate会使用一些NirSoft工具来从受感染的机器上窃取凭证或信息。这些工具集可以帮助它窃取用户凭证、浏览器cookie、浏览器历史记录和Skype聊天记录。所有工具都是使用Process Hollowing技术在vbc.exe或regasm.exe进程中执行的。

DarkGate会使用以下程序窃取凭证:

从工具中收集的结果数据都是从宿主进程内存中提取的。DarkGate首先会使用FindWindow API函数查找工具的窗口。然后使用SysListView32控件和sendMessage API函数从工具中检索所需的信息。检索通过在图17中所示的Process Hollowing中分配内存缓冲区来完成。

图17 DarkGate在内存中检索信息
随后DarkGate将使用GetItem函数使其将项写入分配的缓冲区。GetItem函数是通过调用API函数SendMessage以及消息函数LVM_GETITEMA和分配的缓冲区作为参数的:

图18 GETITEM等函数

将目标项写入分配的缓冲区后,DarkGate就读取当前内存区域并获取信息了。

0x15 删除恢复点

DarkGate具有删除所有系统恢复点的功能,包括cmd.exe /c vssadmin delete shadows /for=c: /all /quiet

0x16 RDP安装

这个命令将使用Process Hollowing技术解密并执行接收到的文件,也就是说可以安装rdp连接工具。在本问中提到的是,Process Hollowing解密的%temp%目录systeminfo.exe的副本。

此外,DarkGate将使用cmd.exe执行以下命令:

exe /c net user /add SafeMode Darkgate0!
exe /c net localgroup administrators SafeMode /add
exe /c net localgroup administradores SafeMode /add
exe /c net localgroup administrateurs SafeMode /add

有趣的是新创建的用户会被添加到西班牙和法国的管理组中(没有政治思想的开发者不是一个好黑客?【手动狗头】)。

0x17 获取Bot上的数据

C&C服务器可以获取以下受害者主机的详细信息:

0x18 DarGate防御

目前使用Endpoint安全平台可成功阻断该软件的通信和运行。

图19:ENSILO事件图

0x19 样本信息

C&C域
akamai.la
hardwarenet.cc
ec2-14-122-45-127.compute-1.amazonaws.cdnprivate.tel
awsamazon.cc
battlenet.la
a40-77-229-13.deploy.static.akamaitechnologies.pw
样本Hash值
3340013b0f00fe0c9e99411f722f8f3f0baf9ae4f40ac78796a6d4d694b46d7b
0c3ef20ede53efbe5eebca50171a589731a17037147102838bdb4a41c33f94e5
3340013b0f00fe0c9e99411f722f8f3f0baf9ae4f40ac78796a6d4d694b46d7b
0c3ef20ede53efbe5eebca50171a589731a17037147102838bdb4a41c33f94e5
52c47a529e4ddd0778dde84b7f54e1aea326d9f8eeb4ba4961a87835a3d29866
b0542a719c6b2fc575915e9e4c58920cf999ba5c3f5345617818a9dc14a378b4
dadd0ec8806d506137889d7f1595b3b5447c1ea30159432b1952fa9551ecfba5
c88eab30fa03c44b567bcb4e659a60ee0fe5d98664816c70e3b6e8d79169cbea
2264c2f2c2d5a0d6d62c33cadb848305a8fff81cdd79c4d7560021cfb304a121
3c68facf01aede7bcd8c2aea853324a2e6a0ec8b026d95c7f50a46d77334c2d2
a146f84a0179124d96a707f192f4c06c07690e745cffaef521fcda9633766a44
abc35bb943462312437f0c4275b012e8ec03899ab86d353143d92cbefedd7f9d
908f2dfed6c122b46e946fe8839feb9218cb095f180f86c43659448e2f709fc7
3491bc6df27858257db26b913da8c35c83a0e48cf80de701a45a30a30544706d

0x20 参考文献:

Akamai简介
如何绕过现代Process Hollowing检测机制
如何使用SilentCleanup绕过UAC?
使用EVENTVWR.EXE和注册表劫持实现“无文件”UAC绕过

源链接

Hacking more

...