Троянец, созданный китайскими вирусописателями и предназначенный для организации DDoS-атак. Является Windows-совместимой версией вредоносной программы семейства Linux.DnsAmp.
Дроппер
Читает 0x90 байт с конца файла, после чего расшифровывает их с помощью алгоритма RC4 с ключом {F918FE01-164A-4e62-9954-EDC8C3964C1B}. Расшифрованные данные имеют следующую структуру:
struct DROP_INFO
{
char szFirstDrop[0x40]; // имя первого файла
DWORD dwFirstDropData; // смещение до первого файла
DWORD dwFirstDropSize; // размер первого файла
char szSecondDrop[0x40]; // имя второго файла
DWORD dwSecondDropData; // смещение до второго файла
DWORD dwSecondDropSize; // размер второго файла
}
Данные файлов располагаются по смещениям: "dwSecondDropData - dwFirstDropData" и "Filesize + 0x90 – dwSecondDropData". Далее дроппер расшифровывает файлы с помощью алгоритма RC4 с ключом {E5A42E7E-8130-4f46-BECC-7E43235496A6} для первого файла и ключом {ADAB6D32-3994-40e2-8C18-2F226306408C} для второго. Файлы сохраняются в папку %TEMP%, после чего запускаются.
Один из файлов является троянцем Trojan.DnsAmp.1
Установка
Устанавливает себя в систему под видом автоматически запускающейся службы с именем Windows Test My Test Server 1.0, создает собственную копию в папке %System32% под именем vmware-vmx.exe. После запуска проверяет текущую дату: если она ранее 2013-02-21, троянец бездействует.
Вредоносный функционал
Установив соединение с двумя командными серверами, отправляет туда собранную информацию о системе. Если на инфицированном компьютере используется ОС Windows 7 или Windows NT, то отправляемые данные будут иметь вид структуры PC_INFO_WIN7, для остальных версий ОС Windows данные будут иметь вид структуры PC_INFO.
struct PC_INFO
{
DWORD signature; //"UU\t"
char szOSVersion[16]; //версия ОС
DWORD dwSpuSpeed; //скорость CPU в МГц
BYTE dummy[492]; //нули
}
struct PC_INFO_WIN7
{
DWORD signature; //"UU\t"
char szOSVersion[16]; //версия ОС
BYTE dummy[48]; //нули
DWORD dwSpuSpeed; //скорость CPU в МГц
BYTE dummy1[444]; //нули
}
Значение szOSVersion может являться одной из следующих строк:
Windows NT
Windows 7
Windows Server 2008
Windows Vista
Windows Server 2003
Windows XP
Windows Server 2000
Отдельным потоком отправляет на сервер информацию о количестве переданных байтов через сетевые интерфейсы. Данные, отправляемые этим потоком, имеют вид:
struct PC_INFO_NETWORK_DATA
{
DWORD signature; // "ИИ\b"
DWORD dwPacketsCount; // Вычисленное количество переданных байт
BYTE dummy[508]; //нули
}
Может загружать и запускать другие вредоносные приложения. После отправки данных троянец ожидает поступления команд от управляющего сервера. Принимаемые пакеты имеют вид:
struct CMD_PACKET
{
DWORD Cmd; //команда
BYTE Parameter[512]; //параметр для выполнения команды
}
Возможны три команды:
Cmd | Команда | Комментарий |
---|---|---|
0x88 | Начать DDoS | |
0x99 | Остановить DDoS | Сбрасывается флаг DDoS |
0x77798 | Загрузить и запустить на исполнение файл |
При поступлении команды начать DDoS-атаку троянец проверяет текущее состояние соответствующего флага: если атака уже идет, команда игнорируется.
Формат параметра для DDoS команды имеет следующий вид:
struct DDOS_PARAMS
{
char szHost; // С-строка содержащая IP адрес для атаки
DWORD dummy[95]; //нули
WORD wPort; // порт хоста, на который будет осуществлена атака
WORD dummy2; // нули
DWORD dwDuration; // длительность DDoS атаки в секундах
DWORD dwThreadsCount; //количество потоков для DDoS атаки
DWORD dwType; // тип DDoS атаки
DWORD dwFlag; // дополнительный флаг, имеет разное значение при различных видах атак
}
Поддерживаемый тип атак
Cmd | Тип атаки |
---|---|
0x01 | Syn Flood |
0x02 | Syn Flood |
0x03 | UDP Flood |
0x04 | Ping Flood |
0x05 | HTTP Get Flood |
При портировании троянца с ОС Linux на ОС Windows авторы отказались от использования атаки типа DNS Amplification, заменив её на атаку типа HTTP Get Flood.
Загрузка файлов
Для скачивания файлов троянец загружает в память библиотеку urlmon.dll и получает адрес функции URLDownloadToFileA. Ссылка на скачивание файла находится по нулевому смещению параметра Parameter структуры CMD_PACKET.
Файл скачивается в папку %TEMP%, при этом имя файла формируется следующим образом:
DWORD GetRnd(DWORD modulus)
{
DWORD dwTicks;
dwTicks = GetTickCount();
return ticks * (rand() + 3) % modulus;
}
...
dwRnd0 = GetRnd(26u) + 97;
dwRnd1 = GetRnd(26u) + 97;
dwRnd2 = GetRnd(26u) + 97;
dwRnd3 = GetRnd(26u) + 97;
dwRnd4 = GetRnd(26u) + 97;
wsprintfA(wszFileName, "%c%c%c%c%c.exe", dwRnd4, dwRnd3, dwRnd2, dwRnd1, dwRnd0);
strcat(szTmpDir, szFileName);