[Перевод] Новый бэкдор WolfsBane: аналог Gelsemium для Linux от Gelsevirine
Исследователи ESET проанализировали ранее неизвестные бэкдоры Linux, связанные с известным вредоносным ПО для Windows группы Gelsemium.
Исследователи ESET обнаружили несколько образцов бэкдора Linux (их назвали WolfsBane), которые с высокой степенью уверенности можно приписать группе Gelsemium advanced persistent threat (APT). Эта связанная с Китаем группа известна с 2014 года, и до сих пор не было никаких публичных сообщений о том, что Gelsemium использует вредоносное ПО для Linux. Кроме того, исследователи обнаружили еще один бэкдор Linux, который мы назвали FireWood. Но FireWood нельзя однозначно связать с другими инструментами Gelsemium, и его присутствие в проанализированных архивах может быть случайным.
Наиболее примечательные образцы, которые обнаружились в архивах, загруженных на VirusTotal, — это два бэкдора, напоминающие известные вредоносные программы Windows, используемые Gelsemium. WolfsBane — это Linux-аналог Gelsevirine, а FireWood связан с Project Wood. Также были обнаружены другие инструменты, потенциально связанные с деятельностью Gelsemium. Целью обнаруженных бэкдоров и инструментов является кибершпионаж, нацеленный на конфиденциальные данные, такие как системная информация, учетные данные пользователей и определенные файлы и каталоги. Эти инструменты предназначены для поддержания постоянного доступа и скрытного выполнения команд, что позволяет осуществлять длительный сбор данных, избегая обнаружения.
Развитие группы APT, сосредоточенной на вредоносном ПО для Linux, становится все более заметным. Вероятно это связано с улучшениями в сфере безопасности электронной почты и конечных точек Windows, широким использованием инструментов обнаружения и реагирования на конечные точки (EDR) и решением Microsoft отключить макросы Visual Basic for Applications (VBA) по умолчанию. Следовательно, злоумышленники изучают новые пути атак, уделяя все больше внимания эксплуатации уязвимостей в системах с выходом в Интернет, большинство из которых работают на Linux.
Обзор
В 2023 году эти образцы были обнаружены в архивах, загруженных на VirusTotal из Тайваня, Филиппин и Сингапура, вероятно, возникших в результате реагирования на инцидент на скомпрометированном сервере. Ранее Gelsemium атаковал организации в Восточной Азии и на Ближнем Востоке.
Первый бэкдор является частью простой цепочки загрузки, состоящей из дроппера, лаунчера и бэкдора. ESET назвали эту вредоносную программу WolfsBane. WolfsBane является эквивалентом бэкдора Gelsemium Gelsevirine для Linux, а дроппер WolfsBane аналогичен дропперу Gelsemine. Название Gelsemium происходит от названия рода цветковых растений семейства Gelsemiaceae, а Gelsemium elegans — это вид, который содержит токсичные соединения Gelsemine, Gelsenicine и Gelsevirine. ESET выбрал их в качестве названий для трех компонентов этого семейства вредоносных программ. Ранее они уже анализировали Gelsevirine и Gelsemine. Частью проанализированной цепочки атак WolfsBane также является модифицированный пользовательский руткит с открытым исходным кодом — тип программного обеспечения, которое существует в пользовательском пространстве операционной системы и скрывает свою активность.
Второй бэкдор, который FireWood, связан с бэкдором, отслеженным исследователями ESET под названием Project Wood, ранее проанализированным в разделе Project Wood. Его отслеживали до 2005 года и наблюдали, как он эволюционировал в более сложные версии.
Проанализированные архивы также содержат несколько дополнительных инструментов, в основном веб-оболочек, которые позволяют пользователю осуществлять удаленное управление после их установки на взломанный сервер, а также простые служебные инструменты.
Сходство и связи
В этом разделе мы объясняем сходства, которые позволили нам отнести вредоносное ПО WolfsBane к APT-группе Gelsemium, а также устанавливаем связь между бэкдором FireWood и вредоносным ПО Project Wood.
Как WolfsBane связан с Windows Gelsevirine
На основании следующих сходств можно сделать вывод, что бэкдор WolfsBane является версией Gelsevirine для Linux:
Пользовательские библиотеки для сетевого взаимодействия: В версиях для Linux и Windows загружается встроенная пользовательская библиотека для сетевого взаимодействия, причем для каждого используемого протокола связи она своя. Бэкдор получает доступ к функциям библиотеки, вызывая ее create_seesion export/symbol; примечательно, что опечатка seesion одинакова в обеих версиях
Доступ к экспорту create_seesion в версиях бэкдора для Linux (слева) и Windows (справа)
Механизм выполнения команд: Обе версии используют один и тот же механизм для выполнения команд, полученных от C&C-сервера. Бэкдор создает таблицу с хэшами (полученными из названия команды) и соответствующими указателями на функции, которые обрабатывают эти команды. Более подробную информацию можно посмотреть в разделе Технический анализ.
Сравнение имен команд плагинов, обнаруженных в бэкдорах Linux Wolfsbane (слева) и Windows Gelsevirine (справа)
Структура конфигурации: Оба бэкдора используют очень похожую структуру конфигурации. Хотя в версии Linux есть некоторые пропущенные поля и некоторые дополнительные, большинство имен полей совпадают. Например, значение pluginkey, найденное в конфигурации, такое же, как во всех образцах Windows Gelsevirine от 2019 года. Кроме того, значения controller_version в конфигурации версии Linux совпадают со значениями в образцах Gelsevirine.
Использование домена: Домен dsdsei[.]com, используемый версией для Linux, ранее был отмечен исследователями ESET как индикатор компрометации (IoC), связанный с APT-группой Gelsemium.
Связь FireWood с Project Wood
Мы обнаружили сходство кода образца FireWood с бэкдором, используемым в Operation TooHash (SHA-1: ED5342D9788392C6E854AAEFA655C4D3B4831B6B), описанным компанией G DATA, которая считает его частью руткита DirectsX. Исследователи ESET позже назвали этот бэкдор Project Wood. Эти сходства включают:
Соглашения об именовании: Оба используют «Wood» в именовании. Например, структура конфигурации бэкдора FireWood обозначается символом WoodConf, а версии Win32 используют имя мьютекса IMPROVING CLIENT Want Wood To Exit? .
Расширения файлов: Оба образца имеют определенные расширения имен файлов, например, .k2 и .v2 .
Алгоритм шифрования TEA: Реализация алгоритма шифрования TEA с переменным числом раундов одинакова в обоих образцах.
Строки связи с C&C: Оба образца используют одни и те же строки в коде, отвечающем за связь с C&C-сервером, объединенные с помощью операции XOR с одним и тем же однобайтовым ключом (0×26).
Сетевой код: Сетевой код в обоих образцах очень похож.
На основании этих результатов ESET с высокой степенью уверенности оценивает, что бэкдор FireWood является продолжением бэкдора Project Wood для Linux. Связь между бэкдором FireWood и другими инструментами Gelsemium не может быть доказана, и его присутствие в проанализированных архивах может быть случайным.
Технический анализ
Первый архив был загружен на VirusTotal 6 марта 2023 года из Тайваня. Последующие архивы были загружены из Филиппин и Сингапура. Судя по структуре папок, целью, вероятно, был веб-сервер Apache Tomcat, на котором работало неопознанное веб-приложение Java.
Пример структуры архива
Первоначальный доступ
Несмотря на отсутствие конкретных доказательств относительно вектора первоначального доступа, наличие нескольких веб-оболочек (как показано в таблице 1 и описано в разделе «Веб-оболочки»), а также тактики, техники и процедуры (TTP), использовавшиеся APT-группой Gelsemium в последние годы, можно со средней степенью уверенности заключить, что злоумышленники использовали неизвестную уязвимость веб-приложения для получения доступа к серверу.
Веб-шеллы, найденные в проанализированных архивах
SHA-1 | Имя файла | Описание |
238C8E8EB7A732D85D8A 7F7CA40B261D8AE4183D | login.jsp | Модифицированная веб-оболочка AntSword JSP . |
9F7790524BD759373AB5 7EE2AAFA6F5D8BCB918A | yy1.jsp | веб-оболочка icesword . |
FD601A54BC622C041DF0 242662964A7ED31C6B9C | а.jsp | Обфусцированная веб-оболочка JSP. |
Набор инструментов
WolfsBane
Компоненты WolfsBane и цепочка выполнения
Цепочка выполнения WolfsBane
Этап 1: Дроппер WolfsBane
Дроппер для WolfsBane был найден в файле с именем cron, имитирующем легитимный инструмент планирования команд. После выполнения он сначала помещает лаунчер и основной бэкдор в скрытый каталог $HOME/.Xl1 (обратите внимание на использование буквы l), созданный дроппером. Каталог, скорее всего, намеренно назван так, чтобы напоминать X11 — часто используемое имя папки в системе X Window .
Затем дроппер устанавливает персистентность на основе конфигурации системы и контекста выполнения:
Если исполняется от root :
Проверяет наличие пакета systemd .
Если systemd присутствует, записывает файл /lib/systemd/system/display-managerd.service с путем к следующему этапу (WolfsBane launcher) как запись ExecStart. Это гарантирует, что launcher будет запущен как системная служба, поскольку файлы .service в этой папке анализируются во время запуска системы.
Отключает модуль безопасности SELinux, изменяя запись SELINUX в файле конфигурации SELinux с enforcing на disabled.
Содержимое файла display-managerd.service:
[Unit]
Description=Display-Manager
[Service]
Type=simple
ExecStart=
[Install]
WantedBy=multi-user.targetComment
Если systemd отсутствует, дроппер записывает простой bash-скрипт, который запускает лаунчер в файл с именем S60dlump во всех папках автозагрузки rc[1–5].d.
Скрипт, запускающий лаунчер WolfsBane:
#!/bin/bash
/usr/bin/.Xl1/kde
При запуске от имени непривилегированного пользователя в системе на базе Debian:
записывает аналогичный bash-скрипт в файл profile.sh и
добавляет команду /home/www/.profile.sh 2>/dev/null в файлы .bashrc и .profile в домашней папке пользователя, гарантируя автоматический запуск средства запуска Wolfsbane после входа жертвы в систему.
Для других дистрибутивов Linux создается тот же файл profile.sh, но путь к нему добавляется только в .bashrc .
Кроме того, если дроппер запущен с привилегиями root, он удаляет руткит WolfsBane Hider как /usr/lib/libselinux.so и добавляет эту команду в /etc/ld.so.preload, гарантируя загрузку библиотеки руткита во все процессы.
Наконец, дроппер удаляет себя с диска и выполняет следующий этап.
Этап 2: Запуск WolfsBane
Для поддержания постоянства используется небольшой двоичный файл с именем kde, ловко замаскированный под легитимный компонент рабочего стола KDE, чтобы избежать обнаружения и сохранить постоянство. Независимо от метода установки, целью является выполнение этого двоичного файла, основной функцией которого является разбор его встроенной конфигурации и инициирование следующего этапа — бэкдора WolfsBane — из указанного файла в конфигурации.
Этап 3: Бэкдор WolfsBane
Бэкдор WolfsBane, хранящийся в файле с именем udevd, начинается с загрузки встроенной библиотеки и вызова ее экспорта main_session, который содержит основные функции бэкдора. Эта библиотека, названная libMainPlugin.so, аналогична MainPlugin.dll, используемой в версии бэкдора Gelsevirine для Windows.
Подобно версии для Windows, бэкдор WolfsBane использует другие встроенные библиотеки для сетевого взаимодействия. В собранных образцах они называются libUdp.so и libHttps.so, и оба экспортируют символ create_seesion (ошибка написания точно такая же, как в версии для Windows модуля Gelsevirine TCP). Эти общие библиотеки обеспечивают взаимодействие C&C через протоколы UDP и HTTPS соответственно.
Бэкдор шифрует библиотеку libMainPlugin.so с помощью алгоритма RC4 (с ключом, полученным из значения pluginkey в конфигурации) и сохраняет ее в
Бэкдор WolfsBane использует тот же подход, что и его аналог для Windows, для выполнения команд, полученных от его C&C-сервера.
Руткит WolfsBane Hider
Для сокрытия своей деятельности бэкдор WolfsBane использует модифицированный руткит пользовательского пространства BEURK с открытым исходным кодом. Этот руткит располагается в /usr/lib/libselinux.so и использует механизм предварительной загрузки операционной системы для загрузки в новые процессы до других библиотек, добавляя свой путь в файл /etc/ld.so.preload, тем самым позволяя своим функциям перехватывать оригинальные.
Руткит WolfsBane Hider перехватывает многие базовые стандартные функции библиотеки C, такие как open, stat, readdir и access. Хотя эти перехваченные функции вызывают исходные, они отфильтровывают любые результаты, связанные с вредоносным ПО WolfsBane. В отличие от исходного руткита BEURK, который использует встроенный файл конфигурации для фильтрации, разработчики WolfsBane сохранили конфигурацию по умолчанию, но изменили исходный код, чтобы исключить информацию, связанную с жестко закодированными именами файлов исполняемых файлов вредоносного ПО udevd и kde. Кроме того, функции сокрытия сетевого трафика исходного руткита BEURK отсутствуют.
Бэкдор FireWood
Как было сказано выше, бэкдор FireWood в файле с именем dbus является продолжением вредоносного ПО Project Wood для ОС Linux. Проанализированный код позволяет предположить, что файл usbdev.ko является модулем драйвера ядра, работающим как руткит для сокрытия процессов. Бэкдор FireWood взаимодействует с драйверами ядра с помощью протокола Netlink.
FireWood использует файл конфигурации с именем kdeinit, который зашифрован с помощью XOR однобайтовым ключом 0×26.
Выбранные смещения и соответствующие им значения из файла конфигурации бэкдора FireWood
Offset | Значение | Описание |
0×00 | 20190531110402 | Неизвестная временная метка. |
0×28 | АААААААААА | Заполнитель для рабочего каталога бэкдора. |
0×3C | 0.0.0.0 | IP-адрес C&C (если 0.0.0.0, бэкдор использует домен C&C). |
0×66 | asidomain[.]com | Домен C&C. |
0xCC | [scsi_eh_7] | Поддельное имя процесса. |
0×164 | 0×072BA1E6 | Ключ шифрования TEA. |
0×1E0 | 4 | День подключения (бэкдор подключается каждый четвертый день месяца). |
0×1E4 | 5 | Время задержки. |
0×1E8 | 0×0474 | Время подключения (в минутах). |
FireWood переименовывает свой процесс на основе значения в конфигурации.
Чтобы установить постоянство в системе, он создает файл с именем /.config/autostart/gnome-control.desktop. Во время запуска все файлы с расширением .desktop в каталоге /.config/autostart/ анализируются, и выполняются все команды, перечисленные в записи Exec.
Содержимое файла gnome-control.desktop:
[Desktop Entry]
Type=Application
Exec=
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=gnome-calculator
Name=gnome-control
Comment[en_US]=
FireWood взаимодействует со своим C&C-сервером по протоколу TCP, как указано в его конфигурации. Все данные шифруются с использованием алгоритма шифрования TEA с переменным количеством раундов. Ключ шифрования и количество раундов указаны в файле конфигурации FireWood, как показано в таблице.
Структура отправленных и полученных сообщений показана ниже. Результат выполнения команды зависит от типа команды, но обычно 0×10181 указывает на успех, а 0×10180 — на ошибку.
struct data{
DWORD commandID_or_return_code_value ;
BYTE data [];
}
Этот бэкдор способен выполнять несколько команд.
Команды бэкдора FireWood
Идентификатор команды | Описание |
0×105 | Загрузить исполняемый файл с C&C в |
0×110 | Выполнить команду оболочки с помощью функции popen . |
0×111 | Изменить значение времени соединения в конфигурации. |
0×112 | Скрыть процесс с помощью модуля ядра usbdev.ko . |
0×113 | Изменить время задержки в конфигурации. |
0×114 | Изменить значение дня подключения в конфигурации. |
0×132 | Прибрать за собой и выйти. |
0×181 | Вывести список содержимого указанного каталога. |
0×182 | Перенести указанный файл на C&C-сервер. |
0×183 | Удалить указанный файл. |
0×184 | Переименовать указанный файл. |
0×185 | Исполнить указанный файл с помощью функции system. |
0×186 | Загрузите файл с C&C-сервера. |
0×189 | Переместить указанную папку на C&C-сервер. |
0×193 | Загрузить указанный модуль ядра или общую библиотеку. |
0×194 | Выгрузить указанный модуль ядра или разделяемую библиотеку. |
0×19F | Изменить указанную временную метку файла. |
0×200 | Удалить указанный каталог. |
0×201 | Прочитать содержимое указанного файла и отправить его на сервер управления и контроля. |
0×1018F | Найти указанный файл в папке, указанной в команде. |
Другие инструменты
ESET обнаружили в архивах два дополнительных инструмента, которые могут быть связаны с активностью Gelsemium: похититель паролей SSH и небольшой инструмент повышения привилегий.
Похититель паролей SSH — это клиент SSH на основе программного обеспечения OpenSSH с открытым исходным кодом, модифицированный для сбора учетных данных SSH пользователей, необходимых для аутентификации доступа пользователя к серверу. Злоумышленники заменили исходный двоичный файл клиента SSH в /usr/bin/ssh на троянизированную версию. Хотя он функционирует как обычный клиент SSH, он сохраняет все данные для входа в формате
Инструмент повышения привилегий — это небольшой двоичный файл с именем ccc, который просто повышает привилегии пользователя, устанавливая UID и GUID контекста выполнения на 0 и запуская программу по пути, полученному в качестве аргумента. Для выполнения этой техники пользователь должен иметь привилегии root, чтобы заранее добавить разрешение SUID к этому исполняемому файлу, что делает его инструментом для поддержания привилегий, а не для их получения.
Веб-оболочки
login.jsp — это модифицированная веб-оболочка AntSword JSP, которая выполняет байт-код Java от злоумышленников. Полезная нагрузка, файл класса Java, закодирована в base64 в параметре tiger запроса HTTP POST. Оригинальная веб-облочка также поддерживает удаленный терминал, файловые операции и операции с базами данных.
Веб -оболочка yy1.jsp, которую идентифицировали как icesword JSP, взята с интернет-форумов, в основном на китайском языке. Веб-оболочка icesword JSP имеет полный графический пользовательский интерфейс в своем серверном коде, что позволяет ей отображать GUI в браузере злоумышленника. Она не обфусцирована и собирает системную информацию, выполняет системные команды и выполняет файловые операции. Она также подключается к базам данных SQL на скомпрометированном хосте и выполняет SQL-запросы.
Веб -оболочка a.jsp, похожая на login.jsp, но обфусцированная, содержит двоичную полезную нагрузку Java, зашифрованную AES с ключом 6438B9BD2AB3C40A, а затем закодированную в base64. Полезная нагрузка предоставляется в параметре Tas9er.
Обфускация включает в себя мусорные комментарии, \u-экранированные строки Unicode (которые сложнее читать), а также случайные строковые переменные и имена функций. Результат, закодированный в base64 и вставленный в строку 1F2551A37335B564
Заключение
Это первый публичный отчет, документирующий использование вредоносных программ для Linux группой Gelsemium. Тенденция перемещения вредоносного ПО на системы Linux, похоже, набирает силу в экосистеме APT. Это развитие можно объяснить несколькими достижениями в области безопасности электронной почты и конечных точек. Постоянно растущее внедрение решений EDR, наряду со стратегией Microsoft по умолчанию, отключающей макросы VBA, приводит к сценарию, в котором злоумышленники вынуждены искать другие потенциальные пути атаки.
В результате уязвимости, присутствующие в инфраструктуре, выходящей в Интернет, особенно в системах на базе Linux, становятся все более целевыми. Это означает, что эти системы Linux становятся новыми предпочтительными целями.