Упаковщик: нет
Дата компиляции: 29.03.2021
- SHA1-хеш: abfd737b14413a7c6a21c8757aeb6e151701626a
Описание
Многофункциональный троян-бэкдор для 64-битных и 32-битных операционных систем семейства Microsoft Windows. Предназначен для установки зашифрованного соединения с управляющим сервером и несанкционированного управления зараженным компьютером. Имеет функции файлового менеджера и Remote Shell.
Подготовка к работе
В начале работы бэкдор расшифровывает оверлей, предоставленный шелл-кодом. Первый слой шифрования снимается следующим алгоритмом:
k = 0x37
s = bytearray()
for i in range(len(d)):
c = d[i] ^ k
s.append(c)
k = (k + c) & 0xff
Второй слой — операцией XOR с ключом 0xCC.
В данный оверлей входят:
- конфигурация трояна;
- модуль для обхода UAC.
Конфигурация имеет следующий вид:
struct st_proxy
{
char proxy_addr[32];
char proxy_login[64];
char proxy_password[64];
_BYTE pad[2];
};
struct st_config
{
char cnc_addr[4][34];
st_proxy proxies[4];
char home_dir[260];
char exe_name[50];
char loader_name[50];
char shellcode_name[50];
char software_name[260];
char startup_argument[50];
_DWORD reg_hkey;
char reg_run_key[200];
char reg_value_name[52];
char taskname[52];
_DWORD mstask_mo;
char svcname[50];
char svcdisplayname[50];
char svcdescription[256];
char reg_uninstall_key[50];
char inject_target_usr[260];
char inject_target[260];
_BYTE byte0[2];
_BYTE flags;
_BYTE pad[3];
_DWORD keepalivetime;
unsigned __int8 key[16];
};
Поле flags отображает, какие методы автозагрузки следует использовать трояну, а также каковы особенности запуска:
enum em_flags
{
GOT_ENOUGH_RIGHTS= 0x1,
UNK_FLAG_2 = 0x2,
UNK_FLAG_4 = 0x4,
INSTALL_AS_MSTASK = 0x8,
INSTALL_AS_SERVICE = 0x10,
RUN_WITH_ARGUMENT = 0x20,
INJECT_TO_PROCESS = 0x40,
RUN_AS_USER = 0x80,
};
Если запуск указан через планировщик задач (INSTALL_AS_MSTASK), то после расшифровки конфигурации flags создает мьютекс для предотвращения повторного запуска:
Далее проверяет, хватает ли у трояна прав для запуска тем способом, который был предварительно указан в конфигурации. Если нет, то перезапускает себя с обходом UAC.
Троян проверяет наличие файла в пути C:Users\Public\Downloads\clockinstall.tmp, и, если такой имеется, то удаляет clockinstall.tmp.
Если файл clockinstall.tmp отсутствует, тогда проверяет, есть ли файл install в папке, из которой запущен троян, и удаляет его при наличии.
Далее устанавливает себя в систему в соответствии с указанным в конфигурации типом. Кроме того, бэкдор попытается скрыть свою активность от пользователя.
Если троян работает на 32-битной ОС, тогда справедлив такой же механизм сокрытия службы из запущенных, как и у BackDoor.PlugX.28, — удаление из списка структур ServiceDatabase той структуры, которая соответствует службе трояна.
Если в конфигурации указано, что троян должен внедряться в какой-либо процесс, то внедряться он будет именно в целевой процесс. Если же в конфигурации указан флаг RUN_AS_USER, то троян будет ждать, пока не появится хотя бы один авторизованный пользователь, после чего создаст свой процесс, но от имени пользователя.
Вне зависимости от типа автозапуска трояна только один процесс может общаться с управляющим сервером. Для этого создается мьютекс:
Прежде чем попытаться установить связь с управляющим сервером, троян определяет настройки прокси-серверов. Для этого:
- Проверяется наличие файла <process_name>.ini в папке, откуда запущен процесс трояна. Пример конфигурации:
[AntiVir] Cloud=0A0804D22420000000000000000000000000000000000000000000000000000000000000000000000000000000000000299CC1003C9CC10098F11900DCF1190062F2190000000000E02AC300CC004501D8F1190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
- Читает в папке трояна файл с именем
.tmp , где <loader_name> — значение из конфигурации; - Читает настройки прокси из реестра [HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings], ключи ProxyEnable и ProxyServer
- Читает настройки прокси из настроек Mozilla Firefox — %APPDATA%\Mozilla\Firefox\<profile>\prefs.js
- Также проверяет наличие сохраненных login:password от прокси-сервера в Mozilla Firefox и Internet Explorer.
Протокол работы с управляющим сервером
Установка соединения с сервером имитирует создание соединения TLS1.0 между клиентом и сервером. В теле трояна содержатся два буфера:
- Содержит пакет TLS1.0 Client Hello:
- Содержит пакеты TLS 1.0 Client Key Exchange с длиной ключа 0x100 байт, Change Cipher Spec, Client Handshake Finished:
При отправке Client Hello пакета троян шифрует методом XOR со случайными байтами все байты поля Client Random, начиная с 4-го, а в первые 4 записывает текущее время. Ответ сервера на это сообщение принимается, но при этом данные игнорируются.
При отправке второго пакета бэкдор также шифрует при помощи метода XOR случайными байтами поле публичного ключа пакета Client Key Exchange, а в данные пакета Client Handshake Finished записывает свой ключ длиной в 28 байтов, который будет использован для шифрования и дешифрования пакетов, отправляемых или принимаемых от сервера. Последние 4 байта пакета Client Handshake Finished бэкдор шифрует со случайными байтами и отправляет на управляющий сервер. В ответ на это сервер присылает свой ключ, который используется для инициализации общего с клиентом ключа.
После этого бэкдор входит в цикл обработки команд от управляющего сервера. Трафик между клиентом и сервером при этом шифруется по алгоритму RC4.
Список команд:
opcode | Command |
---|---|
0x01 | Сбор информации о зараженном компьютере |
0x02 | Remote shell |
0x03 | Файловый менеджер (см. ниже команды, заканчивающиеся на 3) |
0x100 | Keep-alive |
0x103 | Открыть файл на запись |
0x203 | Выслать файл |
0x303 | Данные для записи в файл |
0x400 | Переподключиться к серверу |
0x403 | Получить информацию о диске или листинг директории |
0x500 | Завершить работу |
0x503 | Переместить файл |
0x600 | Удалить ini-файл с конфигурацией прокси-сервера |
0x603 | Удалить файл |
0x703 | Запустить процесс |
0x700 | Выполнить команду через ShellExecute |
0x800 | Обновить конфигурацию |