SHA1:
- 9649ef7b594794daaf02da08c3b95a9f2f71149b (avicap32.dll)
- 4884d44e2b4c2e2a65472068ef748f51385b13de (payload)
Троянец для операционных систем семейства Microsoft Windows, распространяется при помощи Trojan.MulDrop6.39120. Троянец реализован в виде динамической библиотеки avicap32.dll, которая автоматически загружается в память компьютера копией приложения TeamViewer, запускаемой вредоносной программой Trojan.MulDrop6.39120. Данная библиотека активно использует строки, импорты и функции процесса TeamViewer. Наиболее критичные участки кода зашифрованы с использованием алгоритмов base64 и RC4.
После загрузки троянец удаляет значок TeamViewer из области уведомлений Windows и отключает в системе функцию показа сообщений об ошибках. Также BackDoor.TeamViewer.49 устанавливает перехваты вызовов ряда системных функций с целью скрытия окна программы TeamViewer.
Троянец определяет значение параметра системного реестра HKLM\Software\Microsoft\Cryptography\MachineGUID и вычисляет значение MD5 от него — полученный результат является именем мьютекса, который используется для контроля повторного запуска троянца, а также локальным ключом RC4. Помимо этого на основе одной из функций приложения TeamViewer бэкдор генерирует глобальный ключ RC4.
Для своей работы BackDoor.TeamViewer.49 использует конфигурационный файл с именем nv8moxflu, который расположен в той же папке, что и файл самого троянца. Первый байт в конфигурационном файле является флагом, определяющим, каким образом этот файл зашифрован: если байт равен 1, используется глобальный ключ, если 0 – используется локальный. Остальные данные зашифрованы алгоритмом RC4. В исследованном образце файл конфигурации имеет следующий вид:
Section {Main}
szsubKey "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
szvalueName "5s"
szpgkey "rtpredimpku0hrq1le0d4cwqw7pcl97dv"
szadminkey "i9igmhtliih115b5xlbpcwwc17qlbhse4"
SectionEnd
Для расшифровки остальных блоков кода берется значение функции MD5 от параметра "szadminkey". Затем троянец выполняет синтаксический разбор секции «Main» конфигурационного файла, извлекает оттуда все параметры и перезаписывает исходный конфигурационный файл его копией, зашифрованной локальным ключом.
Троянец запускает отдельный поток, который в непрерывном цикле, но с определенными интервалами устанавливает атрибуты «системный» и «скрытый» для своей папки, где хранятся сам исполняемый файл, вредоносная библиотека и файл конфигурации. Если в какой-то момент времени установить эти атрибуты не удалось, вредоносная программа приступает к процедуре удаления из системного реестра всех ключей, относящихся к программе TeamViewer:
HKCU\\Software\\TeamViewer\\Version6\\MachineFallback
HKCU\\Software\\TeamViewer\\Version6
HKCU\\Software\\TeamViewer
Регистрирует себя в автозапуске с использованием перехвата вызовов функции hookRegOpenKeyExW.
Троянец устанавливает Vectored Exception Handler и брейк пойнты (0xcc) по адресу 0x5A7A84 и по адресу функции MessageBoxW.
Для исключений с кодами ошибок 0xC0000005 (STATUS_ACCESS_VIOLATION), 0xC0000374 (STATUS_HEAP_CORRUPTION), 0x80000004 (STATUS_SINGLE_STEP) выполняется следующий код:
ContextRecord->SegDs = 35;
ContextRecord->EFlags |= 0x100u;
return EXCEPTION_CONTINUE_EXECUTION;
Для исключения 0x80000003 (STATUS_BREAKPOINT) в первую очередь проверяется адрес, по которому произошло исключение. Если он равен 0x5A7A84, устанавливает перехват вызова функции на адрес, через который TeamViewer вызывает WinVerifyTrust (динамически полученный импорт). Перехват всегда возвращает единицу, т.е. «подпись недействительна». Кроме того, для этого кода проверяется, не совпадает ли адрес, где произошло исключение, с адресом функции MessageBoxW. Если совпадает, троянец меняет значение регистра EIP на свою функцию LoadEmbLib и выходит из обработчика исключений.
В теле троянца хранится еще одна зашифрованная библиотека, реализующая вредоносные функции, она написана на С++ с использованием библиотеки boost. Библиотека расшифровывается с использованием алгоритма RC4, ключ берется из параметра szpgkey конфигурационного файла, после чего расшифрованная библиотека загружается в память.
В библиотеке содержится специальным образом сформированный массив с именами управляющих серверов, хранящихся побайтно, в зашифрованном виде. Шифрование осуществляется операцией XOR с байтом 0x18.
В запросах используется User-Agent:
Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)
Формируется строка:
client_id=%.8x&connected=0&server_port=0&debug=0
где client_id - серийный номер жесткого диска, на котором расположен раздел С, значение шифруется операцией XOR с SID пользователя.
Данная строка шифруется RC4 с ключом "heyfg645fdhwi", а потом кодируется c помощью bintohex, после чего отправляется на управляющий сервер в виде запроса:
http://<cnc>/analytics.php?c=<encoded_data>
Ответ сервера аналогично закодирован bintohex и зашифрован RC4.
Троянец способен выполнять следующие команды, получаемые по протоколу HTTP:
- disconnect - разорвать соединение;
- idle - удерживать соединение;
- updips - обновить список auth_ip на указанный в команде;
- connect - установить соединение с указанным хостом. Команда должна содержать следующие параметры:
- ip – IP-адрес хоста;
- auth_swith - использовать авторизацию. Если значение установлено в "1", троянцу должны быть переданы параметры auth_login, auth_pass. Если значение установлено в "0", троянцу должен быть передан параметр auth_ip, в противном случае установки соединения не произойдет;
- auth_ip - аутентификация по IP;
- auth_login - логин для авторизации;
- auth_pass - пароль для авторизации.
Вся дальнейшая сетевая активность написана с использованием boost::asio::stream_socket_service и осуществляется через бинарный протокол.
Троянец способен выполнять следующие команды, получаемые по бинарному протоколу:
- Аутентификация — в зависимости от параметра auth_swith отправляет на сервер или данные параметра auth_ip, или auth_login, auth_pass.
- Keep-Alive (0x01) — удержание связи с сервером.
- Send Data (0x02) — ищет в своем теле сигнатуру:
и высылает указанное сервером количество байт.C8 1F 0E 8D 4A 97 06 2A BC B8 3A D0 30 92 2E 59
- Proxy (0x00) — перенаправляет трафик от управляющего сервера на удаленный хост, указанный сервером.