Linux.BackDoor.Xunpes.1 - многофункциональный бэкдор для Linux


Linux.BackDoor.Xunpes.1 - многофункциональная троянская программа-бэкдор, заражающий работающие под управлением ОС Linux устройства.

Вредонос обладает широчайшим спектром возможностей, среди которых:

  • функции загрузки на инфицированное устройство различных файлов;
  • выполнение операций с файловыми объектами;
  • создание снимков экрана;
  • отслеживание нажатий клавиш и многое другое.


Состоит Linux.BackDoor.Xunpes.1 из дроппера и собственно бэкдора, выполняющего на зараженном устройстве основные шпионские функции.

Дроппер написан с использованием открытой среды разработки Lazarus для компилятора Free Pascal. При своем запуске он демонстрирует диалоговое окно с упоминанием устройств, предназначенных для выполнения операций с криптовалютой Bitcoin:

Dialogovoe okno Linux.BackDoor.Xunpes.1

При вводе произвольных значений (кроме нескольких зашитых в теле трояна) на экране последовательно отобразятся надписи

  • "Initializing", "Connecting", "Signing in".


После этого появится сообщение:

  • "Incorrect user ID or password. Please try again".


Если пользователь введет заранее предусмотренные злоумышленником логин и пароль из следующего списка:

  • jaume/gFh340mbCVd
  • madrenes/fgdDgbf028fnFf
  • chen/jh8aDhbdjgg9db

тогда троян выведет сообщение:

  • "An error occurred while attempting to login: invalid user token".


В теле данного дроппера в незашифрованном виде хранится второй компонент трояна — бэкдор, который при запуске дроппера сохраняется в папку /tmp/.ltmp/. Именно он выполняет основные вредоносные функции на зараженном устройстве.

Запустившись на исполнение, бэкдор расшифровывает конфигурационные строки, зашифрованные с использованием алгоритма RC4. При этом ключ зашит в теле трояна. Конфигурация содержит следующие структуры:

Konfiguracionniy file backdoor Linux.BackDoor.Xunpes.1

  • serversList: список управляющих серверов, к которым будет осуществляться попытка подключения;
  • proxyList: список прокси-серверов, через которые может быть осуществлено подключение;
  • Salt: строка, используемая при генерации пароля;
  • bitMask: число, в котором проверяются определенные биты и при установке их значения в «1» выполняется определенные действия при инициализации.

Значения битов:
          bit         Значение

  • 0x1       - создать собственную копию в месте, указанном значением поля pathToExe в конфигурации
  • 0x2       - обработать параметр -m : -m file удаляет файл или папку file
  • 0x4       - открыть свой исполняемый файл на чтение/запись
  • 0x8       - установить автозапуск через $HOME/.config/autostart
  • 0x10     - установить автозапуск через crontab
  • 0x20     - открыть /tmp/$tmpLockFileName и заблокировать его на запись
  • 0x40     - запустить поток с кейлогером
  • 0x80     - выполнить команду fork/chdir
  • 0x100   - добавить в список используемых прокси-серверов системные прокси
  • 0x400   - при подключении к серверу сначала пытаться соединиться через прокси
  • 0x800   - соединяться только через прокси


В папке с исполняемым файлом создается файл .default.conf, который хранит следующую структуру:

struct conf{
    int32 magic; //0DE03C44h
    char hostid[32];
    char group[32];
}


После расшифровки конфигурационного файла и завершения инициализации бэкдор соединяется с одним из управляющих серверов, отсылает на него ключ и приступает к выполнению команд. Всего Linux.BackDoor.Xunpes.1 способен выполнять более 40 команд. Все сообщения, кроме команды, имеющей id=5, поступают с управляющего сервера в зашифрованном виде.

список команд:
          id       Действия

  • 5     - Получить ключ от сервера для расшифровки последующих сообщений. Единственное сообщение, которое приходит в открытом виде. Помимо ключа содержит в себе еще и буфер, отправленный бэкдором при подключении и зашифрованный с использованием присланного ключа;
  • 7      - Закрыть все открытые файлы и обнулить ключи шифрования. Фактически, это команда прекращения сессии;
  • 8      - Удалить себя из автозагрузки и выключиться;
  • 9      - Установить в файле конфигурации поле HostId;
  • 10    - Установить в файле конфигурации поле group;
  • 11    - Сделать HTTP-запрос, сохранить полученный файл в папку /tmp/ и выполнить его;
  • 12    - Запустить файл, путь и аргументы для которого приходят с сервера, при этом сам бэкдор завершается;
  • 13    - Завершить сессию и выключиться;
  • 14    - Сделать HTTP-запрос, сохранить полученный файл в папку /tmp/ . Будет выполнен файл или нет, устанавливает сервер;
  • 17    - Выслать список файлов и папок в указанной директории (без открытия папок);
  • 19    - Запустить поток, который будет искать в указанной папке файлы, удовлетворяющие переданной маске и отправлять их на сервер до получения команды остановки этого потока;
  • 21    - Остановить поток-загрузчик файлов;
  • 22    - Открыть файл, сохранить handle под номером index и отправить содержимое файла на сервер;
  • 23    - Выполнить запись в файл, handle которого лежит под номером index;
  • 25    - Скопировать файл;
  • 26    - Выполнить системный вызов создания нового процесса и запустить новый процесс;
  • 27    - Переименовать файл;
  • 28    - Удалить файл;
  • 29    - Создать папку;
  • 30    - Удалить папку;
  • 31    - В зависимости от значения первых 4 байтов либо создать новую папку, либо выслать список файлов в папке (рекурсивно);
  • 33    - Создать zip-архив с указанной папкой;
  • 35    - Запустить поток, выполняющий команды bash;
  • 36    - Отправить команду в поток, выполняющий команды bash;
  • 37    - Остановить поток, выполняющий команды bash;
  • 39    - Выслать информацию о машине и файл .default.conf;
  • 41    - Прочитать информацию из utmp;
  • 45    - Убить процесс по его pid;
  • 46    - Получить заголовок текущего окна;
  • 47    - Закрыть указанное окно (послать ему событие типа ClientMessage : _NET_CLOSE_WINDOW);
  • 48    - Отправить на сервер содержимое папки /usr/share/applications/ - файлы автозагрузки;
  • 50    - Сделать HTTP-запрос, сохранить полученный файл в папку /tmp/ . Будет выполнен файл или нет, устанавливает сервер;
  • 52-53 - Сгенерировать событие KeyPressed;
  • 54    - Сгенерировать событие ButtonRelease;
  • 56    - Сделать скриншот экрана и отослать на сервер;
  • 59    - Если запущен кейлоггер, то отправить на сервер список файлов, которые он создал;
  • 61    - Получить размер файла, созданного кейлогером;
  • 62    - Удалить файл, созданный кейлогером;
  • 63    - Отправить на сервер содержимое файла, созданного кейлогером;
  • 67    - Получить из /proc информацию об открытых сокетах и послать на сервер.