Фальшивая капча ClickFix скрывает сложную атаку с похищением данных

information security

Аналитик кибербезопасности Louis Schürmann из Swiss Post Cybersecurity расследовал инцидент, который начался с безобидного на первый взгляд электронного письма и перерос в многостадийную атаку. Эксперты Swiss Post Cybersecurity обнаружили и проанализировали кампанию по распространению инфостилера (infostealer - вредоносная программа для кражи данных). Злоумышленники используют метод ClickFix для первоначального доступа и загрузчик DonutLoader для доставки шелл-кода. Эта атака наглядно демонстрирует, насколько сложной стала современная угроза: вместо простых вложений в письмах злоумышленники создают сложные цепочки заражения, включающие легитимные системные инструменты, чтобы оставаться невидимыми.

Описание

Атака началась с фишингового письма, в котором использовалась социальная инженерия. Затем был задействован дроппер (dropper - программа-загрузчик) на PowerShell, а финальной стадией стала доставка в память вредоносной нагрузки для кражи данных. Подробный разбор этой кампании позволяет понять, как злоумышленники обманывают пользователей, используют динамическую компиляцию кода для сокрытия своих инструментов и применяют выполнение в памяти, чтобы не оставлять следов на диске. Анализ этих тактик, техник и процедур (TTPs) помогает лучше понять современные стратегии уклонения, используемые вредоносным программным обеспечением, и определить ключевые возможности для обнаружения и защиты.

ClickFix

Первой точкой входа стало выполнение пользователем команды PowerShell, доставленной через метод социальной инженерии, известный как ClickFix. Пользователь перенаправляется на вредоносный URL-адрес, где отображается фальшивая капча (CAPTCHA). Эта капча инструктирует пользователя выполнить серию комбинаций клавиш (Win + R, Ctrl + V, Enter), которые запускают команду PowerShell, ранее скопированную в буфер обмена веб-сайтом. Многолетний опыт взаимодействия с легитимными капчами и системными запросами заставляет пользователя поверить, что он выполняет необходимую проверку.

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

Сама команда короткая и неприметная. Сначала шестнадцатеричная строка декодируется для извлечения вредоносного URL-адреса. Затем с этого адреса с помощью команды Invoke-RestMethod извлекается сценарий PowerShell и выполняется непосредственно в текущем процессе. Это знаменует начало первого этапа заражения. После первоначального доступа команда PowerShell загружает сценарий, который действует как дроппер, работающий в памяти. Сценарий скрывает собственное консольное окно с использованием динамически скомпилированного кода на C# и вызовов API Windows. Если этот первоначальный метод не срабатывает, сценарий использует резервную технику, основанную на присвоении окну уникального заголовка и его сокрытии путем поиска процесса.

На втором этапе PowerShell-стагер (stager - программа-загрузчик) внедряет компактный загрузчик .NET непосредственно в свой собственный процесс powershell.exe. Основная цель этого загрузчика - расшифровать пакет шелл-кода Donut, разместить его в памяти и запустить, не сохраняя файл на диск и не создавая новый процесс. Все распаковка, размещение и передача управления нативному инфостилеру происходят внутри оригинальной среды выполнения PowerShell. Внутри восстановленного .NET-проекта точка входа загрузчика находится в файле sytuczzzsgolfnefxrmr.cs. Метод Main() лаконичен, каждая инструкция тщательно подобрана для обеспечения бесперебойного выполнения.

Сначала код проверяет язык интерфейса компьютера и немедленно завершает работу, если обнаруживает локализацию стран СНГ, такую как русский, белорусский или казахский. Это предотвращает случайное заражение в регионе, где, предположительно, действуют злоумышленники. Если локаль приемлема, загрузчик обращается к ASCII-шестнадцатеричной строке размером 1,7 МБ, встроенной прямо в код. Восемь байт в начале строки служат ключом для алгоритма шифрования RC4. Загрузчик декодирует текст, применяет RC4 с извлеченным ключом, а затем пропускает результат через поток LZMA. Менее чем за секунду в памяти формируется буфер, содержащий два объединенных бинарных файла: заглушку Donut 0.9.3 и финальный нативный вредоносный двоичный файл.

После этого загрузчик резервирует блок адресного пространства с помощью прямого вызова P/Invoke к VirtualAlloc. Пакет копируется, помечается как исполняемый и запускается в новом потоке, без использования высокоуровневых Win32 API. Вместо этого загрузчик использует сырые системные вызовы, предоставляемые небольшой вспомогательной структурой. Это позволяет обходить пользовательские перехватчики (hooks), которые системы EDR (обнаружения и реагирования на конечных точках) используют для мониторинга подозрительной активности. Поскольку все операции с высоким уровнем риска выполняются с помощью этих специально разработанных системных вызовов, стандартные вызовы API, которые обычно отслеживаются, не видны большинству перехватчиков EDR в пользовательском пространстве.

После передачи управления в код Donut заглушка создает собственную таблицу системных вызовов, предоставляя последующим стадиям те же привилегии для обхода перехватчиков, что и у оболочки. Затем она расшифровывает и распаковывает встроенный двоичный файл, используя ту же процедуру RC4 → LZMA. Бинарный файл вручную реконструируется в памяти без вызова загрузчика Windows. Управление передается на точку входа бинарного файла в новом потоке. Поскольку не используются LoadLibrary или CreateProcess, бинарный файл никогда не появляется в списке модулей или событиях ETW ImageLoad, и вторжение продолжает существовать исключительно в оперативной памяти.

После передачи управления от Donut, размещенный бинарный файл оказывается специализированным инфостилером, который не соответствует ни одному известному семейству вредоносных программ. Статические идентификаторы, жестко прописанные в нескольких экземплярах нагрузки, указывают на то, что один и тот же инструментарий использовался в более чем одной кампании. Функционально его цели очевидны. Код ориентирован почти исключительно на браузеры. В случае с Firefox он получает доступ к активному профилю напрямую, извлекая файлы cookies.sqlite, cert9.db, key4.db и places.sqlite. Этих четырех файлов достаточно для получения сессионных куки, сохраненных логинов, хранилищ сертификатов и полной истории браузера. Сразу после сбора этих файлов стилер делает единичный снимок экрана рабочего стола и сохраняет изображение в формате PNG в памяти. Это изображение отправляется на командно-контрольный сервер (C2) без сохранения на локальном диске.

Браузеры на основе Chromium обрабатываются иначе. Вредоносная программа открывает WebSocket-соединение с портом отладки браузера и использует нативные команды Chrome DevTools, такие как Network.getAllCookies. Этот подход позволяет получать живые, расшифрованные объекты куки, что устраняет необходимость поиска базы данных куки на диске или работы с DPAPI. Жестко прописанные в бинарном файле пути, ссылающиеся на BinanceBrowser\Default, указывают на особый интерес к сессиям, связанным с криптовалютой.

Весь собранный материал передается через минималистичный TCP-сервис, ожидающий соединений по адресу 31.177.108[.]17:12345. Проводной протокол начинается с простых текстовых управляющих слов, затем переключается на блок данных, зашифрованный с помощью XOR. Каждая передача включает два постоянных тега, которые позволяют оператору отслеживать жертв по нескольким загрузкам. Имена файлов отправляются в открытом тексте, за ними следует зашифрованное содержимое каждого файла. Механизм обеспечения постоянства (persistence) не реализован, и на диске не остается следов. После финального подтверждения процесс ненадолго засыпает, освобождает рабочие буферы и завершается, оставляя в оперативной памяти только область памяти, созданную Donut, и завершенный поток.

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

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

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

IPv4

  • 31.177.108.17

IPv4 Port Combinations

  • 31.177.108.17:12345

URLs

  • rtjj.store/amountatom/believemesh
  • rtjj.store/f/h

Domains

  • admilzsolutions.co.ke
  • rtjj.store

SHA256

  • 1e52ed52921eedcd858cc0d0ed9164d70840c742ddbad7d3fd65666d24c40cda
  • 5a65621791cdcbce3cd1ee200454bec87f99a7e46d2aa0ffcb8e15870e378ecd
  • 9d9d5bebe19a536491720424d69cbbc808e96f5dca9d18e0133ec45bdd39092e
  • e0038e6450f74f388e8952e1f7baa15de4631ed99568b0bddf99ab336d7d6343
Комментарии: 0