В октябре 2023 года наша команда по расследованию инцидентов PT CSIRT обнаружила компрометацию одной энергетической компании с использованием трояна Decoy Dog. Этот вредонос активно используется в атаках на российские компании и правительственные организации по меньшей мере с сентября 2022 года. Однако образец, обнаруженный нами на хосте жертвы, представлял собой новую модификацию троянского ПО, которую злоумышленники доработали, усложнив его обнаружение и анализ. Анализ инструментов, тактик и техник не позволил связать данную активность ни c одной из ранее известных APT-групп. Новая группа, названная нами Hellhounds, прикладывает значительные усилия для сокрытия своей активности на хостах и в сети. В интересы группы входят компании и государственные организации исключительно на территории Российской Федерации. Злоумышленники могут преследовать разные цели, но достоверно известно об одном случае полного уничтожения инфраструктуры.  Расследуя инцидент, мы обнаружили исполняемый файл /usr/bin/dcrond размером 9 КБ. Файл был защищен модифицированной версией упаковщика UPX с измененной сигнатурой 37 13 03 00 вместо UPX!. На момент расследования только один антивирусный движок детектировал пакер, а некоторые образцы и вовсе не детектировались ни одним из движков. Для обнаружения модифицированного UPX можно использовать публичное YARA-правило из исследования JPCERT/CC. В отличие от обычного UPX эта модификация распаковывает не исполняемый файл, а шеллкод, полностью написанный на языке ассемблера и использующий только системные вызовы Linux. После модифицированного UPX-заголовка расположена зашифрованная конфигурация, которая хранит в себе путь до зашифрованного файла с основной нагрузкой, а после конфигурации находится сжатый шеллкод:   Загрузчик работает в системе и маскируется под легитимный сервис cron. Также мы обнаружили образцы, маскирующиеся под легитимный сервис irqbalance и под легитимную библиотеку lib7.so. В атаках 2022 года образец первой версии маскировали под сервис atd и сервис systemd-readahead-stop.service. Образцы размещали в директории /usr/bin/atd или /usr/bin/container: Загрузчик сперва проверяет, не находится ли он под отладкой. Для этого он читает /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-битным ключом. На этом этапе исследования стало понятно, что образец ориентирован на работу на конкретном хосте и что у злоумышленников был предварительный доступ к данному хосту для получения идентификатора и добавления его в конфигурацию. Основная нагрузка исследуемого образца расположена в файловой системе по пути /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-Форуме в докладе «Щелчок Таноса для оператора связи». После выхода материалов о Decoy Dog первой версии разработчики этого вредоноса приложили немало усилий, чтобы затруднить его обнаружение и анализ не только в трафике, но и в файловой системе. Одной из причин большого количества жертв стала недостаточная защищенность Linux-систем. В проектах по расследованию инцидентов мы весьма редко встречаем дополнительные системы мониторинга (auditd) и средства антивирусной защиты на хостах под управлением Linux. С вердиктами наших продуктов можно ознакомиться в расширенной версии исследования.   Читайте также в нашем хаброблоге: (Ex)Cobalt апгрейднула инструментарий: как группа атаковала российские компании в 2023 году Стилер из торрентов: как скачивание пиратской программы привело к заражению сотен тысяч пользователей Искусный MataDoor: как устроен и как действует новый опасный бэкдор, атакующий российскую оборонку Больше отчетов PT Expert Security Center об актуальных киберугрозах, новых образцах ВПО, активности APT-групп, хакерских техниках и инструментах ищите тут.