Анализ угроз

Разбор вируса, использующего программу удаленного контроля TeamViewer

Jaromír Hořejší, 7 июля 2017

Анализ вредоносной программы TeamSpy, незаметно передающей компьютеры под полный удаленный контроль злоумышленников.

Программа для удаленного управления TeamViewer может быть весьма полезной, когда необходима поддержка пользователя на расстоянии. К сожалению, ею могут воспользоваться и киберпреступники, стоящие за вредоносной программой TeamSpy.

Программа TeamSpy заражает компьютеры, обманом подталкивая людей скачать вредоносное вложение и запустить макрос. После этого вирус незаметно устанавливает программу TeamViewer, что передает в руки злоумышленников полный контроль над зараженным ПК. Недавно компания Heimdal Security вновь обнаружила кампанию по распространению данного вредоносного ПО посредством спама. Мы также заметили всплеск активности и решили изучить его.

Скрытые команды

Заразив устройство, большинство вредоносных программ связываются с сервером контроля и управления (C&C). Данный сервер — это центр управления, отправляющий команды, которые должна выполнять вредоносная программа. Серверы контроля и управления также принимают собранные вирусом данные. Для подобного взаимодействия авторы вредоносных программ обычно используют собственные протоколы, которые могут быть без особого труда замечены и заблокированы антивирусом. Чтобы сделать их обнаружение более сложным, некоторые создатели вредоносного ПО вместо этого применяют популярные программы для удаленного управления (например, TeamViewer), используя возможности их сети VPN для лучшей маскировки обмена данными между вредоносной программой и серверами контроля и управления.

TeamSpy: способ заражения

Программа TeamSpy распространяется при помощи спама по электронной почте, который обманом убеждает людей открыть вредоносное вложение, представляющее собой Excel-файл с макросом. После открытия вложения отображается следующее.

После включения макроса запускается процесс заражения, работающий полностью в фоновом режиме, поэтому жертва не замечает ничего необычного. Если заглянуть внутрь вредоносного макроса, можно увидеть слегка запутанные строки кода, затрудняющие их анализ, которые обычно разбиты на одну или несколько подстрок, объединяющиейся в конце. Наиболее важная информация обведена красным и включает ссылку, по которой выполняется скачивание объекта, и пароль, который будет использован позже.

Ссылка disk.karelia.pro указывает на легальный российский файлообменник. Хотя загруженное вложение является .png файлом, на самом деле это исполняемый .exe файл, выполянющий установку программы Inno Setup, защищенную паролем.

С помощью утилиты innounp мы смогли получить список файлов или извлечь их из установщика Inno Setup, который используется вредоносной программой. Как видно в списке ниже, большая часть файлов — обычные двоичные файлы программы TeamViewer, имеющие цифровые подписи. Исключение составляют два файла: msimg32.dll и tvr.cfg. Tvr.cfg — это файл конфигурации программы TeamSpy, он будет описан позже. Msimg32.dll — это сама вредоносная программа, библиотека DLL, являющаяся частью операционной системы Windows. Однако в данном случае программа TeamSpy использует порядок поиска DLL в своих целях. В результате поддельный файл msimg32.dll из текущего каталога загружается в процесс вместо настоящего файла msimg32.dll из каталога Windows/System32. Сама вредоносная программа является поддельной библиотекой msimg32.dll.

Маскировка программы TeamSpy

При обычной установке программы TeamViewer отображается окно графического интерфейса с идентификационным номером и паролем, которые нужны для удаленного подключения к вашему ПК.

При успешном заражении ПК программой TeamSpy не отображается ничего. Как вы помните, все работает в фоновом режиме, поэтому жертва не замечает установку TeamViewer. Добиться этого позволяют манипуляции со многими функциями API и изменение их поведения. TeamSpy перехватывает около 50 различных элементов API:

kernel32.dll

CreateMutexW, CreateDirectoryW, CreateFileW, CreateProcessW, GetVolumeInformationW, GetDriveTypeW, GetCommandLineW, GetCommandLineA, GetStartupInfoA, MoveFileExW, CreateMutexA

user32.dll

SetWindowTextW, TrackPopupMenuEx, DrawTextExW, InvalidateRect, InvalidateRgn, RedrawWindow, SetWindowRgn, UpdateWindow, SetFocus, SetActiveWindow, SetForegroundWindow, MoveWindow, DialogBoxParamW, LoadIconW, SetWindowLongW, FindWindowW, SystemParametersInfoW, RegisterClassExW, CreateWindowExW, CreateDialogParamW, SetWindowPos, ShowWindow, GetLayeredWindowAttributes, SetLayeredWindowAttributes, IsWindowVisible, GetWindowRect, MessageBoxA, MessageBoxW

advapi32.dll

RegCreateKeyW, RegCreateKeyExW, RegOpenKeyExW, CreateProcessAsUserW, CreateProcessWithLogonW, CreateProcessWithTokenW, Shell_NotifyIconW, ShellExecuteW

iphlpapi.dll

GetAdaptersInfo

Некоторые перехваты блокируют доступ приложения к определенным ресурсам (например, когда команда RegCreateKey или RegOpenKey пытается получить доступ к ключу реестра Software\TeamViewer, высвечивается код ошибки ERROR_BADKEY).

Перехват функции GetCommandLine заставляет программу TeamViewer считать, что она запущена с предустановленным паролем (вместо случайно генерируемого пароля пользователи TeamViewer обычно могут задать в качестве такого пароля любое значение, добавив параметр командной строки).

Перехват SetWindowLayeredAttributes устанавливает для прозрачности окна TeamViewer значение 0 (инструкция PUSH 0), что в соответствии с документацией MSDN означает полную прозрачность.

Перехват функции CreateDialogParam блокирует создание некоторых нежелательных для вредоносной программы диалоговых окон. Их можно увидеть в файле TeamViewer_Resource_en.dll. Они связаны с числами (например, 10075), которые можно увидеть на изображении ниже.

В случае ShowWindow определяются собственные nCmdShow параметры 4d2h и 10e1h. Если передаются значения, отличные от приведенных, ничего не происходит.

Возможно, наибольший интерес представляет перехват интерфейса API CreateWindowEx. После серии проверок имен класса происходит определение окна и других элементов управления окнами, относящихся к окну чата TeamViewer. С помощью инструмента, подобного WinSpy++, можно увидеть все окна, относящиеся к конкретному процессу (даже если они скрыты). На изображении ниже можно увидеть окно ControlWin с несколькими мини-приложениями TVWidget. Одно из них относится к чату и имеет две правки текста ATL:???????? (одну для истории сообщений чата и одну для нового сообщения чата), одно поле с выпадающим списком участников чата и кнопку Отправить. «message 01» — это полученное сообщение в чате, «message 02» — это сообщение, которое будет отправлено после нажатия кнопки «Отправить».

Окно чата нельзя увидеть, так как вредоносная программа работает в фоновом режиме. Однако ее можно изменить, после чего маскирующие окна не будут запускаться.

Фрагмент кода ниже показывает, как вредоносная программа получает контроль над элементами управления окном. GetWindowLong, CallWindowProc и SetWindowLong со значением nIndex = GWL_PROC заменяют старый адрес для процедуры окна, относящейся к правке текста истории чата, на собственную процедуру окна.

Собственная процедура окна воспринимает входящие сообщения и, в зависимости от идентификатора сообщения окна, либо отправляет новое сообщение, либо ожидает ответа от сервера контроля и управления (получено сообщение EM_SETCHARFORMAT).

Ниже показано, как отправляется новое сообщение. Сначала вредоносная программа устанавливает фокус на правку текста нового сообщения с помощью команды WM_SETFOCUS, затем она задает правку текста этого сообщения командой WM_SETTEXT и нажимает кнопку «Отправить», задавая команду BM_CLICK.

Похожие изменения затрагивают большинство из перечисленных выше пятидесяти элементов интерфейса API. Некоторые преобразования предельно просты и представляют из себя всего лишь несколько инструкций. Другие отличаются значительной сложностью (например, CreateWindowEx). Не будем их перечислять, однако конечный результат очевиден: окна программы TeamViewer жертве не видны. Они лишь незаметно присутствуют в системе.

Файл конфигурации

Конфигурация TeamSpy хранится в файле tvr.cfg. В нем используется собственный простой алгоритм шифрования, который показан ниже. Он читает входной файл и использует пароль «TeamViewer». Алгоритм оперирует двумя счетчиками: cnt1 (0...количество байт в tvr.cfg) и cnt2 (0...длина пароля). Он берет один байт из пароля и добавляет произведение cnt1*cnt2. Это происходит с каждым символом пароля. Со всеми результатами выполняется операция XOR (сложение по модулю 2), создается один символ. В конце цикла операция XOR применяется и к нему с соответствующим байтом из файла конфигурации. Эти шаги повторяются для всех байтов в файле конфигурации.

Расшифрованный файл конфигурации показан ниже. Названия большинства параметров говорят сами за себя. Для нас наибольшее значение имеют пароль (зараженная машина имеет пароль «superpass») и server1, где находится извлеченный идентификатор машины.

Обратная связь

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

id — идентификатор TeamViewer. Киберпреступникам нужен этот идентификатор, так как его и пароля достаточно для удаленного подключения к зараженному компьютеру

tout — время ожидания

idl — время простоя

osbt — 32-разрядная или 64-разрядная версия

osv — версия операционной системы

osbd — версия сборки ОС

ossp — пакет обновления

tvrv — версия программы TeamViewer

uname — имя пользователя

cname — имя компьютера

vpn — наличие TeamViewer vpn

avr — антивирусное решение.

Контроль чата

Зараженный компьютер управляется при помощи программы TeamViewer. Киберпреступники могут подключиться к удаленному компьютеру (им известны идентификатор и пароль TeamViewer) или отправлять команды при помощи чата программы TeamViewer, что позволяет им делать на зараженной машине все что угодно. Связь посредством чата TeamViewer позволяет использовать базовые функции лазеек: applistwcmdverosvpnlocaletimewebcamgenid. В коде TeamSpy эти команды сравниваются со своими контрольными суммами crc32, поэтому вероятность конфликтов довольно высока. Так как crc32(wcmd) = 07B182EB = crc32(aacvqdz), эти команды взаимозаменяемы.

Использование допустимой сети VPN программы TeamViewer шифрует трафик и делает его неотличимым от безвредного трафика TeamViewer. После заражения устройства злоумышленники получают полный доступ к компьютеру. Они могут похитить и извлечь важные данные, скачать и запустить любую программу и сделать многое другое.

Использование в своих целях приложения с негласной загрузкой — изобретательный подход, так как не каждый пользователь проверяет благонадежность каждой библиотеки DLL в одном каталоге. Проверка подписи главного исполняемого файла не выявляет ничего подозрительного и может оставить жертву в неведении о случившемся. Ниже показана цифровая подпись основного файла update_w32.exe. Этот файл не является вредоносным.

Важно помнить, что TeamSpy — не единственный класс вредоносного ПО, который может использовать программу TeamViewer в своих целях. Здесь описан лишь один из них. Однако принципы их работы одинаковы.

Антивирусные решения Avast обнаруживают данный тип вредносного ПО. Следите за нашими новостями в социальных сетях ВКонтакте, Одноклассники, Facebook и Twitter.

Алгоритмы SHA 5.0

XLS с макросом

FE7CA42EE57CEDAD4E539A01A1C38E22F3A4EDC197D95237E056AF02F252C739

Установщик Inno, защищенный паролем

AD377654518C19BE85FA6BF09570D8D1C8ABA52FFCD83061127851A2DAEF4858

Поддельный файл msimg32.dll

921FB1D6E783A6CA70BD1399EA5A18C78027D3016BEA6881F132A253F3C97ED6