![MontysThree:带有隐写术和俄罗斯语言的工业间谍活动 MontysThree:带有隐写术和俄罗斯语言的工业间谍活动]()
在2020年夏季,我们发现了一个未知的多模块C ++工具集,该工具集可用于可追溯到2018年的针对性强的工业间谍攻击。最初,我们对该恶意软件感兴趣的原因是其稀有性,该活动的明显针对性以及存在在代码,基础架构或TTP级别与已知的活动没有明显相似之处。迄今为止,我们认为此工具集及其背后的参与者是新的。恶意软件作者将工具集命名为“ MT3”。在此缩写之后,我们将工具集命名为“ MontysThree”。
![MontysThree:带有隐写术和俄罗斯语言的工业间谍活动 MontysThree:带有隐写术和俄罗斯语言的工业间谍活动]()
根据MT3的缩写,我们将工具集命名为Montys3
该恶意软件包括一组用于持久性的C ++模块,使用隐写术从位图获取数据,解密配置任务(制作屏幕截图,对目标进行指纹识别,获取文件等)及其执行以及与主要合法公众的网络通信。云服务,例如Google,Microsoft和Dropbox。MontysThree配置为搜索存储在当前文档目录和可移动媒体中的特定Microsoft Office和Adobe Acrobat文档。该恶意软件使用自定义隐写术和多种加密方案:除了基于XOR的自定义加密外,这些模块还依赖3DES和RSA算法进行配置解密和通信。
MontysThree包含具有适当俄语语言和配置的自然语言工件,这些工件寻找仅在Cyrilic本地化Windows版本上存在的目录。尽管大多数外部公共云通信使用基于令牌的授权,但某些示例包含基于电子邮件的帐户,这些帐户伪装成中文外观。我们认为这些名称是错误的标志。更多文物表明该恶意软件由说俄语的演员开发,并且针对西里尔Windows版本。
恶意软件如何传播
初始加载程序模块散布在RAR自解压档案(SFX)中,其名称与员工的电话清单,技术文档和医学检验结果相关。没有诱饵,只有PE文件(伪装.pdf或.doc文件),但是这类标题现已成为鱼叉式网络钓鱼的典型技巧-“企业信息更新”或“医学分析结果”。其中一个装载程序(
MD5 da49fea229dd2dedab2b909f24fb24ab)
“Списоктелефоновсотрудников2019.doc”(“员工电话清单”,俄语)。其他装载机的名称为“ Tech task.pdf”和“ invitro-106650152-1.pdf”。后者是俄罗斯医学实验室的名称。所有这些似乎都是典型的鱼叉式钓鱼技巧。SFX脚本如下:
Path=%TEMP%
SavePath
Setup=rundll32.exe "invitro-106650152-1.pdf",Open
Silent=1
Overwrite=1
Update=U
Delete=invitro-106650152-1.pdf
在执行时,SFX脚本调用%TEMP%目录中已解压缩的加载器可执行文件的Open()函数(我们将返回到此导出的名称)并将其删除。从文件名来看,它很可能模仿医学分析结果,因为“ Invitro”是俄罗斯著名的医学实验室。该初始PE32是第一个加载程序模块。
模块如何工作和交流
![MontysThree:带有隐写术和俄罗斯语言的工业间谍活动 MontysThree:带有隐写术和俄罗斯语言的工业间谍活动]()
MontysThree模块的执行流程
上图显示了MontysThree模块的整体执行流程。下表列出了四个模块及其功能。这些模块共享通用的通信约定。当处理诸如配置和详细执行日志之类的共享数据时,该恶意软件会初始化线程本地存储(TLS)中的结构,而该线程又称为堆结构。有趣的是,除RAM外,执行日志还存储在磁盘上的文件中,并用一字节XOR加密。
入口点DllEntryPoint()的工作方式类似于构造函数,后者使用TlsAlloc()分配结构并将其保存在全局变量中。模块必须导出一个名为Open()的函数,该函数不带任何参数(但可以解析命令行)并返回一个四字节的错误代码。
模块名称
|
特征
|
Loader
|
该反检测模块负责定制隐写术,内核模块解密。
|
Kernel
|
该内核(主)模块负责解密config XML,然后解析并执行其中的相应任务。
|
HttpTransport
|
网络模块,用于与Google,Microsoft,Dropbox合法的公共云服务以及WebDAV源进行通信。该模块能够使用合法客户端以幼稚的方式通过RDP和Citrix发出请求。
|
LinkUpdate
|
持久性模块是Windows快速启动.lnk修饰符。使用这种幼稚的持久性方法,用户可以每次与Windows快速启动工具栏上的浏览器一起自行运行Loader模块。
|
现在,让我们看一下开发人员如何将强大的现代加密标准与基于XOR的自定义标准混合在一起。
任务
|
使用加密
|
Steganography
|
为了解密内核模块,初始加载器使用自定义算法。
|
Logs encryption
|
恶意软件日志同时存在于内存和磁盘上的加密文件中。在RAM中,开发人员将日志以纯文本格式存储,在磁盘上,他们使用一字节XOR。
|
Config encryption
|
内核模块使用强大的加密算法。配置数据使用3DES加密,密钥使用RSA加密。所有密钥(RSA公钥/私钥以及加密的3DES)都存储在模块的.data节中。
|
Network module encryption
|
最初加密的HttpTransport由存储在内核模块中的四个二进制Blob组成。内核将它们串联起来,并使用基于XOR的自定义算法对其进行解密。使用四个字节长度的循环密钥
|
通讯加密
|
加密算法是RSA,它使用存储在内核模块.data节中的相同公钥和私钥。
|
加载器模块:位图解密器和下一个启动器
如果包含隐写术加密数据的位图文件名作为参数提供给加载程序,则加载程序将从像素数组解密下一个上载程序。在第一次迭代中,它提取隐写参数数据。为此,算法采用字节的最后位。
![MontysThree:带有隐写术和俄罗斯语言的工业间谍活动 MontysThree:带有隐写术和俄罗斯语言的工业间谍活动]()
IID,IParam和ISize参数保留在像素阵列的前384个字节中,这意味着仅需要每个像素阵列字节的最后一位。结果,该模块使用这些字段收集了48个字节的隐秘配置结构,以确定下一个解密阶段。
领域
|
抵消
|
特征
|
IID
|
0x00
|
确定一个或两个解密层将应用于以下像素阵列。
|
IParam
|
0x04
|
确定像素数组字节中的哪些位将形成下一个内核模块。
|
大小
|
0x28
|
解密后的内核模块的大小。
|
提取隐写参数后,使用两步算法对下一个上载程序进行解密。首先,IParam算法从像素阵列的字节中选择位。然后,如果IID等于2,则对收集到的字节应用使用四字节轮回密钥的自定义除错操作。前四个字节解密的初始密钥的硬编码值为0x23041920。然后,下一个字节的舍入XOR键的公式为:
key ^= 8 * (key ^ (key << 20))
我们认为这种隐写术算法是定制的,而不是从某些开源第三方存储库中获取的。令人惊讶的是,解密结果并未注入到某个进程的内存中,而是作为名为msgslang32.dll的文件放置到磁盘上。然后,加载程序仅使用Windows API函数LoadLibraryW()和GetProcAddress()来运行下一个stager的Open()函数,如我们先前在加载程序模块中看到的那样。
内核模块:配置解密器和任务分配器
内核模块包含三个用于配置解密和C2通信的加密密钥。公共和私有RSA密钥分别以PUBLICKEYBLOB和PRIVATEKEYBLOB的形式存储在.data节中。这些用于加密C2通信并解密3DES密钥。第三个3DES密钥也以加密形式存储在.data节中。此密钥用于解密包含XML配置的嵌入式.cab存档。要解压缩.cab存档,该模块使用Window的标准系统实用程序“ expand.exe”。我们将在HttpTransport模块中看到另一种常见的软件用法。
XML配置包含有价值的数据,可帮助我们了解广告系列运营商的兴趣。它使用针对恶意软件的各种“任务”进行组织,例如使用其操作系统版本对目标进行指纹识别,处理列表并捕获屏幕截图;而且还会从%USERPROFILE中的几个最新文档目录中获取扩展名为:
.doc,.docx,.xls,.xlsx,.rtf,.pdf,.odt,.psw,.pwd的任何扩展名的用户最新文档列表%和%APPDATA%,包括%APPDATA% Microsoft Office Последниефайлы。此文件夹名称翻译成俄语的“最近文件”,表明该恶意软件针对西里尔本地化的Windows版本。
![MontysThree:带有隐写术和俄罗斯语言的工业间谍活动 MontysThree:带有隐写术和俄罗斯语言的工业间谍活动]()
Config包含任务计划(屏幕截图),访问令牌(此处为Dropbox,已编辑),感兴趣的目录和扩展。一个目录仅在Cyrillic Windows本地化版本上存在。
“Снимокрабочегостола”(桌面快照)
“Системнаяинформация”(系统信息)
![MontysThree:带有隐写术和俄罗斯语言的工业间谍活动 MontysThree:带有隐写术和俄罗斯语言的工业间谍活动]()
配置任务描述以MT3D开头,并包含俄语中的适当简短短语
解密后的配置结构如下:
领域
|
尺寸
|
内容
|
Magic
|
4 bytes
|
MT3D。所有解析的文件都必须将此前缀作为有效前缀
|
Creation time
|
4 bytes
|
时间戳记,任务配置创建时间存储为大纪元时间
|
Header size
|
4 bytes
|
标头大小必须大于18。观察到的值例如为0x7E
|
XML size
|
4 bytes
|
XML任务描述必须大于零。观测值例如是0x662D
|
XML body
|
XML大小
|
XML格式的任务说明和时间表
|
尽管我们查看的示例不包含RTTI信息,但执行日志使我们能够恢复C ++类名。内核模块将配置中的任务解析到内存后,处理指令的主要类是CTask。CTask的IoControl()方法负责处理相应的任务,并依次运行以下方法:
CTask方法
|
特征
|
MainIoControl()
|
XML中“主要”任务的处理程序。如果执行RESET命令,则将删除用作“管道”的文件。此处的任何其他命令将被记录,但不会执行
|
FileIoControl()
|
使用PUT,DEL,FIND,WATCH,WATCH_REMOVABLE,RUN和LOGS子命令执行“文件”任务的处理程序
|
SysInfoIoControl()
|
带有SCREENSHOT,INFO和TASKLIST子命令的“ SysInfo”任务的处理程序
|
HttpIoControl()
|
使用SENDRECV子命令的“ Http”任务的处理程序
|
GDriveIoControl()
|
使用SENDRECV子命令的“ GDrive”任务的处理程序
|
DropboxIoControl()
|
使用SENDRECV子命令的“ Dropbox”任务的处理程序
|
用于外部通信的所有方法都首先解密HttpTransport模块,然后使用它传输经过RSA加密的相应数据。使用的RSA密钥与用于解密3DES配置密钥的上述密钥相同。在单独的Window过程中,恶意软件将监视是否插入了USB设备,以搜索感兴趣的文件。
HttpTransport模块:网络任务
HttpTransport模块在内核模块的.text部分中以四个加密的数据块形式存在。当内核需要通信时,它会解密此模块,并像通常的MontysThree一样,运行Open()函数,并传递命令行参数。
根据从内核模块发送的参数,模块可以使用RDP,WebDAV,Citrix和HTTP协议上载或下载内容。HttpTransport也实现了使用用户令牌从Google和Dropbox公共服务下载数据。在HTTP GET / POST请求的情况下,该恶意软件将使用Windows API HTTP相关功能从相应URL接收隐写位图图片。
前述通信协议本身未在模块内部实现。恶意软件作者利用目标计算机上已经安装的合法Windows程序(如RDP,Citrix客户端和Internet Explorer)进行操作。例如,该模块执行任务以将一些数据发送到URL并通过RDP连接接收答复,如下所示:编辑.rdp文件以在远程计算机上静默运行Internet Explorer;通过剪贴板将URL粘贴到浏览器中;等待并通过剪贴板将内容粘贴到打开的网页上;等待并再次通过剪贴板接收结果。
为了复制数据,该恶意软件实际上会发送Ctrl + C,Ctrl + V和Ctrl + A。也许这是我们第一次看到这样的“ RDP通信”方法。Citrix通信是通过类似的过程完成的:恶意软件没有实现协议,而是搜索XenApp pnagent.exe的Windows Quick Launch .lnk,远程运行Internet Explorer,并使用特殊的键盘快捷键通过剪贴板与之通信。
Dropbox和Google数据的上载和下载依赖于另一个原理:其实现使用自定义类CSimpleHttp进行身份验证并发送HTTP请求。对于WebDAV通信,开发人员只需使用“ net use” Windows命令即可。
链接更新
该辅助模块负责在主机上实现持久性。当用户使用修改后的链接执行加载程序时,它将在Windows快速启动面板中更改.lnk文件,以与合法应用程序(例如浏览器)一起运行加载程序。
谁是该恶意软件的幕后黑手
正如我们在开始时提到的那样,到目前为止,在TTP,基础架构或恶意软件代码方面,我们还没有发现与已知活动的相似之处或重叠之处。到目前为止,我们将这项活动和MontysThree的使用归因于新演员。一些样本包含用于与公共云服务进行通信的帐户详细信息,这些帐户伪装成中文。考虑到所有上述的Cyriclic人工制品,我们认为这些帐户名称是错误的标志。
我们假设MontysThree背后的演员既会说俄语又会讲俄语。用于传播恶意软件的RAR SFX归档文件的某些文件名是用俄语编写的,并引用了俄罗斯医学实验室的名称,用于诱使用户打开文件。XML配置展示了用俄语编写的数据字段和Windows标题,以及Windows的Cyrilic本地化版本中存在的特定文件夹路径。我们还在恶意软件的英文日志消息字符串中看到了一些语法错误。
总结一下
通常,我们会看到针对性恶意软件,这些恶意软件主要针对政府实体,外交官和电信运营商,这对于政府资助的参与者而言是丰硕的。像MontysThree这样的工业间谍案要少得多。
就传播,持久性方法而言,总体上的营销活动复杂度与顶尖的APT参与者没有可比性。而且,恶意软件的某些方面(同时登录RAM和文件,将加密密钥保留在同一文件中,在远程RDP主机上运行不可见的浏览器)在恶意软件开发方面似乎还不成熟和业余。
另一方面,在MontysThree中的代码量以及因此投入的精力是巨大的。该工具集展示了一些精通技术的决策:在RSA加密下存储3DES密钥,避免IDS的自定义隐写术以及使用合法的云存储提供商隐藏C2流量。
文件哈希
1B0EE014DD2D29476DF31BA078A3FF48
0976C442A06D2D8A34E9B6D38D45AE42
A2AA414B30934893864A961B71F91D98
A221671ED8C3956E0B9AF2A5E04BDEE3
3A885062DAA36AE3227F16718A5B2BDB
3AFA43E1BC578460BE002EB58FA7C2DE
017539B3D744F7B6C62C94CE4BCA444F
501E91BA1CE1532D9790FCD1229CBBDA
D6FB78D16DFE73E6DD416483A32E1D72
域和IP
autosport-club.tekcities[.]com
dl55-web-yachtbooking[.]xyz
![MontysThree:带有隐写术和俄罗斯语言的工业间谍活动 MontysThree:带有隐写术和俄罗斯语言的工业间谍活动]()
![MontysThree:带有隐写术和俄罗斯语言的工业间谍活动 MontysThree:带有隐写术和俄罗斯语言的工业间谍活动]()
![MontysThree:带有隐写术和俄罗斯语言的工业间谍活动 MontysThree:带有隐写术和俄罗斯语言的工业间谍活动]()
本文始发于微信公众号(黑白之道):MontysThree:带有隐写术和俄罗斯语言的工业间谍活动
评论