В октябре 2023 года команда Positive Technologies по расследованию инцидентов 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.
В отличие от обычного UPX эта модификация распаковывает не исполняемый файл, а шеллкод, полностью написанный на языке ассемблера и использующий только системные вызовы Linux. После модифицированного UPX-заголовка расположена зашифрованная конфигурация, которая хранит в себе путь до зашифрованного файла с основной нагрузкой, а после конфигурации находится сжатый шеллкод:
Загрузчик работает в системе и маскируется под легитимный сервис 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, который находился в конфигурации, встроенной в исполняемый файл. Фрагмент конфигурации:
Также троянская программа получает динамическую (актуальную) конфигурацию из файла /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-ключа, прочитать какие-либо данные невозможно.
Однако нам все же удалось установить, что телеметрия с зараженных хостов отправляется в аккаунт с юзернеймом @lahat, имя которого и дало название исследованию.
Помимо основного канала управления, исследуемый образец также выступал в качестве сервера, используя дополнительный локальный канал, который читает данные из файлового сокета /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:
Жертвами стали два десятка организаций
По нашим данным, по меньшей мере 20 организаций в Российской Федерации были скомпрометированы с использованием Decoy Dog.
Сейчас группа активно атакует организации в России, и мы продолжаем наше исследование. Пока что мы не знаем конечных целей атакующих, но в одном из инцидентов злоумышленники, используя Decoy Dog, вывели из строя ряд сервисов в телеком-операторе на территории России. Об этом рассказали исследователи из компании Solar 4RAYS на SOC-Форуме в докладе «Щелчок Таноса для оператора связи».
Причины успешных атак — слабая защищенность Linux-систем
После выхода материалов о Decoy Dog первой версии разработчики этого вредоноса приложили немало усилий, чтобы затруднить его обнаружение и анализ не только в трафике, но и в файловой системе.
Одной из причин большого количества жертв стала недостаточная защищенность Linux-систем. В проектах по расследованию инцидентов мы весьма редко встречаем дополнительные системы мониторинга (auditd) и средства антивирусной защиты на хостах под управлением Linux.
С вердиктами наших продуктов можно ознакомиться в расширенной версии исследования на сайте Positive Technologies.
Авторы: Станислав Пыжов, Александр Григорян (Positive Technologies).
Авторы благодарят за помощь в подготовке статьи команды Incident Response и Threat Intelligence экспертного центра Positive Technologies (PT Expert Security Center).
Tuvok
Всё это чрезвычайно интересно, однако не видно механизма заражения. Как эта гадость попадает на компьютер жертвы? Какие уязвимости использует, через что проходит инициация?
ptsecurity Автор
Группа действует достаточно аккуратно и оставляет минимальное количество следов на скомпрометированных хостах, но нам известно о случаях компрометации через публично доступные веб-сервисы, а также атакующие могут использовать украденные учетные записи для входа по протоколу SSH. Подробнее читайте в нашем полном отчете в разделе MITRE TTPs: https://www.ptsecurity.com/ru-ru/research/pt-esc-threat-intelligence/hellhounds-operaciya-lahat/
jackcrane
написано открытым текстом: "мы весьма редко встречаем ... средства антивирусной защиты на хостах под управлением Linux". вот поэтому и попадает.