Positive Technologies
PT Expert Security Center

Hellhounds: операция Lahat

Hellhounds: операция Lahat

Содержание

Введение

В октябре 2023 года команда Positive Technologies по расследованию инцидентов PT CSIRT обнаружила компрометацию одной энергетической компании с использованием трояна Decoy Dog. Согласно расследованию PT CSIRT, Decoy Dog активно используется в атаках на российские компании и правительственные организации по меньшей мере с сентября 2022 года. Ранее об этом трояне в своих исследованиях рассказывали НКЦКИ, Infoblox, CyberSquatting и Solar 4RAYS.

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

По имеющимся у нас данным, группа Hellhounds, стоящая за использованием Decoy Dog, в своих атаках нацелена исключительно на организации на территории Российской Федерации. Примечательно, что атакующие были замечены за использованием управляющего сервера maxpatrol[.]net, так они маскировались под продукты компании Positive Technologies серии MaxPatrol. Продукты Positive Technologies содержат все индикаторы компрометации из данного материала в своих базах.

First Stage (Decoy Dog Loader)

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

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

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

Фрагмент 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-битным ключом.

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

Second Stage (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, который находился в конфигурации, встроенной в исполняемый файл. Фрагмент конфигурации:

Фрагмент конфигурации 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 сервиса. Содержимое телеметрии:

    
{ 'cid': <идентификатор бэкдора из конфигурации>, 'user': <имя пользователя>, 'hostname': <имя хоста>, 'node': <MAC-адрес в виде 48-битного числа>, 'platform': <платформа>, 'node': <MAC-адрес в виде 48-битного числа>, 'pid': <идентификатор процесса бэкдора>, 'ppid': <идентификатор родительского процесса бэкдора>, 'cwd': <рабочая директория>, 'proc_arch': <архитектура запущенного процесса бэкдора>, 'exec_path': <путь к запущенному процессу бэкдора>, 'uac_lvl': <уровень защиты UAC>, 'intgty_lvl': <уровень целостности процесса бэкдора>, 'machine_key': <MD5-хеш от идентификатора системы>, 'proxy': <строка подключения к прокси-серверу по умолчанию>, 'external_ip': <внешний IP-адрес в виде 32-битного числа>, 'internal_ip': <внутренний IP-адрес в виде 32-битного числа>, 'boottime': <дата и время запуска машины (Unix time)> }

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

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

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

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

Страница пользователя @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

Домены генерируются следующим кодом:

    
import datetime, hashlib WELL_KNOWN_ZONES = ('dynamic-dns.net', ) def make_emergency_related_domains(domain): domain_bytes = domain if isinstance(domain_bytes, bytes): domain = domain.decode() else: domain_bytes = domain.encode() prefix_hash = hashlib.md5(domain_bytes).hexdigest()[:16] for x in range(len(prefix_hash) // 2): yield prefix_hash[x * 2:x * 2 + 2] + domain class EmergencyDomains(object): __slots__ = ('key', 'zones', 'beacon_domains', '_zone_id', '_emergency_loop') def __init__(self, key, beacon_domains=None, zones=None): self.key = key self.zones = zones or WELL_KNOWN_ZONES if not isinstance(self.zones, (list, tuple, set)): self.zones = tuple((self.zones,)) self.beacon_domains = beacon_domains self._zone_id = 0 self._emergency_loop = self._emergency_loop_generator() def _emergency_loop_generator(self): if self.beacon_domains: for domain in self.beacon_domains: yield domain yield self._domain_of_the_day() def iterate(self): try: while True: yield next(self._emergency_loop) except StopIteration: self._emergency_loop = self._emergency_loop_generator() def _domain_of_the_day(self): now = datetime.datetime.utcnow() ts_formatted = now.strftime('%Y%m%d') if not isinstance(ts_formatted, bytes): ts_formatted = ts_formatted.encode() formatted_key = self.key if not isinstance(formatted_key, bytes): formatted_key = formatted_key.encode() domain_hash = hashlib.md5() domain_hash.update(ts_formatted) domain_hash.update(formatted_key) domain_part = domain_hash.hexdigest()[:16] zone = self.zones[self._zone_id] self._zone_id = (self._zone_id + 1) % len(self.zones) return domain_part + '.' + zone

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

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

Жертвы

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

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

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

Заключение

Авторы ВПО после публикации материалов про Decoy Dog первой версии приложили достаточно большое количество усилий, чтобы затруднить обнаружение и анализ не только в трафике, но и в файловой системе.

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

Авторы: Станислав Пыжов, Александр Григорян (Positive Technologies)

Авторы благодарят за помощь в подготовке статьи команды Incident response и Threat intelligence экспертного центра Positive Technologies (PT Expert Security Center).

Вердикты наших продуктов

PT Sandbox

apt_linux_ZZ_DecoyDog__Trojan__FirstStage
apt_linux_ZZ_DecoyDog__Backdoor__Pupy
apt_linux_ZZ_DecoyDog__Backdoor__EncryptedPayload
apt_mem_ZZ_DecoyDog__Backdoor

PT Network Attack Discovery

SUSPICIOUS [PTsecurity] Possible DecoyDog DNS Tunneling sid: 10010052
SUSPICIOUS [PTsecurity] Possible DecoyDog DNS Tunneling sid: 10010053

IOCs

Файловые индикаторы

Name

MD5

SHA-256

SHA-1

Decoy Dog Loader

_lib7.so

8292f151b40308b31277165ea37541a9

57ed4aa89eb7f04eb1d88c038d2eb979d5082872fb41b4ea1c8bb0ca3ee97c4e

b063461e0b2dda5f1fcb49eb92c5d323b1ba9ed2

.lib7.so

6685ea769026e8831b67e4d8f0606e65

d73889d26fa37deee733a871dbd39dd54d6079ef286172699af585583025fb45

3c69d5e7f1cdef1fb055260345cdc69ac8432d72

-

1fd1d550b549c9c14031080380b4b0b7

8130de2602bfba78875dec200282dde736aa0558369bff8fd8797f8846e30be8

7e48cd7385a1fcfa8a80f5abe6839e8d10dece96

dcrond

b83dffed692e165ad0274b63a6c7f1cb

e218ab7b3ab64e93373661558f9093d7f2a344e6d4fdd245b3556ad93c0bea02

a513f2debe9811bdb9d19dddbd20018d13d11198

container

9671607c162cd3037da08508d2d3f3a3

2f44da49c7deb865312265c17004b7ee1744e8af4667219b276b2a65afedf821

9b4e493756a3c7c5a59dfe31168564bafe09d01f

systemd-inputd

7974a843acdf22b32a13256ba7f56baa

4c0b3dd3de24099be2685e8fe19f80599fb9596ec0bafcf29f1cf5d051ebc223

74f0fa56ddb3f38b425ea57239421b142b79063c

smartmond

bcbf98042bf9796e50f16e68c4255f85

dc6bdfb15624adce5c9e4978d1a38e98e539d0f73304692bea4e70e4e04a7aaa

560463d55676e9a33496f95f3f837faedfd0a2f1

epel-modular-update.solvx

2e272a6d04e6f28145f5d07f97bb51a7

4750aef958598d156c47fa48bb2dea707dec8586a9fc7ae3b448348f4fa9a66a

20bdedfc3c80f494857aa0cfc8f0fd8a80efbabd

irqballanced

536be89b71cd273db8a79b0bc2074ce6

0b43038fd6c46427d2bf0964aab3bb96f42de504fbda5071031fecb120abc59f

ae131fa8700fb92074999f70acef9bd470dd6c7b

Decoy Dog RAT (version 1)

-

bb04bac638e35775b93ddfa30f0a3b09

4996180b2fa1045aab5d36f46983e91dadeebfd4f765d69fa50eba4edf310acf

b7a20a3064c9eb0e0f332dd25df5e4609393b44c

-

5e55d48b930b75ac3df3d2b3f9db1b07

a1704832392c67a0a2c79fd52422226b5d9df0e40cf537304495496910d1b744

174fe35afc5a4d5b9938cffb422f336f5787d072

-

c4d377c3fcd231adcc2d7b5e7e701fc9

0375f4b3fe011b35e6575133539441009d015ebecbee78b578c3ed04e0f22568

44c2d78bbeaadc3416ba15d51a2c1c788df89f5d

JniAccelCsv.Linux.amd64

ff09a325e7e739cfc8ed0bac0838581a

ec01b358f82ad43e04b80ae6e1366516b4e62718da64d68a832433860ad312ad

dd2ed96b944592f4f545f6aa5bf563c70563bdc7

JniAccelCsv.Linux.amd64

917836dc595074bf57f14e3d9cc4f766

4d3814f0ce7537756b1dd3096773bc57a7b22f61ab5262f8d6f6a74a84c61900

3a8a648eb2c52e86a78bfd7eb832188776bc8d62

atd

d8ce9e4b5d4443b368ab226913af87f9

6c8f413111f1abfee788dad4ee7cca37e0c2597cca66d155af958c535faf55cc

7699d579d51c105ebf997911660f5f21a37fc28b

atd

e7e7ff7450d9655d71d281fbb5d59f6f

e6b88a0710d74330c31590718ad563f4788760c8607c414765aa73b5bb402760

73c012afd09e5a59102b773a58a2e79af005853b

-

ee09f7610b5213ed5e3b85c7457858c3

637d602d5b6cf33f5c7236f335245df02e535c76ff6e0014839c557546cfe073

319adfe932531db8880ac0d6c09e0c48485165a8

_bareos.cfg

58b1c162d66194b26d7d462a0f80e28d

d189e0150f42d2a2e40fefcec6973fcbc4a8b1a1757a358d13df3519ef275412

3f61dba11f66ab29d81da6b1bd8363b6f6e03623

-

fa8443fdde409b830f77f18c0ef5a44d

6a06619b21f20094a77bfc9af3fc4dbecfacdbe038f017604399ce86d5f38362

280746eba047ac9c39ce1746b9d8918b1ec9c145

-

4c999714034ae431adb2776cd930b518

a1c116042e81280e408e859ab8eba8237bb1f31cad00814d6a406fc45444ae97

cfff6d81df00ceaf2ca86114ed756f2b824fd605

Decoy Dog RAT (version 2)

pcie.cache

8147c66144990691e2d9d870fb921475

4f9ff5ec62bba44d18f18323ef674e49515da976011c33049bce1d1f9a3f6e46

13ea15f336732d072a6881c1eb86a361ba3f4843

pcie.cache

a9675ccc238c2de8c673879a63975d80

5d7866865554afa00ce44db77bf419a21bead64b5ed3394aa23f79aa2b5b00c4

08f48eb0d5919fbb937399f3c6cabd5bf1b0350d

pcie.cache

de81b0ebc983d4a23395a35c759fc84e

c13b1a591561800163154b72415cfb3283eae253772fed1ca2bd4f0a2644cfbd

a57a0dd002c13c6d45355be3116064605ed8c30a

pcie.cache

7aafa110d681067787d5382a6cc55e48

10f7fc4a3dbb07de3a73124cc02469d2123824960da02c51f9c5304dd82c9464

dd1923e484654a8053c7a2f4f7ebcf5a17126c9d

containerd

2ccc492a1a977e694bd5ced7cee35a8d

d67e2641d7f423e868b2ca62f809ccad83f87081aa1e9aa62d9c68b83138e181

a93b2351c9ca03e64a1c52de7e2ca59637b8da90

.mem_cache

6323e21d0cd0787c52fc71e7a3420e28

5f9c971b77f69d6337ed591aa50ef271757456038a1aad1a6f3d16b331c4166f

bae0d550668e82c64f0a672b9af646dd9abcfc4a

Файловые пути

/usr/bin/atd
/usr/bin/container
/usr/bin/dcrond
/usr/sbin/containerd
/usr/sbin/smartmond
/usr/share/misc/hwrng.cache
/usr/share/misc/pcie.cache
/var/lib/misc/mpci.bin
/var/lib/misc/sata.bin
/var/lib/polkit-1/localauthority/.cache
/var/run/ctl.socket

Сетевые индикаторы

acrm-11331.com
ads-tm-glb.click
allowlisted.net
cbox4.ignorelist.com
f-share.duckdns.org
maxpatrol.net
m-srv.daily-share.ns3.name
vcs.dns04.com
z-uid.lez2yae2.dynamic-dns.net
mindly.social (легитимная социальная сеть)
ertelecom.org
webrtc.foo
atlas-upd.com
hsdps.cc
194.87.68.65
185.126.239.60
185.22.152.227

Файловые сигнатуры

    
rule PTESC_apt_linux_ZZ_DecoyDog__Trojan__FirstStage{ strings: $f1 = "mmap failed" $s1 = "/etc/machine-id" $s2 = "/product_uu=bo" condition: uint32be ( 0 ) == 0x7F454C46 and all of ( $f* ) and any of ( $s* ) and filesize < 100KB } rule PTESC_apt_linux_ZZ_DecoyDog__Backdoor__Pupy__v1{ strings: $x1 = "reflectively inject a dll into a process." fullword ascii $x2 = "ld_preload_inject_dll(cmdline, dll_buffer, hook_exit) -> pid" fullword ascii $x3 = "LD_PRELOAD=%s HOOK_EXIT=%d CLEANUP=%d exec %s 1>/dev/null 2>/dev/null" fullword ascii $x4 = "reflective_inject_dll" fullword ascii $x5 = "ld_preload_inject_dll" fullword ascii $x6 = "get_pupy_config() -> string" fullword ascii $x7 = "[INJECT] inject_dll. OpenProcess failed." fullword ascii $x8 = "reflective_inject_dll" fullword ascii $x9 = "reflective_inject_dll(pid, dll_buffer, isRemoteProcess64bits)" fullword ascii $x10 = "linux_inject_main" fullword ascii $j1 = "jvm.PreferredClassLoader" fullword ascii $j2 = "jvm.JNIEnv capsule is invalid" fullword ascii $j3 = "JVM was not loaded yet" fullword ascii $j4 = "Info about parent JVM" fullword ascii condition: uint32be ( 0 ) == 0x7F454C46 and ( 2 of ( $x* ) and any of ( $j* ) ) and filesize < 5000KB } rule PTESC_apt_linux_ZZ_DecoyDog__Backdoor__EncryptedPayload{ strings: $signature = { C8 01 00 00 9A 00 00 00 08 00 00 01 } condition: $signature at 0 and filesize > 3MB and filesize < 5MB }

MITRE TTPs

ID

Имя

Описание

Initial Access

T1190

Exploit Public-Facing Application

Злоумышленники компрометируют публично доступные веб-сервисы

T1199

Trusted Relationship

Злоумышленники продвигаются через смежные инфраструктуры

T1078

Valid Accounts

Злоумышленники использовали легитимные учетные записи для входа по протоколу SSH

T1021.004

Remote Services: SSH

Злоумышленники подключаются к скомпрометированному хосту, используя протокол SSH

Persistence

T1543.002

Create or Modify System Process: Systemd Service

Decoy Dog закреплялся в системе через сервисы dcrond.service или atd.service

Defense Evasion

T1480.001

Execution Guardrails: Environmental Keying

Злоумышленники использовали machine-id хоста жертвы для шифрования основной нагрузки и конфигурационного файлы

T1140

Deobfuscate/Decode Files or Information

Группа использовала алгоритм CLEFIA для шифрования своих компонентов, чтобы защитить их от обнаружения и анализа

T1027.002

Obfuscated Files or Information: Software Packing

Группа использовала модифицированный алгоритм UPX для защиты от обнаружения и анализа

Discovery

T1082

System Information Discovery

Злоумышленники получали machine-id зараженного хоста для компиляции образцы Decoy Dog Loader, который будет работать только на конкретном хосте

Command and Control

T1568.002

Dynamic Resolution: Domain Generation Algorithms

Группа разработала алгоритм генерации доменных имен (DGA)

T1568.001

Dynamic Resolution: Fast Flux DNS

Группа использовала DDNS-сервисы

T1071.004

Application Layer Protocol: DNS

DNS Tunnel — основной метод коммуникации с управляющим сервером у Decoy Dog RAT

Impact

T1485

Data Destruction

Группа в инциденте с телеком компанией уничтожила Linux и Windows инфраструктуру