Поддержка
Круглосуточная поддержка

Позвоните

Бесплатно по России:
8-800-333-79-32

ЧаВо | Форум

Ваши запросы

  • Все: -
  • Незакрытые: -
  • Последний: -

Позвоните

Бесплатно по России:
8-800-333-79-32

Свяжитесь с нами Незакрытые запросы: 

Профиль

Профиль

BackDoor.Farfli.125

Добавлен в вирусную базу Dr.Web: 2020-02-19

Описание добавлено:

Упаковщик:

отсутствует

Дата компиляции:

19:36:04 28.08.2017

SHA1-хеш:

736d8e03e40e245d4c812b091b5743fce855a529

Описание

Вредоносная dll-библиотека, устанавливаемая на компьютеры троянской программой BackDoor.Farfli.122. Написана на Visual C++, поддерживает работу в 32- и 64-битных операционных системах семейства Microsoft Windows. Представляет собой бэкдор, который получает команды злоумышленников и позволяет дистанционно управлять зараженными компьютерами.

Принцип действия

Библиотека загружается в память трояном BackDoor.Farfli.122. Она экспортирует функцию mystart, в которой находится ее основная вредоносная функциональность. В таблице экспорта библиотека имеет имя PcMain.exe.

Функция mystart

После получения управления от шелл-кода, загруженного BackDoor.Farfli.122, BackDoor.Farfli.125 выполняет ряд проверок. Вначале троян определяет, запущен ли он через подсистему Wow64 и работает в 64-битной среде. При этом если функция IsWow64Process выполнилась c ошибкой, он демонстрирует MessageBox с текстом x1. Затем BackDoor.Farfli.125 проверяет, присутствует ли в имени файла модуля \explorer.exe или \internet explorer\iexplore.exe.

Если бэкдор работает в контексте процесса explorer.exe или IE, он создает скрытую директорию C:\Microsoft\TEMP\Networks\Connections\Pbksn. Затем он проверяет, есть ли в имени файла модуля строка nvdiassnx, после чего пытается создать папку nvdiassnx в созданном ранее каталоге. Если троян запущен не из директории nvdiassnx, он создает файл с именем вида RasTls<rnd>.exe, где <rnd> ― результат выполнения функции GetTickCount в формате %08x.

Если бэкдор работает не в контексте процесса explorer.exe или IE, он создает файл C:\Microsoft\TEMP\Networks\Connections\Pbksn\nvdiassnx\ky3log.dat.

Закрепление в системе

По завершении подготовительных действий троян проверяет, работает ли он в контексте процесса explorer.exe или iexplore.exe, и запущен ли он из директории ...\nvdiassnx.

  • Работа в контексте iexplore.exe или iexplore.exe

    Если он работает от имени процесса explorer.exe или iexplore.exe, BackDoor.Farfli.125 немедленно переходит к выполнению основных вредоносных действий. В противном случае он проверяет, запущен ли он из директории ...\nvdiassnx.

  • Работа из директории nvdiassnx

    Если троян запущен не из каталога ...\\nvdiassnx, он проверяет наличие события Global\\vssafuyuhdw332kjgtts1. Если оно существует, он завершает процесс, чтобы не допустить запуска двух своих экземпляров. В противном случае троян переносит свои компоненты RasTls.exe, RasTls.dll и RasTls.dat в каталог C:\Microsoft\TEMP\Networks\Connections\Pbksn\nvdiassnx.

    Дальнейшие его действия зависят от версии операционной системы.

    Если BackDoor.Farfli.125 работает в среде Windows Vista и более поздних версиях системы, модуль RasTls.exe прописывается в автозагрузку через ключ реестра [HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce]. Затем троян запускает процесс iexplore.exe с флагом CREATE_SUSPENDED, считывает шелл-код из файла RasTls.dat, расшифровывает его и внедряет в запущенный ранее процесс iexplore.exe, последовательно используя функции VirtualAllocEx, WriteProcessMemory и ResumeThread. При этом для точки входа процесса выполняется патч на переход на внедренный шелл-код.

    Если же BackDoor.Farfli.125 работает в среде ОС Windows ниже Windows Vista и не через подсистему Wow64, троян выполняет те же действия, но внедряет шелл-код в процесс explorer.exe.

    Если троян запущен из каталога ...\\nvdiassnx, он выполняет аналогичные действия, описанные выше, за исключением проверки наличия события Global\\vssafuyuhdw332kjgtts1 и перемещения файлов.

Основная функциональность

BackDoor.Farfli.125 создает событие Global\\vssafuyuhdw332kjgtts1 и получает адреса необходимых API-функций. Для этого он ищет сигнатуру из двух последовательных DWORD 0x8776633 и 0x18776655, начиная с базы троянского модуля. Эта сигнатура находится в начале последней секции самого модуля. При этом секция является безымянной и содержит различные служебные строки, включая имена API-функций, а также конфигурацию трояна в сжатом виде.

screen BackDoor.Farfli.125 #drweb

Секция содержит три блока сжатых данных. В первом блоке находятся строки, во втором ― конфигурация трояна, а третий блок является пустым. При этом второй и третий блоки расположены в конце секции:

screen BackDoor.Farfli.125 #drweb

После декомпрессии второй блок представляет собой список нумерованных строк, который представлен ниже:

PS_10001=ole32.dll
PS_10002=CoCreateGuid
PS_10003=Shlwapi.dll
PS_10004=SHDeleteKeyA
PS_10005=wininet.dll
PS_10006=InternetOpenA
PS_10007=InternetOpenUrlA
PS_10008=InternetCloseHandle
PS_10009=HttpQueryInfoA
PS_10010=InternetReadFile
PS_10011=IMM32.dll
PS_10012=ImmReleaseContext
PS_10013=ImmGetCompositionStringW
PS_10014=ImmGetCompositionStringA
PS_10015=ImmGetContext
PS_10016=ADVAPI32.dll
PS_10017=GetUserNameW
PS_10018=RegCloseKey
PS_10019=RegOpenKeyExA
PS_10020=RegCreateKeyExA
PS_10021=RegSetValueExA
PS_10022=RegDeleteValueA
PS_10023=AdjustTokenPrivileges
PS_10024=LookupPrivilegeValueA
PS_10025=OpenProcessToken
PS_10026=StartServiceA
PS_10027=CloseServiceHandle
PS_10028=OpenServiceA
PS_10029=OpenSCManagerA
PS_10030=CreateServiceA
PS_10031=DeleteService
PS_10032=RegisterServiceCtrlHandlerA
PS_10033=SetServiceStatus
PS_10034=Shell32.dll
PS_10035=ShellExecuteExW
PS_10036=ShellExecuteA
PS_10037=User32.dll
PS_10038=PostThreadMessageA
PS_10039=wsprintfW
PS_10040=CharLowerA
PS_10041=GetMessageA
PS_10042=PostMessageA
PS_10043=CallNextHookEx
PS_10044=GetForegroundWindow
PS_10045=GetWindowTextA
PS_10046=GetWindowThreadProcessId
PS_10047=GetActiveWindow
PS_10048=UnhookWindowsHookEx
PS_10049=SetWindowsHookExW
PS_10050=SetThreadDesktop
PS_10051=OpenDesktopA
PS_10052=GetThreadDesktop
PS_10053=Kernel32.dll
PS_10054=GetModuleHandleA
PS_10055=DeviceIoControl
PS_10056=CreateMutexA
PS_10057=OpenMutexA
PS_10058=ReleaseMutex
PS_10059=CreateEventA
PS_10060=OpenEventA
PS_10061=SetEvent
PS_10062=WaitForSingleObject
PS_10063=GetLocalTime
PS_10064=GetTickCount
PS_10065=lstrcpyW
PS_10066=lstrcatW
PS_10067=lstrlenW
PS_10068=lstrcmpW
PS_10069=CreateThread
PS_10070=GetSystemDirectoryA
PS_10071=GetCurrentProcess
PS_10072=OpenProcess
PS_10073=MultiByteToWideChar
PS_10074=WideCharToMultiByte
PS_10075=Sleep
PS_10076=CreateFileA
PS_10077=DeleteFileA
PS_10078=WriteFile
PS_10079=ReadFile
PS_10080=CopyFileA
PS_10081=SetFilePointer
PS_10082=CloseHandle
PS_10083=GetModuleFileNameA
PS_10084=GetVersionExA
PS_10085=GetVersion
PS_10086=GetCurrentThreadId
PS_10087=GetFileSize
PS_10088=GetTempPathA
PS_10089=Psapi.dll
PS_10090=GetModuleFileNameExA
PS_10091=EnumProcesses
PS_10092=strstr
PS_10093=strchr
PS_10094=strcat
PS_10095=atoi
PS_10096=srand
PS_10097=rand
PS_10098=time
PS_10099=strrchr
PS_10100=strlen
PS_10101=strcpy
PS_10102=strcmp
PS_10103=memset
PS_10104=MSVCRT.dll
PS_10105=sprintf
PS_10106=memcmp
PS_10107=memcpy
PS_10108=GetLogicalDriveStringsA
PS_10109=CreateDirectoryA
PS_10110=MoveFileA
PS_10111=GetVolumeInformationA
PS_10112=FindNextFileA
PS_10113=FindFirstFileA
PS_10114=FindClose
PS_10115=GetDriveTypeA
PS_10116=GetFileAttributesExA
PS_10117=GetLastError
PS_10118=SHFileOperationA
PS_10119=GetCurrentProcessId
PS_10120=OpenInputDesktop
PS_10121=CreateToolhelp32Snapshot
PS_10122=Process32First
PS_10123=Process32Next
PS_10124=RegEnumValueA
PS_10125=EnumWindows
PS_10126=RegEnumKeyExA
PS_10127=ControlService
PS_10128=TerminateProcess
PS_10129=ShowWindow
PS_10130=BringWindowToTop
PS_10131=UpdateWindow
PS_10132=MessageBoxA
PS_10133=Winmm.dll
PS_10134=waveInOpen
PS_10135=waveInClose
PS_10136=waveInPrepareHeader
PS_10137=waveInUnprepareHeader
PS_10138=waveInAddBuffer
PS_10139=waveInStart
PS_10140=waveInStop
PS_10141=GetFileSizeEx
PS_10142=SetFilePointerEx
PS_10143=RegQueryValueExA
PS_10144=GetStdHandle
PS_10145=CreatePipe
PS_10146=SetStdHandle
PS_10147=DuplicateHandle
PS_10148=CreateProcessA
PS_10149=GlobalFree
PS_10150=GlobalAlloc
PS_10151=GlobalLock
PS_10152=ResetEvent
PS_10153=Gdiplus.dll
PS_10154=GdiplusStartup
PS_10155=Ole32.dll
PS_10156=CreateStreamOnHGlobal
PS_10157=CoInitializeEx
PS_10158=OpenWindowStationA
PS_10159=SetProcessWindowStation
PS_10160=ExitProcess
PS_10161=Wtsapi32.dll
PS_10162=WTSSendMessageA
PS_10163=WTSQueryUserToken
PS_10164=WTSGetActiveConsoleSessionId
PS_10165=DuplicateTokenEx
PS_10166=Userenv.dll
PS_10167=CreateEnvironmentBlock
PS_10168=DestroyEnvironmentBlock
PS_10169=ExitWindowsEx
PS_10170=CreateProcessAsUserA
PS_10171=ImpersonateSelf
PS_10172=OpenThreadToken
PS_10173=GetComputerNameA
PS_10174=GlobalMemoryStatusEx
PS_10175=GetSystemInfo
PS_10176=GetACP
PS_10177=GetOEMCP
PS_10178=Gdi32.dll
PS_10179=DeleteDC
PS_10180=CreateDCA
PS_10181=DeleteObject
PS_10182=BitBlt
PS_10183=CreateCompatibleDC
PS_10184=SelectObject
PS_10185=GetDeviceCaps
PS_10186=GetDIBits
PS_10187=CreateCompatibleBitmap
PS_10188=SetThreadAffinityMask
PS_10189=SetCursorPos
PS_10190=SendInput
PS_10191=ChangeServiceConfigA
PS_10192=EnumServicesStatusA
PS_10193=QueryServiceConfigA
PS_10194=GetCurrentThread
PS_10195=GetDiskFreeSpaceExA
PS_10196=GetEnvironmentVariableA
PS_10197=%08x.exe
PS_10198=ServiceMain
PS_10199=%s.dll
PS_10200=TWO
PS_10201=runas
PS_10202=%scom.exe
PS_10203=http://%s
PS_10204=%08x.txt
PS_10205=200
PS_10206=\svchost.exe -k
PS_10207=%SystemRoot%\System32
PS_10208=%ProgramFiles%\Common Files\Microsoft Shared
PS_10209=\Services\
PS_10210=ControlSet003
PS_10211=ControlSet002
PS_10212=ControlSet001
PS_10213=CurrentControlSet
PS_10214=SYSTEM\
PS_10215=%s%s%s%s\Parameters
PS_10216=%s%s%s%s
PS_10217=SeDebugPrivilege
PS_10218=ravmond.exe
PS_10219=rstray.exe
PS_10220=360tray.exe
PS_10221=ServiceDll
PS_10222=Start
PS_10223=Description
PS_10224=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost
PS_10225=Windows Registry Editor Version 5.00
PS_10226=[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Messenger\Parameters]
PS_10227="ServiceDll"=hex(2):
PS_10228=%02x,00,
PS_10229=00,00
PS_10230=SOFTWARE\Microsoft\Windows\CurrentVersion\Run
PS_10231=rundll32.exe "%s",ServiceMain
PS_10232=ATI
PS_10233=ctr.dll
PS_10234=msgsvc.dll
PS_10235="%s",%s
PS_10236=rundll32.exe
PS_10237=%SystemRoot%\System32\
PS_10238=%ProgramFiles%\Common Files\Microsoft Shared\
PS_10239=%sreg.reg
PS_10240=%sreg.dll
PS_10241=SystemRoot
PS_10242=%s\System32\%s.dll
PS_10243=CommonProgramFiles
PS_10244=%s\Microsoft Shared\%s.dll
PS_10245=.upa
PS_10246=svchost.exe
PS_10247=-s "%s"
PS_10248=regedit.exe
PS_10249=%scpy.dll
PS_10250=CurrectUser:
PS_10251=Password:
PS_10252=[%04d-%02d-%02d %02d:%02d:%02d]
PS_10253=%s %s %s
PS_10254=***System Account And Password[%04d-%02d-%02d %02d:%02d:%02d]***
PS_10255=.txt
PS_10256=Default
PS_10257=Winlogon
PS_10258=%SystemRoot%\System32\msgsvc.dll
PS_10259=HARDWARE\DESCRIPTION\System\CentralProcessor\0
PS_10260=~MHz
PS_10261=SYSTEM\ControlSet001\Services\%s
PS_10262=rundll32.exe "%s",%s ServerAddr=%s;ServerPort=%d;Hwnd=%d;Cmd=%d;DdnsUrl=%s;
PS_10263=ServerAddr
PS_10264=ServerPort
PS_10265=Hwnd
PS_10266=Cmd
PS_10267=DdnsUrl
PS_10268=Default IME
PS_10269=iexplore.exe
PS_10270=SeShutdownPrivilege
PS_10271=WinSta0
PS_10272=Warning
PS_10273=Action
PS_10274=Error
PS_10275=DISPLAY
PS_10276=image/jpeg
PS_10277=NULL renderer
PS_10278=Grabber
PS_10279=FriendlyName
PS_10280=Cap
PS_10281=\%ssck.ini
PS_10282=\%skey.dll
PS_10283=\%skey.txt
PS_10284=%skey
PS_10285=%08x%s
PS_10286=%s\
PS_10287=%s\*.*
PS_10288=%s\%s
PS_10289=CMD.EXE
PS_10290=%s=
PS_10291=[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Messenger]
PS_10292="Start"=dword:00000002
PS_10293="Start"=dword:00000004
PS_10294=Messenger
PS_10309=\%s.dll
PS_10310=360safe.exe
PS_10311=\%sctr.dll
PS_10312=tmp.dll
PS_10313=ChangeServiceConfig2A
PS_10314=QueryServiceConfig2A
PS_10315=ServiceName

Распакованный блок со строками троян хранит в своей памяти и по мере необходимости извлекает из него требуемые строки по соответствующим им номерам.

BackDoor.Farfli.125 последовательно загружает необходимые библиотеки, получает адреса необходимых функций и сохраняет их в глобальной структуре, через которую в дальнейшем будет их вызывать. Фрагмент кода, выполняющий это действие, показан на следующем изображении:

screen BackDoor.Farfli.125 #drweb

После того как API загружены, он находит сигнатуру последней секции и распаковывает второй блок, который содержит конфигурацию бэкдора. В ней хранится адрес C&C-сервера www[.]pneword.net и различные параметры. Структура конфигурации BackDoor.Farfli.125 выглядит следующим образом:

struct config
{
  DWORD dword_0;
  DWORD dword_1;
  DWORD copy_to_temp;
  DWORD port;
  DWORD timeout;
  DWORD delete_files;
  DWORD start_keylogger;
  DWORD cfg_dword;
  DWORD dword_2;
  DWORD dword_3;
  BYTE srv_addr[256];
  BYTE url[256];
  BYTE unk_str[64];
  BYTE gap_0[24];
  BYTE name[312];
  BYTE str_version32];
  BYTE str_group[32];
  BYTE password[32];
  DWORD service;
  DWORD dword_4;
  GUID created_GUID;
  BYTE gap_1[260];
};

Далее BackDoor.Farfli.125M проверяет флаг config.copy_to_temp. Если он не равен 0, троян копирует exe-файл, из которого он в данный момент запущен, в каталог %TEMP% как файл с именем вида <config.name>com.exe и запускает его с помощью функции ShellExecuteA. В описываемом образце для config.name в имени файла используется kfwktt. В качестве аргумента командой строки BackDoor.Farfli.125 передаёт текущее имя исполняемого модуля.

После этого троян проверяет флаг config.delete_files. Если он не равен 0, бэкдор пытается прочитать файл %TEMP%\install00.tmp и удаляет файл, имя которого хранится в install00.tmp. Затем он удаляет файлы install00.tmp, thumbs.db, rapi.dll и rapiexe.exe.

Далее BackDoor.Farfli.125 создаёт объект соединения с C&C-сервером, инициализирует Windows Sockets API, но не выполняет само подключение. Далее с помощью функции SetProcessWindowStation троян ассоциирует себя с WinSta0 и привязывает поток к рабочему столу Default через функцию SetThreadDesktop.

Если бэкдор обнаруживает флаг config.start_keylogger, он инициализирует кейлоггер. При его инициализации создаётся мьютекс с именем в виде двух объединённых имен модуля без расширения:

<module_name><module_name>

Затем создается событие с именем <module_name>. Для файла лога формируется имя вида %TEMP%\.txt.

Для перехвата нажатий клавиатуры создаётся окно KBDLoger с именем класса KBDLoger, при этом сам перехват выполняется с помощью функций RegisterRawInputDevices и GetRawInputData. Записи журнала кейлоггера шифруются операцией XOR с байтом 0x62.

BackDoor.Farfli.125 пытается прочитать файл <config.name>sck.ini, в котором должна находиться конфигурация для работы трояна в режиме SOCKS прокси-сервера. В этой конфигурации хранится порт, к которому привязывается прокси-сервер, а также имя и пароль для аутентификации. бэкдор поддерживает режимы SOCKS4 и SOCKS5 с возможностью аутентификации по имени и паролю и способен преобразовывать имена доменов.

Работа в режиме SOCKS прокси-сервера выполняется в отдельном потоке. Если файла с конфигурацией на данный момент нет, троян пропускает этап создания прокси-сервера.

Коммуникация с C&C

Имя C&C-сервера хранится в config.srv_addr в виде строки. Кроме того, в config.url может храниться URL, по которому троян с помощью WinHTTP API запрашивает новый адрес. В этом случае ответ приходит в виде строки адреса C&C-сервера, который также может содержать номер порта, указанный через символ :. Полученный адрес сохраняется в файл %TEMP%\<threadid>.txt, где <threadid> ― идентификатор текущего потока в формате %08x. Впоследствии троян считывает адрес C&C-сервера из этого файла и применяет его в своей конфигурации.

BackDoor.Farfli.125 устанавливает keep-alive соединение через TCP-сокет, после чего генерирует ключ для шифрования, применяя для этого операцию XOR с одним байтом. Затем из конфигурации извлекается строка config.password и из неё формируется ключ размером 1 байт по следующему алгоритму:

 key = 0
  i = 0
  for x in password:
    k = k ^ ((x << i) & 0xFF)
    i += 1

В исследованном образце строка config.password является пустой, поэтому отправляемые на C&C-сервер данные не шифруются.

BackDoor.Farfli.125 собирает следующую информацию о системе:

  • версия ОС
  • частота процессора
  • количество процессоров
  • объём оперативной памяти
  • имя компьютера
  • кодовые страницы ANSI и OEM

Затем на основе полученных данных он подготавливает структуру вида:

struct sysinfo
{
  DWORD id;
  DWORD dword_zero_0;
  DWORD dword_zero_1;
  DWORD dword_zero_2;
  DWORD CPU_MHz;
  DWORD dword_zero_3;
  LARGE_INTEGER phys_mem;
  DWORD ansi_CP;
  DWORD oem_CP;
  DWORD dword_0;
  DWORD OS_version;
  DWORD number_of_processors;
  DWORD cfg_dword;
  GUID created_GUID;
  DWORD gap_0[5];
  BYTE unk_str[128];
  BYTE computer_name[16];
  DWORD gap_1[28];
  BYTE str_group[64];
  BYTE str_version[32];
  DWORD pad[9];
};

id

При отправке первого пакета на C&C-сервер поле id имеет значение 0x1F40. При последующих отправках в этом поле указывается идентификатор команды.

dword_0

Поле dword_0 приравнивается 1, если значение id соответствует 0x1F40; в остальных случаях (т. е. если это первичный пакет) оно приравнивается 0.

cfg_dword

Поле cfg_dword приравнивается значению config.cfg_dword.

OS_version

В зависимости от версии атакованной системы, поле OS_version может принимать следующие значения:

  • 0 ― для ОС Windows с версией сборки 8XXXX и старше;
  • 1 ― для Windows 95;
  • 2 ― для Windows 2000;
  • 3 ― для Windows XP;
  • 4 ― для Windows Server 2003;
  • 5 ― для Windows Vista, Windows Server 2008;
  • 6 ― для Windows 7, Windows Server 2008 R2;
  • 7 ― для Windows 8, Windows Server 2012;
  • 8 ― для Windows 8.1 и выше.

created_GUID

Поле created_GUID генерируется с помощью функции CoCreateGuid при каждой отправке структуры на C&C-сервер. Оно также сохраняется в config.created_GUID.

unk_str

Строка unk_str копируется из config.unk_str. В проанализированном образце она является пустой.

str_group

Строка str_group копируется из config.str_group. В рассмотренном образце бэкдора она имеет значение General Group.

str_version

Строка str_version копируются из config.str_version. В рассмотренном образце она имеет значение Customized Version.

После того как структура сформирована, при наличии ключа она шифруется однобайтной операцией XOR и передается на C&C-сервер. Если отправка не удалась, поток засыпает на config.timeout миллисекунд и снова пытается отправить пакет. Это действие повторяется до тех пор, пока структура не будет успешно передана.

Если отправка прошла успешно, в ответ BackDoor.Farfli.125 получает блок из двух DWORD. Первый является идентификатором команды, второй ― используется в ответе трояна на команду, который тот передает на C&C-сервер.

Работа с командами

При ответе на каждую команду бэкдор сначала отправляет пакет с данными sysinfo, в котором в поле id указывается идентификатор полученной команды, а в поле cfg_dword ― второй DWORD, поступивший вместе с этой командой.

Можно выделить две группы команд, с которыми работает BackDoor.Farfli.125

  • основные;
  • дополнительные, работа с которыми начинается после получения команд с идентификаторами 0x1F42, 0x1F43, 0x1F44, 0x1F4E и 0x1F54.

Основные команды

Идентификатор команды Выполняемые действия
0x7535 Получить привилегию SeShutdownPrivilege и выключить систему с кодом SHTDN_REASON_MINOR_RECONFIG
0x7534 Получить привилегию SeShutdownPrivilege и перезагрузить систему с кодом SHTDN_REASON_MINOR_RECONFIG
0x7532

Загрузить DLL-библиотеку в память, вызвать из неё функцию ServiceMain, после чего удалить эту библиотеку. Из-за вероятной ошибки в коде троян вместо DLL-файла пытается загрузить текстовый файл лога кейлоггера.

В случае успешной загрузки модуля бэкдор проверяет значение параметра config.service. Это значение может быть следующим:

  • 1 ― троян удаляет значение ATI в ключе [HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run];
  • 2 ― троян формирует файл %TEMP%\<config.name>reg.reg и импортирует его в реестр Windows;
  • иное значение ― троян удаляет значение <config.name> из [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost].

Формируемый бэкдором файл reg.reg имеет следующее содержимое:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Messenger]
"Start"=dword:00000004
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Messenger]
"Start"=dword:00000004
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Services\Messenger]
"Start"=dword:00000004
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Messenger\Parameters]
"ServiceDll"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,00,73,00,67,00,73,00,76,00,63,00,2e,00,64,00,6c,00,6c,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Messenger\Parameters]
"ServiceDll"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,00,73,00,67,00,73,00,76,00,63,00,2e,00,64,00,6c,00,6c,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Services\Messenger\Parameters]
"ServiceDll"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,53,00,79,00,7

Где имя ServiceDll в нем соответствует пути %SystemRoot%\System32\msgsvc.dll\.

0x22B8 Удалить файл журнала кейлоггера.
0x1F5A Завершить работу SOCKS прокси-сервера и удалить файл конфигурации.
0x1F59

Отправить на C&C-сервер файл журнала кейлоггера. Содержимое файла сжимается тем же алгоритмом, что и данные в последней секции, и отправляется в 3 этапа:

  1. передается размер упакованных данных;
  2. передается второй DWORD из команды;
  3. передаются непосредственно данные.
0x1F58 Получить от C&C-сервера имя файла, а затем буфер с данными. Открыть заданный файл и в его конце записать полученный буфер.
0x1F57 Записать звук с микрофона в файл в формате WAV и блоками отправить его на C&C-сервер.
0x1F56 Создать скриншот рабочего стола и в виде jpeg-файла отправить на C&C-сервер.
0x1F52 Запустить SOCKS прокси-сервер. Сначала троян получает файл с конфигурацией, затем привязывает прокси-сервер на порт, указанный в конфигурации, и начинает обрабатывать входящие соединения.
0x1F51 Запустить Internet Explorer с аргументами командой строки, переданными в команде.
0x1F50 Продемонстрировать MessageBox с заданными параметрами.
0x1F4B Получить от C&C-сервера файл, сохранить его в %TEMP%\<threadid>. и запустить с помощью функции ShellExecute. Расширение файла и параметр nShowCmd также передаются в команде.
0x1F4A Получить от C&C-сервера URL, с которого скачивается файл. Троян сохраняет файл в %TEMP% и запускает.
0x1F49

Получить от C&C-сервера исполняемый модуль. В этом модуле троян выполняет поиск сигнатуры аналогичной той, что расположена в его последней секции. Сразу после этой сигнатуры он помещает значение config.created_GUID. Затем сохраняет файл в %TEMP%\.exe и создаёт из него процесс.

После успешного создания процесса выполняет действия как в команде 0x7532.

0x1F48 Отправить на C&C-сервер заданный в команде файл.
0x1F47 Удаленное управление с помощью cmd.exe. Троян перенаправляет ввод и вывод в именованные каналы, получает команды от C&C-сервера, отправляет их в именованный канал, назначенный как hStdInput для cmd.exe, и читает результаты из канала, назначенного как hStdOutput. Результаты сжимаются перед отправкой, команды также приходят в сжатом виде.
0x1F41 Имитация протокола RDP (Remote Desktop Protocol ― протокол удаленного рабочего стола). Троян создает скриншоты экрана, в виде jpeg-файлов отправляет их на C&C-сервер и получает в ответ команды ввода.

Дополнительные команды

BackDoor.Farfli.125 отправляет на C&C-сервер структуру sysinfo с идентификатором 0x1F42, получив одну из следующих команд: 0x1F42, 0x1F43, 0x1F44, 0x1F4E, 0x1F54. В ответ ему поступает сжатый блок с идентификатором дополнительной команды и другими данными.

Результат выполнения команды сначала записывается во временный файл %TEMP%\<threadid>.tmp, где threadid ― идентификатор текущего потока в формате %08x. Затем файл считывается, его содержимое упаковывается и отправляется на C&C-сервер.

Идентификатор команды Выполняемые действия
0x1771

Собрать информацию о диске, путь к которому содержится в команде. Данные отправляется на C&C-сервер в виде структуры, показанной ниже:

struct disk_info
{
  DWORD type;
  DWORD dword_0;
  LARGE_INTEGER free_bytes_available_to_caller;
  LARGE_INTEGER total_number_of_bytes;
  LARGE_INTEGER total_number_of_free_bytes;
  BYTE volume_name[128];
  DWORD gap_0[32];
  BYTE file_system_name[128];
  DWORD gap_1[32];
  BYTE path[64];s
};
0x1772

Получить информацию о свойствах заданного в команде файла. Результат выполнения сохраняется в виде структуры:

struct file_info
{
 WIN32_FILE_ATTRIBUTE_DATA attrs; //WINAPI struct
 char filename[512];
};
0x1773

Получить следующую информацию о заданной директории:

  • ее свойства;
  • количество вложенных файлов и поддиректорий;
  • общий объём хранимых в ней данных.

Команда выполняется рекурсивно. Полученная информация сохраняется в виде структуры:

      
struct dir_info
{
 WIN32_FILE_ATTRIBUTE_DATA attrs;
 DWORD number_of_files;
 DWORD number_of_subdirs;
 DWORD dword_0;
 LARGE_INTEGER total_dir_size;
 BYTE path[512];
};
      
      
0x1774 Записать во временный файл список файлов и поддиректорий в заданном каталоге. Список представляет последовательность структур file_info по каждому элементу.
0x1775 Удалить файлы, список которых задан в команде.
0x1776 Создать каталог.
0x1777 Переместить файл. Существующее и новое имя файла задаются в виде двух последовательных буферов размером 0x200 байт.
0x1778 Перечислить все доступные диски, сформировав по каждому из них структуру disk_info с информацией. Собранные данные в ответном сообщении передается на C&C-сервер.
0x1779 Открыть заданный в команде файл вызовом фнкции ShellExecuteA с параметром nCmdShow равным SW_SHOW.
0x177A Получить привилегию SE_DEBUG_PRIVILEGE и завершить процесс. В команде в текстовом формате содержится PID целевого процесса.
0x177B

Перечислить содержимое ключа реестра. По каждому элементу ключа формируется структура вида:

      
struct reg_key_item
{
 DWORD ValueName_len;
 DWORD type;
 DWORD data_size;
 DWORD is_subkey;
 BYTE element_name[512];
 BYTE data[512];
};
      
      
0x177C Удалить заданный ключ реестра.
0x177E Удалить параметр в ключе реестра.
0x177F Установить значения параметра в ключе реестра.
0x1781 Команда содержит список путей расположения файлов и каталогов (от одного и больше). Если принятый в команде путь ведёт к файлу, троян записывает его имя и размер во временный файл. Если путь ведет к каталогу, троян рекурсивно проходит его и для каждого вложенного файла записывает его имя и размер во временный файл.
0x1782

Составить список работающих процессов. Для каждого процесса формируется структура вида:

      
struct proc_info
{
 DWORD pid;
 DWORD threads_base_priority;
 DWORD number_of_threads;
 BYTE exe_file[512];
};
      
      

Полученная информация передается на C&C-сервер.

0x1783

Составить список работающих служб типа SERVICE_WIN32. По каждой службе формируется структура вида:

struct service_info
{
 DWORD service_type;
 DWORD start_type;
 DWORD error_control;
 DWORD tagID;
 BYTE service_name[520];
 BYTE display_name[520];
 DWORD current_state;
 DWORD gap_0[9];
 BYTE binary_path_name[512];
 BYTE load_order_group[512];
 BYTE dependencies[512];
 BYTE service_start_name[1024];
 BYTE description[1024];
};
      
0x1784

Остановить или запустить службу. В команде содержится буфер размером 0x200 с именем службы, после которого следует код.

Если код ― 1, трояну необходимо остановить службу; если код ― 0, ему необходимо запустить ее.

0x1785 Отвечает за управление конфигурацией службы. Троян может изменить тип запуска, имя и отображаемое имя службы.
0x1787 Удалить заданную службу.
0x1788 Поиск файлов по маске. Троян сохраняет во временный файл список файлов с их свойствами.
0x1789

Перечислить открытые окна. По каждому окну троян формирует структуру вида:

struct window_info
{
 BYTE text[512];
 BYTE owner_process_name[512];
 HWND hWnd;
 DWORD dword;
}
      
0x178A Закрыть или показать окно. В команде задаётся дескриптор (handle) окна, код сообщения и параметр nCmdShow.

Рекомендации по лечению

  1. В случае если операционная система способна загрузиться (в штатном режиме или режиме защиты от сбоев), скачайте лечащую утилиту Dr.Web CureIt! и выполните с ее помощью полную проверку вашего компьютера, а также используемых вами переносных носителей информации.
  2. Если загрузка операционной системы невозможна, измените настройки BIOS вашего компьютера, чтобы обеспечить возможность загрузки ПК с компакт-диска или USB-накопителя. Скачайте образ аварийного диска восстановления системы Dr.Web® LiveDisk или утилиту записи Dr.Web® LiveDisk на USB-накопитель, подготовьте соответствующий носитель. Загрузив компьютер с использованием данного носителя, выполните его полную проверку и лечение обнаруженных угроз.
Скачать Dr.Web

По серийному номеру

Выполните полную проверку системы с использованием Антивируса Dr.Web Light для macOS. Данный продукт можно загрузить с официального сайта Apple App Store.

На загруженной ОС выполните полную проверку всех дисковых разделов с использованием продукта Антивирус Dr.Web для Linux.

Скачать Dr.Web

По серийному номеру

  1. Если мобильное устройство функционирует в штатном режиме, загрузите и установите на него бесплатный антивирусный продукт Dr.Web для Android Light. Выполните полную проверку системы и используйте рекомендации по нейтрализации обнаруженных угроз.
  2. Если мобильное устройство заблокировано троянцем-вымогателем семейства Android.Locker (на экране отображается обвинение в нарушении закона, требование выплаты определенной денежной суммы или иное сообщение, мешающее нормальной работе с устройством), выполните следующие действия:
    • загрузите свой смартфон или планшет в безопасном режиме (в зависимости от версии операционной системы и особенностей конкретного мобильного устройства эта процедура может быть выполнена различными способами; обратитесь за уточнением к инструкции, поставляемой вместе с приобретенным аппаратом, или напрямую к его производителю);
    • после активации безопасного режима установите на зараженное устройство бесплатный антивирусный продукт Dr.Web для Android Light и произведите полную проверку системы, выполнив рекомендации по нейтрализации обнаруженных угроз;
    • выключите устройство и включите его в обычном режиме.

Подробнее о Dr.Web для Android

Демо бесплатно на 14 дней

Выдаётся при установке