APT情报小屋

越南黑客组织海莲花使用怪盗基德图片隐藏木马

2019-04-08  本文已影响186人  1de018b564b4

概述

    在监控OceanLotus 组织攻击活动中,Cylance安全研究员发现了一种新颖的有效载荷装载器,其利用隐写术读取PNG图像文件内加密的数据。隐写算法似乎是定制的,并且与原始图像相比,使用最低有效位方法来最小化视觉差异。一旦经解码,解密,执行,加载器将加载APT32后门之一。迄今为止,Cylance已观察到与隐写装载机组合被使用的两个后门 - 一个版本Denes后门(与ESET报告相似),以及Remy后门更新版本。然而,apt32可以轻松修改后续以传递其他恶意负载。 shellcode的复杂性和加载器显示该组织继续大力投资开发定制工具。 本白皮书描述了在两个不同的加载器变体中使用的隐写算法,并分析后门如何从.png图片中解码。

技术分析:

    这个特殊的OceanLotus恶意软件加载程序试图模仿迈克菲的McVsoCfg.DLL,并试图通过正常的““On Demand Scanner”可执行文件加载。 它与存储.png图像文件中的加密有效负载一起到达。该.png文件实际上是一个有效的图像文件,它本身并不是恶意的。 有效载荷在此图像内使用进行才用隐写术进行编码。它利用每个像素颜色代码的最低有效位来存储隐藏信息,没有对图片本身进行明显可见的更改。 编码的有效载荷还用AES128进一步加密,使用XOR进行模糊处理以试图欺骗隐写检测工具。

特征:

• 利用正常程序加载dll

• 使用自定义.png隐写术加载下一阶段的有效负载

•使用Crypto ++库中的AES128实现进行有效负载解密

• 加载Denes后门,有可能会被也采用了与其它负载

恶意DLL导出函数与原始mcvsocfg.dll库相同的函数名称。 所有导出都包含完全相同的代码,它将解密有效负载,将其加载到内存并执行它:

有效载荷使用称为隐写术的技术在单独的.png文件中编码。 最重要的是,解码的有效载荷是也用AES-128加密,最后用XOR 0x3B进行混淆。 值得注意的是,XOR键不是硬编码,而是从C:\ Windows \ system.ini文件的第一个字节读取

其中一个png图像是怪盗基德

为了提取有效负载,恶意软件将首先初始化GDI + API并获取图像宽度和高度值:

图像的前四个像素内编码标志payload的大小。 获得大小后,恶意软件将分配一个适当的内存缓冲区并继续逐字节解码剩余的有效负载

pyload的加密方式和大小一样,每个字节都是从图像像素的ARGB颜色代码计算出来的.

如果有效载荷大于用于存储它的图像,则剩余的有效载荷字节简单地附加到图像IEND标记之后,直接从文件中读取:

像素编码算法相当简单,旨在与原始图像相比最小化视觉差异,仅修改红色,绿色和蓝色字节值的最低有效位。 alpha通道字节保持不变。为了编码有效载荷的一个字节,前三位(0-2)以红色存储,接下来的三位(3-5)以绿色存储颜色,最后两位(6-7)以蓝色存储。 解码是一个简单的逆操作:

Windows通过GdpiBitmapGetPixel API将.png像素RGBA值转换为ARGB编码,从而完成解码:

例如,ARGB像素值0xFF4086DB将产生解码的字节0xF0:

python解密脚本如下

在解码.png图像之后,加载器然后继续初始化密钥,并且IV用于执行AES解密有效载荷, 这两个值都是由二进制文件.rdata部分中硬编码的256个伪随机字节数组提供的。 该数组的前两个字节分别指定键和IV的相对偏移量

加载器使用开源库Crypto ++ 2实现AES128 ,以下列方式实例化:

恶意软件作者修改了大部分原始代码。 SimpleKeyringInterface类用于初始化键,而IV传递给SetCipherWithIV函数:

使用StreamTransformationFilter类并将StreamTransformation密码设置为AES来执行解密

库代码对CPU功能执行大量检查,并根据结果选择特定的代码实现加密功能:

其中一种AES实现使用了几种现代技术支持的英特尔AES-NI加密指令集:

解密的有效负载经历一次最终转换,与从C:\ Windows \ system\ini第一个字节进行异或(0x3B)。

在CyberChef中执行相同的步骤,可以解码加密的有效载荷:

其他几例可移步公众号查阅:https://mp.weixin.qq.com/s/3oFoCbN-v4qn24V4PbPZdA

上一篇 下一篇

猜你喜欢

热点阅读