Mise à jour (4 mars 2022) : Nous avons corrigé une erreur dans l'analyse d'IsaacWiper. Il utilise le PRNG Mersenne Twister et non le PRNG Isaac comme initialement écrit.

Alors que les récentes hostilités ont débuté entre la Russie et l'Ukraine, les chercheurs d'ESET ont découvert plusieurs familles de logiciels malveillants ciblant les organisations ukrainiennes.

  • Le 23 février 2022, une campagne destructrice utilisant HermeticWiper a ciblé plusieurs organisations ukrainiennes.
  • Cette cyberattaque a précédé de quelques heures le début de l'invasion de l'Ukraine par les forces de la Fédération de Russie.
  • Les vecteurs d'accès initiaux variaient d'une organisation à l'autre. Nous avons confirmé un cas où le wiper a été déposé par GPO, et avons découvert un ver utilisé pour diffuser le wiper dans un autre réseau compromis.
  • Les artefacts du logiciel malveillant suggèrent que les attaques étaient planifiées depuis plusieurs mois.
  • Le 24 février 2022, une deuxième attaque destructive contre un réseau gouvernemental ukrainien a commencé, utilisant un wiper que nous avons nommé IsaacWiper.
  • ESET Recherche n'a pas encore été en mesure d'attribuer ces attaques à un acteur de menace connu.

Attaques destructrices en Ukraine

Comme indiqué dans ce tweet d'ESETResearch et cet article de WeLiveSecurity, nous avons découvert une attaque destructrice contre des ordinateurs en Ukraine qui a commencé vers 14h52 le 23 février 2022 UTC. Cette attaque a suivi les attaques par déni de service distribué (DDoS) contre les principaux sites Web ukrainiens et a précédé de quelques heures l'invasion militaire russe.

Ces attaques destructrices ont exploité au moins trois composants :

  • HermeticWiper : rend un système inopérant en corrompant ses données.
  • HermeticWizard : diffuse HermeticWiper sur un réseau local via WMI et SMB.
  • HermeticRansom : rançongiciel écrit en Go.

HermeticWiper a été observé sur des centaines de systèmes dans au moins cinq organisations ukrainiennes.

Le 24 février 2022, nous avons détecté un autre nouveau wiper dans un réseau gouvernemental ukrainien. Nous l'avons nommé IsaacWiper et nous évaluons actuellement ses liens, s'il y en a, avec HermeticWiper. Il est important de noter qu'il a été observé dans une organisation qui n'était pas affectée par HermeticWiper.

Attribution

À ce stade, nous n'avons trouvé aucun lien tangible avec un acteur de la menace connu. HermeticWiper, HermeticWizard et HermeticRansom ne présentent aucune similitude de code significative avec d'autres échantillons de la collection de logiciels malveillants d'ESET. IsaacWiper n'est toujours pas attribué non plus.

Chronologie

HermeticWiper et HermeticWizard sont signés par un certificat de signature de code (voir Figure 1) attribué à Hermetica Digital Ltd et émis le 13 avril 2021. Nous avons demandé à l'autorité de certification émettrice (DigiCert) de révoquer le certificat, ce qu'elle a fait le 24 février 2022.

Figure 1. Certificat de signature de code attribué à Hermetic Digital Ltd

Selon un rapport de Reuters, il semble que ce certificat n'ait pas été volé à Hermetic Digital. Il est probable que les attaquants se soient fait passer pour l'entreprise chypriote afin d'obtenir ce certificat de DigiCert.

Les chercheurs d'ESET estiment avec une grande confiance que les organisations touchées ont été compromises bien avant le déploiement du wiper. Ceci est basé sur plusieurs faits :

  • Les horodatages de compilation de HermeticWiper PE, le plus ancien étant le 28 décembre 2021.
  • La date d'émission du certificat de signature du code est le 13 avril 2021.
  • Le déploiement de HermeticWiper par GPO dans au moins un cas suggère que les attaquants avaient un accès préalable à l'un des serveurs Active Directory de cette victime.

Les événements sont résumés dans la chronologie de la figure 2.

Figure 2. Chronologie des événements importants

Accès initial

HermeticWiper

Le vecteur d'accès initial est actuellement inconnu mais nous avons observé des artefacts de mouvement latéral à l'intérieur des organisations ciblées. Dans une entité, le wiper a été déployé via la politique de domaine par défaut (GPO), comme le montre son chemin sur le système :

C:\Windows\system32\GroupPolicy\DataStore\0\sysvol\<redacted>\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\Machine\cc.exe

Cela indique que les attaquants ont probablement pris le contrôle du serveur Active Directory.

Dans d'autres cas, il est possible qu’Impacket ait été utilisé pour déployer HermeticWiper. Un article de blogue de Symantec indique que le wiper a été déployé à l'aide de la ligne de commande suivante :

cmd.exe /Q /c move CSIDL_SYSTEM_DRIVE\temp\sys.tmp1 CSIDL_WINDOWS\policydefinitions\postgresql.exe 1> \\127.0.0.1\ADMIN$\__1636727589.6007507 2>&1

La dernière partie est identique au comportement par défaut de wmiexec.py d'Impacket, trouvé sur GitHub.

Enfin, un ver personnalisé que nous avons nommé HermeticWizard a été utilisé pour diffuser HermeticWiper sur les réseaux compromis via SMB et WMI.

IsaacWiper

Le vecteur d'accès initial est également inconnu à l'heure actuelle. Il est probable que les attaquants aient utilisé des outils tels que Impacket pour se déplacer latéralement. Sur quelques machines, nous avons également observé que RemCom, un outil d'accès à distance, était déployé en même temps qu'IsaacWiper.

Analyse technique

HermeticWiper

HermeticWiper est un exécutable Windows avec quatre pilotes intégrés dans ses ressources. Il s'agit de pilotes légitimes du logiciel EaseUS Partition Master signés par CHENGDU YIWO Tech Development Co. et ils mettent en œuvre des opérations de disque de bas niveau. Les fichiers suivants ont été observés :

  • 0E84AFF18D42FC691CB1104018F44403C325AD21 : pilote x64
  • 379FF9236F0F72963920232F4A0782911A6BD7F7 : pilote x86
  • 87BD9404A68035F8D70804A5159A37D1EB0A3568 : pilote x64 XP
  • B33DD3EE12F9E6C150C964EA21147BF6B7F7AFA9 : pilote x86 XP

En fonction de la version du système d'exploitation, un de ces quatre pilotes est choisi et déposé dans C:\Windows\System32\drivers\<4 random letters>.sys. Il est ensuite chargé en créant un service.

HermeticWiper procède ensuite à la désactivation du Volume Shadow Copy Service (VSS) et s'efface du disque en écrasant son propre fichier avec des octets aléatoires. Cette mesure anti-forensique est probablement destinée à empêcher l'analyse du wiper lors d'une analyse post-incident.

Il est intéressant de noter que la plupart des opérations sur les fichiers sont effectuées à un bas niveau en utilisant des appels DeviceIoControl.

Les emplacements suivants sont écrasés avec des octets aléatoires générés par la fonction CryptGenRandom de l'API Windows :

  • L'enregistrement de démarrage principal (MBR)
  • La table de fichiers principale (MFT)
  • $Bitmap et $LogFile, sur tous les lecteurs
  • Les fichiers contenant les clés de registre (NTUSER*)
  • C:\Windows\System32\winevt\Logs

En outre, il efface récursivement les dossiers et les fichiers des dossiers Windows, Program Files, Program Files(x86), PerfLogs, Boot, System Volume Information et AppData, à l'aide d'une opération FSCTL_MOVE_FILE. Cette technique semble être assez inhabituelle et très similaire à ce qui est implémenté dans le projet Windows Wipe sur GitHub (voir la fonction wipe_extent_by_defrag ). Elle efface également les liens symboliques et les gros fichiers dans My Documents et Desktop en les écrasant avec des octets aléatoires.

Enfin, la machine est redémarrée. Cependant, elle ne démarrera pas, car le MBR, le MFT et la plupart des fichiers ont été effacés. Nous pensons qu'il n'est pas possible de récupérer les machines touchées.

HermeticWizard

En recherchant d'autres échantillons signés par le même certificat de signature de code (Hermetica Digital Ltd), nous avons trouvé une nouvelle famille de logiciels malveillants que nous avons nommée HermeticWizard.

Il s'agit d'un ver qui a été déployé sur un système en Ukraine à 14:52:49 le 23 février 2022 UTC. Il s'agit d'un fichier DLL développé en C++ qui exporte les fonctions DllInstall, DllRegisterServer, et DllUnregisterServer . Son nom de DLL d'exportation est Wizard.dll. Il contient trois ressources, qui sont des fichiers PE chiffrés :

  • un échantillon d’HermeticWiper (912342F1C840A42F6B74132F8A7C4FFE7D40FB77)
  • exec_32.dll, responsable de la propagation vers d'autres ordinateurs locaux via WM (6B5958BFABFE7C731193ADB96880B225C8505B73)
  • romance.dll, responsable de la propagation vers d'autres ordinateurs locaux via SMB (AC5B6F16FC5115F0E2327A589246BA00B41439C2)

Les ressources sont chiffrées à l'aide d'une boucle XOR inverse. Chaque bloc de quatre octets est soumis à un XOR avec le bloc précédent. Enfin, le premier bloc est soumis à un XOR avec une valeur codée en dur 0x4A29B1A3.

HermeticWizard est lancé en utilisant la ligne de commande regsvr32.exe /s /i <path>.

Tout d'abord, HermeticWizard essaie de trouver d'autres machines sur le réseau local. Il rassemble les adresses IP locales connues en utilisant les fonctions Windows suivantes :

  • DNSGetCacheDataTable
  • GetIpNetTable
  • WNetOpenEnumW(RESOURCE_GLOBALNET, RESOURCETYPE_ANY)
  • NetServerEnum
  • GetTcpTable
  • GetAdaptersAddresses

Il essaie ensuite de se connecter à ces adresses IP (et seulement s'il s'agit d'adresses IP locales) pour voir si elles sont toujours joignables. Si l'argument -s a été fourni au démarrage de HermeticWizard (regsvr32.exe /s /i:-s <path>), il analyse également la plage /24 complète. Ainsi, si 192.168.1.5 a été trouvé, par exemple, dans le cache DNS, il scanne de manière incrémentielle de 192.168.1.1 à 192.168.1.254. Pour chaque adresse IP, il essaie d'ouvrir une connexion TCP sur les ports suivants :

  • 20: ftp
  • 21: ftp
  • 22: ssh
  • 80: http
  • 135: rpc
  • 137: netbios
  • 139: smb
  • 443: https
  • 445: smb

Les ports sont analysés dans un ordre aléatoire, il n'est donc pas possible d'identifier le trafic de HermeticWizard de cette manière.

Lorsqu'il a trouvé une machine joignable, il dépose le diffuseur WMI (détaillé ci-dessous) sur le disque et crée un nouveau processus avec la ligne de commande rundll32 <current folder>\<6 random letters>.ocx #1 -s <path to HermeticWizard> - i <target IP>.

Il fait de même avec le diffuseur SMB (détaillé ci-dessous) qui est également déposé dans <current folder>\<6 random letters>.ocx, mais avec des lettres aléatoires différentes.

Enfin, il dépose HermeticWiper dans <current folder>\<6 random letters>.ocx et l'exécute.

Spreader WMI

Le diffuseur WMI, nommé par ses développeurs exec_32.dll, prend deux arguments :

  • -i : L'adresse IP cible
  • -s : Le fichier à copier et à exécuter sur la machine cible.

Tout d'abord, il crée une connexion au partage distant ADMIN$ de la cible à l'aide de WNetAddConnection2W. Le fichier fourni dans l'argument -s  est ensuite copié à l'aide de CopyFileW. Le fichier distant a un nom aléatoire généré avec CoCreateGUID  (par exemple, cB9F06408D8D2.dll) et le format de chaîne c%02X%02X%02X%02X%02X%02X%02X.

Ensuite, il essaie d'exécuter le fichier copié, HermeticWizard, sur la machine distante à l'aide de DCOM. Il appelle CoCreateInstance  avec CLSID_WbemLocator comme argument. Il utilise ensuite WMI Win32_Process pour créer un nouveau processus sur la machine distante, avec la ligne de commande  C:\windows\system32\cmd.exe /c start C:\windows\system32\\regsvr32.exe /s /i C:\windows\<filename>.dll.

Notez que l'argument -s n'est pas transmis à HermeticWizard, ce qui signifie qu'il n'analysera pas à nouveau le réseau local à partir de cette machine nouvellement compromise.

Si la technique WMI échoue, il essaie de créer un service en utilisant OpenRemoteServiceManager avec la même commande que ci-dessus.

S'il réussit à exécuter la DLL distante de quelque manière que ce soit, il se met en veille jusqu'à ce qu'il puisse supprimer le fichier distant.

Spreader SMB

Le diffuseur SMB, nommé par ses développeurs romance.dll, prend les deux mêmes arguments que le diffuseur WMI. Son nom interne est probablement une référence à l'exploit EternalRomance, même s'il n'utilise aucun exploit.

Il tente d'abord de se connecter aux tuyaux (ou pipes) suivants sur le partage SMB distant (sur le port 445) :

  • samr
  • browser
  • netlogon
  • lsarpc
  • ntsvcs
  • svcctl

Ce sont des tuyaux connus pour être utilisés dans les mouvements latéraux. Le propagateur possède une liste d'informations d'identification codées en dur qui sont utilisées dans les tentatives d'authentification via NTLMSSP aux partages SMB :

-- usernames --
guest
test
admin
user
root
administrator
manager
operator

-- passwords --
123
Qaz123
Qwerty123

Cette liste d'informations d'identification est étonnamment courte et il est peu probable qu'elle fonctionne, même dans les réseaux les moins bien protégés.

Si la connexion est réussie, il tente de déposer, sur le partage ADMIN$ cible, le fichier référencé par l'argument -s. Comme pour le diffuseur WMI, le nom du fichier distant est généré par un appel à CoCreateInstance.

Il exécute ensuite, via SMB, la ligne de commande cmd /c start regsvr32 /s /i ..\\<filename>  & start cmd /c \”ping localhost -n 7 & wevtutil cl System\”.

HermeticRansom

Les chercheurs d'ESET ont également observé que HermeticRansom, un rançongiciel écrit en Go, était utilisé en Ukraine en même temps que la campagne HermeticWiper. HermeticRansom a été signalé pour la première fois aux premières heures du 24 février, 2022 UTC, dans un tweet d'AVAST. Notre télémétrie montre un déploiement beaucoup plus petit que celui d'HermeticWiper. Ce rançongiciel a été déployé en même temps qu'HermeticWiper, potentiellement dans le but de cacher les actions du wiper. Sur une machine, la chronologie suivante a été observée :

  • 2022-02-23 17:49:55 UTC: HermeticWiper est déployé dans C:\Windows\Temp\cc.exe
  • 2022-02-23 18:06:57 UTC: HermeticRansom dans C:\Windows\Temp\cc2.exe est déployé par le service netsvcs
  • 2022-02-23 18:26:07 UTC: Le second HermeticWiper est déployé dans C:\Users\com.exe 

À une occasion, nous avons observé qu'HermeticRansom était déployé via un GPO, tout comme HermeticWiper :

C:\WINDOWS\system32\GroupPolicy\DataStore\0\sysvol\<redacted>\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\Machine\cpin.exe

Quelques chaînes de caractères ont été laissées dans le binaire par les attaquants. Elles font référence au président américain Joe Biden et à la Maison Blanche :

  • _/C_/projects/403forBiden/wHiteHousE.baggageGatherings
  • _/C_/projects/403forBiden/wHiteHousE.lookUp
  • _/C_/projects/403forBiden/wHiteHousE.primaryElectionProcess
  • _/C_/projects/403forBiden/wHiteHousE.GoodOffice1

Une fois les fichiers chiffrés, le message de la Figure 3 s'affiche à la victime.

Figure 3. La note de rançon d'HermeticRansom

IsaacWiper

IsaacWiper se trouve dans une DLL ou un EXE Windows sans signature Authenticode ; il est apparu dans notre télémétrie le 24 février 2022. Comme nous l'avons mentionné précédemment, l'horodatage de compilation PE le plus ancien que nous ayons trouvé remonte au 19 octobre 2021. Ceci signifie que si son horodatage de compilation PE n'a pas été altéré, IsaacWiper pourrait avoir été utilisé dans des opérations précédentes plusieurs mois auparavant.

Pour les échantillons de DLL, le nom dans le répertoire d'exportation PE est Cleaner.dll  et il a un seul export_Start@4.

Nous avons observé IsaacWiper dans %programdata% et C:\Windows\System32 sous les noms de fichiers suivants :

  • clean.exe
  • cl.exe
  • cl64.dll
  • cld.dll
  • cll.dll

Il n'a aucune similitude de code avec HermeticWiper et est beaucoup moins sophistiqué. Compte tenu de la chronologie, il est possible que les deux soient liés mais nous n'avons pas encore trouvé de lien fort.

IsaacWiper commence par énumérer les lecteurs physiques et appelle DeviceIoControl  avec IOCTL_STORAGE_GET_DEVICE_NUMBER pour obtenir leurs numéros de périphériques. Il efface ensuite les premiers 0x10000 octets de chaque disque en utilisant le générateur de pseudonymes aléatoire Mersenne Twister . Le générateur est ensemencé en utilisant la valeur GetTickCount.

Il énumère ensuite les lecteurs logiques et efface récursivement chaque fichier de chaque disque avec des octets aléatoires également générés par le PRNG ISAAC. Il est intéressant de noter qu'il efface récursivement les fichiers dans un seul fil, ce qui signifie que l'effacement d'un grand disque prendrait beaucoup de temps.

Le 25 février 2022, les attaquants ont déposé une nouvelle version d'IsaacWiper avec des journaux de débogage. Cela peut indiquer que les attaquants n'ont pas pu effacer certaines des machines ciblées et ont ajouté des messages de journal pour comprendre ce qui se passait. Les journaux sont stockés dans C:\ProgramData\log.txt et certains des messages sont les suivants :

  • getting drives...
  • start erasing physical drives...
  • –– start erasing logical drive
  • start erasing system physical drive...
  • system physical drive –– FAILED
  • start erasing system logical drive

Conclusion

Ce rapport décrit une cyberattaque destructrice qui a touché des organisations ukrainiennes le 23 février 2022, ainsi qu'une deuxième attaque qui a touché une autre organisation ukrainienne du 24 au 26 février 2022. À ce stade, nous n'avons aucune indication que d'autres pays ont été ciblés.

Cependant, en raison de la crise actuelle en Ukraine, il existe toujours un risque que les mêmes acteurs de la menace lancent d'autres campagnes contre des pays qui soutiennent le gouvernement ukrainien ou qui sanctionnent des entités russes.

Indicateurs de compromission

SHA-1 Filename ESET detection name Description
912342F1C840A42F6B74132F8A7C4FFE7D40FB77 com.exe Win32/KillDisk.NCV HermeticWiper
61B25D11392172E587D8DA3045812A66C3385451 conhosts.exe Win32/KillDisk.NCV HermeticWiper
3C54C9A49A8DDCA02189FE15FEA52FE24F41A86F c9EEAF78C9A12.dat Win32/GenCBL.BSP HermeticWizard
F32D791EC9E6385A91B45942C230F52AFF1626DF cc2.exe WinGo/Filecoder.BK HermeticRansom
AD602039C6F0237D4A997D5640E92CE5E2B3BBA3 cl64.dll Win32/KillMBR.NHP IsaacWiper
736A4CFAD1ED83A6A0B75B0474D5E01A3A36F950 cld.dll Win32/KillMBR.NHQ IsaacWiper
E9B96E9B86FAD28D950CA428879168E0894D854F clean.exe Win32/KillMBR.NHP IsaacWiper
23873BF2670CF64C2440058130548D4E4DA412DD XqoYMlBX.exe Win32/RiskWare.RemoteAdmin.RemoteExec.AC Legitimate RemCom remote access tool

Techniques MITRE ATT&CK 

Ce tableau a été réalisé en utilisant la version 10 de MITRE ATT&CK.

Tactic ID Name Description
Resource Development T1588.002 Obtain Capabilities: Tool Attackers used RemCom and potentially Impacket as part of their campaign.
T1588.003 Obtain Capabilities: Code Signing Certificates Attackers acquired a code-signing certificate for their campaigns.
Initial Access T1078.002 Valid Accounts: Domain Accounts Attackers were able to deploy wiper malware through GPO.  
Execution T1059.003 Command and Scripting Interpreter: Windows Command Shell Attackers used the command line during their attack (e.g., possible Impacket usage).
T1106 Native API Attackers used native APIs in their malware.
T1569.002 System Services: Service Execution HermeticWiper uses a driver, loaded as a service, to corrupt data.
T1047 Windows Management Instrumentation HermeticWizard attempts to spread to local computers using WMI.
Discovery T1018 Remote System Discovery HermeticWizard scans local IP ranges to find local machines.
Lateral Movement T1021.002 Remote Services: SMB/Windows Admin Shares HermeticWizard attempts to spread to local computers using SMB.
T1021.003 Remote Services: Distributed Component Object Model HermeticWizard attempts to spread to local computers using WbemLocator to remotely start a new process via WMI.
Impact T1561.002 Disk Wipe: Disk Structure Wipe HermeticWiper corrupts data in the system’s MBR and MFT.
T1561.001 Disk Wipe: Disk Content Wipe HermeticWiper corrupts files in Windows, Program Files, Program Files(x86), PerfLogs, Boot, System Volume Information, and AppData.
T1485 Data Destruction HermeticWiper corrupts user data found on the system.  
T1499.002 Endpoint Denial of Service: Service Exhaustion Flood By using DDoS attacks, the attackers made a number of government websites unvailable.