Les chercheurs d'ESET ont découvert une porte dérobée Lazarus jusqu'alors non documentée, utilisée pour attaquer une entreprise de logistique de fret en Afrique du Sud, qu'ils ont baptisée Vyveva. La porte dérobée est constituée de plusieurs composants et communique avec son serveur C&C via le réseau Tor. Jusqu'à présent, nous avons pu trouver son installateur, son chargeur et sa principale charge utile - une porte dérobée avec une DLL TorSocket. Cette attaque jusqu'alors inconnue a été découverte en juin 2020.

Bien que Vyveva ait été utilisé depuis au moins décembre 2018, son vecteur de compromission initial est encore inconnu. Nos données de télémétrie suggèrent un déploiement ciblé, car nous n'avons trouvé que deux machines victimes, qui sont toutes deux des serveurs appartenant à une entreprise de logistique de fret située en Afrique du Sud. La porte dérobée présente des capacités d'exfiltration de fichiers, de timestomping, de collecte d'informations sur l'ordinateur victime et ses lecteurs, ainsi que d'autres fonctionnalités courantes de porte dérobée telles que l'exécution de code arbitraire spécifié par les opérateurs du logiciel malveillant. Cela indique que l'intention de l'opération est très probablement l'espionnage.

Cet article fournit la première analyse technique publique des composants de Vyveva.

Attribution à Lazarus

Vyveva partage de nombreuses similitudes de code avec des échantillons plus anciens de Lazarus qui sont détectés par les produits ESET comme la famille de logiciels malveillants NukeSped. Cependant, les similitudes ne s'arrêtent pas là : l'utilisation de faux TLS dans la communication réseau, les chaînes d'exécution en ligne de commande et la manière d'utiliser le chiffrement et les services Tor sont autant d'éléments qui pointent vers Lazarus. Nous pouvons donc attribuer Vyveva à ce groupe APT avec une grande confiance.

Un exemple des nombreuses similitudes de code peut être vu dans la figure 1 - résolution des exportations de la bibliothèque Tor portant un nom unique.

  • 92F5469DBEFDCEE1343934BE149AFC1241CC8497 msobjs.drx Vyveva backdoor
  • BF98EA1326E5F8C351E68C79B5D1E0164C7BE728 taskhosts.exe Win32/NukeSped.HV trojan

Figure 1. Décompilation Hex-Rays montrant la similitude entre Vyveva (à gauche) et l'échantillon NukeSped (à droite)

Analyse technique

Jusqu'à présent, nous avons réussi à trouver trois des multiples composants de Vyveva - son installateur, son chargeur et sa porte dérobée. L'installateur est l'étape chronologique la plus ancienne trouvée et, comme il s'attend à ce que d'autres composants soient déjà présents sur la machine, il suggère l'existence d'une étape antérieure inconnue - un dropper. Le chargeur sert à déchiffrer la porte dérobée à l'aide d'un simple algorithme de déchiffrement XOR.

La figure 2 permet d'examiner de plus près les fonctionnalités de l'installateur, de la porte dérobée et de la bibliothèque Tor.

Figure 2. Aperçu des composants de Vyveva

Programme d'installation

L'installateur a deux objectifs principaux : il crée un service qui assure la persistance du chargeur de porte dérobée et il stocke la configuration par défaut de la porte dérobée dans le registre.

Pour créer un service d'apparence légitime, ses attributs, tels que le nom du service et le nom d'affichage, sont formés à l'aide d'une combinaison de mots provenant des attributs de services existants, qui sont sélectionnés au hasard. Il est également possible de spécifier ces attributs au programme d'installation via les paramètres de ligne de commande -‍dll, -svc, -disp, -desc, et -group. Nous avons observé ce qui suit dans la nature, avec ces paramètres :

<SYSDIR>\powerctl.exe -svc powerctl -dll powerctl.dll

En ce qui concerne cette dernière tâche, le programme d'installation définit d'abord l'ID de configuration de l'infection, qui identifie de manière unique chaque victime, par une valeur générée de manière aléatoire, puis la stocke dans le registre, comme le montre la figure 3.

[HKLM\SOFTWARE\Microsoft\DirectX]
    UsageMask = <CONFIG_DATA>

Figure 3. Valeur de registre de la configuration

L'une des entrées de la configuration est une liste de serveurs C&C chiffrés. Par exemple, l'échantillon de programme d'installation que nous avons analysé est configuré avec les C&C suivants :

  • 4bjt2rceijktwedi[.]onion:80
  • cwwpxpxuswo7b6tr[.]onion:80

Fonctionnalités de la porte dérobée

Le backdoor, principale composante de Vyveva, se connecte aux serveurs C&C et exécute les commandes émises par les acteurs de la menace. Il comporte 23 commandes, dont certaines sont asynchrones et exécutées dans leurs propres threads. La plupart d'entre elles sont des commandes ordinaires permettant d'effectuer des opérations sur des fichiers et des processus ou de collecter des informations, mais il existe également une commande moins courante pour le timestomping de fichiers. Elle peut copier les métadonnées d'heure de création/écriture/accès d'un fichier « donneur » vers un fichier de destination ou utiliser une date aléatoire dans les années 2000-2004.

Les autres commandes dignes d'intérêt sont la commande de téléchargement de fichiers de Vyveva et la commande 0x26. La commande de téléchargement de fichiers est capable d'exfiltrer des répertoires de manière récursive et prend en charge le filtrage des extensions de fichiers - par exemple, uniquement les documents Office. Quant à la commande 0x26, elle indique l'existence d'un autre composant inconnu que nous n'avons pas encore observé au moment de la rédaction de cet article.

Le Tableau 1 présente la liste complète des commandes.

Tableau 1. Commandes de la porte dérobée Vyveva

ID Description
0x03 Reply to “ping” from server
0x10 Get information about computer – username, computer name, IP, code page, OS version, OS architecture, tick count, time zone, current directory
0x11 Get information about drives – type, size, name, serial number, filesystem type
0x12 Write data to specified file, optionally timestomp.
0x13
    Upload specified file or directory

  • File – size, last write time, content
  • Directory stats – total files size, file count, directory count
  •   - For each entry – name, attributes
      - Directories – recurse into directories
      - Files – size, last write time, content

    Options

  • Use compression for file content (zlib 1.2.5)
  • File extension filter (whitelist/blacklist)
  • Recursion flag
0x14
    Get listing of specified directory

  • name, attributes, write time
  • Directories – is nonempty
  • Files – size
0x15 Set current directory to specified directory
0x16 Create specified process
0x17 Get information about running processes – PID, PPID, executable file path
0x18 Terminate process(es) by PID or executable file path
0x19
    Create process with redirected output and upload the output
    The command uses a format string which hints at execution through cmd.exe

  • "%param0% /c "%param1% > %tmp_fpath%" 2>&1"
  • If the output is empty, unique string "<NO RESULT!>\r\n" is uploaded instead

0x1A
    Delete specified path. File deletion methods:

  • delete only
  • overwrite & move & delete
0x1B Copy creation/write/access time metadata from source file or directory to destination file or directory.
If the source doesn’t exist, random time in year 2000-2004 is used for creation & last write time, access time is unchanged.
0x1C
    Get info about specified path:

  • File – attributes, creation/write/access time, type, size
  • Directory / Drive – total files size, file count, directory count (with optional extension filtering and recursion)
0x1D Set current configuration blob, save to registry
0x1E Get current configuration blob
0x1F Enable/disable drive watchdog (configuration field enable_drive_watchdog)
0x20 Enable/disable session watchdog (configuration field enable_session_watchdog)
0x21 Set configuration value related to delay of backdoor execution (configuration field delay_until_time)
0x23 Store data used by asynchronous command (related to commands 0x12, 0x13)
0x24 Stop executing asynchronous command (related to commands 0x12, 0x13)
0x25 Set configuration value related to delay between failed C&C connection attempts (configuration field wait_minutes)
0x26
    If <SYSDIR>\wsdchngr.drx exists

  • Delete configuration registry value
  • Delete backdoor file (self delete)
  • Delete loader file
  • Read, decrypt, PE-load wsdchngr.drx and call SamIPromote export in a new thread
  • Exit current thread

Les gardiens de la porte dérobée, qui peuvent être activés ou désactivés de manière facultative, sont particulièrement intéressants. Il existe un chien de garde du lecteur utilisé pour surveiller les lecteurs nouvellement connectés et déconnectés, et un chien de garde de la session qui surveille le nombre de sessions actives (c'est-à-dire les utilisateurs connectés). Ces composants peuvent déclencher une connexion au serveur C&C en dehors de l'intervalle régulier et préconfiguré de trois minutes, ainsi que lors de nouveaux événements liés aux lecteurs et aux sessions.

Configuration

La configuration de la porte dérobée, qui est initialement définie par le programme d'installation, est lue à partir de la valeur de registre (illustrée à la Figure 3). Lorsque la configuration est modifiée par une commande C&C, la valeur stockée dans le registre est mise à jour. Un exemple de configuration et sa structure sont illustrés à la Figure 4.

Figure 4. Structure de la configuration et exemple annoté

 

Le champ wait_minutes indique le temps d'attente avant la prochaine connexion au C&C après l'échec d'une tentative de connexion. Si l'exécution de la porte dérobée doit être retardée jusqu'à une date et une heure particulières, elle peut être spécifiée dans le champ delay_until_time. Le champ encrypted_cncs est une chaîne chiffrée, qui contient des C&C séparés par des points-virgules.

Librairie Tor

Vyveva utilise la librairie Tor, qui est basée sur le code source officiel de Tor, pour communiquer avec un serveur C&C choisi au hasard dans la configuration.  Il contacte le C&C à intervalles de trois minutes, envoyant des informations sur l'ordinateur victime et ses lecteurs avant de recevoir des commandes. Le répertoire d'exportation de la backdoor contient le fichier TorSocket.dll avec des exportations auto-explicatives close_ch, connect_ch, open_ch, read_ch, write_ch.

Conclusion

Vyveva constitue une nouvelle addition à l'arsenal étendu de logiciels malveillants de Lazarus. L'attaque d'une entreprise en Afrique du Sud illustre également le vaste ciblage géographique de ce groupe APT.

Pour toute demande de renseignements ou d'échantillons liés à ce sujet, contactez-nous à l'adresse threatintel@eset.com.

Indicateurs de compromission (IoCs)

Échantillons

SHA-1 Filename ESET detection name Description
DAD50AD3682A3F20B2F35BE2A94B89E2B1A73067 powerctl.exe Win32/NukeSped.HX Installer
69529EED679B0C7F1ACC1FD782A4B443CEC0CF83 powerctl.dll Win32/NukeSped.HX Loader (x86)
043ADDFB93A10D187DDE4999D78096077F26E9FD wwanauth.dll Win64/NukeSped.EQ Loader (x64)
1E3785FC4FE5AB8DAB31DDDD68257F9A7FC5BF59 wwansec.dll Win32/NukeSped.HX Loader (x86)
4D7ADD8145CB096359EBC3E4D44E19C2735E0377 msobjs.drx - Backdoor (encrypted)
92F5469DBEFDCEE1343934BE149AFC1241CC8497 msobjs.drx Win32/NukeSped.HX Backdoor (decrypted with fixed MZ header)
A5CE1DF767C89BF29D40DC4FA6EAECC9C8979552 JET76C5.tmp - Backdoor Tor library (encrypted)
66D17344A7CE55D05A324E1C6BE2ECD817E72680 JET76C5.tmp Win32/NukeSped.HY Backdoor Tor library (decrypted with fixed MZ header) 

Noms de fichier

%WINDIR%\System32\powerctl.exe
%WINDIR%\SysWOW64\powerctl.exe
%WINDIR%\System32\power.dat
%WINDIR%\SysWOW64\power.dat

%WINDIR%\System32\wwanauth.dll
%WINDIR%\SysWOW64\wwanauth.dll
%WINDIR%\System32\wwansec.dll
%WINDIR%\SysWOW64\wwansec.dll
%WINDIR%\System32\powerctl.dll
%WINDIR%\SysWOW64\powerctl.dll

%WINDIR%\System32\JET76C5.tmp
%WINDIR%\SysWOW64\JET76C5.tmp
%WINDIR%\System32\msobjs.drx
%WINDIR%\SysWOW64\msobjs.drx

Techniques MITRE ATT&CK

Ce tableau a été conçu en utilisant la version 8 de MITRE ATT&CK.

Tactic   ID   Name   Description  
Execution  T1569.002 System Services: Service Execution  Vyveva loader executes via a service.
T1106 Native API  Vyveva backdoor uses the CreateProcessA API to execute files.
Persistence  T1543.003 Create or Modify System Process: Windows Service  Vyveva installer creates a new service to establish persistence for its loader.
Defense Evasion  T1140 Deobfuscate/Decode Files or Information  Vyveva decrypts strings and components (backdoor, Tor library).
T1070.006 Indicator Removal on Host: Timestomp  Vyveva backdoor can timestomp files.
T1036.004 Masquerading: Masquerade Task or Service  Vyveva installer can create a service with attributes mimicking existing services.
T1112 Modify Registry  Vyveva stores its configuration in the registry. 
T1027 Obfuscated Files or Information  Vyveva has encrypted strings and components.
Discovery  T1083 File and Directory Discovery  Vyveva backdoor can obtain file and directory listings.
T1057 Process Discovery  Vyveva backdoor can list running processes.
T1082 System Information Discovery  Vyveva backdoor can obtain system information, including computer name, ANSI code page, OS version and architecture.
T1016 System Network Configuration Discovery  Vyveva backdoor can obtain the local IP address of the victim computer.
T1033 System Owner/User Discovery  Vyveva backdoor can obtain victim's username.
T1124 System Time Discovery  Vyveva backdoor can obtain system time and time zone.
Collection  T1560.002 Archive Collected Data: Archive via Library  Vyveva backdoor can compress files with zlib before sending to C&C.
T1005 Data from Local System  Vyveva backdoor can collect files from computer.
T1025 Data from Removable Media  Vyveva backdoor can notify C&C about newly inserted removable media and collect files from them.
Command and Control  T1573.001 Encrypted Channel: Symmetric Cryptography  Vyveva backdoor encrypts C&C traffic using XOR.
T1573.002 Encrypted Channel: Asymmetric Cryptography  Vyveva backdoor communicates with C&C via Tor.
Exfiltration  T1041 Exfiltration Over C2 Channel  Vyveva exfiltrates data to C&C server.