SHA1: 2b82c715c2f1480b57e59bd7c55ef32db312e008
c05bd53f91032f2c8cae509477d760537f014621
Вредоносная программа для ОС Linux, предназначенная для загрузки на инфицированное устройство различных файлов, также известна как «TheMoon». Исследованные образцы имели имя файла ".nttpd". Для хранения своего PID троянец использует файл ".nttpd.pid" следующего содержания:
<pid>,<module_id>
Для головного модуля module_id == 17.
После успешного запуска удаляет собственный исходный файл и добавляет в iptables следующие правила:
"INPUT -p tcp --dport 8080 -j DROP"
"INPUT -p tcp --dport 443 -j DROP"
"INPUT -p tcp --dport 80 -j DROP"
"INPUT -p tcp --dport 23 -j DROP"
"INPUT -p tcp --dport 22 -j DROP"
"INPUT -s 46.148.18.0/24 -j ACCEPT"
"INPUT -s 185.56.30.0/24 -j ACCEPT"
"INPUT -s 217.79.182.0/24 -j ACCEPT"
"INPUT -s 85.114.135.0/24 -j ACCEPT"
"INPUT -s 95.213.143.0/24 -j ACCEPT"
"INPUT -s 185.53.8.0/24 -j ACCEPT"
Тем самым эффективно блокируется возможность заражения устройства другими троянцами.
Далее троянец запускает в отдельных потоках три функции, осуществляющие основную вредоносную деятельность:
clk
net
dwl
clk
Эта функция запускает два дочерних потока. Первый поток в бесконечном цикле подсчитывает время непрерывной работы троянца, второй – каждый час устанавливает соединение с управляющим сервером, перебирая список «зашитых» в теле троянца IP-адресов командных узлов до тех пор, пока не найдет работающий. Для отправки данных на управляющий сервер используется буфер размером 48 байт, где все байты равны 0, а самый первый – 0x23. В качестве ответа троянец ожидает буфер такого же размера, откуда извлекается предпоследнее значение DWORD, к которому прибавляется 0x7C558180. Полученное число должно быть значением текущего времени.
net
Функция, реализующая механизм добавления нового управляющего сервера для троянца (в дополнение к «зашитым» в его теле), а также получения информации для обновления модулей.
Троянец открывает порт 5142 с помощью iptables:
INPUT -p udp --dport %u -j ACCEPT
после чего запускает поток, в котором слушает этот порт. Троянец ожидает поступления пакета размером 263 байта, который имеет следующую структуру:
Смещение | Данные |
---|---|
0x00 | Размер пакета |
0x01 | Номер функции (0 или 1) |
0x02 | Определяет, следует ли отправлять подтверждение регистрации |
0x03 | 0x8E |
0x04+ | Данные пакета |
В первую очередь троянец выполняет регистрацию, для этого принимается пакет следующего вида:
Смещение | Данные |
---|---|
0x00 | 0x08 |
0x01 | 0x00 |
0x02 | Определяет, следует ли отправлять подтверждение регистрации |
0x03 | 0x8E |
0x04 | DWORD со значением 0x6D6163F3 |
Троянец сохраняет значение IP-адреса, с которого поступил пакет, и значение, равное dwIp % 0x64. Если был установлен третий байт, тогда вредоносная программа отправляет в ответ точно такой же буфер. Кроме того, она может передавать на сервер управляющие пакеты:
Смещение | Данные |
---|---|
0x00 | 0x0C |
0x01 | 0x00 |
0x02 | Игнорируется |
0x03 | 0x8E |
0x04 | DWORD со значением 0x6D6163F3 |
0x08 | Игнорируется |
0x0C | IP-адрес, на который отправляется пакет |
Если значение DWORD по смещению 0x0C отлично от нуля, троянец отправляет пакет-запрос регистрации на указанный IP-адрес, иначе посылает пакет на тот IP-адрес, с которого была получена команда.
Пакет с информацией о модуле имеет следующую структуру:
Смещение | Данные |
---|---|
0x00 | <= 0x14 |
0x01 | 0x01 |
0x02 | Игнорируется |
0x03 | 0x8E |
0x04 | st_module |
По смещению 0x04 хранится следующая структура:
struct st_module
{
_DWORD dwip;
_DWORD module_id;
_DWORD size;
char filename[8];
};
Троянец проверяет, имеется ли IP-адрес из данной структуры в списке зашитых в тело вредоносной программы адресов или в списке зарегистрированных, после чего копирует структуру себе в память, откуда она передается потоку dwl.
dwl
Ожидает, пока поток net заполнит структуру st_module. Как только структура заполнилась, формирует имя pid-файла:
StModule->filename + ".pid"
и проверяет через наличие этого файла, запущен ли соответствующий модуль (сверяется как имя, так и идентификатор модуля). Если модуль уже запущен, «убивает» его процесс.
Затем троянец устанавливает TCP-соединение с StModule->dwip и отправляет ему следующую строку:
StModule->filename,StModule->module_id
В ответ сервер высылает модуль. Троянец его сохраняет в файл StModule->filename, устанавливает права 448 и запускает на выполнение.