网络上Pegasus Trojan的行为分析

Pegasus银行木马的源代码最近已发布 。 尽管在档案名称中提到了Carbanak组,但Minerva Labs的研究人员否认特洛伊木马参与了该组,并证明了他们参与了Buhtrap (Ratopak)组。 档案库中是对该木马工作的简短描述,其源代码,银行支付系统的描述以及许多俄罗斯银行的员工数据。

该恶意软件的源代码体系结构非常有趣。 该功能在编译阶段分为组装成单个“ binpack”的模块。 编译过程还包括使用tric.pfx文件中的证书对可执行文件进行签名,该证书不在存档中。

Pegasus的网络活动同样令人好奇,该网络活动在感染后试图在域中传播,并且知道如何使用管道和Mailslot传输在计算机之间代理数据。 我们专注于研究Trojan网络活动的功能,并迅速将Pegasus检测添加到PT Network Attack Discovery产品中。 这样,所有用户都可以及时检测到该木马的活动及其网络上的修改。 在本文中,我将详细介绍网络分发机制以及Pegasus副本之间的交互。



前言


进入计算机后,主InstallerExe模块使用过程空心技术将代码注入svchost.exe中,并且在初始化主模块后,Pegasus启动多个并行过程:

  1. 域复制-从事网络内部的情报工作,并尝试传播到其他Windows计算机。
  2. Mailslot侦听器侦听广播的Mailslot消息,Pegasus通过该消息发送已开采的帐户。 插槽名称在编译时生成。
  3. 管道服务器侦听器使用代表计算机生成的名称侦听Windows管道。 这些管道主要用于检测网络上的其他Pegasus副本及其相互作用。
  4. “登录密码”每隔几分钟定期尝试使用Mimikatz的模块转储帐户数据。
  5. 网络连接负责与CnC服务器的通信和定期消息传递。

// start transports which links data with our CB-manager pwInitPipeServerAsync(dcmGetServerCallback()); mwInitMailslotServer(dcmGetServerCallback()); ... // start broadcasting creds to other machines cmStartupNetworkBroadcaster(); 

域复制


飞马座中的一个子系统负责Windows网络上的横向移动。 分发分为两个重要步骤:

  1. 检测邻近汽车。
  2. 尝试复制到计算机。

通过两个API调用来发现域中的相邻计算机:

NetServerEnum,它需要浏览器服务并调用WNetOpenEnum / WNetEnumResource。
如果域中找到的所有计算机已被感染,则必须对其进行扫描。 Pegasus每200毫秒连续轮询生成的管道名称20次以上。 我们将此异常行为用作该域中飞马活动的指标之一。 在未检测到任何感染迹象的情况下,该恶意软件将继续进行下一步-复制尝试。

复制如下。 使用在主机上找到的帐户(KM),Pegasus尝试使用SMB协议登录到IPC $和ADMIN $球的计算机,如果可以访问IPC $而不能访问ADMIN $,则Pegasus得出结论是正确的该帐户不足,必须将其标记为无效。 该恶意软件获得了ADMIN $ ball的访问权,ADMIN $ ball是%windir%文件夹的别名,恶意软件试图确定计算机的体系结构,以便将来使用适当的模块。

体系结构确定算法基于远程计算机上的PE文件头。 这样的文件,Pegasus尝试从%windir%文件夹中读取notepad.exe的前4 KB。 此方法的明显缺点是,在Windows Server 2012上,记事本位于%windir%\ System32路径上。

Windows 7上的位置notepad.exe:

 C:\Users\Administrator>where notepad.exe C:\Windows\System32\notepad.exe C:\Windows\notepad.exe 

在Windows Server 2012上:

 C:\Users\Administrator>where notepad.exe C:\Windows\System32\notepad.exe 

如果未检测到notepad.exe,则Pegasus无法感染服务器,即使该服务器具有具有必要权限的帐户信息也是如此。 在%windir%中简单缺少记事本可以停止Windows Server 2012上Pegasus的分发。在这方面使用regedit.exe更可靠。

在成功定义目标服务器的体系结构之后,Pegasus加载了一个大小约为10 KB的小型RSE(远程服务执行)删除程序,其任务是以清晰的形式通过管道从Pegasus模块加载binpack,并将控制权转移到Shellcode模块。 滴管名称以伪随机方式组成,由一串8到15个字符的十六进制字符组成。 伪随机数生成器将根据目标计算机的名称进行初始化,并且在两次启动之间将是相同的,以避免在先前的滴管副本中可能出现%windir%混乱的情况。



防病毒程序会检查删除程序的完整性和是否可能删除,然后由两种已实现的机制之一(SCM或WMI)启动它,首先Pegasus会尝试通过WMI机制启动RSE,然后才使用服务控制管理器(SCM)。 这是因为SCM在Windows日志中留下了更多的痕迹。 Pegasus的创建者还计划了其他分发方法-Wsh Remote,Powershell远程处理,任务计划程序以及用于通过RDP执行命令的模块。

如上所述,在成功启动之后,dropper会检查并打开管道以进行侦听并将控制权转移到传入的有效负载。



由于Pegasus代码是通过Process Hollowing方法注入到svchost.exe进程中的,因此,在发生主要感染的情况下,原始InstallerExe模块都不应该保留在磁盘上,在分发时也不应该使用RSE dropper。 如果仍然可以通过已知路径访问该滴管,则Pegasus会以自己的方式将其删除:

  1. 用随机数据覆盖文件的内容;
  2. 用空数据覆盖(零);
  3. 重命名文件;
  4. 文件删除。



成功感染后,域复制分发过程将再次开始。

邮槽工程


当Pegasus从另一个Pegasus副本或从mod_LogonPasswords模块访问帐户数据后,它将开始按域广播美国数据。 使用基于Mailslot的SMB机制进行分发,该机制允许在整个域中单向广播一小部分数据。 分发是根据随机生成的插槽名称进行的,因此域中所有受感染的计算机都可以使用单个名称发送和接收数据,名称的伪随机生成器是在构建期间从配置中指定的TARGET_BUILDCHAIN_HASH变量初始化的。

由于Mailslot机制对最大数据包大小施加了限制,因此,根据上次邮寄时间的原理,一次只能发送一个KM:在所有可用的KM中,上次邮寄日期最早的域是按域发送的。

Mailslot中的数据不是以明文形式传输,而是包裹在三层XOR加密中,并且密钥与数据一起传输。 第一个数据层是NetMessageEnvelope信封,具有SHA1算法进行的数据完整性检查,用于通过本地网络传输的所有数据。 数据包开头的4字节数据是密钥,每个周期向右移5位,即可更改该密钥。 信封内是带有直接美国字段及其添加日期的XOR编码数据结构。 8字节密钥也位于结构的开头,但是没有偏移地应用。 解码KM结构后,仅需反序列化ENC_BUFFER结构中的各个字段即可,例如计算机名,域名,用户名和密码。 这些字段使用带有偏移量的8字节密钥加密。 可以在此处找到用于解密Mailslot软件包的脚本和此类软件包的示例: scriptPCAP

在发行版本中发送Mailslot消息的时间范围为20秒到11分钟。

 // some random wait before making next step DbgPrint("going to sleep"); #ifdef _DEBUG // debug - 2-5 s Sleep(rg.rgGetRnd(&rg, 2000, 5000)); #else // release - 20 - 650 s //Sleep(rg.rgGetRnd(&rg, 2000, 65000) * 10); Sleep(rg.rgGetRnd(&rg, 2000, 15000)); #endif 

除交换帐户外,邮筒机制还用于搜索具有Internet访问权限的受感染计算机并宣传Internet访问。 NetMessageEnvelope信封存储正在发送的消息的类型。 无法访问的机器与可访问Internet的机器之间的数据交换是通过管道进行的。

管道工程


对于双向通信或大量数据的传输,Pegasus复制使用管道作为通信通道。 管道的名称(尽管它也是由伪随机生成器生成的),但取决于机器和构建的名称,因此允许客户端和服务器部分使用相同的名称。

在单向通信中,例如,在复制过程中将binpack传输到另一台计算机上,数据不会被加密并以明文方式传输。 Binpack从一个SHELLCODE_CONTEXT结构开始,长度为561个字节。



例如,在双向传输期间,在没有Internet访问权限的Pegasus副本与CnC服务器之间代理数据时,与Mailslot的情况一样,使用具有XOR加密的相同NetMessageEnvelope信封结构,因为 它允许您在id字段中区分不同类型的消息。

在体系结构上,数据代理是通过请求传输部分数据(PMI_SEND_QUERY),接收请求ID作为响应并按ID查询任务状态(PMI_CHECK_STATUS_QUERY)来执行的。 通常,另一个信封结构作为负载进行传输,从而增加了各种功能和另一层加密。

此外,使用管道并不能结束受感染机器之间的交互。 mod_KBRI_hd模块将代码插入cmd.exe进程中,该进程将拦截MoveFileExW调用并分析所有要复制的数据,因为这是付款过程的一部分。 如果复制的文件包含攻击者感兴趣的数据-带付款的数据,则有关此消息的通知将发送到CnC服务器。 注入到cmd.exe中的mod_KBRI模块与Pegasus副本之间的通信是通过受感染的机器内部进行的,该管道的名称未生成但在源代码中进行了硬编码:

 \.\pipe\pg0F9EC0DB75F67E1DBEFB3AFA2 

该模块的功能还包括根据模板动态替换数据帐户。 屏幕快照中搜索模式的示例。

数控交通


单独的流负责与CnC服务器进行直接数据交换,该服务器每隔几分钟检查一次来自内部进程或其他恶意软件副本的数据块队列,并将其发送到服务器。

在mod_NetworkConnectivity模块的初始化期间,它将对网络连接执行多阶段检查:

1)检测代理服务器设置并尝试连接到www.google.com

  • 在注册表分支\\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ Internet设置中。
  • 通过WPAD(调用WinHttpGetProxyForUrl)。
  • 通过当前用户的代理配置(调用WinHttpGetIEProxyConfigForCurrentUser)。

2)检查与Microsoft更新服务器的连接以及返回的数据( authrootseq.txtauthrootstl.cabrootsupd.exe

3)使用以下6个地址之一测试HTTPS连接:


只有在通过所有检查之后,Pegasus才认为它具有对外部网络的必要访问权,并且可以通过Mailslot域通过消息进行宣布。 此外,Pegasus只能在工作时间(当地时间上午9点至晚上7点)伪装自己并与CnC服务器通信。

Pegasus在CRYPT_MODE_CBC / PKCS5_PADDING模式下使用DES加密发送封装在信封中的数据块,并以加密形式计算数量的哈希。 加密密钥仅取决于编译期间的变量,因此我们可以仅知道其BUILDCHAIN_HASH即可解密恶意软件与服务器之间的流量。 在档案库内的源代码中,此变量的值为0x7393c9a643eb4a76。 可以在此处找到用于解密服务器签入的 脚本和此类软件包的示例: scriptPCAP

它将在签入过程中或与任何数据一起将此类内容(结构INNER_ENVELOPE)传输到CnC服务器。 最初,信封中有28个字节,其中包含一个长度字段和一个SHA1和。



在通过管道进行代理期间,相同的数据在计算机之间传输,但是通过哈希和XOR加密包装在我们知道的NetMessageEnvelope信封中。

CnC操作员可以将执行命令发送到Pegasus副本,并使用命令或其他数据发送消息,例如,EID_CREDENTIALS_LIST可以包含自己的字段加密层,如我们在广播帐户示例中所看到的。

侦测


首先,我们有兴趣检测网络上的Pegasus活动,并且在仔细研究了源代码并在测试环境中运行后,我们发现了那些网络异常和工件,这些异常和工件清楚地表明了网络上这种复杂恶意软件的存在。 Pegasus确实可以称为通用功能-它积极地使用SMB协议发送消息并与其他副本建立通信,传播到其他计算机并以自己的特殊方式与CnC服务器通信。 通过在域中安装对等网络,Pegasus的副本为通往外部网络铺平了道路,并通过彼此代理流量来与CnC服务器通信。 在连接验证期间使用证书对可执行文件进行签名并访问Microsoft和Mozilla资源,使得很难在主机上检测其活动和检测。

Pegasus源代码项目的结构和描述都相当好,因此在不久的将来,我们可以预期其他恶意程序会借用其部分代码以及出现修饰。

用于远程执行命令和搜索帐户数据的许多机制仍未实现,开发人员还将增加在执行过程中更改Shellcode的功能。 这些并不是他们的全部想法。

我们已经为PT NAD和IDS Suricata开发了多个签名,这使我们能够从不同的阶段开始确定飞马特定网络的活动。 您可以在我们的githubTwitter上找到Suricata IDS的开放签名,如果您使用suricata-update更新机制,它们将自动到达您的Suricata。

您可以在下面的屏幕快照中查看Pegasus活动的签名如何工作。 这是我们的新PT网络攻击发现产品,可识别事件并帮助调查事件:



此外,以下危害指标(IC)可用于检测:

 邮包\ 46CA075C165CBB2786 
管道\ pg0F9EC0DB75F67E1DBEFB3AFA2

 hxxp://denwer/pegasus/index.php
 hxxp://mp3.ucrazy.org/music/index.php
 hxxp://support.zakon-auto.net/tuning/index.asp
 hxxp://video.tnt-online.info/tnt-comedy-tv/stream.php 

推特(Twitter) @attackdetection Cyril Shipulin 发表 | 电报

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


All Articles