Многофункциональный троянец-бэкдор, предназначенный для заражения Linux. Распространяется аналогично некоторым другим троянцам для данной операционной системы: путем взлома злоумышленниками учетных записей для доступа к атакуемой системе по протоколу SSH, с подбором необходимого пароля. Имеются основания полагать, что в разработке троянца участвовали представители китайской хакерской группы ChinaZ. Троянец статически слинкован со всеми необходимыми ему библиотеками, включая c-ares, zlib.
Троянец поддерживает несколько параметров запуска:
- "-v" - установить режим вывода отладочных сообщений;
- "–front" - при отсутствии данного флага стандартный ввод/вывод будет перенаправлен в /dev/null;
- "–noinstall" - не устанавливать себя в систему;
- "-h" - вывести список возможных параметров (выводится строка "some command : -v --front --noinstall -h");
После запуска Linux.BackDoor.Xnote.1 проверяет, не запущена ли другая копия бэкдора, путем попытки установить блокировку на файл "/tmp/.wq4sMLArXw" и, если таковая была запущена, завершает свою работу.
Установка вредоносной программы в систему осуществляется только в том случае, если она запущена с правами суперпользователя (root): в процессе инсталляции троянец создает свою копию в файл /bin/iptable6, и удаляет исходный файл, из которого он был запущен. Также Linux.BackDoor.Xnote.1 ищет в папке /etc/init.d/ сценарии, начинающиеся со строки "!#/bin/bash", и добавляет после этой строки еще одну строку, обеспечивающую запуск бэкдора.
Перед установкой соединения с управляющим сервером троянец читает образ своего исполняемого файла на диске в поисках строки "XXXXXXXXXXXXXXXX", которая является меткой, обозначающей начало конфигурационного блока. Если метка найдена, бэкдор расшифровывает следующие 0x15A байт с ключом 0x89 с использованием алгоритма XOR. Конфигурационный блок содержит пары «адрес и порт» 5 управляющих серверов и имеет вид:
#pragma pack(push, 1)
struct st_config
{
_BYTE signature[16]; 'XXXXXXXXXXXXXXXX'
char szCnC1[64];
char szCnC2[64];
char szCnC3[64];
char szCnC4[64];
char szCnC5[64];
_WORD CnC1_port;
_WORD CnC2_port;
_WORD CnC3_port;
_WORD CnC4_port;
_WORD CnC5_port;
_BYTE payload2[16];
};
#pragma pack(pop)
Затем троянец начинает последовательный опрос управляющих серверов по списку, продолжающийся до тех пор, пока не будет обнаружен действующий или пока не закончится список. Перед передачей пакетов троянец и управляющий сервер сжимают данные с использованием библиотеки zlib.
Первым пакетом бэкдор отправляет на сервер "LoginInfo" — структуру, содержащую различную информацию об инфицированной системе:
#pragma pack(push, 1)
struct st_logininfo
{
_BYTE cmd; // '0x67'
_DWORD dword1; // '0x9C'
_DWORD dword5; // '0x00'
_BYTE byte9[8];
_DWORD dword11; // '0x02'
_BYTE byte15[136];
_DWORD CpuSpeed;
_DWORD sockname;
char hostname[50];
_DWORD dword194; // '0'
_DWORD delay;
_BYTE XNote[50]; //data from '/etc/.Xserver_note' file
_BYTE CfgPayload[16]; //last 16 bytes of config
char szOS[64];
};
#pragma pack(pop)
Список команд, которые может выполнять троянец:
- установить UUID (Universally Unique Identifier) – уникальный идентификатор инфицированной машины;
- выполнить задачу по работе с файлами;
- обновить исполняемый файл бэкдора;
- запустить командный интерпретатор с заданными параметрами;
- начать атаку SYN Flood;
- начать атаку UDP Flood;
- начать атаку HTTP Flood;
- начать атаку NTP Amplification;
- прекратить DDoS-атаку;
- записать данные в файл "/etc/.Xserver_note";
- запустить сервер portmap;
- запустить прокси-сервер;
- удалить себя.
Если команда подразумевает выполнение какого-либо задания, для его реализации создается дочерний процесс, устанавливающий собственное соединение с управляющим сервером, с использованием которого он получает все необходимые конфигурационные данные и отправляет результаты выполнения задачи.
Так, получив команду на выполнение задачи по работе с файлами, троянец отсылает злоумышленникам информацию о файловой системе инфицированного компьютера (общее количество блоков данных в файловой системе, количество свободных блоков), после чего может выполнить следующие команды:
- перечислить файлы и каталоги внутри указанного каталога;
- отослать на сервер сведения о размере файла;
- создать файл, в который можно будет сохранить принимаемые данные;
- принять файл;
- отправить файл на управляющий сервер;
- удалить файл;
- удалить каталог;
- отправить управляющему серверу сигнал о готовности принять файл;
- создать каталог;
- переименовать файл;
- запустить файл.
Кроме того, троянец может запустить командную оболочку (shell) с заданными переменными окружения и предоставить управляющему серверу доступ к ней:
"TERM=linux";
"SHELL=/bin/bash";
"PS1=\\[\\033[1;30m\\][\\[\\033[0;32m\\]\\u\\[\\033[1;32m\\]@\\[\\033[0;32m\\]\\h
\\[\\033[1;37m\\]\\W\\[\\033[1;30m\\]]\\[\\033[0m\\]# ";
"HISTFILE=/dev/null";
"HOME=/tmp";
"PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:./bin:/tmp:/tmp/bin";
Помимо этого, троянец может запустить на зараженном компьютере SOCKS proxy или собственную реализацию сервера portmap (возможные команды: «Отправить данные», «Удалить созданный portmap», «Создать portmap»).