Bibliothèque
Ma bibliothèque

+ Ajouter à la bibliothèque

Contacter-nous !
Support 24/24 | Rules regarding submitting

Nous téléphoner

0 825 300 230

Forum

Vos requêtes

  • Toutes : -
  • Non clôturées : -
  • Dernière : le -

Nous téléphoner

0 825 300 230

Profil

BackDoor.PlugX.93

Added to the Dr.Web virus database: 2021-10-22

Virus description added:

Packer: absent

Compilation date: 2020-08-13

  • SHA1 hash: a8bff99e1ea76d3de660ffdbd78ad04f81a8c659

Description

The PlugX backdoor module is written in C and is designed to decrypt the shellcode from the registry that loads the main backdoor into memory.

Operating routine

At the beginning of the work, the backdoor receives the address of the VirtualProtect() function by hash, which it uses to change access rights to PAGE_EXECUTE_READWRITE, starting from the function at 0x10001000 and ending with the entire .text section:

#drweb

The function of getting the address of the function by the hash passed as a parameter:

#drweb

#drweb

Script to get a function by hash:


import struct
 
[code]ror = lambda val, r_bits, max_bits: \
    ((val & (2**max_bits-1)) >> r_bits%max_bits) | \
    (val << (max_bits-(r_bits%max_bits)) & (2**max_bits-1))
 
max_bits = 32
 
library_path_list = [...] # absolute path dlls
 
def get_func_addr(hash):
    for library_path in library_path_list:
        library = library_path.split('\\')
        name_dll = library[len(library) - 1].upper() + b'\x00'
 
        hash_name_dll = 0
        for i in name_dll:
            hash_name_dll = ord(i) + ror(hash_name_dll, 0x0D, max_bits)
            hash_name_dll = 0 + ror(hash_name_dll, 0x0D, max_bits)
 
        pe = pefile.PE(library_path)
        for exp in pe.DIRECTORY_ENTRY_EXPORT.symbols:
            func_name = exp.name + b'\x00'
 
            hash_name_func = 0
            for i in func_name:
                hash_name_func = ord(i) + ror(hash_name_func, 0x0D, max_bits)
 
            if (hash_name_dll + hash_name_func == hash):
                print '{}-> 0x{:08x} -> {}'.format(name_dll, hash, exp.name)
                return

Changing the permissions to PAGE_EXECUTE_READWRITE was necessary in order to decrypt the code using the XOR operation:

#drweb

There is also a version of the backdoor with dynamic XOR encryption. With decryption at the beginning of the function:

#drweb

#drweb

And with encryption at the end of the function:

#drweb

#drweb

Facilitating the work of the script for IDAPython:


import idaapi
 
def xor_dec(address, count, key):
    for i in xrange(count):
        idaapi.patch_dword(address, idaapi.get_dword(address) ^ key)   
        key += idaapi.get_dword(address)
        address += 4

Before starting to perform malicious actions, the backdoor, as in the case of VirtualProtect(), receives the addresses of other functions it needs to work:

#drweb

Received features:

Function name Hash
CloseHandle0x528796C6
CreateFileA0x4FDAF6DA
DeleteFileA0x13DD2ED7
ExitProcess0x56A2B5F0
GetAdaptersInfo0x62C9E1BD
GetModuleFileNameA0xFE61445D
GetSystemDirectoryA0x60BCDE05
LoadLibraryA0x726774C
ReadFile0xBB5F9EAD
RegCloseKey0x81C2AC44
RegDeleteValueA0x3846A3A8
RegEnumValueA0x2EC95AA4
RegOpenKeyExA0x3E9E3F88
RegQueryValueExA0x8FF0E305
VirtualAlloc0xE553A458
VirtualFree0x300F2F0B
VirtualProtect0xC38AE110
WinExec0x876F8B31
WriteFile0x5BAE572D

In addition, the backdoor checks if it is executed in a sandbox:

#drweb

After receiving the function addresses and checking for execution in the sandbox, BackDoor.PlugX.93 removes the updatecfgSetup task from the task scheduler:

#drweb

The key for shellcode encryption is MD5 from the following registry key values:

 
HKLM\Software\Microsoft\Windows NT\CurrentVersion\InstallDate
HKLM\System\ControlSet001\Control\ComputerName\ComputerName

#drweb

The shellcode is stored in the following registry keys:


HKLM\Software\BINARY
HKLM\Software\BINARY

#drweb

Before running the shellcode, it will be decrypted in 2 steps - first, using the RC4 algorithm:

#drweb

And then with XOR:

#drweb

Recommandations pour le traitement

  1. Si le système d'exploitation peut être démarré (en mode normal ou en mode sans échec), téléchargez Dr.Web Security Space et lancez un scan complet de votre ordinateur et de tous les supports amovibles que vous utilisez. En savoir plus sur Dr.Web Security Space.
  2. Si le démarrage du système d'exploitation est impossible, veuillez modifier les paramètres du BIOS de votre ordinateur pour démarrer votre ordinateur via CD/DVD ou clé USB. Téléchargez l'image du disque de secours de restauration du système Dr.Web® LiveDisk ou l'utilitaire pour enregistrer Dr.Web® LiveDisk sur une clé USB, puis préparez la clé USB appropriée. Démarrez l'ordinateur à l'aide de cette clé et lancez le scan complet et le traitement des menaces détectées.

Veuillez lancer le scan complet du système à l'aide de Dr.Web Antivirus pour Mac OS.

Veuillez lancer le scan complet de toutes les partitions du disque à l'aide de Dr.Web Antivirus pour Linux.

  1. Si votre appareil mobile fonctionne correctement, veuillez télécharger et installer sur votre appareil mobile Dr.Web pour Android. Lancez un scan complet et suivez les recommandations sur la neutralisation des menaces détectées.
  2. Si l'appareil mobile est bloqué par le Trojan de la famille Android.Locker (un message sur la violation grave de la loi ou la demande d'une rançon est affiché sur l'écran de l'appareil mobile), procédez comme suit:
    • démarrez votre Smartphone ou votre tablette en mode sans échec (si vous ne savez pas comment faire, consultez la documentation de l'appareil mobile ou contactez le fabricant) ;
    • puis téléchargez et installez sur votre appareil mobile Dr.Web pour Android et lancez un scan complet puis suivez les recommandations sur la neutralisation des menaces détectées ;
    • Débranchez votre appareil et rebranchez-le.

En savoir plus sur Dr.Web pour Android