Blog Zscaler

Recevez les dernières mises à jour du blog de Zscaler dans votre boîte de réception

S'abonner
Recherche sur la sécurité

Campagne d’attaque de la chaîne d’approvisionnement de 3CX

ROHIT HEGDE, NIRAJ SHIVTARKAR, MEGHRAJ NANDANWAR
mars 31, 2023 - 5 Min de lecture

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

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

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

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é

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

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

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

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

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

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

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 11 - Déchiffrement du payload de deuxième niveau

Figure 12 - Payload déchiffré 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

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

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

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

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

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

form submtited
Merci d'avoir lu l'article

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é.