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