Заметка Операция Lahat: новая группа Hellhounds атакует российские организации через системы на базе Linux

TaLLeR43 

Команда форума
Администратор
Сообщения
43
Реакции
5
Баллы
15
CYB
¢766
ad912ee98b85ae1303348c6ec3185dab.webp
В октябре 2023 года наша команда по расследованию инцидентов PT CSIRT обнаружила компрометацию одной энергетической компании с использованием трояна Decoy Dog. Этот вредонос активно используется в атаках на российские компании и правительственные организации по меньшей мере с сентября 2022 года. Однако образец, обнаруженный нами на хосте жертвы, представлял собой новую модификацию троянского ПО, которую злоумышленники доработали, усложнив его обнаружение и анализ.

Анализ инструментов, тактик и техник не позволил связать данную активность ни c одной из ранее известных APT-групп. Новая группа, названная нами Hellhounds, прикладывает значительные усилия для сокрытия своей активности на хостах и в сети. В интересы группы входят компании и государственные организации исключительно на территории Российской Федерации. Злоумышленники могут преследовать разные цели, но достоверно известно об одном случае полного уничтожения инфраструктуры.

Первый этап — загрузчик Decoy Dog Loader​

Расследуя инцидент, мы обнаружили исполняемый файл /usr/bin/dcrond размером 9 КБ. Файл был защищен модифицированной версией упаковщика UPX с измененной сигнатурой 37 13 03 00 вместо UPX!. На момент расследования только один антивирусный движок детектировал пакер, а некоторые образцы и вовсе не детектировались ни одним из движков. Для обнаружения модифицированного UPX можно использовать публичное YARA-правило из исследования JPCERT/CC.

Рисунок 1. Вердикты антивирусных движков

Рисунок 1. Вердикты антивирусных движков
В отличие от обычного UPX эта модификация распаковывает не исполняемый файл, а шеллкод, полностью написанный на языке ассемблера и использующий только системные вызовы Linux. После модифицированного UPX-заголовка расположена зашифрованная конфигурация, которая хранит в себе путь до зашифрованного файла с основной нагрузкой, а после конфигурации находится сжатый шеллкод:



Рисунок 2. Фрагмент Decoy Dog Loader

Рисунок 2. Фрагмент Decoy Dog Loader
Загрузчик работает в системе и маскируется под легитимный сервис cron. Также мы обнаружили образцы, маскирующиеся под легитимный сервис irqbalance и под легитимную библиотеку lib7.so.

Код:
[Unit]

Description=Daemon to execute   scheduled commands

Documentation=man:dcrond(8)

 

[Service]

Type=forking

ExecStart=/usr/bin/dcrond

Restart=always
В атаках 2022 года образец первой версии маскировали под сервис atd и сервис systemd-readahead-stop.service. Образцы размещали в директории /usr/bin/atd или /usr/bin/container:

Код:
[Unit]

Description=Deferred execution   scheduler

Documentation=man:atd(8)

 

[Service]

Type=forking

ExecStart=/usr/bin/atd

Restart=always

 

[Install]

WantedBy=multi-user.target
Код:
[Unit]

Description= systemd-redhead is a   service that collects disk usage patterns at boot time. systemd-readahead-stop.service   is a service that replays this access data collected at the subsequent boot.

[Service]

Type=forking

ExecStart=/usr/bin/container

Restart=always

[Install]

WantedBy=multi-user.target
Загрузчик сперва проверяет, не находится ли он под отладкой. Для этого он читает /proc/self/status и проверяет, что TracerPid равен 0. Если же TracerPid отличен от 0, то он подменяет себя на /bin/sh с помощью системного вызова execve.

Убедившись, что он не находится под отладкой, загрузчик пытается по порядку прочитать идентификаторы скомпрометированного хоста из следующих файлов и считает MD5-хеш от первого существующего в файловой системе файла:

  • /etc/machine-id;
  • /var/lib/dbus/machine-id;
  • /var/db/dbus/machine-id;
  • /usr/local/etc/machine-id;
  • /sys/class/dmi/id/product_uuid;
  • /sys/class/dmi/id/board_serial;
  • /etc/hostid;
  • /proc/self/cgroup.
Полученный хеш MD5 загрузчик использует как ключ для расшифровки конфигурации, а затем и основной нагрузки, которые зашифрованы криптографическим алгоритмом CLEFIA с 128-битным ключом.

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

Второй этап — основная нагрузка в виде Decoy Dog​

Основная нагрузка исследуемого образца расположена в файловой системе по пути /usr/share/misc/pcie.cache. Расшифрованная нагрузка является модифицированной версией Pupy RAT, которую исследователи называют Decoy Dog.

Pupy RAT — это кросс-платформенный многофункциональный бэкдор и инструмент постэксплуатации с открытым исходным кодом, написанный в основном на Python. Pupy поддерживает Windows и Linux, а также ограниченно Android и macOS. Он использует принцип выполнения «все в памяти» и оставляет минимум следов в системе. Pupy RAT может держать связь с управляющим сервером, используя несколько транспортов, мигрировать в процессы с помощью техники reflective injection и удаленно загружать Python-пакеты (.py, .pyc) и скомпилированные расширения Python C (.pyd, .so) из памяти.

В то время как Pupy RAT не разрабатывается уже два года, Decoy Dog находится в активной разработке. Основные отличия от Pupy RAT:

  • Клиент обновлен с устаревшего Python 2.7 до Python 3.8. Соответственно, весь код был переписан под Python 3.8. Вероятно, поэтому количество модулей сократилось, остались лишь те, что реально используются;
  • Добавлен ряд новых функций, связанных с внедрением кода в виртуальную машину Java;
  • Были добавлены новые транспорты:
    • BOSH (Bidirectional-streams Over Synchronous HTTP со связкой ECPV и RC4) заменил транспорт HTTP;
    • lc4 (связка ECPV и RC4 для локального клиента/сервера с использованием TCP);
    • lws4 (связка ECPV и RC4 для локального клиента/сервера с использованием протокола WebSockets);
    • ws4 (то же, что и оригинальный ws, только вместо связки RSA и AES используется связка ECPV и RC4);
    • dfws4 (то же, что и оригинальный dfws, только вместо связки RSA и AES используется связка ECPV и RC4);
  • Добавлена возможность загружать динамический конфигурационный файл и сохранять его в зашифрованном виде на диске;
  • Добавлен новый канал соединения (launcher) под названием special (локальное соединение с помощью IP-адреса и порта или файлового сокета);
  • Повышена отказоустойчивость при помощи резервных управляющих серверов с указанием конкретных доменов и с использованием DGA.
Исследуемый образец использовал управляющий сервер z-uid.lez2yae2.dynamic-dns[.]net, который находился в конфигурации, встроенной в исполняемый файл. Фрагмент конфигурации:

Рисунок 3. Фрагмент конфигурации Decoy Dog RAT

Рисунок 3. Фрагмент конфигурации Decoy Dog RAT
Также троянская программа получает динамическую (актуальную) конфигурацию из файла /var/lib/misc/mpci.bin, который зашифрован криптографическим алгоритмом AES в режиме счетчика (CTR) с 128-битным ключом (который, в свою очередь, зашифрован на эллиптической кривой brainpoolP384r1), и содержит новые управляющие серверы:

  • m-srv.daily-share.ns3[.]name;
  • f-share.duckdns[.]org.
Открытый ключ для расшифровки ключа AES хранится в конфигурации внутри исполняемого файла.

Также в конфигурации исследуемого образца содержится один скриплет, который запускается при каждом запуске бэкдора. Данный скриплет называется telemetry и служит для отправки телеметрии (информации о зараженной системе) в социальную сеть mindly.social (на основе открытого движка Mastodon) через API сервиса. Содержимое телеметрии представлено в расширенной версии исследования на сайте Positive Technologies.Передаваемые данные шифруются таким же образом, как и файл динамической конфигурации, с использованием того же открытого ключа. Поэтому даже при перехвате переданных данных, не зная закрытого ключа, расшифровать их не получится.

Отправка данных осуществляется с помощью API-ключа, который хранится в коде в открытом виде. Но злоумышленники ограничили область доступа API-ключа только записью данных. Таким образом, даже при получении API-ключа, прочитать какие-либо данные невозможно.

Рисунок 4. Фрагмент кода Decoy Dog RAT

Рисунок 4. Фрагмент кода Decoy Dog RAT
Однако нам все же удалось установить, что телеметрия с зараженных хостов отправляется в аккаунт с юзернеймом @lahat, имя которого и дало название исследованию.

Рисунок 5. Страница пользователя @lahat в mindly.social

Рисунок 5. Страница пользователя @lahat в mindly.social
Помимо основного канала управления, исследуемый образец также выступал в качестве сервера, используя дополнительный локальный канал, который читает данные из файлового сокета /var/run/ctl.socket.

В Decoy Dog предусмотрен механизм генерации DGA-имен при потере связи по основному каналу управления.

Если в конфигурации включена опция bootstrap-domains, то для генерации используется один из основных доменов. В противном случае генерируется поддомен для одного из указанных в конфигурации доменов верхнего уровня или домен для одной из указанных зон (по умолчанию используется домен верхнего уровня dynamic-dns.net). В конфигурации исследуемого образца выбраны домены duckdns.org и dynamic-dns.net.

Резервный домен генерируется как первая половина шестнадцатеричного представления MD5-хеша от строки с текущей датой в формате <год><месяц><день> и открытого ключа, используемого при шифровании коммуникации с управляющим сервером.

Затем от получившегося домена (или одного из основных доменов, если включена опция bootstrap-domains) считается MD5-хеш, а затем от первой половины шестнадцатеричного представления берется по два символа и дописывается слева к домену. Таким образом получается набор из девяти доменов, к которым пытается подключиться ВПО. Например, для домена m-srv.daily-share.ns3[.]name получается восемь дополнительных доменов:

  • 6cm-srv.daily-share.ns3[.]name
  • 78m-srv.daily-share.ns3[.]name
  • 7fm-srv.daily-share.ns3[.]name
  • b1m-srv.daily-share.ns3[.]name
  • 98m-srv.daily-share.ns3[.]name
  • d5m-srv.daily-share.ns3[.]name
  • 2fm-srv.daily-share.ns3[.]name
  • 08m-srv.daily-share.ns3[.]name
Код, которым генерируются домены, можно посмотреть в расширенной версии исследования на сайте Positive Technologies.

Детальная схема работы Decoy Dog:

Рисунок 6. Схема работы Decoy Dog

Рисунок 6. Схема работы Decoy Dog

Жертвами стали два десятка организаций​

По нашим данным, по меньшей мере 20 организаций в Российской Федерации были скомпрометированы с использованием Decoy Dog.

Рисунок 7. Распределение жертв по отраслям

Рисунок 7. Распределение жертв по отраслям
Сейчас группа активно атакует организации в России, и мы продолжаем наше исследование. Пока что мы не знаем конечных целей атакующих, но в одном из инцидентов злоумышленники, используя Decoy Dog, вывели из строя ряд сервисов в телеком-операторе на территории России. Об этом рассказали исследователи из компании Solar 4RAYS на SOC-Форуме в докладе «Щелчок Таноса для оператора связи».

Причины успешных атак — слабая защищенность Linux-систем​

После выхода материалов о Decoy Dog первой версии разработчики этого вредоноса приложили немало усилий, чтобы затруднить его обнаружение и анализ не только в трафике, но и в файловой системе.

Одной из причин большого количества жертв стала недостаточная защищенность Linux-систем. В проектах по расследованию инцидентов мы весьма редко встречаем дополнительные системы мониторинга (auditd) и средства антивирусной защиты на хостах под управлением Linux.
 
Назад
Сверху