原文:https://blog.ensilo.com/darkgate-malware
近日一类在野活跃且隐秘型很好的多功能恶意软件感染了西班牙和法国的诸多用户主机,其功能复杂完善,近乎绕过了市面上所有AV的检测。
近日国外安全专家enSilo和Adi Zeligson发现了一款叫做DarkGate且从未被AV检测到的高度复杂的恶意软件。其设计是针对Windows工作站和支持一个反应性的命令和控制系统,DarkGate通过torrent文件传播。当用户执行时,DarkGate能够绕过多个AV产品的检测并执行恶意代码,包括加密货币挖掘、密码窃取、勒索和远程控制等。
DarkGate的特点:
Process Hollowing
技术拦截。这种恶意软件名为DarkGate,通过分析得知其旨在感染整个欧洲,特别是西班牙和法国的目标。DarkGate的功能包括挖矿、从加密钱包窃取凭证、勒索以及对感染PC进行远程控制。
enSilo发现这个恶意软件的作者建立了一个执行命令和控制的机制,方便他们在接收到新感染的密码钱包的通知后采取行动。如果DarkGate检测用户有任何有趣的操作时,他们就可以在被感染的机器上安装一个定制的远程访问工具,方便进行手动操作。
日常研究恶意软件活动的过程中,为了其功能以及开发者在感染后的操作我们偶尔会主动让恶意软件感染自己的测试机器。比如某次与恶意软件的开发者的邂逅中,我们很确定对方检测到了我们的活动,并且对方立即使用了特制的勒索软件感染了我们的测试机器,从而阻止我们的分析。
DarkGate这款恶意软件的作者似乎投入了大量的时间和精力,利用多种规避技术来避免被发现。其中一种使用的技术是Hook用户模式来绕过,这种技术使得DarkGate可以在很长一段时间内逃避各种AV的检测。
enSilo研究小组跟踪了“DarkGate”及其变种,发现大多数AV厂商都没有发现它。也正是这个发现促使我们开始研究恶意软件的各种新特性,这些特性在技术分析部分有提到。DarkGate的每一个变种技术都在不断革新,值得关注。
虽然挖矿,盗密码和勒索这几个功能表明作者的动机是为了钱,但是作者是否还有其他动机有待商榷。
通过技术分析我们可以发现DarkGate与此前检测到的Golroted恶意软有关联。其使用了Nt* API
来调用并执行Process Hollowing
。此外,Golroted
还使用了UAC绕过技术,这是一种基于SilentCleanup
计划任务的技术。DarkGate同时使用了这两种技术。
在分析Golroted和DarkGate二进制文件的差异后,我们发现了两者有大量重叠的代码。如图1所示,两种恶意软件的变异体都在进程vbc.exe
上执行Process Hollowing
函数。DarkGate稍作修改而已。
图1:Golrating和DARKGATE的二进制文件差异
可以确定的是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
文件的钓鱼邮件
DARKGATE使用了一种独特的多级解压方法。执行的第一个文件是被混淆后的VB脚本,其功能类似于国内的Downloader,只执行一些简单的操作。紧随其后的第一阶段,几个文件会被放入一个隐藏后的文件夹C:\{username}
。其中包括autoit3.exe
,test.au3
, pe.bin
,shell.txt
。接下来test.au3这个AutoIt脚本会调用autoit3.exe的删除功能并执行。
图4 被混淆后的VB脚本
在第二阶段,AutoIt脚本会在自启目录下创建了一个名为bill.ink
的快捷方式。创建完成后触发C:\{username}\shell.txt
文件中的二进制代码。
第三个阶段将会解密并执行shell.txt
中的代码。该脚本使用了一种非常少见的技术来执行二进制代码。主要流程如下:
shell.txt
众加载二进制代码并载入内存DLLStructCreate
和DllStructSetData
)CallWindowProc
的二进制代码并作为lpPrevWndFunc
参数来调用图5 解密后的AUTOIT脚本
最后,在前面提到的多级解压技术下从shell.txt
中加载的二进制代码并执行以下操作:
pe.bin
并解密。Process Hollowing
技术将从pe.bin
解密出来的代码注入到vbc.exe
进程中。研究发现如果DarkGate检测到卡巴斯基的存在,它会将恶意软件加载到shellcode的一部分,而不是使用Process Hollowing
技术。解密后的pe.bin
文件是DarkGate的核心文件。负责与C&C服务器通信并执行接收到的命令。
总结一下这四个阶段的解压技术:
加载的初始代码是使用VB编写的,负责删除所有相关文件:
autoit3.exe
一旦点击就会运行AutoIt脚本。
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 写入的键值
DarkGate会先从C&C服务器上获取挖矿的程序
图8 挖矿程序的下载请求
如图9所示, startminer
命令请求作为响应的一部分,目的是告诉恶意软件开始挖掘。分离消息的不同部分,第一部分将被加密写入config.bin
配置中。即矿工程序的命令行。第二部分是cpu.bin
解密后的矿工可执行文件。挖掘代码本身是通过Process Hollowing
技术注入到systeminfo.exe
进程完成的。
图9:检索矿工负载
前面提到恶意软件的另一个功能是可以搜索并窃取加密钱包的凭证。恶意软件在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 受影响的网站及钱包程序
以目前的情况来看,似乎DarkGate的作者使用了很复杂的技术来避免逆向分析以及网络安全产品的检测。
DarkGate将六个域名硬编码在了代码里面,如下所示:
值得一提的事作者似乎还使用了另一个混淆视听的技巧,即使用这些C2地址看起来像来自Akamai或Amazon的合法rDNS记录的NS记录。使用rDNS通信的原意是应该任何监视网络流量的人都很容易忽略和忽略它们。
DarkGate的作者最担心的似乎是AV的检测。所以其在反虚拟机和用户验证技术上投入了大量精力,而不是反调试技术。
DarkGate用来避免被AV检测到的第一种方法是确定自身是否是在沙箱或者虚拟机中。基于所使用的策略,我们认为作者开发时检测沙箱/虚拟机的部分不多,事实如此,因为现在的沙箱经过了很多优化,过多的检测也无益。
在图10中,我们可以看到DarkGate使用Delphi的Sysutils::DiskSize
和GlobalMemoryStatusEx
来获取磁盘大小和物理内存。如果当前该计算机的磁盘空间小于101GB或内存小于4GB就会被视为虚拟机,DarkGate将自动终止运行。
图10 环境硬盘和RAM的检测
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来说:
IOBit: 如果路径C:\\Program Files (x86)\\IObit
存在,恶意软件将尝试终止一个名为monitor.exe
的进程。此外,它将产生一个新的线程,该线程将反复查找并终止进程smBootTime.exe
。
Trend Micro: 如果检测到Trend Micro的进程名,代码将不会执行关键日志的线程。
卡巴斯基:DarkGate在执行过程中会多次检查其是否存在,无论是在解包过程中,还是在恶意软件本身中,都会检测卡巴斯基是否存在。
如果是在最终的可执行文件中检测到,并且在机器启动后不到5分钟的时间内,那么它将不会启动关键日志记录线程和负责以下工作的更新线程:
C:\Program Data
下的文件夹。如果是在shellcode中检测到,且系统启动时间超过4:10分钟,则不会使用Process Hollowing
技术来执行最终的可执行文件,而是直接加载并执行。
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秒的速度重新分配恶意软件文件,以确保如果文件在恢复工具的生命周期内被删除,它将被重新创建和重新定位到其他地方。
为了隐藏Process Hollowing
技术的使用,DarkGate使用了一种特殊的技术使其能够直接调用内核模式的函数。这可以帮助其逃离调试器设置的任何断点,并避开不同安全产品设置的用户域的Hook钩子。
当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
。
与该功能类似的代码点我。
DarkGate使用了两种不同的UAC绕过技术来尝试提升权限。
第一种UAC绕过技术利用一个被称为磁盘清理的计划任务。这个计划任务使用路径%windir%\system32\cleanmgr.exe
。DarkGate用注册表键覆盖%windir%
环境变量:HKEY_CURRENT_USER\Enviroment\windir
,并使用另一个命令执行AutoIt脚本。这种绕过技术在Tyranid’s Lair里能找到更详细的介绍。
图14 磁盘清理绕过
第二种UAC绕过利用了eventvwr.exe
默认必须以高度完整性运行的特性,并执行mmc.exe
二进制文件(微软管理控制台)。mmc.exe
命令来自于HKCU\Software\Classes\mscfile\shell\open\command
注册表项。这个注册表项也可以从较低的完整性级别写入,这使它能够以较高的完整性来执行AutoIt脚本。
图15 EVENTVWR UAC绕过
DarkGate会启动一个线程来责捕获所有键盘事件并将其记录到预定义的日志文件中。除了记录键日志外,它还记录前台窗口和剪贴板。日志以“当前日期”的名称保存。日志保存在下列目录:
C:\users\ {username}\appdata\roaming\{ID1}
图16 键盘记录的相关文件
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就读取当前内存区域并获取信息了。
DarkGate具有删除所有系统恢复点的功能,包括cmd.exe /c vssadmin delete shadows /for=c: /all /quiet
。
这个命令将使用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
有趣的是新创建的用户会被添加到西班牙和法国的管理组中(没有政治思想的开发者不是一个好黑客?【手动狗头】)。
C&C服务器可以获取以下受害者主机的详细信息:
%appdata%
目录创建Install.txt
文件,并在其中写入纪元时间。目前使用Endpoint安全平台可成功阻断该软件的通信和运行。
图19:ENSILO事件图
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 |
Akamai简介
如何绕过现代Process Hollowing检测机制
如何使用SilentCleanup绕过UAC?
使用EVENTVWR.EXE和注册表劫持实现“无文件”UAC绕过