用于分发恶意软件的 .NET 打包器使用嵌入式图像来隐藏有效负载

译者:知道创宇404实验室翻译组

原文链接:https://www.proofpoint.com/us/blog/threat-insight/commodity-net-packers-use-embedded-images-hide-payloads

前言

大多数恶意软件都是以“打包”的形式分发的:通常是一个包含代码的可执行文件,在提取和执行预期负载之前,这些代码可以逃避防病毒检测和沙盒。我们讨论了两个常见的打包器,它们用于分发恶意软件,但在图像中隐藏了预期的有效载荷。

Steganography

Steganography是一种发送隐藏信息的技术。在图像中隐藏数据时,主要技术有:

  • 将隐藏的数据存储在图像文件的末尾
  • 将隐藏的数据存储在图像元数据中(例如EXIF)
  • 将隐藏的数据存储在实际像素数据中

要真正“隐藏”,可能意味着只使用数据中最不重要的位,以便在渲染时图像看起来“正常”。

这里讨论的打包器通常使用整个图像像素数据,因此并不是真正的“隐藏”。如果它们被显示,图像将随机出现。

“CyaX”打包器

在这个打包程序中,.NET可执行文件在.NET资源中包含一个方形PNG图像,该图像在整个文件中占有很大比例。

图像可以被解码到一个中间的可执行文件,其中包含一个.NET资源,而这个资源又可以被解码为有效负载。有时,中间可执行文件使用其他的商品打包器,如ConfuserEx或.NET Reactor。

细节

第一级有效负载从蓝色、绿色、红色和Alpha(BGRA)通道解码,获取像素列。有些版本使用红色、绿色和蓝色(RGB)通道。

例如,在样本SHA256-026b38e8eb0e4f505dc5601246143e7e77bbd2630b91df50622e7a14e0728675中:

图1:从样本SHA256获取的图像:026b38e8eb0e4f505dc5601246143e7e77bbd2630b91df50622e7a14e0728675

使用图像中的通道BGRA,我们可以获取数据:

一般来说,将提取的数据与短XOR密钥或数据的前16个字节进行XOR运算,并使用gzip进行解压缩,从而生成一个中间阶段的.NET可执行文件。

对于上面的样本,XOR密钥是(以十六进制表示)74 43 74 17 74 02 74 23 74,可执行文件如下:

这个中间阶段通常是用ConfuserEx打包的,但是在解包之后,它包含一个.NET资源,其中包含有效负载,通常与两个密钥进行XOR运算:一个短的(通常被截断的Unicode)键,然后存储一个16字节的密钥在结果文件的开头。

在上面的样本中,中间可执行文件与.NET Reactor一起打包。使用de4dot之类的工具进行反混淆后,可执行文件包含一个资源2EJp1.resources,它从以下开始:

与键00 77 00 55 00 6c 00 59 00 71 00 79 00 4e进行异或(Unicode中的wUlYqyNZJIbjVN,长度减半):

然后对结果的前16个字节进行XOR运算,得出有效负载,即Agent Tesla:

在此打包程序的某些早期版本中,此.NET资源被命名为CyaX_Sharp.Properties.Resources.resources

Gzip变体

如上所述,一些样本使用红色,绿色和蓝色(RGB)通道,另一些使用gzip压缩中间可执行文件。

例如,在样本SHA256-083521fa4522245adc968b1b7dd18da29b193fd41572114c9d7dd927918234e中:

图2:从样品SHA256拍摄的图像:083521fa4522245adc968b1b7dd18da29b193fd41572114c9d7dd927918234ea

图像使用RGB通道解码为:

与密钥(十六进制)24 04 33进行异或运算得出:

它是一个4字节的DWORD,包含未压缩的文件大小。后跟一个gzip压缩文件,以10字节gzip开头,该gzip解压缩为中间.NET可执行文件:

它包含一个.NET资源d2o6x4FhIdl.resources,其开始于:

将其与键00 66 00 43 00 73 00 6b 00 62 00 67 00(Unicode中的fCskbgkLbLArI)进行异或后,再将07 2e 8c d5 50 23 1b e3设为38 4f 0f 4b 8d ca

Steganography变体

最新变体中,第一级有效载荷实际上存储在第二个PNG图像中,该图像是从第一幅图像的红色,绿色和蓝色通道的最低有效位中提取的,并按行排列像素。然后从第二张图片的蓝色、绿色、红色和Alpha通道中提取中间阶段的.NET可执行文件,像素以列为单位,这次不进行XOR。

例如,在样本SHA256–04794EC7E7EB5C6611ADA660FB1716A91E01503FB4703C7D2F2099C089C9017中:

图3:从样本SHA256拍摄的图像:04794ec7e7eb5c6611aada660fb1716a91e01503fb4703c7d2f2099c089c9017

该图像具有RGB通道,并且首先按行而不是按列获取像素:

(还有一个Alpha通道,所有值均设置为0xff。)

8个字节为一组,然后以相反的顺序获得最低有效位(例如ff 01 00 ff 01 00 fe 01->10011011-> 0x9b):

这是存储在DWORD(0x1e09b)中的文件大小,后跟第二个PNG图像。首先使用BGRA和columns,解码为:

它包含一个.NET资源biGzxmYEphCl

4c 00 6b 00 74 00 79 00 54 00 65 00 66 00 65 00(Unicode中的LktyTefe)异或时:

给出有效载荷,在本例中是Remcos RAT。

“Hectobmp”打包器

在这个打包程序中,.NET可执行文件通常在.NET资源中包含几百个小映像,每个映像都包含负载的一部分,需要按正确的顺序重新组装。

早期版本使用BMP文件格式,而较新版本使用PNG。

细节

图4:.NET资源列表(来自ILSpy)

例如,在样本SHA256 – 0091c6bdceecf3e0143b4eaaefca1cd56cbfdfcc55f99c167f9dd1f3a48928bb5中:

图5:从样本SHA256中获取的第一张图像:0091c6bdceecf3e0143b4eaaefca1cd56cbfdfc55f993a1672

其中包含135张图像,第一张图像使用绿色,红色和蓝色通道解码,第一行显示为:

这包括Windows可执行文件的启动。

从每个图像中提取的块的大小存储在前4个字节(DWORD)中,在本例中为0x30d,小于15,所需的数据块从第6个字节开始。

块需要按资源名称的数字顺序进行组装,这与它们在文件中出现的字母顺序不同,后者是:

它们在.NET元数据中引用的顺序:

在这种情况下,重新组装的有效载荷是Loki Bot Stealer。

在样本SHA256 – 09c8cbd9cdfda1fcb7c6a051887213dc3e3ccf00a5877eca3d3e374f077b98d5中,这些图像是BMP,第一个看起来像:

图6:从样本SHA256拍摄的图像:09c8cbd9cdfda1fcb7c6a051887213dc3e3ccf00a5877eca3d3e374f077b98d5

图像解码为以下内容,块大小以绿色突出显示,块数据以黄色和蓝色突出显示:

在这种情况下,当从映像进行组装时,有效负载使用zlib Deflate压缩,从字节0xb0开始,以蓝色突出显示。

解压缩得到:

结论

打包器的功能各式各样,由于它们显示为良性文件,因此很难进行逆向工程,或者采用沙盒规避技术。在本文中,我们研究了两个使用嵌入式图像隐藏有效负载的打包器,一个使用单个图像,另一个使用数百个图像。这些只是攻击者拥有的众多工具中的一小部分,这些工具可以用来分发恶意软件、收集敏感信息和获得对系统的未授权访问。

IOCs

IOCTypeDescription
026b38e8eb0e4f505dc5601246143e7e77bbd2630b91df50622e7a14e0728675SHA256CyaX PNG sample with channels BGRA
c8c79ba04ab76c96db913f05b4b5bab36e7e0148fd72148df170a4be94d879a3SHA256Agent Tesla payload in 026b38e8eb0e4f505dc5601246143e7e77bbd2630b91df50622e7a14e0728675
083521fa4522245adc968b1b7dd18da29b193fd41572114c9d7dd927918234eaSHA256CyaX PNG sample with gzipped data
a6f7edd2654412c25d7c565cb5b52e1382799a8b86d6bc44e965b554f6344618SHA256Agent Tesla payload in 083521fa4522245adc968b1b7dd18da29b193fd41572114c9d7dd927918234ea
04794ec7e7eb5c6611aada660fb1716a91e01503fb4703c7d2f2099c089c9017SHA256CyaX PNG sample with double steganography
6d9c861bf6f1495a4bddc7c745eb5b504692b4d6eae31e89453f0829760b1b90SHA256Remcos RAT payload in 04794ec7e7eb5c6611aada660fb1716a91e01503fb4703c7d2f2099c089c9017
0091c6bdceecf3e0143b4eaaefca1cd56cbfdfc55f99c167f9dd1f3a48928bb5SHA256Hectobmp sample with PNGs
1180c158968faaf0a4951e9a0c59996f0fb29cdad9443aa2097efb5bc7f123f4SHA256Loki Bot payload in 0091c6bdceecf3e0143b4eaaefca1cd56cbfdfc55f99c167f9dd1f3a48928bb5
09c8cbd9cdfda1fcb7c6a051887213dc3e3ccf00a5877eca3d3e374f077b98d5SHA256Hectobmp sample with BMPs
c3b85d8291281d73cfdd8373cb2b32cdc4c3a602233f99ab3cbbd34bd4e3c99bSHA256Agent Tesla payload in 09c8cbd9cdfda1fcb7c6a051887213dc3e3ccf00a5877eca3d3e374f077b98d5

以上是 用于分发恶意软件的 .NET 打包器使用嵌入式图像来隐藏有效负载 的全部内容, 来源链接: utcz.com/p/199799.html

回到顶部