ESET:新的Zebrocy组件分析

Sednit网络组织至少从2004年开始运营,并定期出现在新闻中。 在2016年大选,世界反兴奋剂机构(WADA),TV5Monde电视网络和其他攻击行动发生之前,塞尼特(下称“花哨熊”)被认为是美国民主党全国委员会的幕后黑手。 该小组的武器库包括一组恶意工具,我们在先前的报告中已记录了其中的一些工具。

我们最近发布了一份关于LoJax的报告, LoJax是UEFI的rootkit,也与Sednit有关,已用于中欧和东欧的巴尔干地区的攻击。

在2018年8月,Sednit运营商部署了两个新的Zebrocy组件,从现在开始,我们已经看到该工具的使用激增。 Zebrocy是引导程序,删除程序和后门的集合。 下载程序和删除程序用于情报,而后门程序则提供持久性和间谍软件。 这些新组件具有一种通过邮件服务协议SMTP和POP3泄漏收集的数据的不寻常方式。


新工具的受害者类似于我们先前有关Zebrocy的文章以及卡巴斯基实验室中提到的受害者。 袭击的目标是在中亚,中欧和东欧,主要是使馆,外交部和外交官。

复习



图1.新旧Zebrocy组件的示意图

两年来,网络组织Sednit使用网络钓鱼电子邮件作为Zebrocy的感染媒介(上表中的选项1和2)。 妥协后,攻击者使用了第一阶段的各种引导程序来收集有关受害者的信息,并且在感兴趣的情况下,在几个小时或几天之后,部署了第二层的后门之一。

经典的Zebrocy竞选计划是在信件附件中将受害者作为档案。 存档包含两个文件,其中一个是无害文档,第二个是可执行文件。 攻击者试图通过将第二个文件称为文档或图像的典型名称并使用“双扩展名”来欺骗受害者。

在新的广告系列(表格中的选项3)中,使用了更复杂的方案-我们将在下面进行分析。

德尔福滴管


第一个二进制文件是Delphi滴管,这在Zebrocy战役中是很不常见的。 在大多数情况下,它只是在攻击的第一阶段就在受害者的系统上安装了引导加载程序。

借助多种方法,dropper使反向工程复杂化。 在检查的样本中,他使用关键字liver表示关键元素的开始和结束,如下所示。

$ yara -s tag_yara.yar SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe find_tag SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe 0x4c260:$tag: l\x00i\x00v\x00e\x00r\x00 0x6f000:$tag: liver 0x6f020:$tag: liver 0x13ab0c:$tag: liver 

上面的YARA规则搜索字符串 。 代码中使用了肝脏的第一行,但未分隔任何内容,而其他则共享密钥描述符,图像(其十六进制转储如下所示)和滴管中的加密组件。

 $ hexdump -Cn 48 -s 0x6f000 SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe 0006f000 6c 69 76 65 72 4f 70 65 6e 41 69 72 33 39 30 34 |liverOpenAir3904| 0006f010 35 5f 42 61 79 72 65 6e 5f 4d 75 6e 63 68 65 6e |5_Bayren_Munchen| 0006f020 6c 69 76 65 72 ff d8 ff e0 00 10 4a 46 49 46 00 |liver……JFIF.| 

首先,将数据保存在文件名为C:\ Users \ public \ Pictures \ scanPassport.jpg的图片中 (如果尚不存在)。

有趣的是,该删除程序文件名为SCANPASS_QXWEGRFGCVT_323803488900900X_jpeg.exe ,该文件还建议了与护照和旅行信息有关的网络钓鱼方案。 这可能意味着操作员可能知道网络钓鱼消息的目的。 放置器将打开图像,如果文件已经存在,则停止执行。 否则,他将打开它并接收密钥句柄OpenAir39045_Bayren_Munchen 。 尽管格式正确,但缺少图像-请参见下图。


图2. ScanPassport.jpg

关键描述符行包含Bayren_Munchen-最有可能是对拜仁慕尼黑足球队的引用。 无论如何,描述符的内容并不重要,但它的长度并不重要,您可以使用它的XOR密钥来解密组件。

为了获得XOR键,插入器会搜索最后一个肝脏关键字,并按描述符的长度缩进。 XOR密钥的长度为27(0x1b)字节(与密钥描述符的长度相同)。

使用XOR密钥和一个简单的循环,dropper解密最后一部分-位于最后一个标签之后到文件末尾的加密组件。 请注意,可执行组件的MZ标头在liver关键字之后立即开始,并且XOR密钥是从PE标头的一部分获得的,通常是解密该组件后恢复的0x00字节序列,如下图所示。


图3.加密组件(左)与解密组件(右)

该组件将重置为C:\ Users \ Public \ Documents \ AcrobatReader.txt ,并将文件转换为C:\ Users \ Public \ Documents \ AcrobatReader.exe

也许这是企图绕过PC的保护,当二进制文件将扩展名为.exe的文件刷新到磁盘时,PC会发出警告。

操作员再次尝试欺骗受害者,如果她注意目录,则将看到下图所示的图片:


图4.该组件看起来像一个PDF文件

默认情况下,Windows隐藏该扩展名,并且攻击者会将扩展名转储到Documents文件夹并将其伪装为PDF。

最后,放置程序执行托管组件并退出。

MSIL邮件加载器


上一个滴管的交付组件是随UPX一起包装的MSIL加载器。 为了更好地理解,下面将描述该过程的逻辑,然后给出源代码并考虑控制方案。

主要方法调用Run启动应用程序,然后创建Form1

 {   Application.EnableVisualStyles();   Application.SetCompatibleTextRenderingDefault(false);   Application.Run((Form) new Form1()); } 

Form1分配了许多变量,其中包括七个变量。

    this.start = new Timer(this.components);  this.inf = new Timer(this.components);   this.txt = new Timer(this.components);   this.subject = new Timer(this.components);   this.run = new Timer(this.components);   this.load = new Timer(this.components);   this.screen = new Timer(this.components); 

Timer对象具有三个重要字段:

  • 启用:指示启用的计时器状态。
  • 间隔:事件之间的时间(以毫秒为单位)
  • 勾号:计时器到期后且计时器开启时​​执行回调

字段指示如下:

   this.start.Enabled = true;   this.start.Interval = 120000;   this.start.Tick += new EventHandler(this.start_Tick);   this.inf.Interval = 10000;   this.inf.Tick += new EventHandler(this.inf_Tick);   this.txt.Interval = 120000;   this.txt.Tick += new EventHandler(this.txt_Tick);   this.subject.Interval = 120000;   this.subject.Tick += new EventHandler(this.subject_Tick);   this.run.Interval = 60000;   this.run.Tick += new EventHandler(this.run_Tick);   this.load.Interval = 120000;   this.load.Tick += new EventHandler(this.load_Tick);   this.screen.Interval = 8000;   this.screen.Tick += new EventHandler(this.screen_Tick); 

对于每个对象, 间隔间隔设置为8秒至2分钟。 回调添加到事件处理程序。 请注意,只有start才Enabled的值设置为true,这意味着2分钟(12,000毫秒= 120秒)之后,事件处理程序将调用start_Tick

    private void start_Tick(object sender, EventArgs e)   {       try       {           this.start.Enabled = false;           Lenor lenor = new Lenor();           this.dir = !Directory.Exists(this.label15.Text.ToString()) ? this.label16.Text.ToString() + "\" : this.label15.Text.ToString() + "\";           this.att = this.dir + "audev.txt";           this._id = lenor.id(this.dir);           this.inf.Enabled = true;       } 

此外,每种方法都表现出相同的行为-在开始时将Enabled值更改为false 。 该方法将执行,然后将下一个对象的Enabled值更改为true ,这将激活下一个计时器。 操作员使用Enabled变量来创建状态机之类的东西-如果该功能不起作用,该机制将重复执行直到收到肯定的结果。 执行两个功能之间的时间间隔可以用来尝试通过增加延迟来绕过防病毒保护。

现在,在描述每种方法的结构之后,我们继续进行控制算法。 以下是在邮箱之间交换电子邮件形式的步骤的概述。


图5.电子邮件交换

Malvar检查在执行期间是否存在用于转储每个文件的特定路径。 如果可能,请使用C:\ Users \ Public \ Videos \ ,否则使用C:\ Documents and Settings \ All Users \ Documents \作为默认目录。 请注意,第二条路径特定于Windows XP,而第一条路径特定于Vista和更高版本。

通过将卷C:的序列号和用户名连接起来,生成一个16字节的ID 。 它存储在audev.txt文件中。

引导加载程序收集以下信息:
-当前的应用路径
-操作系统版本
-系统目录
-用户域
-车名
-用户名
-当前时区
-当前日期
-逻辑驱动器列表以及有关每个逻辑驱动器的信息(型号,序列号等)
-列出目录C:\ Program Files \C:\ Program Files(x86)\
-流程清单

此数据存储在文件C:\ Users \ Public \ Videos \ si.ini中,并使用默认端口465通过SMTPS在附件中以字母形式发送。邮件正文包含SI行(可能表示系统信息),邮件收件人为sym777。 g@post.cz 。 对于整个信息交换,字母的主题表示为id

运营商决定创建多个备用地址,并在主要地址不起作用的情况下很可能将同一封信发送给其他两个收件人。 发送字母后,引导程序将删除si.ini文件。

在首次运行该恶意软件期间,将创建一个set.txt文件,其中包含文本{System_Parametrs = 10} ,并在Windows注册表项中输入一个条目。


图6.注册表中的持久性

从受害者的计算机以scx.bin名称获取一个屏幕截图,并通过电子邮件附件在邮件正文中发送带有文本SC (可能表示“截图”)的电子邮件。

发送后,恶意软件使用POP3协议通过SSL(端口995)与邮箱kae.mezhnosh@post.cz联系,并查找主题与id匹配的消息。 如果存在这样的消息并且主体不为空,则恶意软件将其解密并将主体中包含okey的消息发送到sym777.g@post.cz 。 清除和解析以前收到的消息的内容,如下所示:

 string[] strArray = this._adr.Replace("B&", "").Replace("Db", "").Split('%');       string str1 = strArray[0];       string str2 = strArray[1]; 

获得两行:第一行是密码,第二行是邮件地址的用户名。

新凭据用于连接到接收到的邮箱,在其中搜索主题与malvari ID匹配邮件,以及在文件名中包含字符串audev的应用程序。 如果同时满足这两个条件,则恶意软件将存储应用程序并从服务器删除消息。

消息日志发送到sym777.g@post.cz ,并且通过POP3接收的消息来自接收者,其中包含最近接收到的用户数据。

攻击方案使调查复杂化。 首先,如果您的引导加载程序带有字母,则无法连接到包含下一步的邮箱。

其次,如果您收到了邮件凭据,则仍然无法获得下一个有效负载,因为它在接收后将被删除。

当引导加载程序成功将附件写入磁盘时,它会在邮件中发送一条消息,该消息的正文中包含okey2 ,而l.txt附件中包含090 。 相同的文件将被零覆盖,并且恶意软件尝试获取另一条消息。 如果可行 ,则将l.txt文件与okey3一起发送到正文中。 附件的内容是目录和文件名。 Malvar将audev文件移动到该地址。 最后,该恶意软件会发送一封电子邮件,邮件正文中包含okey4 ,附件中包含l.txt 。 这将启动可执行文件audev.exe,并检查进程列表中是否存在audev行。

   Process.Start(this.rn);   foreach (Process process in Process.GetProcesses())   {       if (process.ProcessName.Contains("audev")) } 

如果找到这样的名称,则将发送最后一个字母,该字母包含在正文中的okey5l.txt中。 最后,删除l.txtset.txt ,删除创建的Windows注册表项,然后程序终止。

Delphi Mail下载器


引导加载程序的主要作用是评估受损系统的重要性,如果看起来很有趣,则加载并执行最新的Zebrocy引导加载程序。

该二进制文件是用Delphi编写的,并使用UPX打包。 TForm1对象的完整定义及其资源可以在本节中找到,它显示了一些已使用的配置参数。 以下各节介绍了引导加载程序的初始化,功能和网络协议。

初始化


首先,解密作为电子邮件地址和密码的字符串集。 运营商应用AES ECB加密算法。 每行在十六进制位置解密,其中前四个字节对应于解密行的最终大小(末尾的解密行可能包含一些缩进)。 TForm1对象包含两个AES密钥:第一个用于加密数据,第二个用于解密数据。

操作员使用邮件地址和密码将命令发送到恶意软件,以及获取从受害者计算机收集的信息。 通讯协议SMTP和POP3都通过SSL来应用。 要使用OpenSSL,该恶意软件会丢弃并使用两个OpenSSL动态库: libeay32.dll(98c348cab0f835d6cf17c3a31cd5811f86c0388b)ssleay32.dll(6d981d71895581dfb103170486486b8614f7f203bdc)


图7. OpenSSL DLL属性

请注意,所有文件都被转储到恶意软件的工作目录中:C:\ Users \ Public \

通过入口脚本的众所周知的脚本技术,在恶意程序的第一次执行期间提供了持久性。 创建带有registration.bat脚本的文件,并从TForm1对象写入几行。 最终脚本如下:

 reg add HKCU\Environment /v "UserInitMprLogonScript" /t REG_EXPAND_SZ /d "C:\Users\Public\Videos\audev.exe" /f del C:\Users\Public\Videos\registr.bat exit 

最后但并非最不重要的一点是,该恶意软件会按照前面所述的Zebrocy二进制文件中的相同方式创建一个id 。 它使用Windows API的GetUserNameW获取用户名,并将C:\驱动器的序列号添加到开头。

可能性


鉴于有多种条件和程序可以收集有关受害者的信息,以下是其各种功能的描述。 扫描配置存储在TForm1对象中,在该对象中,从受害人的计算机收集信息的七种不同可能性被分组。

从简单的扫描开始,恶意软件可以获得的第一个信息与具有以下扩展名的文件有关: .docx,.xlsx,.pdf,.pptx,.rar,.zip,.jpg,.bmp,.tiff 。 对于磁盘上找到的每个文件,恶意软件都会获得完整路径和最后修改日期。 该信息使用我们之前讨论的AES密钥加密,并存储在0.txt文件中。 另一扫描针对扩展名.dat,.json,.db ,与前面的情况一样,获取了完整路径和文件更改的最后日期。 然后,它将它们加密并存储在57.txt文件中。

列出正在运行的进程是malvari的另一个功能,它使您可以将信息存储在08.txt文件中。 看起来像这样:

 ======Listing_of_processes======= [System Process] System smss.exe csrss.exe wininit.exe csrss.exe winlogon.exe services.exe lsass.exe […] 

i.txt文件收集有关受害者计算机的一般信息,以及有关恶意变量的某些信息(版本号和执行路径)。 请参见下面的示例:

 v7.00 C:\Users\Public\Videos\audev.txt ============================================ Log_Drivers: C: fixed; size= 102297 Mb, free=83927 Mb S/N: [redacted] ================================================== OSV: Windows 7 WinType: 32 WinDir: C:\Windows Lang: English (United States) TZ: UTC1:0 Romance Standard Time HostN: [redacted]-PC User: [redacted] ===============S_LIST===================== C:\Program Files\Common Files C:\Program Files\desktop.ini C:\Program Files\DVD Maker C:\Program Files\Internet Explorer C:\Program Files\Microsoft.NET C:\Program Files\MSBuild C:\Program Files\Reference Assemblies C:\Program Files\Uninstall Information C:\Program Files\Windows Defender […] 

恶意软件会截取屏幕截图,并将其保存为2 \ [YYYY-mm-dd HH-MM-SS] -Image_001.jpg格式 ,并生成另一个文件2 \ sa.bin ,其中包含所有捕获的屏幕快照的文件路径列表。 最后一个选项是列出网络组件和系统数据,结果写在4.txt中

网络协议


Delphi邮件加载器是Zebrocy工具包的一个相对较新的功能,它提供了一种新的方法来提取数据并接收来自操作员的命令。 渗透非常简单,但是由于先前收集的加密文件是通过SMTPS发送的,因此文件的每个版本都是三次,因此渗透会在网络上造成很大的干扰。



消息的主题是受害者id ,并且该文件作为附件发送,带有与文件内容相对应的关键字。 请注意,每个文件都会发送一个加密版本。



还会发送两次扫描的屏幕截图和文件,但使用不同的关键字。




图8.带有传输数据的消息示例

当SMTP用于数据渗透时,二进制文件通过POP3和邮件解析连接到tomasso25@ambcomission.com邮件地址 。 字母的正文包含恶意软件将其解释为命令的各种关键字。



执行后,调试器日志和命令的结果(如果有)被发送回操作员。 例如,在执行扫描命令之后,操作员会收到一个文件,其中包含具有匹配扩展名的文件列表以及每个此类文件。

尽管此引导程序具有后门功能,但它会将已经与该组相关联的Delphi上的引导程序转储到系统中,我们在上一篇有关Zebrocy的文章中对此进行了描述。

结论


过去,我们已经看到Zebrocy与传统的Sednit恶意软件的交集。 我们发现Zebrocy将Sednit的旗舰后门倾销到XAgent系统中,因此我们将Zebrocy的作者身份归功于该网络集团。

然而,对二进制文件的分析显示出语言水平以及开发水平方面的错误,表明作者的资格水平不同。 两种引导加载程序都使用邮件协议来提取数据,并具有收集相同信息的相同机制。 但是,它们会在网络和系统上产生大量噪音,从而创建许多文件并将其发送。 在分析Delphi上的邮件加载器的过程中,在我们看来似乎有些功能消失了,但是这些行仍然保留在二进制文件中。 该工具包已由Sednit团队使用,但我们认为它是由另一个团队开发的-与传统Sednit组件的创建者相比经验不足。

Zebrocy组件是Sedn​​it工具包的补充,最近发生的事件可能解释了Zebrocy二进制文件而不是传统恶意文件的积极使用。

折衷指标



文件名,SHA-1和ESET产品检测

1. SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe-7768fd2812ceff05db8f969a7bed1de5615bfc5a- Win32 / Sednit.ORQ
2. C:\ Users \ public \ Pictures \ scanPassport.jpg-da70c54a8b9fd236793bb2ab3f8a50e6cd37e2df
3. C:\ Users \ Public \ Documents \ AcrobatReader {Exe,txt}-a225d457c3396e647ffc710cd1edd4c74dc57152- MSIL / Sednit.D
4. C:\ Users \ Public \ Videos \ audev.txt-a659a765536d2099ecbde988d6763028ff92752e- Win32 / Sednit.CH
5.%TMP%\ Indy0037C632.tmp-20954fe36388ae8b1174424c8e4996ea2689f747- Win32 / TrojanDownloader.Sednit.CMR
6.%TMP%\ Indy01863A21.tmp-e0d8829d2e76e9bb02e3b375981181ae02462c43- Win32 / TrojanDownloader.Sednit.CMQ

电邮

carl.dolzhek17@post.cz
shinina.lezh@post.cz
P0tr4h4s7a@post.cz
carl.dolzhek17@post.cz
sym777.g@post.cz
kae.mezhnosh@post.cz
tomasso25@ambcomission.com
kevin30@ambcomission.com
salah444@ambcomission.com
karakos3232@seznam.cz
rishit333@ambcomission.com
antony.miloshevich128@seznam.cz

Source: https://habr.com/ru/post/zh-CN437236/


All Articles