Отчеты о целевых атаках (APT)

ToddyCat роет норы в вашей инфраструктуре и крадет секреты

Мы продолжаем рассказывать про деятельность APT-группы ToddyCat. В предыдущей статье мы рассмотрели некоторые инструменты для сбора и эксфильтрации файлов (LoFiSe и PcExter). В этот раз мы исследовали то, каким образом злоумышленники обеспечивают себе постоянный доступ к скомпрометированной инфраструктуре, какая информация на хостах им интересна и с помощью каких инструментов они ее добывают.

ToddyCat — это APT-группа, которая атакует преимущественно государственные организации в Азиатско-Тихоокеанском регионе, в том числе имеющие отношение к оборонному производству. Одна из главных целей группы —кража конфиденциальной информации с хостов.

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

Инструменты для туннелирования трафика

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

Обратный SSH туннель

Один из способов получить доступ к удаленным сетевым сервисам — создать обратный SSH-туннель.

Для запуска такого туннеля атакующие используют несколько файлов:

  1. Клиент SSH из набора утилит OpenSSH для Windows вместе с необходимой для его работы библиотекой.
  2. Файл с закрытым ключом (OPENSSH PRIVATE KEY).
  3. Скрипт a.bat для сокрытия файла закрытого ключа.

Для доставки файлов атакующие используют общедоступные ресурсы на целевых хостах по протоколу SMB (T1021.002: Remote Services: SMB/Windows Admin Shares).

Злоумышленники не пытаются скрыть следы клиента SSH в системе. Они не переименовывают файл и размещают его в папках, имена которых указывают на присутствие SSH-клиента:

При этом атакующие копируют файлы с закрытыми ключами, необходимые для подключения к удаленному серверу, по следующим путям:

Обычно файлы приватных ключей для OpenSSH создаются без расширений, но иногда им  присваивают расширение .key или похожее. В нашем случае атакующие использовали расширения .ini и .dat — очевидно, чтобы скрыть истинное назначение файлов в системе. Передача через командную строку файлов с этими расширениями выглядит не так подозрительно, как передача файлов без расширения или с расширением .key.

Поместив файлы приватных ключей в папку AppReadiness, атакующие копируют и запускают скрипт a.bat, размещая его во временных директориях или в общей папке пользователей в системе:

Этот файл содержит следующие команды:

В операционной системе Windows папка C:\Windows\AppReadiness относится к сервису AppReadiness. В ней хранятся файлы для первоначальной настройки приложений при первом запуске или при первом входе пользователя в систему.

Вывод команды icacls для папки AppReadiness с настройками по умолчанию

Вывод команды icacls для папки AppReadiness с настройками по умолчанию

На рисунке выше показаны права доступа к этой папке, установленные по умолчанию:

  • у администраторов и системы — полные права;
  • у авторизованных пользователей — права только на чтение.

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

Скрипт a.bat выполняет следующее: устанавливает систему как владельца папки и удаляет всех пользователей из списка DACL (discretionary access control list) оставляя только систему. На рисунке ниже показан список DACL для папки C:\Windows\AppReadiness после запуска скрипта:

Вывод команды icacls для папки AppReadiness после запуска скрипта a.bat

Вывод команды icacls для папки AppReadiness после запуска скрипта a.bat

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

Отказ в доступе к настройкам безопасности папки AppReadiness

Отказ в доступе к настройкам безопасности папки AppReadiness

Чтобы запустить туннель, атакующие создают в системе задачу по расписанию, которая выполняет следующую команду:

Эта команда создает SSH-подключение к порту 22222 удаленного сервера с IP-адресом 103.27.202[.]85 под учетной записью пользователя с именем вида systemtestXX, где ХХ — это число. Это подключение перенаправляет трафик с определенного порта на командном сервере на определенный порт зараженного хоста. Таким образом, приложения, работающие на сервере, могут в любой момент получить доступ к службе на зараженном хосте, слушающей соответствующий порт, отправив запрос на нужный порт на сервере.

На примере выше подключение создается от имени пользователя systemtest01, и перенаправляет сетевые соединения с порта 31481 сервера на порт 53 целевого хоста. Такое соединение, созданное на контроллерах домена, позволяет атакующим получать IP-адреса хостов во внутренней сети через DNS-запросы.

Каждый пользователь отвечает за свой порт на целевом хосте. Например, пользователь с именем systemtest05 отвечает за перенаправление трафика с сервера на порт 445, на котором обычно расположены SMB-службы.

Информация по IP-адресу удаленного сервера представлена в следующей таблице:

IP Страна + ASN Название сети Описание сети Адрес Email
103.27.202[.]85 Thailand,
AS58955
BANGMOD-VPS-NETWORK Bangmod VPS Network Bangmod-IDC Supermicro Thailand Powered by CSloxinfo support@bangmod.co.th

В целом процесс создания OpenSSH-туннеля можно представить в виде следующей схемы:

Схема создания SSH-туннеля

Схема создания SSH-туннеля

SoftEther VPN

Еще один инструмент, с помощью которого атакующие создают туннели, — серверное приложение (VPN Server) из пакета SoftEther VPN.

SoftEther VPN — это решение с открытым кодом, разработанное в университете Цукубы в рамках академического исследования и позволяющее создавать VPN-соединения по многим популярным протоколам, таким как L2TP/IPsec, OpenVPN, MS-SSTP, L2TPv3, EtherIP и другие.

Чтобы запустить VPN-сервер, атакующие использовали следующие файлы:

  1. vpnserver_x64.exe — файл VPN-сервера, имеющий цифровую подпись.
  2. hamcore.se2 — файл-контейнер, который содержит необходимые компоненты для запуска файла vpnserver_x64.exe.
  3. vpn_server.config — файл конфигурации сервера.

В операционной системе файл VPN-сервера может запускаться как сервис или как приложение с пользовательским графическим интерфейсом. Режимы управляются через параметры командной строки.

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

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

Файл hamcore.se2 в атакуемых системах не переименовывался, поскольку файл VPN-сервера загружает его по этому имени из папки, в которой находится сам.

Чтобы перенести инструменты на хосты жертвы, атакующие использовали как свою стандартную технику — передачу файлов через общедоступные ресурсы (T1021.002 Remote Services: SMB/Windows Admin Shares), — так и загрузку файлов с зараженных интернет-ресурсов с помощью утилиты curl:

Мы наблюдали загрузку файлов, связанных с SoftEther VPN, со следующих веб-ресурсов:

URL Оригинальное имя файла
hxxp://www.netportal.or[.]kr/common/css/main.js vpnserver_x64.exe
hxxp://www.netportal.or[.]kr/common/css/ham.js Hamcore.se2
hxxp://23.106.122[.]5/hamcore.se2 Hamcore.se2
hxxps://etracking.nso.go[.]th/UserFiles/File/111/tasklist.exe vpnserver_x64.exe
hxxps://etracking.nso.go[.]th/UserFiles/File/111/hamcore.se2 Hamcore.se2

В большинстве случаев злоумышленники доставляли файл конфигурации на устройство вместе с VPN-сервером. Однако в некоторых случаях они не переносили файл конфигурации на хост, а создавали его с помощью запуска файла vpnserver_x64.exe с ключами /install или /usermode_hidetray, а затем редактировали.

В файл конфигурации атакующие добавляли данные для удаленного подключения клиента к серверу и его аутентификационные данные. Ниже представлены соответствующие поля и их значения из конфигурационного файла.

AccountName Hostname
ha.bbmouseme[.]com 118[.]193.40.42

В завершение атакующие создавали задачу по расписанию для запуска файла vpnserver_x64.exe с ключом /service.

Ngrok agent и Krong

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

В качестве такого агента атакующие выбрали Ngrok agent — легкую программу, которая перенаправляет трафик из конечных точек в облачную инфраструктуру и обратно. Они устанавливают этот агент на зараженный хост и с его помощью перенаправляют трафик из облачной инфраструктуры на определенный порт на хосте.

Агент запускается следующей командой:

Порт, на который ngrok перенаправляет трафик из облачной инфраструктуры, прослушивает другой инструмент — Krong. Он представляет собой файл DLL, который загружается при помощи техники DLL Side-Loading (T1574.002 Hijack Execution Flow: DLL Side-Loading) и легитимного приложения с цифровой подписью AVG TuneUp. Этот инструмент через командную строку получает адрес и порт, к которому необходимо ожидать подключение:

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

Фрагмент кода Krong

Фрагмент кода Krong

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

FRP-клиент

После создания туннелей с помощью OpenSSH или SoftEther VPN атакующие дополнительно устанавливают на целевых хостах клиент FRP. FRP — это быстрый обратный прокси, написанный на языке Go. Он позволяет открыть доступ из Интернета к локальному серверу, расположенному за NAT или фаерволом. FRP имеет веб-интерфейс для изменения настроек и просмотра статистики подключений.

Для запуска клиента атакующие используют два файла:

  1. frpc.exe — исполняемый файл клиента FRP
  2. frpc.toml — файл конфигурации клиента

Атакующие дают файлам произвольные имена. Также они меняют расширение файла конфигурации со стандартного .toml на .ini, как и в случае с файлами закрытых ключей OpenSSH.

После переноса файлов на целевой хост атакующие создают сервис с произвольным именем и со следующей командной строкой:

Эта команда запускает FRP-клиент с конфигурационным файлом tc.ini. После этого все коммуникации с C2 проходят через этот инструмент.

Инструменты для сбора данных

Cuthead

В новой кампании злоумышленники использовали для поиска документов инструмент cuthead. Это название мы взяли из поля file description исполняемого файла. Этот инструмент представляет собой скомпилированный на .NET исполняемый файл, который предназначен для поиска и упаковки файлов в архив. Поиск может осуществляться по заданным расширениям или ключевым словам, встречающимся в имени файла.

Исполняемый файл принимает следующие аргументы:

  • Date — дата последнего изменения файла в формате yyyyMMdd. Инструмент будет искать файлы, измененные не ранее этой даты.
  • Extensions — строка без пробелов, в которой указаны расширения файлов, разделенные точкой с запятой.
  • Keywords — строка без пробелов, в которой указаны ключевые слова для поиска в именах файлов. Они тоже разделяются точкой с запятой.

Вот пример команды для поиска файлов при помощи cuthead:

В этом примере атакующие искали на хосте все файлы офисных приложений MS Excel, MS Word, а также PDF-файлы, которые изменялись после 26 июня 2023 года.

После запуска инструмент обрабатывает параметры командной строки и начинает рекурсивный поиск файлов в файловой системе на всех доступных дисках (T1005 Data from Local System). При этом из поиска исключаются папки, которые содержат следующие подстроки:

Также из поиска исключаются:

  • файлы, объем которых превышает 50 Мбайт (52 428 800 байт);
  • файлы, чьи расширения не соответствуют указанным в команде;
  • файлы, в имени которых не содержится ни одно из слов, если таковые заданы.

Из найденных файлов формируется список, который передается функции создания ZIP-архива (в разных версиях инструмента она называется по-разному, но выполняет одну и ту же задачу), с паролем Unsafe404. Для упаковки файлов используется ICSharpCode SharpZipLib версии 0.85.4.369 (T1560.002 Archive Collected Data: Archive via Library).

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

WAExp для кражи данных WhatsApp

WAExp написан на .NET и предназначен для поиска и сбора файлов локальных хранилищ веб-браузеров, в которых содержатся данные веб-версии приложения WhatsApp (web.whatsapp.com).

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

WAExp принимает следующие аргументы:

  • Check — функция, которая проверяет наличие данных на хосте.
  • Copy — функция, которая копирует найденные данные во временную папку.
  • Start — функция, которая упаковывает собранные данные в архив.
  • Remote — имя удаленного хоста.

При запуске с параметром check инструмент начинает поиск пользовательских папок. Если параметр remote указан в командной строке, то он ищет пользовательские папки по пути «\\[remote]\C$\users\«. Если параметр не задан, то через переменную окружения SystemDrive инструмент получает имя системного диска, в корне которого находится папка Users, где WAExp и будет искать данные. Далее инструмент перебирает все папки в этой директории, за исключением следующих:

В найденных пользовательских папках WAExp начинает поиск путей по которым расположены хранилища браузеров Chrome и Edge, а также хранилища различных продуктов Mozilla.

Для браузера Chrome инструмент открывает папку <User>\Appdata\local\Google\, а для браузера Edge — папку <User>\Appdata\local\Microsoft\Edge\. В них он по всем внутренним и вложенным папкам ищет директорию со следующим названием:

Для продуктов Mozilla WAExp открывает папку <User>\Appdata\roaming\ и в дочерних папках ищет директорию с именем:

В папке roaming могут находиться несколько директорий продуктов Mozilla, которые могут содержать данные хранилища для сайта web.whatsapp.com. Помимо браузера Firefox, с веб-версией WhatsApp взаимодействует, например, приложение Thunderbird, которое использует плагин для мессенджера.

Результат работы WAExp с параметром check

Результат работы WAExp с параметром check

На рисунке выше можно увидеть результат работы инструмента, запущенного с параметром check. Он показывает, что на хосте обнаружены файлы хранилищ для браузеров Chrome, Edge, Firefox и почтового клиента Thunderbird.

Если инструмент запускается с параметром copy, то все найденные файлы хранилищ данных для сайта web.whatsapp.com будут скопированы во временную папку для хранения:

Последний параметр, который использует инструмент, — это start. Если запустить WAExp с этим параметром, происходит повторный сбор файлов во временную папку, как это описано в функции copy. После этого инструмент упаковывает все данные из этой папки в архив при помощи модуля System.IO.Compression.ZipFile (T1560.002 Archive Collected Data: Archive via Library). Файл архива сохраняется без расширения с именем, состоящим из строки Default, даты и времени создания, по следующему пути:

После этого временная папка и папки веб-браузеров и других клиентов, в которых хранятся данные сайта web.whatsapp.com, удаляются.

Пример результата работы WAExp для всех параметров

Пример результата работы WAExp для всех параметров

На рисунке выше приведен пример данных, которые инструмент выводит при запуске с параметрами check, copy и start. В данном случае WAExp собирает информацию из папок браузера Chrome. В результате формируется архив, файл и содержимое которого изображены на рисунке ниже.

Файл архива в который WAExp сохраняет данные

Файл архива в который WAExp сохраняет данные

TomBerBil для кражи паролей из браузеров

Злоумышленников интересует не только сбор данных с хостов, но и получение доступа ко всем веб-сервисам, к которым имеют доступ пользователи. Имея высокие права в системе, они могут попытаться расшифровать данные браузеров, где содержатся файлы cookie и пароли, которые пользователь мог сохранить для автозаполнения форм при аутентификации в веб-сервисах (T1555.003 Credentials from Password Stores: Credentials from Web Browsers).

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

Чтобы избежать обнаружения, атакующие создали целую серию инструментов на основе разных технологий, предназначенных для одной цели — извлечения cookie-файлов и сохраненных паролей из браузеров Chrome и Edge.

Оба браузера используют для шифрования данных функцию CryptProtectData из DPAPI (Data Protection Application Programming Interface). Эта функция защищает данные с помощью пароля текущего пользователя в системе и специального мастер-ключа шифрования.

Все модификации инструмента TomBerBil действуют по одному принципу. После запуска начинается перечисление всех процессов, запущенных в системе. Инструмент ищет среди них все экземпляры процесса explorer.exe. Затем инструмент определяет пользователя, от имени которого запущены найденные процессы.

Функция определения пользователя

Функция определения пользователя

На рисунке представлен вариант реализации функции, определяющей пользователя по ID процесса (PID). В этой функции выполняется WMI-запрос к классу Win32_Process для получения объекта со свойством processID, равным переданному в функцию PID. Для полученного объекта вызывается метод GetOwner, который возвращает имя пользователя и имя домена, под которым был запущен процесс. После этого происходит поиск ключа шифрования, который хранится в поле encrypted_key в следующих файлах JSON браузеров:

Затем TomBerBil копирует токены найденных процессов, заимствует права пользователей, в контексте которых эти процессы выполняются, и пытается расшифровать мастер-ключ с помощью функции CryptUnprotectData. Для этого инструмент вызывает функцию Unprotect из пакета System.Security.Cryptography.ProtectedData. Эта функция, в свою очередь, вызывает функцию CryptUnprotectData из Windows DPAPI.

Вызов функции Unprotect

Вызов функции Unprotect

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

Если расшифровка проходит успешно, то TomBerBil начинает искать файлы Login Data и \Network\Cookies в следующих папках:

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

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

Большинство модификаций инструмента ведут журнал выполняемых действий. Ниже приведен пример журнала, сгенерированного TomBerBil:

Любопытно, что одна из модификаций мимикрировала под Kaspersky Anti-Virus. Файл этой модификации с именем avpui.exe (T1036.005 Masquerading: Match Legitimate Name or Location) и соответствующими метаданными можно увидеть на рисунке ниже.

Метаданные инструмента, выдающего себя за KAV

Метаданные инструмента, выдающего себя за KAV

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

Параметры, использующиеся в некоторых версиях TomBerBil

Параметры, использующиеся в некоторых версиях TomBerBil

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

Заключение

Мы рассмотрели несколько инструментов APT-группы ToddyCat, которые позволяют атакующим сохранять доступ к целевым инфраструктурам и в автоматическом режиме искать и собирать интересующие их данные. Злоумышленники активно используют различные методы обхода средств защиты, пытаясь замаскировать свое присутствие в системе.

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

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

Вредоносные файлы

1D2B32910B500368EF0933CDC43FDE0B WAExp
5C2870F18E64A14A64ABF9A56F5B6E6B WAExp
AFEA0827779025C92CAB86F685D6429A cuthead
C7D8266C63F8AECA8D5F5BDCD433E72A cuthead
750EF49AFB88DDD52F6B0C500BE9B717 TomBerBil
853A75364D76E9726474335BCD17E225 TomBerBil
BA3EF3D0947031FB9FFBC2401BA82D79 Krong

Легитимные инструменты

4A79A8B1F6978862ECFA71B55066AADD FRP-клиент
1F514121162865A9E664C919E71A6F62 vpnserver_x64.exe
6F32D6CFAAD3A956AACEA4C5A5C4FBFE vpnserver_x64.exe
9DC7237AC63D552270C5CA27960168C3 ngrok.exe
34985FAE5FA8E9EBAA872DE8D0105005 ngrok.exe

Адреса C2

103.27.202[.]85 — сервер SSH
118.193.40[.]42 — Server from SoftEther VPN
Ha[.]bbmouseme[.]com — Server from SoftEther VPN

URL

hxxp://www.netportal.or[.]kr/common/css/main.js vpnserver_x64.exe
hxxp://www.netportal.or[.]kr/common/css/ham.js Hamcore.se2
hxxp://23.106.122[.]5/hamcore.se2 Hamcore.se2
hxxps://etracking.nso.go[.]th/UserFiles/File/111/tasklist.exe vpnserver_x64.exe
hxxps://etracking.nso.go[.]th/UserFiles/File/111/hamcore.se2 Hamcore.se2

ToddyCat роет норы в вашей инфраструктуре и крадет секреты

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

 

Отчеты

CloudSorcerer: новая APT-угроза, нацеленная на российские государственные организации

«Лаборатория Касперского» обнаружила новую APT-угрозу CloudSorcerer, нацеленную на российские государственные организации и использующую облачные службы в качестве командных серверов аналогично APT CloudWizard.

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

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

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

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