понедельник, 4 июля 2011 г.

Kad.dll или P2P протокол для ботнета TDL4

Kad.dll (MD5: d532084641791ff3db1fbf885120e6e6 VT) это название нового пейлоада для зараженных машин руткитом TDL4, который был предназначен для инжекта в пользовательские процессы (что то вроде cmd32.dll/cmd64), в текущей версии поддерживаются только x86 системы. Появился этот компонент еще в начале года и до сих пор распространяется с кучей отладочных проверок, что наводит на мысли о его маленькой распространенности (подтверждено нашей статистикой) и видимо пока тестировании на небольших группах уже зараженных пользователей.

Библиотека kad.dll базируется на протоколе Kademilia для построения P2P. В основе этого протокола лежит распределенная таблица хешей, посредством которой создается новая абстрактная сеть в рамках которой взаимодействуют зараженные узлы. В отличие от архитектуры клиент-сервер (админка-бот), в рамках P2P сети каждый узел может выступать и в роли бота, и роли админки одновременно.




Ключевым компонентом является список активных узлов (nodes.dat) с которыми осуществляется взаимодействие. Они хранятся в следующем формате:

typedef struct _NODES_DAT_LAYOUT
{
       // Set to zero
       DWORD Reserved0;
// Set to 0x000002
DWORD Reserved1;

// Number of entries in the file
       DWORD NumEntries;
// Array of size NumEntries of NODES_DAT_PEER_INFO structures describing peers
       NODES_DAT_PEER_INFO PeerInfo[1];
} NODES_DAT_LAYOUT, * NODES_DAT_LAYOUT;

typedef struct _NODES_DAT_PEER_INFO
{
       // 128-bit peer identifier (MD4 of node ID)
       BYTE PeerId[16];
// IP address of the peer
DWORD PeerIp;
// Peer UDP port number
       WORD UdpPort;
       // Peer TCP port number
       WORD TcpPort;
BYTE Reserved[10];                           
} NODES_DAT_PEER_INFO, * NODES_DAT_PEER_INFO;

Node Number – MD4(NodeId) – Node IP – UDP port – TCP port

Node 0 - d511064d55cf536fc44d54ff66be0e65 - 190.206.184.33 - d7d6 - c806
Node 1 - 240a064dbb0d505c6940cceee7eaa94f - 60.223.185.155 - 4a33 - 22e1
Node 2 - c608064d4d6280ecdfb89cf923fff18b - 76.126.26.134 - bfa5 - 1236
Node 3 - ec23064d477f245ce057c65d74124241 - 84.57.72.204 - 1240 - 1236
Node 4 - 2d44054ddc8a81729764641883286f78 - 110.35.128.111 - c3a5 - 1551
Node 5 - 8858054d295ccd2879e85af81a816f33 - 58.233.11.235 - ea60 - ea60
Node 6 - 2b44054de8024f7a0bc8f88353173270 - 82.130.139.7 - fa17 - b0d5
Node 7 - b0c0074d2ddb5a8c4bf2fc07aa9d6e8a - 60.209.107.52 - 19fc - 19f2
Node 8 - 15ff074dbb8ddf7cdb13fa90795f7823 - 62.42.138.187 - 1725 - 171b
Node 9 - 375dd041652f639611702b662982cf53 - 114.99.24.23 - 5b17 - 3792
Node 10 - 3ff8f640c45147f904f9115e40349293 - 187.13.191.203 - 217b - 9c96

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


Как видно выше из рисунка, иллюстрирующего передаваемый файл в рамках ботнета, последние 139 байт содержат цифровую подпись от передаваемого файла.

Бот умеет выполнять следующие команды:
kad.SearchCfg – запрос новой версии конфига и выполнение указанных в нем действий
kad.LoadExe – загрузка исполняемого файла и его выполнение
kad.ConfigWrite – запись строки в cfg.ini
kad.search – поиск файла в рамках P2P сети
kad.publish – расшаривание файла в рамках P2P сети
kad.knock – пинг текущей админки

Ну и в качестве заключения, использование P2P алгоритмов для построения ботнетов значительно усложняют закрытие админок, так как по сути с закрытием одной сразу появляется другая.

З.Ы.: Более подробно обо всем это читайте в обновленной версии исследовательского отчета "The Evolution of TDL: Conquering x64" revision 1.1