Упаковщик:
отсутствует
Дата компиляции:
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-функций, а также конфигурацию трояна в сжатом виде.
Секция содержит три блока сжатых данных. В первом блоке находятся строки, во втором ― конфигурация трояна, а третий блок является пустым. При этом второй и третий блоки расположены в конце секции:
После декомпрессии второй блок представляет собой список нумерованных строк, который представлен ниже:
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 последовательно загружает необходимые библиотеки, получает адреса необходимых функций и сохраняет их в глобальной структуре, через которую в дальнейшем будет их вызывать. Фрагмент кода, выполняющий это действие, показан на следующем изображении:
После того как 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%\
Для перехвата нажатий клавиатуры создаётся окно 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. Это значение может быть следующим:
Формируемый бэкдором файл reg.reg имеет следующее содержимое:
Где имя ServiceDll в нем соответствует пути %SystemRoot%\System32\msgsvc.dll\. |
0x22B8 | Удалить файл журнала кейлоггера. |
0x1F5A | Завершить работу SOCKS прокси-сервера и удалить файл конфигурации. |
0x1F59 | Отправить на C&C-сервер файл журнала кейлоггера. Содержимое файла сжимается тем же алгоритмом, что и данные в последней секции, и отправляется в 3 этапа:
|
0x1F58 | Получить от C&C-сервера имя файла, а затем буфер с данными. Открыть заданный файл и в его конце записать полученный буфер. |
0x1F57 | Записать звук с микрофона в файл в формате WAV и блоками отправить его на C&C-сервер. |
0x1F56 | Создать скриншот рабочего стола и в виде jpeg-файла отправить на C&C-сервер. |
0x1F52 | Запустить SOCKS прокси-сервер. Сначала троян получает файл с конфигурацией, затем привязывает прокси-сервер на порт, указанный в конфигурации, и начинает обрабатывать входящие соединения. |
0x1F51 | Запустить Internet Explorer с аргументами командой строки, переданными в команде. |
0x1F50 | Продемонстрировать MessageBox с заданными параметрами. |
0x1F4B | Получить от C&C-сервера файл, сохранить его в %TEMP%\<threadid>. |
0x1F4A | Получить от C&C-сервера URL, с которого скачивается файл. Троян сохраняет файл в %TEMP% и запускает. |
0x1F49 | Получить от C&C-сервера исполняемый модуль. В этом модуле троян выполняет поиск сигнатуры аналогичной той, что расположена в его последней секции. Сразу после этой сигнатуры он помещает значение config.created_GUID. Затем сохраняет файл в %TEMP%\ После успешного создания процесса выполняет действия как в команде 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-сервер в виде структуры, показанной ниже:
|
0x1772 | Получить информацию о свойствах заданного в команде файла. Результат выполнения сохраняется в виде структуры:
|
0x1773 | Получить следующую информацию о заданной директории:
Команда выполняется рекурсивно. Полученная информация сохраняется в виде структуры:
|
0x1774 | Записать во временный файл список файлов и поддиректорий в заданном каталоге. Список представляет последовательность структур file_info по каждому элементу. |
0x1775 | Удалить файлы, список которых задан в команде. |
0x1776 | Создать каталог. |
0x1777 | Переместить файл. Существующее и новое имя файла задаются в виде двух последовательных буферов размером 0x200 байт. |
0x1778 | Перечислить все доступные диски, сформировав по каждому из них структуру disk_info с информацией. Собранные данные в ответном сообщении передается на C&C-сервер. |
0x1779 | Открыть заданный в команде файл вызовом фнкции ShellExecuteA с параметром nCmdShow равным SW_SHOW. |
0x177A | Получить привилегию SE_DEBUG_PRIVILEGE и завершить процесс. В команде в текстовом формате содержится PID целевого процесса. |
0x177B | Перечислить содержимое ключа реестра. По каждому элементу ключа формируется структура вида:
|
0x177C | Удалить заданный ключ реестра. |
0x177E | Удалить параметр в ключе реестра. |
0x177F | Установить значения параметра в ключе реестра. |
0x1781 | Команда содержит список путей расположения файлов и каталогов (от одного и больше). Если принятый в команде путь ведёт к файлу, троян записывает его имя и размер во временный файл. Если путь ведет к каталогу, троян рекурсивно проходит его и для каждого вложенного файла записывает его имя и размер во временный файл. |
0x1782 | Составить список работающих процессов. Для каждого процесса формируется структура вида:
Полученная информация передается на C&C-сервер. |
0x1783 | Составить список работающих служб типа SERVICE_WIN32. По каждой службе формируется структура вида:
|
0x1784 | Остановить или запустить службу. В команде содержится буфер размером 0x200 с именем службы, после которого следует код. Если код ― 1, трояну необходимо остановить службу; если код ― 0, ему необходимо запустить ее. |
0x1785 | Отвечает за управление конфигурацией службы. Троян может изменить тип запуска, имя и отображаемое имя службы. |
0x1787 | Удалить заданную службу. |
0x1788 | Поиск файлов по маске. Троян сохраняет во временный файл список файлов с их свойствами. |
0x1789 | Перечислить открытые окна. По каждому окну троян формирует структуру вида:
|
0x178A | Закрыть или показать окно. В команде задаётся дескриптор (handle) окна, код сообщения и параметр nCmdShow. |