我们来自 ESET 的研究人员发表了一篇关于以前未记录的工具渗透到亚洲知名公司和地方政府的文章。这些工具至少自 2020 年以来一直处于活跃状态,旨在窃取数据。ESET 将它们称为 Workok。ESET 监测到了从 2021 年 5 月 5 日到 2022 年初的重大活动中断。然而,当 Worok 再次活跃时,新的目标受害者——包括中亚的能源公司和东南亚的公共部门实体——被感染以窃取基于数据的数据。关于被攻击公司的类型。
ESET 的研究人员描述了两个执行链以及受害者的计算机是如何受到损害的。最初的妥协是未知的,但详细描述了接下来的阶段,包括描述如何通过隐写术从 PNG 文件中加载和提取最终的有效载荷。但是,最终的有效载荷尚未恢复。有关 Worok、链和后门命令的详细信息,请参阅 ESET 的文章Worok:大图。
我们的分析旨在扩展 ESET 研究的当前知识。我们在执行链的末端捕获了与 Worok 相关的其他工件。我们遥测捕获的 PNG 文件确认嵌入其中的最终有效载荷的目的是窃取数据。值得注意的是使用 DropBox 存储库从受害者机器收集数据,以及攻击者使用 DropBox API 与最后阶段进行通信。
妥协链
我们打算与 ESET 研究设定的术语保持一致。我们的研究还没有发现恶意软件的整个初始危害。然而,我们有一些新的观察可以成为渗透过程的一部分。
图 1说明了 ESET 描述的原始妥协链。在某些情况下,恶意软件据称是由攻击者通过ProxyShell漏洞部署的。在某些极端情况下,针对ProxyShell漏洞的利用被用于在受害者网络中的持久性。然后,攻击者使用公开可用的漏洞利用工具来部署他们定制的恶意工具包。因此,最终的妥协链很简单:第一阶段是CLRLoader实现一个简单的代码来加载下一个阶段 ( PNGLoader),正如 ESET 报告的那样。
图 1.工作妥协链
最初的妥协
具体的初始攻击向量仍然未知,但我们在受感染的机器中发现了四个 DLL,其中包含CLRLoader. 我们的检测捕获了图 2所示的流程树。
图 2.运行 CLRLoader 的进程树
WLBSCTRL.DLL对于、TSMSISrv.DLL和观察到此进程树TSVIPSrv.DLL。执行 DLL 的相互进程是svchost -k netsvcs. 因此,初始过程是SvcHost引入一个 Windows 服务。DLL 文件帮助我们识别两个 Windows 服务,即IKE 和 AuthIP IPsec 密钥模块(IKEEXT) 和远程桌面配置(SessionEnv)。这两种服务都以其对文件System32夹中默认缺失的 DLL 文件的 DLL 劫持而闻名,SCM 和 DLL Hijacking Primer。
横向运动
文件夹中的 DLL 劫持System32本身并不是漏洞,因为攻击者需要管理员权限才能写入。但是,我们假设由于最初的妥协而存在具有管理员权限的已实施反向 shell。在这种情况下,攻击者可以通过服务控制管理器(SVCCTL)有效地执行横向移动。
简而言之,攻击者将劫持的 DLL 文件放入%SYSTEMROOT%\System32其中,然后远程启动相应的服务。
被滥用的 Windows 服务及其 DLL 文件列表:
IKE 和 AuthIP IPsec 密钥模块
C:\Windows\System32\WLBSCTRL.dll
远程桌面配置
C:\Windows\System32\TSMSISrv.dll
C:\Windows\System32\TSVIPSrv.dll
观察到的第二个被劫持的 DLL 与 VMware 机器有关。攻击者可以滥用 的劫持vmGuestLib.dll,WMI 性能适配器 (WmiApSrv) 服务使用它来提供性能信息。
在系统启动时,WmiApSrv 加载vmStatsProvider.dll,它尝试vmGuestLib.dll从%ProgramFiles%\VMware\VMware Tools\vmStatsProvider\win32第一个调用。但是,原始库位于%SYSTEMROOT%\System32. 因此,如果攻击者vmGuestLib.dll进入该%ProgramFiles%位置,也会导致 DLL 劫持。
这两种方法是如何执行的可能场景,并启动了图 1CLRLoader所示的妥协链。这种方法的优雅之处在于攻击者不必创建可能揭示可疑活动的新服务。攻击者仅滥用被劫持的 DLL 的导出函数,空的重新实现不会导致错误或任何其他危害指标。此外,合法的Windows服务确保了持久性。CLRLoader
CLR加载器
CLRLoader是用 Microsoft Visual C++ 编写的 DLL 文件。它实现了DllMain方法,该方法负责加载下一阶段(.NET 的变体PNGLoader)。其余导出函数对应被劫持DLL的接口,但导出函数的实现是空的。因此,调用此函数不会导致调用进程崩溃。为了完整起见,被劫持的文件还包含原始 DLL 文件的数字签名;自然,签名无效。
CLRLoaderLoadLibraryExW通过从滥用的进程/服务调用来激活。LoadLibraryExW使用零dwFlags参数DllMain调用,因此当恶意 DLL 加载到虚拟地址空间时调用。CLRLoader代码示例如图 3 所示。
图 3.被劫持 DLL 的 DllMain
CLRLoader检查包含 .NET DLL 文件的存在PNGLoader,创建互斥体,最后PNGLoader通过CorBindToRuntimeExAPI 执行。
我们识别出两个PNGLoader带有入口点的变体,如下所示:
Jsprofile.Jspfilter (Setfilter)
pngpcd.ImageCoder (PngCoder)
加载器
第二阶段 ( PNGLoader) 由CLRLoader或,如 ESET 报告,由加载PowHeartBeat。我们还没有看到任何代码部署PNGLoader在渗透系统上,但我们希望以与横向移动类似的方式看到它。
PNGLoader是一个从 PNG 文件中提取字节并将其重构为可执行代码的加载程序。PNGLoader是使用 .NET Reactor 混淆的 .NET DLL 文件;文件描述提供了模仿Jscript Profiler或Transfer Service Proxy等合法软件的信息。
去混淆的代码包括由调用PNGLoader的入口点 ( ) 。有一个硬编码路径,用于递归搜索所有 PNG 文件。每个文件都经过特定位图属性(高度、宽度)和隐写嵌入内容 ( ) 的验证。该方法如图4所示。SetfilterCLRLoaderloader_path.pngDecodePngSetfilter
图 4. PNGLoader 的 Setfilter 方法
隐写嵌入依赖于一种更常见的隐写技术,称为最低有效位 (LSB) 编码。通常,此方法将数据嵌入到每个像素的最低有效位中。在该具体实现中,一个像素编码一个半字节(每个 alpha、红色、绿色和蓝色通道一个位),即两个像素包含一个字节的隐藏信息,如图 5 所示。虽然这种方法很容易通过简单的统计分析来检测,但这种像素值的变化是肉眼难以察觉的。
图 5. 2 个像素的字节重建
然后通过以下四个步骤提取隐写嵌入的内容。
提取 PNG 文件的前 16 个字节(32 个像素),前 8 个字节必须匹配一个幻数。由于提取其余像素(大约数十万像素)所需的计算复杂性,因此执行此检查。随后的 8 个字节表示嵌入有效负载的长度。
以下提取的数据是 Gzip 格式的加密有效负载。
提取的有效载荷使用硬编码的多字节 XOR 进行解密PNGLoader。
XORing 的结果是未压缩的 Gzip 数据。
这些步骤的结果是以隐写方式嵌入到 PNG 文件中的最终有效负载。
隐写嵌入的有效载荷
如果PNGLoader成功处理(提取→解码→解包)最终的有效载荷,它会在运行时编译并立即执行。我们的遥测发现了使用图 6PNGLoader中记录的幻数的两种变体。
图 6. PNG 位图中嵌入的数据结构
第一个有效负载实现是一个 PowerShell 脚本,如图 7PNGLoader中的代码片段所示。与我们的 ESET 同事一样,我们还没有此有效负载的示例,但我们希望具有与下面描述的第二个有效负载实现类似的功能。
图 7.执行 PowerShell 有效负载的 PNGLoader 的代码片段
第二个有效负载实现是通过类的CompileAssemblyFromSource方法编译和执行的 .NET C# CSharpCodeProvider,参见图 8。
图 8.执行嵌入在 PNG 位图中的 C# 有效负载
.NET C# 有效负载具有命名空间Mydropbox、类Program和方法Main。命名空间指示负载使用 DropBox 操作。我们的遥测捕获了一些 PNG 文件,包括隐写嵌入的 C# 有效负载。
PNG文件
乍一看,PNG图片看起来很无辜,就像一朵蓬松的云;见图9。我们的遥测已经捕获了三张具有以下属性的 PNG 图片:
尺寸:1213 x 270(像素)
位深:8,颜色类型:6(RGB + Alpha)
图 9.带有隐写嵌入 C# 有效负载的恶意 PNG 文件
正如我们之前提到的,恶意软件作者依靠 LSB 编码将恶意负载隐藏在 PNG 像素数据中,更具体地说,隐藏在每个颜色通道(红色、绿色、蓝色和 Alpha)的 LSB 中。让我们看看它们的位平面。图 10 显示了每个颜色通道的较高位平面之一;请注意,这些图像中的每一个看起来都远离随机噪声。如果我们查看一张 LSB 中没有嵌入数据的图像,我们通常会看到类似的模式。
图 10.没有隐藏数据的 RGB 位平面之一
现在,为了进行对比,让我们看一下 LSB 位平面。图 11显示了带有嵌入的加密(和压缩)有效负载的 PNG 图像的每个通道的 LSB 位平面。回想一下,加密和压缩通常都会增加图像的熵。因此,这种图像的 LSB 位平面看起来像随机噪声也就不足为奇了。很明显,没有使用 LSB 位平面的整个画布。
图 11.带有嵌入数据的零 (LSB) 位元通道
有效载荷只占用代表有效载荷大小的像素,其余部分保持不变;请参阅下面的算法。
在这种特定情况下,PNG 文件位于 中C:\Program Files\Internet Explorer,因此图片不会引起注意,因为 Internet Explorer 具有与图 12所示相似的主题。
图 12.图形 Internet Explorer 主题示例
下拉框控件
此时,我们可以通过我们称为的 .NET C# 有效负载扩展 ESET 妥协链DropBoxControl——第三阶段,参见图 13。
图 13.扩展的妥协链
DropBoxControl是一个通过 DropBox 服务与攻击者通信的后门。值得注意的是,C&C 服务器是一个 DropBox 帐户,整个通信,例如命令、上传和下载,都是使用特定文件夹中的常规文件执行的。因此,后门命令被表示为具有定义扩展名的文件。DropBoxControl定期检查 DropBox 文件夹并根据请求文件执行命令。每个命令的响应也会作为结果文件上传到 DropBox 文件夹。
原文地址:https://decoded.avast.io/martinchlumecky/png-steganography/