Описание вредоносного ПО

Emotet: модули и атаки начала 2022 года

Зловред Emotet был впервые обнаружен в 2014 году. Тогда его функциональность состояла в основном в краже банковских данных. В дальнейшем он неоднократно изменялся, стал распространять другое вредоносное ПО и в итоге превратился в многофункциональный ботнет. В январе 2021 года объединенными усилиями силовых структур нескольких стран вредоносную активность Emotet удалось прервать. Злоумышленникам потребовалось 10 месяцев на перестройку инфраструктуры, и в ноябре Emotet вернулся. Первое время обновленный зловред доставляли жертвам при помощи Trickbot. Теперь же он распространяется посредством спам-рассылок.

Недавний анализ протоколов Emotet и ответов командных серверов показал, что на данный момент Emotet может загружать 16 дополнительных модулей. Нам удалось получить 10 из них (в том числе две копии модуля Spam). Emotet использует эти модули для кражи паролей и других данных учетных записей из браузеров и электронной почты, а также для рассылки спама. В данной статье мы приводим краткий анализ полученных модулей и статистику последних атак Emotet.

Технический анализ зловреда Emotet

Цепочка заражения

Как правило, атака Emotet начинается со спама с документами Microsoft Office (Word или Excel) во вложении. В этих документах содержатся вредоносные макросы, которые загружают и запускают DLL-библиотеку Emotet. В зависимости от прав доступа, которыми он располагает, Emotet создает в директории %Windows%SysWOW64 или %User%AppDataLocal вложенную папку со случайным именем и копирует в нее себя в виде файла со случайно сгенерированным именем и расширением. Для запуска основной функциональности DLL-библиотеки Emotet используется экспортируемая функция Control_RunDLL.

Цепочка заражения Emotet

Цепочка заражения Emotet

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

Функция CreateServiceW() с аргументами

Функция CreateServiceW() с аргументами

Если создать службу не удается, Emotet добавляет новый раздел реестра в HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRun, используя то же самое сгенерированное название.

Раздел автозапуска в реестре

Раздел автозапуска в реестре

Как только DLL-библиотеке Emotet удается запуститься, зловред регистрируется, отправляя данные по одному из 20 IP-адресов командных серверов, которые жестко заданы в коде основного модуля зловреда (в зашифрованном виде). Загруженные модули могут также включать дополнительные IP-адреса командных серверов. Для регистрации бота используются следующие данные:

Регистрационные данные

Регистрационные данные

Вместе с регистрационными данными на командный сервер высылается публичный ключ жертвы, генерируемый при каждом запуске. В отличие от предыдущих версий, использовавших алгоритм RSA для шифрования сгенерированного AES-ключа, в новейшем образце Emotet применяется алгоритм ECDH (протокол Диффи — Хеллмана на эллиптических кривых). Для получения AES-ключа, которым шифруются передаваемые данные, используется пара ключей, сгенерированных в системе жертвы, и публичный ключ Emotet, жестко заданный внутри зловреда. Расшифровка ключа производится с помощью API Windows BCryptSecretAgreement.

В ходе наблюдения мы установили, что после регистрации командный сервер отвечает полезной нагрузкой модуля Process List. Модуль является DLL-библиотекой, которая парсится и загружается напрямую в процесс Rundll32. Вызов его точки входа происходит при передаче специальной структуры его функции DllMain. Также стоит упомянуть, что Emotet использует ECDSA (алгоритм создания цифровой подписи на эллиптических кривых) для проверки целостности полученной полезной нагрузки перед ее запуском.

Псевдокод, загружающий DLL-библиотеку второго этапа Emotet напрямую в память

Псевдокод, загружающий DLL-библиотеку второго этапа Emotet напрямую в память

Помимо загрузки DLL-библиотеки в память, существуют другие способы запуска полезной нагрузки. Например:

  • запись полезной нагрузки DLL-библиотеки на диск и ее запуск командами regsvr32.exe -s «%s» или rundll32.exe «%s»,Control_RunDLL
  • запись полезной нагрузки на диск и попытка вызвать функцию CreateProcess или скопировать маркер доступа пользователя для вызова функции CreateProcessAsUser

В ходе обмена данными командный сервер возвращает сами модули и их настройки. В зависимости от этих настроек зловред выбирает, как именно запускать модули. Все модули, полученные нами в ходе исследования, запускались в родительском процессе, но для каждого нового модуля создавался отдельный поток. У каждого из модулей был свой цифровой идентификатор и собственный список командных серверов. Однако все полученные нами модули содержали один и тот же список командных серверов, за исключением модуля Spam. Модули Emotet передаются по запросу и всегда содержат несколько мусорных байтов, не совпадающих в разных образцах одного и того же модуля. Вероятно, это попытка обойти средства облачного сканирования или обнаружения по хэш-сумме файлов.

Различия в случайных байтах бинарных файлов модуля

Различия в случайных байтах бинарных файлов модуля Process List

Модуль Process List

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

Запрос модуля Process List

Запрос модуля Process List

Модуль Mail PassView

Модуль содержит встроенный исполняемый файл Nir Sofer’s Mail PassView — утилиту для восстановления паролей, которая обнаруживает пароли и данные учетной записи в различных почтовых клиентах. Чтобы запустить эту утилиту, модуль Emotet копирует файл certutil.exe в папку %Temp% под случайным именем с расширением .exe, запускает эту копию и использует прием process hollowing (подмену кода процесса), чтобы внедрить код Mail PassView в свежесозданный процесс. Процесс CertUtil запускается с аргументами командной строки для сохранения результатов работы утилиты для восстановления паролей в файл.

Запуск CertUtil с параметрами командной строки, предназначенными для утилиты восстановления паролей

Запуск CertUtil с параметрами командной строки, предназначенными для утилиты восстановления паролей

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

Модуль WebBrowser PassView

Этот модуль в целом аналогичен предыдущему, но использует Nir Sofer’s WebBrowser PassView — утилиту для восстановления паролей, извлекающую пароли и данные учетных записей из веб-браузеров.

Официальный сайт утилиты гласит, что она способна извлечь пароли и другие данные учетных записей из различных браузеров, в том числе Internet Explorer, Mozilla Firefox, Google Chrome, Safari и Opera.

Псевдокод функции из модуля WebBrowser PassView

Emotet давно использует обфускацию кода, и этот модуль не стал исключением. На скриншоте выше можно увидеть, что обфускация потока управления реализуется с помощью переменной state (выделена желтым). Кроме того, все вызовы API разрешаются во время выполнения. Это позволяет использовать мусорные аргументы (в красных рамках) на данном уровне разрешения API. В зависимости от модуля обфусцированные фрагменты кода могут быть и более громоздкими и нечитаемыми, поэтому мы не будем приводить их для каждого из модулей.

Модуль «Outlook Address Grabber

Модуль для эксфильтрации данных из Outlook. С помощью интерфейса Outlook Messaging API этот модуль перебирает все профили Outlook и извлекает имена пользователей и почтовые адреса из каждого письма. Затем собранные данные отправляются на командный сервер.

Модуль Outlook E-mails Grabber

Модуль для эксфильтрации данных из Outlook. С помощью интерфейса Outlook Messaging API этот модуль перебирает все папки пользователя (Входящие, Отправленные, Удаленные и др.) и извлекает все имена и почтовые адреса отправителей и получателей, а также тему и тело каждого письма. Затем собранные письма отправляются на командный сервер.

Модуль Thunderbird Address Grabber

Модуль для эксфильтрации данных из Thunderbird. Этот модуль перебирает профили Thunderbird, расположенные в папке %AppData%RoamingThunderbirdProfiles, парсит файлы данных Thunderbird и извлекает имена пользователей и почтовые адреса. Затем собранные данные отправляются на командный сервер.

Модуль Thunderbird E-mails Grabber

Модуль для эксфильтрации данных из Thunderbird. Этот модуль перебирает профили Thunderbird, расположенные в папке %AppData%RoamingThunderbirdProfiles, парсит файлы данных Thunderbird, извлекает все имена и почтовые адреса отправителей и получателей, а также тему и тело каждого письма. Затем собранные письма отправляются на командный сервер.

Модуль Spam

Этот модуль отвечает за рассылку спама. Он отправляет запрос на командный сервер, ожидая ответа с задачей по рассылке спама. Обычно она состоит из трех частей:

  • Список почтовых серверов и взломанных учетных записей, которые будут использоваться для рассылки спама. В одной задаче могут быть указаны десятки таких учетных записей.
  • Список адресов для атаки: имя и адрес получателя, имя и адрес отправителя.
  • Шаблон письма для рассылки с темой, текстом и вложениями.

Список почтовых серверов и взломанных учетных записей для рассылки спама (данные частично скрыты)

Список почтовых серверов и взломанных учетных записей для рассылки спама (данные частично скрыты)

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

Модуль UPnP

Вспомогательный модуль, проверяющий возможность подключения к зараженной системе извне. В его настройках, поступающих с командного сервера одновременно с самим модулем, передается внешний IP-адрес зараженной системы. Модуль начинает свою работу с составления списка доступных сетевых интерфейсов и сравнения их адресов с IP-адресом, полученным в настройках модуля. Если удается найти подходящую сеть, модуль открывает порты в пассивном режиме, ожидая входящего подключения. Модуль может открывать следующие порты: 80, 443, 8080, 8090, 7080, 8443, 20, 21, 22, 53, 143, 465, 990, 993, 995. Если обнаружить подходящий сетевой интерфейс не удалось, он использует протокол SSDP для поиска устройств с доступом к интернету (например, модемов или маршрутизаторов). Найдя сетевые устройства, модуль пытается изменить их конфигурацию при помощи AddPortMapping, чтобы разрешить переадресацию портов.

Пример использования AddPortMapping для переадресации порта 443

Пример использования AddPortMapping для переадресации порта 443

Статистика

После возвращения Emotet в ноябре 2021 года мы наблюдали незначительный рост его активности с течением времени. Однако в марте 2022 года, как показывают данные нашей телеметрии, количество атакованных пользователей подскочило до 9086 человек — больше чем в три раза по сравнению с 2847 пользователями в феврале.

Динамика количества атакованных Emotet пользователей, ноябрь 2021 — март 2022 (скачать)

Если взглянуть на число попыток заражения Emotet, то в марте наблюдался аналогичный скачок.

Динамика числа обнаружений Emotet, ноябрь 2021 — март 2022 (скачать)

Цели атак

Emotet заражает компьютеры компаний и частных лиц по всему миру. Данные нашей телеметрии показывают, что в первом квартале 2022 года атакам Emotet чаще всего подвергались пользователи из следующих стран: Италия (10,04%), Россия (9,87%), Япония (8,55%), Мексика (8,36%), Бразилия (6,88%), Индонезия (4,92%), Индия (3,21%), Вьетнам (2,70%), Китай (2,62%), Германия (2,19%) и Малайзия (2,13%).

Заключение

Текущий набор модулей Emotet способен выполнять широкий спектр вредоносных действий: похищать письма, пароли и другие данные учетных записей из различных источников, а также рассылать спам. Все обнаруженные нами модули, за исключением модулей для Thunderbird, уже в той или иной форме использовались зловредом Emotet ранее. Однако некоторые модули нам пока не удалось получить. Данные нашей телеметрии также свидетельствуют о резком скачке числа атакованных пользователей в марте. Мы продолжаем активно следить за зловредами семейства Emotet. Больше информации о них мы публикуем в закрытых отчетах на Kaspersky Threat Intelligence Portal.

Индикаторы компрометации

Обратите внимание: Emotet является полиморфным зловредом, поэтому хэш-суммы среди индикаторов компрометации отсутствуют.

IP-адреса командных серверов

70[.]36.102.35:443
197[.]242.150.244:8080
188[.]44.20.25:443
45[.]118.135.203:7080
92[.]240.254.110:8080
103[.]43.46.182:443
1[.]234.2.232:8080
50[.]116.54.215:443
51[.]91.76.89:8080
206[.]188.212.92:8080
153[.]126.146.25:7080
178[.]79.147.66:8080
217[.]182.25.250:8080
196[.]218.30.83:443
51[.]91.7.5:8080
72[.]15.201.15:8080
119[.]193.124.41:7080
5[.]9.116.246:8080
151[.]106.112.196:8080
101[.]50.0.91:8080
45[.]142.114.231:8080
185[.]157.82.211:8080
46[.]55.222.11:443
103[.]75.201.2:443
176[.]56.128.118:443
176[.]104.106.96:8080
107[.]182.225.142:8080
31[.]24.158.56:8080
51[.]254.140.238:7080
159[.]65.88.10:8080
82[.]165.152.127:8080
146[.]59.226.45:443
173[.]212.193.249:8080
212[.]24.98.99:8080
212[.]237.17.99:8080
110[.]232.117.186:8080
131[.]100.24.231:80
209[.]250.246.206:443
195[.]201.151.129:8080
138[.]185.72.26:8080

Emotet: модули и атаки начала 2022 года

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Отчеты

StripedFly: двуликий и незаметный

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

Азиатские APT-группировки: тактики, техники и процедуры

Делимся с сообществом подходами, которые используют азиатские APT-группировки при взломе инфраструктуры, и подробной информацией о тактиках, техниках и процедурах (TTPs) злоумышленников, основанной на методологии MITRE ATT&CK.

Как поймать «Триангуляцию»

Эксперты «Лаборатории Касперского» смогли получить все этапы «Операции Триангуляция»: эксплойты нулевого дня для iOS, валидаторы, имплант TriangleDB и дополнительные модули.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике