Blog Zscaler
Recevez les dernières mises à jour du blog de Zscaler dans votre boîte de réception
S'abonnerCampagne d’attaque de la chaîne d’approvisionnement de 3CX
Introduction
Le 29 mars 2023, CrowdStrike a publié un blog décrivant une attaque de la chaîne d’approvisionnement exploitant 3CXDesktopApp, une application de téléphonie logicielle de 3CX. L’équipe ThreatLabz a immédiatement commencé à rechercher des IoC sur Zscaler Cloud.
Nous avons observé des infections remontant à février 2023 pour les variantes Windows et MacOS des installateurs troyens de 3CXDesktopApp.
Figure 1 - Infections remontant à février 2023 dans Zscaler Cloud
Dans ce cas, les acteurs malveillants ciblaient divers secteurs verticaux tels que :
- Technologie
- Services
- Fabrication et autres
Analysons plus en détail la chaîne d’infection pour l’attaque de la chaîne d’approvisionnement de 3CX :
Chaîne d’infection
Figure 2 - Chaîne d’infection
La chaîne d’infection commence par la routine de mise à jour du logiciel où 3CXDesktopApp appelle « Update.exe --update < 3cx_update_url> » de son bundle pour récupérer les mises à jour. Celui-ci télécharge ensuite le programme d’installation MSI malveillant signé et validé, ainsi que l’application MAC 3CX concernée, comme requis, sous la forme d’un package de mise à jour sur la machine de la victime, comme indiqué dans la capture d’écran ci-dessous.
Figure 3 - Requêtes effectuées auprès du domaine 3CX pour télécharger le programme d’installation 3CX MSI concerné v18.12.416 et 3CX Mac App v18.12.416 en tant que package de mise à jour
Nous examinerons dans cet article la version 18.12.416 du programme d’installation 3CX MSI validé et signé, nommé « 3CXDesktopApp-18.12.416.msi », qui a été signé le 13 mars 2023.
Figure 4 - Programme d’installation 3CX MSI signé
Lors de l’exécution, le programme d’installation 3CX MSI extrait plusieurs fichiers dans « AppData\Local\Programs\3CXDesktopApp » puis exécute le fichier 3CXDesktopApp.exe validé et signé, comme illustré ci-dessous dans la capture d’écran.
Figure 5 - Exécution de 3CXDesktopApp
De plus, le fichier 3CXDesktopApp.exe effectue un téléchargement indépendant de la DLL signée par porte dérobée nommée « ffmpeg.dl ». En effet, selon le mécanisme d’ordre de recherche des DLL, si la DLL est présente dans le répertoire des applications, la DLL est chargée à partir de cet emplacement, comme le montre la capture d’écran.
Figure 6 - 3CXDesktopApp charge le fichier « ffmpeg.dll » par porte dérobée
D’après les rapports, le fichier ffmpeg.dll a été livré par porte dérobée par les hackers qui ont manipulé le code source menant à l’attaque de la chaîne d’approvisionnement. Une fois chargé dans la mémoire virtuelle, le fichier dll malveillant « ffmpeg.dll » est appelé à charger d3dcompiler_47.dll qui contient le payload chiffré de deuxième niveau. Initialement, la fonction principale crée un événement appelé « AVMonitorRefreshEvent » et vérifie s’il existe déjà. Si c’est le cas, la fonction le ferme.
Figure 7 - Fonction principale de ffmpeg.dll
La fonction vérifie ensuite le chemin actuel afin de charger le fichier d3dcompiler_47.dll en mémoire, charge ensuite la DLL en mémoire et vérifie si la DLL est chargée correctement en comparant l’octet de départ de la DLL.
Figure 8 - Charger d3dcompiler_47.dll et vérifier l’octet de départ de la DLL
Dans ce cas, le fichier d3dcompiler_47.dll composé du fichier shellcode chiffré RC4 et de la DLL intégrée est validé et signé par le certificat Microsoft Digital, comme indiqué dans la capture d’écran ci-dessous.
Figure 9 - d3dcompiler_47.dll signé par Microsoft
Plus loin dans la chaîne d’infection, ffmpeg.dll recherche l’octet hexadécimal spécifique (FE ED FA CE) dans le fichier chargé d3dcompiler_47.dll qui contient un payload chiffré de deuxième niveau.
Figure 10 - Rechercher un octet hexadécimal spécifique (FE ED FA CE) dans le fichier chargé d3dcompiler_47.dll
Après avoir localisé l’octet hexadécimal spécifique dans le fichier chargé d3dcompiler_47.dll, la fonction utilise le déchiffrement RC4 avec la clé « 3jB(2bsG#@c7 » pour déchiffrer le payload de deuxième niveau qui est un fichier shellcode avec une DLL intégrée. Le fichier shellcode est chargé d’appeler la fonction d’exportation « DllGetClassObject » de la DLL de deuxième niveau pour exécuter et télécharger le payload de niveau suivant.
Figure 11 - Déchiffrement du payload de deuxième niveau
Figure 12 - Payload déchiffré de deuxième niveau
La DLL de deuxième niveau télécharge également le fichier Icon à partir du référentiel Github suivant, comme indiqué ci-dessous. Nous avons observé dans certains cas que la DLL déchiffrée de deuxième niveau restait en veille pendant plus de 7 jours avant de communiquer avec le serveur C2.
Figure 13 - Le payload de deuxième niveau télécharge les fichiers Icon à partir du référentiel GitHub
Le référentiel github se compose de plusieurs fichiers Icon, comme illustré ci-dessous. Ces fichiers Icon sont téléchargés par la DLL de deuxième niveau.
Figure 14 - Référentiel Github hébergeant plusieurs fichiers Icon.
Ensuite, la DLL de deuxième niveau lit le fichier Icon et analyse la chaîne chiffrée présente à la fin du fichier Icon téléchargé et la transmet à la fonction ico_decryption().
Figure 15 - Analyse de la chaîne chiffrée dans le fichier ICON
La chaîne chiffrée du fichier Icon est décodée en base64, puis transmise à une routine de déchiffrement, comme illustré ci-dessous dans la capture d’écran. La chaîne déchiffrée dans ce cas est l’URL C2 : https[:]//glcloudservice[.]com/v1/console
Figure 16 - Déchiffrement de l’URL C2 à partir de la chaîne chiffrée analysée via le fichier ICON
En outre, le malware effectue des requêtes HTTPS vers l’URL C2, comme illustré dans la capture d’écran ci-dessous du Zscaler Cloud.
Figure 17 - Requêtes HTTPS vers l’URL C2 vues dans Zscaler Cloud
Au moment de l’analyse, les domaines C2 étaient hors service. La réponse attendue est au format JSON composé de données chiffrées qui sont ensuite déchiffrées par la routine de déchiffrement avant que le payload final ne soit exécuté sur la machine infectée.
D’après le blog publié par Sentinel One, le payload final délivré sur les machines cibles lors de l’attaque de la chaîne d’approvisionnement était un Infostealer doté de fonctionnalités telles que la collecte d’informations sur le système et sur le navigateur, par exemple des informations d’identification enregistrées depuis Brave, Chrome, Edge et Firefox
Versions 3CX concernées
Voici les versions concernées annoncées par 3CX :
Versions de l’application Windows 3CX Electron concernées :
- 18.12.416
- 18.12.407
Versions de l’application Electron Mac concernées :
- 18.11.1213
- 18.12.402
- 18.12.407
- 18.12.416
Indicateurs de compromission (IOC)
Nom du fichier |
MD5 |
3CXDesktopApp-18.12.416.msi |
0eeb1c0133eb4d571178b2d9d14ce3e9 |
3CXDesktopApp.exe |
704db9184700481a56e5100fb56496ce |
ffmpeg.dll |
cb01ff4809638410a531400a66376fa3 |
d3dcompiler_47.dll |
82187ad3f0c6c225e2fba0c867280cc9 |
Domaines C2
akamaicontainer[.]com |
akamaitechcloudservices[.]com |
azuredeploystore[.]com |
azureonlinecloud[.]com |
azureonlinestorage[.]com |
dunamistrd[.]com |
glcloudservice[.]com |
journalide[.]org |
msedgepackageinfo[.]com |
msstorageazure[.]com |
msstorageboxes[.]com |
officeaddons[.]com |
officestoragebox[.]com |
pbxcloudeservices[.]com |
pbxphonenetwork[.]com |
pbxsources[.]com |
qwepoi123098[.]com |
sbmsa[.]wiki |
sourceslabs[.]com |
visualstudiofactory[.]com |
zacharryblogs[.]com |
msedgeupdate[.]net |
Cet article a-t-il été utile ?
Recevez les dernières mises à jour du blog de Zscaler dans votre boîte de réception
En envoyant le formulaire, vous acceptez notre politique de confidentialité.