Троянская программа для ОС Linux, предназначенная для выполнения DDoS-атак, написана на языке С++/STL, упакована UPX.
В процессе установки считывает линк:
/proc/self/exe
определяет путь к собственному запущенному файлу, из него получает текущую директорию программы. Создает собственную копию и запускается со следующими параметрами:
cp /home/user/hihjok /home/user/freeBSD
/home/user/freeBSD /home/user/freeBSD 1
cp /home/user/hihjok /home/user/hihjoka
/home/user/hihjoka
После запуска удаляет свой текущий файл, из собственного тела извлекает другой файл и сохраняет его вместо исходного, изменяет IP-адрес и порт управляющего сервера в файле в зависимости от параметров запуска.
Троянец запускается в инфицированной системе как демон, инициализирует конфигурационный файл fake.cfg:
0
0.0.0.0:0.0.0.0
10000:60000
Получает информацию об инфицированной системе и отправляет её на сервер в виде запроса:
#pragma pack(push,1)
struct OS_INFO{
DWORD MHz; // /proc/cpuinfo cpu MHz
BYTE is_count;
DWORD ip1;
DWORD ip2;
WORD port1;
WORD port2;
BYTE os_name[0x80];
BYTE host[0xFF];
};
#pragma pack(pop)
В ответ получает значение DWORD op;
Если op = 1 троянец получает задание LookTask. Определив размер DWORD size, бот загружает данные и ставит задачу в очередь на выполнение:
#pragma pack(push,1)
struct CLoopTask{
BYTE byte0;
BYTE byte1;
BYTE byte2;
BYTE byte3;
DWORD max2;
DWORD SomeTime;
DWORD max1;
CSubTask SubTask[];
};
#pragma pack(pop)
Если op = 2 – выполняется остановка задачи. На управляющий сервер отправляется статус задачи:
#pragma pack(push,1)
struct TASK_STATUS{
DWORD max;
DWORD index1;
DWORD index2;
BYTE op;
DWORD size;
WORD fw1;
DWORD CPUUse;
DWORD NetUse;
};
#pragma pack(pop)
Если op = 3 – выполняется получение конфигурационных данных с управляющего сервера, содержащих сведения о задаче, данные сохраняются в fake.cfg.
#pragma pack(push, 1)
struct CSubTask{
BYTE op; //тип DDoS
BYTE byte1;
BYTE byte2;
BYTE byte3;
DWORD max;
WORD port;
WORD w2;
DWORD dwordC;
DWORD time2;
DWORD time1;
DWORD dword18;
DWORD dword1C;
WORD port1;
WORD port2;
DWORD ip1;
DWORD ip2;
DWORD count;
char Host[];
};
#pragma pack(pop)
Если op = 4 выполняется отправка статуса выполнения задания TASK_STATUS.
Кроме основного цикла общения с сервером, троянец имеет 19 тредов, которые слушают очередь заданий SubTask.op, определяющих тип атаки:
- 0x80 - tcp flood 1
- 0x81 - udp flood
- 0x82 - tcp flood 2
- 0x83 - amp 1 (dns)
- 0x84 - amp 2(dns)