1.前言
3CX的VoIP客户端3CXDesktopApp遭遇了APT组织的供应链攻击,Windows和Mac OS平台下的的多个3CXDesktopApp版本被攻击者用于侧加载恶意dll,在3CX的官网介绍中宣传有190个国家/地区的超过600,000个公司使用3CX的产品并且每天有超过12,000,000名用户使用,本文主要分析的是Windows平台下的3CXDesktopApp样本。
2.样本流程图
3.恶意代码分析
根据公开的情报显示最先报告3CXDesktopApp可疑恶意活动的为3CX的用户于2023年3月22日在3CX论坛中发布的帖子,该客户的SentinelOne EDR检测到了3CXDesktopApp.exe的shellcode api调用以及试图向其他进程内存空间注入代码。
随后2023年3月29日CrowdStrike在reddit发布了3CX遭遇APT组织供应链攻击的报告。
3CX的CEO在用户论坛中指出这次被供应链攻击的原因是上游库被污染(指ffmpeg.dll)。
之后ffmpeg官方进行了有力回击,指出恶意的ffmpeg.dll和他们无关,因为ffmpeg只提供源代码并不提供编译后的ffmpeg.dll。
在CrowdStrike的分析报告中指出根据此次攻击的加密密钥和HTTPS通信数据包格式推断此次3CX供应链攻击的幕后黑手是来自北朝鲜的APT组织LABYRINTH CHOLLIMA。
根据公开的情报Windows下有2个版本受到此次供应链攻击的影响分别为18.12.407和18.12.416,我这里就先以3CXDesktopApp-18.12.407.msi为分析目标,可以看到msi安装包有3CX的有效数字签名,签名日期为2023年3月3日。
我们安装完后启动3CXDesktopApp,然后3CXDesktopApp.exe会加载app文件夹下的ffmpeg.dll。
我们查看3CXDesktopApp.exe的进程树,可以看到已经加载了app文件夹下的ffmpeg.dll。
在3CXDesktopApp进程找到一处可疑内存,通过0x4550(PE)标志可以推断到此块虚拟内存中应该是一个PE文件,Dos头和DosStub被抹除。
可以看到可读可执行内存属性的应该是通过反射式注入的PE文件代码段了。
ffmpeg.dll是使用VS2015链接器版本14.0编译的x64 dll,编译时间戳为2022年11月12日,无数字签名。
3.1 CVE-2013-3900
d3dcompiler_47.dll有Microsoft有效的数字签名证书,数字签名证书的时间戳为2021年5月8日序列号为:33000003dffb6ae3f427ecb6a30000000003df。
此d3dcompiler_47.dll的版本为10.0.20348.1。
经过一番查苦寻找我从Chrome浏览器的路径中找到了此d3dcompiler_47.dll,可以看到Chrome版也是有Microsoft有效的数字签名证书,签名日期时间戳和数字签名证书的序列号和3CXDesktopApp自带的d3dcompiler_47.dll完全一致。
Chrome目录下的d3dcompiler_47.dll的版本也为10.0.20348.1。
好了既然这两个d3dcompiler_47.dll的版本号相同数字签名时间戳和数字签名证书序列号都相同,那sha256哈希应该也是相同的吧,但是我们可以看到这两个d3dcompiler_47.dll的大小和sha256哈希都不相同,明显是3CXDesktopApp自带的d3dcompiler_47.dll要比Chrome自带的要大,这是怎么回事呢?我们知道如果我们修改了经过数字签名证书签名的PE文件Windows就会提示我们数字签名无效。
3CXDesktopApp自带的d3dcompiler_47.dll其实利用了CVE编号为CVE-2013-3900的Windows WinVerifyTrust签名验证漏洞,但是这个漏洞是一个十分古老的漏洞在2013年Microsoft已经发布补丁KB2893294进行修复,那为什么2013年已经被修复的漏洞在2023又重生了呢。
通过msrc在2022年1月21日发布的安全更新指南中告诉了我们答案,其实Microsoft并没有完全修复此漏洞,并且在Windows10和Windows11中CVE-2013-3900这个漏洞都可以被利用,并且msrc还告诉我们这个漏洞会导致攻击者可以修改现有的已签名可执行文件来利用该文件的未验证部分,从而在未使签名无效的情况下向文件添加恶意代码从而利用此漏洞,到这里我们大概就知道3CXDesktopApp自带的d3dcompiler_47.dll利用此漏洞的方式了。
msrc告诉了我们32位和64位系统对应的漏洞缓解方式,主要就是通过注册表添,EnableCertPaddingCheck键值并设置为1。
通过msrc的漏洞缓解措施后3CXDesktopApp自带的d3dcompiler_47.dll属性中已经不显示数字签名证书信息。
有安全研究员称如果使用了我们使用了添加注册表的漏洞缓解措施,在升级到Windows11后可能会将此缓解措施移除。
使用BCompare对Chrome和3CXDesktopApp自带的d3dcompiler_47.dll进行了比对,通过对比后可以确认Chrome自带的就是原版的d3dcompiler_47.dll,对比图左为Chrome图右为3CXDesktopApp,首先就是OptionalHeader的checksum字段,原版的checksum字段值为0x4ACD32,经过修改的checksum字段值为0x4F36D7,然后OptionalHeader的DataDirArray的Security也就是数据目录表中的证书表的Size字段,原版的值为0x21C8,修改版的值为0x45CD8,由此可以计算出利用了CVE-2013-3900的d3dcompiler_47.dll相比于原版的增加了0x43B10字节大小的内容。
接着就是WinCertificate表中的dwLength字段了,和数据目录表中的证书表Size字段信息相同原版的值为0x21C8,修改版的值为0x45CD8。
然后就是证书表增加的内容了,增加的内容以特征码FE ED FA CE为开头。
3.2 Shellcode Load
ffmepng.dll的恶意代码位于DllMain的18004DE60函数。
首先会使用CreateFileW函数创建一个名为AVMonitorRefreshEvent
的事件对象确保唯一性。
GetModuleFileNameW函数获取当前进程模块路径。
使用wcsrchr函数查找当前模块路径中最后一个\\
的位置并+2。
使用d3dcompiler_47.dll字符串替换原模块的名称。
使用CreateFileW打开d3dcompiler_47.dll,GetFileSize获取dll文件大小,并且使用HeadAlloc申请堆空间用于读取dll。
使用ReadFile函数读取d3dcompiler_47.dll到堆空间后,检查d3dcompiler_47.dll的MZSignature标志是否为0x4D5A(MZ)。
之后开始暴力搜索FE ED FA CE特征码。
搜索到特征码后计算加密的shellcode的大小0x43b08并使用HeapAlloc函数申请堆空间。
将加密的shellcode复制到申请的堆空间中。
使用硬编码的rc4密钥3jB(2bsG#@c7
通过rc4算法解密shellcode。
rc4算法解密shellcode后,可以看到开头的 E8 00 00 00 00一个很明显的GetPC技术指令opcode。
接下来使用VirtualProtect函数将shellcode的内存地址运行权限改为PAGE_EXECUTE_READWRITE并通过函数指针直接调用shellcode。
将shellcode从内存中dump下使用ida查看。
通过ror13 hash获取需要使用的函数地址。
紧接着开始解析PE文件了,通过刚刚获取的VirtualProtect和VirtualAlloc等函数可以判断此shellcode主要功能是使用反射式注入加载PE文件运行。
shellcode结束后附加着确实是一个PE文件,可以看到明显的0x4D5A(MZ),DosStub等等。
我们将shellcode末尾的PE文件dump出来,可以看到此PE文件为使用VS2022编译的x64 dll文件,编译时间戳为2023年1月11日,无数字签名并且PE尾部附加了一些二进制数据。
查看PE文件尾部的数据:1200 2400 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 3CXDesktopApp/18.11.1197 Chrome/102.0.5005.167 Electron/19.1.9 Safari/537.36"
为一个User-Agent,可以大致判断此PE文件可能会使用此User-Agent与C&C服务器进行通信。
接下来分析shellcode,通过GetPC指令获取的地址偏移+0x658获得dll文件的VA。
通过GetPC指令获取的地址偏移+0x43a58获取dll文件末尾的User-Agent数据VA。
通过ror13 hash获取完函数地址后,验证dll文件的NTSignature是否为0x4550(PE)。
通过dll文件的SizeOfImage字段大小申请虚拟内存。
将NT头复制到虚拟内存,Dos头只复制了一个AddressOfNewExeHeader字段。
将各个区段复制到虚拟内存。
LoadLibraryA函数加载导入dll。
使用GetProcAddress获取导入函数地址并填充到IAT。
修复重定位数据。
根据各个区段的Characteristics属性使用VirtualProtect函数修改对应的内存运行权限。
使用NtFlushInstructionCache函数刷新代码缓存。
调用dll main。
dll main没有实际功能,所以代码又返回了shellcode开始解析dll的导出表获取DllGetClassObject导出函数地址并调用。
DllGetClassObject首先使用MultiByteToWideChar函数将dll文件附加的User-Agent字符串转为了Unicode字符,然后调用CreateThread函数创建线程执行了StartAddress函数。
StartAddress函数会先获取当前模块路径并拼接manifest文件。
time64函数获取当前时间戳。
我们将当前的时间戳转换为日期。
之后通过rand() % 0x1B7740 + timestamp + 0x93A80操作将当前时间戳 + 7天(0x93A80)。
将增加7天后的时间戳转换为日期。
写入时间戳到manifest文件。
查看manifest文件中写入的时间戳。
wfoptn_s函数打开manifest文件如果为空就将7天后的时间戳写入,如果不为空就读取manifest中的时间戳和time64获取的当前时间戳对比,只有在当前时间戳大于manifest文件中的时间戳才会继续执行否则将会一直循环对比并调用Sleep函数休眠,也就是会休眠7天的时间。
接下来了读取注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid字段的值。
尝试从https[:]//raw[.]githubusercontent[.]com/IconStorages/images/main/icon%d.ico的github存储库下载icon0.ico到ico15.ico的任意一个ico文件,使用rand函数随机0-15的种子。
由于目前此github存储库已经被删除,这里引用互联网的公开的情报。
我从第三方样本库中获取到了除了icon9.ico之外的所有ico文件,这些文件都是正常的ico图标可以正常显示。
我们查看ico0.ico是一个正常的PNG文件。
但是文件末尾附加了一段Base64编码的数据。
通过strings查看每个ico文件末尾都附加有Base64编码数据。
此为ico0.ico附加数据经过Bse64解码后的内容,所有的ico附加数据经过Base64解码后开头都是默认的29 00 00 00,之后紧跟着的16字节为authentication tag,剩下的字节才是经过Aes Gcm加密的加密数据。
之后通过一个复杂的算法生成了32字节的Aes Gcm Key,并且生成的Key都为:0x21, 0xA1, 0xAC, 0xE1, 0xE6, 0x63, 0xBA, 0x45, 0x86, 0x4D, 0xF4, 0x57, 0xB2, 0x09, 0x18, 0x1E, 0xBD, 0x90, 0x10, 0x1B, 0x4A, 0x51, 0x28, 0x40, 0x38, 0x7C, 0xD2, 0x10, 0xE5, 0x8F, 0xA3, 0xF1。
算法特征和github开源代码十分相似。
接着生成0xC字节的Nonce,生成的Nonce都为:0x3B, 0x8A, 0x08, 0xED, 0x0F, 0x9E, 0x08, 0xCA, 0x57, 0x21, 0x09, 0xEF。
可以看到使用的是Microsoft CNG加密api,并且使用的加密算法为Aes Gcm模式的加密。
通过Aes Gcm解密后的数据为C&C服务器地址,那么可以确认icon0.ico到icon15.ico文件末尾的base64编码数据经过解密应该都为C&C服务器地址。
在通过C&C服务器获取下一阶段的payload的时候会添加如下的请求头。
在获取到下一阶段的payload后将内存权限改为PAGE_EXECUTE_READWRITE并通过函数指针方式运行。
3.3 Final Stage Payload
由于目前C&C服务器已经关闭,所以我从网络上公开的第三方样本库中下载的最后阶段的dll,此样本是使用VS2022链接器版本14.32编译的64位dll,编译时间戳位2023-3-17。
最后阶段的dll也有一个名为DllGetClassObject的导出函数,根据推测和公开的情报从C&C获取的最后阶段在此dll前附加有shellcode用于反射加载并调用此dll的导出函数DllGetClassObject,和我们之前分析的d3dcompiler_47.dll中的shellcode load功能相同。
从字符串中可以看出最后阶段的payload目的是针对Chrome、Edge、Brave、Firefox浏览器历史浏览信息进行窃密,History为基于Chromium开发的浏览器用于记录历史浏览信息的sqlite数据库,places.sqlite文件为FireFox浏览器中所有的书签、下载文件记录、和浏览网页的记录的sqlite数据库。
这两条sql语句分别查询基于Chromium的浏览器(Chrome、Edge、Brave)和FireFox浏览器的历史浏览记录的url和title信息并且限制为前500信息。
NetWkstaGetInfo函数用于获取主机用户名和域名,RtlGetVersion函数用于获取系统版本信息。
将收集到的主机信息格式化。
由于针对的是4个特定的浏览器进行信息窃取,所以for循环4次代表分别对4个浏览器进行信息窃取。
StealBrowserInfor遍历全盘文件查找对应浏览器的数据存储文件夹。
如果找到对应浏览器的历史信息记录sqlite数据库则用对应的sql语句进行查询。
信息收集完毕会返回调用模块然后对数据进行加密并将数据回传到C&C服务器。
4.yara rule
以下的yara rule用于检测Windows平台下遭受此次供应链攻击影响的3CXDesktopApp
import "pe"
rule SupplyChainAttack_3CX_MsiInstall
{
meta:
description = "Detect 3CXDesktopApp Msi Installer Attacked by Supply Chain"
author = "yauv"
reference = "https://yauv.me"
data = "2023-4-3"
hash1 = "aa124a4b4df12b34e74ee7f6c683b2ebec4ce9a8edcf9be345823b4fdcf5d868"
hash2 = "59e1edf4d82fae4978e97512b0331b7eb21dd4b838b850ba46794d9c7a2c0983"
strings:
// 3CX Certificate serial number
$hex1 = {1B 66 11 DF 9C 9A 4D 6E CC 8E D5 0C 9B 91 78 73}
$astring1 = "3CX Ltd" ascii
$astring2 = "3CX Desktop App" ascii
$astring3 = "202303" ascii
condition:
uint16(0) == 0xCFD0 and all of them
}
rule SupplyChainAttack_3CX_DesktopApp
{
meta:
description = "Detect the 3CXDesktopApp.exe program attacked by the supply chain"
author = "yauv"
reference = "https://yauv.me"
data = "2023-4-3"
hash1 = "dde03348075512796241389dfea5560c20a3d2a2eac95c894e7bbed5e85a0acc"
strings:
// 3CX Certificate serial number
$hex1 = {1B 66 11 DF 9C 9A 4D 6E CC 8E D5 0C 9B 91 78 73}
$astring1 = "3CX Ltd" ascii
$astring2 = "webmaster@3cx.com" ascii
$astring3 = "202303" ascii
condition:
uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and filesize > 140MB and all of them
}
rule SupplyChainAttack_3CX_ffmpeg_dll
{
meta:
description = "Detect ffmpeg.dll with malicious code added by the attacker"
author = "yauv"
reference = "https://yauv.me"
data = "2023-4-3"
hash1 = "7986bbaee8940da11ce089383521ab420c443ab7b15ed42aed91fd31ce833896"
hash2 = "c485674ee63ec8d4e8fde9800788175a8b02d3f9416d0e763360fff7f8eb4e02"
strings:
// search FE ED FA CE
$hex1 = {41 80 7C 00 FD FE 75 17 41 80 7C 00 FE ED 75 0F 41 80 7C 00 FF FA 75 07 41 80 3C 00 CE 74 0D}
// VirtualProtect and call shellcode
$hex2 = {4C 8D 4C 24 48 4C 89 F1 4C 89 EA 41 B8 40 00 00 00 FF 15 ?? ?? ?? ?? 85 C0 74 22 4C 89 F0 FF 15 ?? ?? ?? ?? 4C 8D 4C 24 48 45 8B 01 4C 89 F1 4C 89 EA FF 15 ?? ?? ?? ??}
// rc4 key
$astring1 = "3jB(2bsG#@c7" fullword ascii
$ustring1 = "AVMonitorRefreshEvent" fullword wide
$ustring2 = "d3dcompiler_47.dll" fullword wide
condition:
uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and filesize < 3MB and all of them
}
rule SupplyChainAttack_3CX_d3dcompiler_47_dll
{
meta:
description = "Detect the d3dcompiler_47.dll that the attacker uses the CVE-2013-3900 vulnerability to add additional malicious shellcode"
author = "yauv"
reference = "https://yauv.me"
data = "2023-4-3"
hash1 = "11be1803e2e307b647a8a7e02d128335c448ff741bf06bf52b332e0bbf423b03"
strings:
$hex1 = {FE ED FA CE}
$hex2 = {7D 61 D5 99 70 A9 00 4E}
$astring = "20210508"
condition:
uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and filesize < 5MB and all of them
}
rule SupplyChainAttack_3CX_ShellCode
{
meta:
description = "Detect decrypted shellcode load in d3dcompiler_47.dll"
author = "yauv"
reference = "https://yauv.me"
data = "2023-4-3"
strings:
// shellcode start
$hex1 = {E8 00 00 00 00 59 49 89 C8 48 81 C1 58 06 00 00 BA DA F4 58 F5 49 81 C0 58 3A 04 00 41 B9 AA 00 00 00 56}
// shellcode call r8
$hex2 = {C1 E0 02 48 98 48 03 C6 44 8B 04 02 8B 94 24 D8 00 00 00 4C 03 C6 41 FF D0}
// call dll main
$hex3 = {45 33 C0 48 8B CE 41 8D 50 01 FF D3}
// ror 13 hash
$hex4 = {C1 CA 0D 80 39 61 0F BE 01 7C 03 83 C2 E0}
condition:
all of them
}
rule SupplyChainAttack_3CX_Shellcode_load_dll
{
meta:
description = "Detect dll injected by shellcode reflection"
author = "yauv"
reference = "https://yauv.me"
data = "2023-4-3"
strings:
// time64(0i64); rand() % 0x1B7740 + time + 0x93A80
$hex1 = {33 C9 E8 ?? ?? ?? ?? 48 8B D8 E8 ?? ?? ?? ?? 44 8B C0 B8 59 BE 90 4A 41 F7 E8 8D 83 80 3A 09 00 C1 FA 13 8B CA C1 E9 1F 03 D1 69 CA 40 77 1B 00}
// Call Final Stage Payload
$hex2 = {85 C0 74 38 FF D5 48 85 C0 74 17 81 7B 04 CA 7D 0F 00 75 0E 48 8D 54 24 50 48 8D 4C 24 58 FF D0 8B F8}
$astring1 = "__tutma" fullword ascii
$astring2 = "gzip, deflate, br" fullword ascii
$ustring1 = "manifest" fullword wide
$ustring2 = "https://raw.githubusercontent.com/IconStorages/images/main/icon%d.ico" fullword wide
$ustring3 = "ChainingModeGCM" fullword wide
condition:
all of them
}
rule SupplyChainAttack_3CX_Lastpayload_dll
{
meta:
description = "Detects dll used in the final stage to steal host information and browser history"
author = "yauv"
reference = "https://yauv.me"
data = "2023-4-3"
hash1 = "8ab3a5eaaf8c296080fadf56b265194681d7da5da7c02562953a4cb60e147423"
strings:
$ustring1 = "\\3CXDesktopApp\\config.json" fullword wide
$ustring2 = "HostName: %s\r\nDomainName: %s\r\nOsVersion: %d.%d.%d\r\n\r\n" fullword wide
$ustring3 = "places.sqlite" fullword wide
$ustring4 = "History" fullword wide
$ustring5 = "AppData\\Roaming\\Mozilla\\Firefox\\Profiles" fullword wide
$ustring6 = "AppData\\Local\\BraveSoftware\\Brave-Browser\\User Data" fullword wide
$ustring7 = "SELECT url, title FROM urls ORDER BY id DESC LIMIT 500" fullword wide
$ustring8 = "SELECT url, title FROM moz_places ORDER BY id DESC LIMIT 500" fullword wide
$ustring9 = "\n******************************** %s ******************************\n\n" fullword wide
condition:
7 of them
}
5.IOCs
msi安装包
名称: 3CXDesktopApp-18.12.407.msi
大小: 102522880 字节 (97 MiB)
MD5: f3d4144860ca10ba60f7ef4d176cc736
SHA1: bea77d1e59cf18dce22ad9a2fad52948fd7a9efa
SHA256: aa124a4b4df12b34e74ee7f6c683b2ebec4ce9a8edcf9be345823b4fdcf5d868
名称: 3CXDesktopApp-18.12.416.msi
大小: 102555648 字节 (97 MiB)
MD5: 0eeb1c0133eb4d571178b2d9d14ce3e9
SHA1: bfecb8ce89a312d2ef4afc64a63847ae11c6f69e
SHA256: 59e1edf4d82fae4978e97512b0331b7eb21dd4b838b850ba46794d9c7a2c0983
dll
名称: d3dcompiler_47.dll
大小: 5168344 字节 (5047 KiB)
MD5: 82187ad3f0c6c225e2fba0c867280cc9
SHA1: 20d554a80d759c50d6537dd7097fed84dd258b3e
SHA256: 11be1803e2e307b647a8a7e02d128335c448ff741bf06bf52b332e0bbf423b03
名称: ffmpeg.dll
大小: 2814976 字节 (2749 KiB)
MD5: 74bc2d0b6680faa1a5a76b27e5479cbc
SHA1: bf939c9c261d27ee7bb92325cc588624fca75429
SHA256: 7986bbaee8940da11ce089383521ab420c443ab7b15ed42aed91fd31ce833896
名称: ffmpeg.dll
大小: 2824448 字节 (2758 KiB)
MD5: 27b134af30f4a86f177db2f2555fe01d
SHA1: 188754814b37927badc988b45b7c7f7d6b4c8dd3
SHA256: c485674ee63ec8d4e8fde9800788175a8b02d3f9416d0e763360fff7f8eb4e02
名称: lastpayload.dll
大小: 1182208 字节 (1154 KiB)
MD5: 7faea2b01796b80d180399040bb69835
SHA1: 3b3e778b647371262120a523eb873c20bb82beaf
SHA256: 8ab3a5eaaf8c296080fadf56b265194681d7da5da7c02562953a4cb60e147423
URL
https://raw[.]githubusercontent[.]com/IconStorages/images/main/icon%d.ico
https://www[.]3cx[.]com/blog/event-trainings/
https://msstorageazure[.]com/window
https://officestoragebox[.]com/api/session
https://visualstudiofactory[.]com/workload
https://azuredeploystore[.]com/cloud/services
https://msstorageboxes[.]com/office
https://officeaddons[.]com/technologies
https://sourceslabs[.]com/downloads
https://zacharryblogs[.]com/feed
https://pbxcloudeservices[.]com/phonesystem
https://akamaitechcloudservices[.]com/v2/storage
https://akamaitechcloudservices[.]com/v2/storage
https://azureonlinestorage[.]com/azure/storage
https://msedgepackageinfo[.]com/microsoft-edge
https://glcloudservice[.]com/v1/console
https://pbxsources[.]com/exchange
6.总结
本次3CX遭遇供应链攻击事件根据目前的的公开情报应最早的报告3CX用户论坛中一个安装有SentinelOne EDR的3CXDesktopApp用户,该EDR拦截了3CX有效数字签名的3CXDesktopApp.exe并检测到了shellcode执行和代码注入,在该帖子中也有许多3CX客户装有不同厂商的EDR并且都检测到了3CXDesktopApp.exe的恶意行为,由此可见在此次供应链攻击事件中EDR发挥了应有的作用。此次事件中Windows和Mac OS的3CXDesktopApp客户端都遭到了供应链攻击,此次攻击事件幕后肯定有一个高水平的APT组织,虽然CrowdStrike的分析报告中指出此次3CX事件出自北朝鲜的APT组织LABYRINTH CHOLLIMA,但是我认为CrowdStrike没有过多的清晰证据能够指明,在目来看国家级的APT组织活动越来越频繁,这些APT组织能够长期潜伏在目标系统内部,并随时能发动类似的隐蔽供应链攻击,当然目前新兴的安全技术和手段(EDR、XDR、MDR)也能够有效预防和阻止类似的APT攻击。
7.参考
https://github.com/sophoslabs/IoCs/blob/master/3CX%20IoCs%202023-03.csv
https://www.3cx.com/community/threads/threat-alerts-from-sentinelone-for-desktop-update-initiated-from-desktop-client.119806/
https://www.volexity.com/blog/2023/03/30/3cx-supply-chain-compromise-leads-to-iconic-incident/
https://www.huntress.com/blog/3cx-voip-software-compromise-supply-chain-threats
https://www.crowdstrike.com/blog/crowdstrike-detects-and-prevents-active-intrusion-campaign-targeting-3cxdesktopapp-customers/
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2013-3900