Поддержка
Круглосуточная поддержка

Позвоните

Бесплатно по России:
8-800-333-79-32

ЧаВо | Форум

Ваши запросы

  • Все: -
  • Незакрытые: -
  • Последний: -

Позвоните

Бесплатно по России:
8-800-333-79-32

Свяжитесь с нами Незакрытые запросы: 

Профиль

Профиль

Linux.BackDoor.Gates.5

Добавлен в вирусную базу Dr.Web: 2014-05-22

Описание добавлено:

Вредоносная программа, ориентированная на 32-разрядные дистрибутивы Linux, сочетает в себе функции бэкдора и DDoS-бота. Состоит из двух функциональных модулей: основной представляет собой бэкдор, способный выполнять поступающие команды, второй предназначен для осуществления DDoS-атак. Общение между модулями осуществляется путем открытия порта на зараженном компьютере, при этом номер порта «зашит» в теле бэкдора.

В процессе своей работы Linux.BackDoor.Gates.5 собирает и передает злоумышленникам следующую информацию об инфицированном компьютере:

  1. Количество ядер CPU (читает из /proc/cpuinfo).
  2. Скорость CPU (читает из /proc/cpuinfo).
  3. Использование CPU (читает из /proc/stat).
  4. IP Gate'a (читает из /proc/net/route).
  5. MAC-адрес Gate'a (читает из /proc/net/arp).
  6. Информацию о сетевых интерфейсах (читает из /proc/net/dev).
  7. MAC-адрес сетевого устройства.
  8. Объем памяти (используется параметр MemTotal из /proc/meminfo).
  9. Объем переданных и полученных данных (читает из /proc/net/dev).
  10. Название и версию ОС (с помощью вызова команды uname).

После своего запуска Linux.BackDoor.Gates.5 проверяет путь к папке, из которой он был запущен:

%curdir%/getty
usr/bin/getty
/bin/netstat
/bin/lsof
/bin/ps
/usr/bin/netstat
/usr/bin/lsof
/usr/bin/ps
/usr/sbin/netstat
/usr/sbin/lsof
/usr/sbin/ps

Если путь запуска бэкдора отличен от путей утилит netstat, lsof, ps, то запускает себя как демон. После этого запускает процедуру инициализации, в процессе которой расшифровывает из своего тела конфигурационный файл, имеющий следующую структуру:

struct CONFIG
{
    std::string g_strConnTgt;
    DWORD g_iGatsPort;
    DWORD g_iGatsIsFx;
    DWORD g_iIsService;
    std::string g_strBillTail;
    std::string g_strForceNote;
    std::string g_bDoBackboor;
    std::string g_strCryptStart;
    std::string g_strDStart;
    std::string g_strNStart;
};

В зависимости от значения параметра g_iGatsIsFx в конфигурационном файле троянец либо самостоятельно соединяется с управляющим сервером, либо связывает сокет с портом, указанным в параметре g_iGatsPort, и ожидает входящего соединения. Бэкдор имеет функционал для обновления. В получаемой команде содержится ссылка на скачивание обновления. Файл сохраняется в /tmp/%d, где %d - случайное число.

Установка

При запуске троянец проверяет файл /tmp/moni.lock, если он не пустой, то читает записанное в него значение (PID процесса) и «убивает» этот процесс. Далее проверяет, запущен ли DDoS-модуль. Проверка осуществляется попыткой связывания (бинда) сокета с определенным портом. Если попытка не удалась, модуль считается запущенным. Тогда бэкдор считывает PID DDoS модуля из файла /tmp/bill.lock и «убивает» этот процесс.

Затем троянец создает файл с именем, состоящим из имени запущенного файла и значения g_strBillTail из конфигурационного файла, в него записывается 0x5651C байт из тела бэкдора по смещению 0x81583. Этот файл является DDoS-модулем. Если в файле конфигурации установлен специальный флаг g_iIsService, то троянец прописывает себя в автозагрузку, записывая строку #!/bin/bash\n<path_to_backdoor> в файл /etc/init.d/, после чего Linux.BackDoor.Gates.5 создает следующие символические ссылки:

ln -s /etc/init.d/DbSecuritySpt /etc/rc1.d/S97DbSecuritySpt
ln -s /etc/init.d/DbSecuritySpt /etc/rc2.d/S97DbSecuritySpt
ln -s /etc/init.d/DbSecuritySpt /etc/rc3.d/S97DbSecuritySpt
ln -s /etc/init.d/DbSecuritySpt /etc/rc4.d/S97DbSecuritySpt

Если в конфигурационном файле установлен флаг g_bDoBackdoor, троянец проверяет также наличие у своего процесса прав root, для чего пытается открыть файл /root/.profile.

Далее проверяется, запущен ли процесс самого бэкдора. В качестве .lock-файла бэкдора используется файл /usr/bin/bsd-port/getty.lock, в который записывается PID бэкдора при запуске. Если процесс запущен, он «убивается». Бэкдор копирует себя в /usr/bin/bsd-port/getty и запускает.

На финальном этапе установки Linux.BackDoor.Gates.5 создает еще одну собственную копию в папке /usr/bin/ с именем, записанным в конфигурационном файле в качестве значения параметра g_strForceNote, а также замещает собой следующие утилиты:

/bin/netstat
/bin/lsof
/bin/ps
/usr/bin/netstat
/usr/bin/lsof
/usr/bin/ps
/usr/sbin/netstat
/usr/sbin/lsof
/usr/sbin/ps

На этом процесс установки троянца завершается и вызывается функция для выполнения его основных задач.

Полезная нагрузка

Троянец также стартует на инфицированном компьютере как демон, после чего производит расшифровку конфигурационного файла и выполняет инициализацию. Проверяет, запущены ли его компоненты путем чтения соответствующего .lock-файла (и, если нет, запускает их), однако в разных случаях использует разные имена для сохранения файлов и регистрации себя в автозагрузке. В зависимости от пути запуска либо ожидает входящих команд от управляющего сервера, либо устанавливает с ним связь самостоятельно. Троянец запускает два потока, один из которых с периодичностью 6000 мс проверяет, работает ли бэкдор (путем проверки /tmp/gates.lock) и, если не работает, запускает его. Второй поток проверяет, запущен ли DDoS-модуль (попыткой бинда сокета на заданный порт) и, если не запущен, запускает его.

Установив связь с командным сервером, Linux.BackDoor.Gates.5 получает от него конфигурационные данные с заданием, которое должен выполнить бот. По команде злоумышленников троянец способен осуществить автообновление, начать или прервать DDoS-атаку на удаленный узел с заданным IP-адресом и портом, выполнить команду из блока конфигурационных данных или установить соединения для выполнения других команд с удаленным узлом, имеющим заданный IP-адрес.

Управляющий пакет от сервера имеет вид структуры TASK:

struct IP_LIST
{
    char szIP[0]; //C-строка, содержащая IP-адрес для DDoS-атаки
    WORD wPort; //Порт
}
struct SUBTASK
{
    DWORD Cmd;
    BYTE Type; //тип DDoS атаки
    BYTE byte05;
    BYTE byte06;
    BYTE dummy; //0x00
    DWORD dword08;
    BYTE byte0C;
    BYTE byte0D;
    WORD word0E;
    WORD word10;
    WORD word12;
    BYTE byte14;
    BYTE byte15;
    BYTE dummy2[2]; //0x00
    DWORD dword18;
    DWORD dword1C;
    DWORD dwThreadCount; //количество потоков для DDoS атаки
    DWORD dword24;
    char szDomens[0]; //C-строка содержащая список доменов, разделенных ','
    DWORD dwIPCount; //Количество структур IP_LIST
    struct IP_LIST[0]; //Пары IP:порт для DDoS'а
};
struct TASK
{
    DWORD Cmd;
    DWORD Size;
    BYTE Data[0x0D];
    DWORD dword15;
    DWORD dword19;
    DWORD dwSubTaskCount; //количество структур SUBTASK в команде
    struct SUBTASK[0];
};

Для поддержания соединения используется упрощенная структура:

struct TASK_ping
{
    DWORD Cmd; // 0x04
    DWORD Size; // 0x00
}

В зависимости от значения CMD-структуры TASK может выполнять следующие команды:

CmdКоманда
0x02Остановить обновление
0x03Выполнить команду из конфигурационного файла
0x05Выполнить обновление
0x09Открыть бэкдор для IP-адреса, указанного в поступившей команде

Связь с управляющим сервером

Установка соединения с управляющим сервером осуществляется в два этапа. На первом этапе троянец отправляет на сервер пакет длинной 119 байт, который содержит информацию о конфигурации (данные конфигурационного файла, данные системы).

0000000000: 01 00 00 00 6F 00 00 00 │ 00 F4 01 00 00 32 00 00  ☺   o    ф☺  2
0000000010: 00 E8 03 00 00 00 00 00 │ 00 00 00 00 00 00 00 00   и♥
0000000020: 00 01 00 01 02 00 00 00 │ 01 00 00 00 C0 A8 00 C8   ☺ ☺☻   ☺   АЁ И
0000000030: C0 A8 00 C8 C0 A8 00 C8 │ C0 A8 00 C8 C0 A8 00 C8  АЁ ИАЁ ИАЁ ИАЁ И
0000000040: FF FF 01 00 00 00 00 00 │ 6D 6D 3A 00 01 00 00 00  яя☺     mm: ☺
0000000050: B8 0B 00 00 E9 03 00 00 │ 4C 69 6E 75 78 20 33 2E  ё♂  й♥  Linux 3.
0000000060: 31 33 2E 30 2D 32 34 2D │ 67 65 6E 65 72 69 63 00  13.0-24-generic
0000000070: 47 2D 31 2E 39 30 00    │                          G-1.90

На этот пакет сервер отвечает 20-байтным пакетом:

0000000000: 08 00 00 00 0C 00 00 00 │ 00 00 00 00 00 00 00 00  ◘   ♀
0000000010: E8 FD 00 00             │                          ??

Пакет состоит их трех частей. Первая часть имеет размер 4 байта и содержит команду. Вторая часть — 4 байта, которые читаются как DWORD. Данный DWORD представляет собой размер последующего пакета (3-й части пакета). 3-я часть представляет собой конфигурационный блок с заданием, которое должен выполнить клиент.

Далее начинается обмен пакетами для поддержания соединения. В случае отсутствия команды от сервера вторые 4 байта равны нулю (т. е. размер пакета с командой устанавливается в 0 и прием команды пропускается).

Рекомендации по лечению


Linux

На загруженной ОС выполните полную проверку всех дисковых разделов с использованием продукта Антивирус Dr.Web для Linux.

Демо бесплатно

На 1 месяц (без регистрации) или 3 месяца (с регистрацией и скидкой на продление)

Скачать Dr.Web

По серийному номеру