Исследования GReAT

«Операция FlashHole»: Lazarus взламывает защиту и обходит контроль

В январе мы столкнулись с новой волной атак группы Lazarus. Эта кампания стала продолжением прошлогодней «Операции SyncHole» и также была направлена на цели в Южной Корее. Злоумышленники использовали доработанную цепочку заражения, которая сочетала в себе уже известное и новое вредоносное ПО (мы проанализировали ее целиком). Кроме того, они использовали в ходе атаки очередную защитную программу, обязательную для установки в Южной Корее, и применяли стратегию watering hole. Примечательно, что в этой кампании группа работала с целями более тщательно: злоумышленники рассылали целевые фишинговые письма со ссылками на поддельные, но релевантные сайты — например, страницы с портфолио и резюме, подготовленные под каждую жертву. Мы назвали эту активность «Операция FlashHole».

Схема "Операции FlashHole" на этапе первоначального заражения

Схема «Операции FlashHole» на этапе первоначального заражения

Наше исследование показывает, что первые признаки новой кампании появились в июле 2025 года. Это позволяет предположить, что группа начала подготовку к ней вскоре после завершения «Операции SyncHole», которая продолжалась не менее четырех месяцев. Мы выявили как минимум три организации в Южной Корее, пострадавшие от этой кампании. Они работают в сферах разработки ПО, строительства и производства оборудования проводной связи. По сравнению с «Операцией SyncHole» набор отраслей изменился. Это говорит о том, что со временем группа расширяет круг целей.

Предыстория

Спустя более года после первого обнаружения «Операции SyncHole» мы выявили подозрительную цепочку выполнения, источником которой было легитимное южнокорейское ПО. Она была похожа на аналогичную цепочку из предыдущей кампании, но на этот раз злоумышленник злоупотреблял CrossWeb EX, а не Cross EX, как в «Операции SyncHole». Оба приложения, судя по всему, поддерживаются одним разработчиком, и оба связаны с защитой финансовых операций. CrossWeb EX — решение для защиты финансовых операций, которое требуется для доступа к распространенным сайтам онлайн-банкинга и государственных служб. Оно предназначено для шифрования соединения между браузером пользователя и веб-сервером с помощью инфраструктуры открытых ключей (PKI). Группа Lazarus эксплуатирует это ПО не впервые. Она применяла его в 2021 году для доставки загрузчика Racket, а также в 2022 и 2023 годах. Хотя остается неизвестным, как именно злоумышленники использовали CrossWeb EX, мы установили, что цепочка атаки в итоге ведет к выполнению вредоносного ПО в памяти.

Мы обратили внимание, что создаваемый процесс выполнялся с высоким уровнем целостности. Родительский процесс INISAFECrossWebEXSvc.exe относится к комплекту установки INISAFE CrossWeb EX V3 версии 3.4.1.2, которая была выпущена в 2023 году после выхода бюллетеня KrCERT.

Как уже отмечалось в статье об «Операции SyncHole», данная схема полностью соответствует давней стратегии группы Lazarus, которую она применяет против целей в Южной Корее на протяжении многих лет. Поскольку CrossWeb EX и подобное ПО обязательно для пользователей в Южной Корее и обычно работает в фоновом режиме для взаимодействия с браузером, группа использует его в качестве ключевого вектора атаки. В 2025 году на симпозиуме USENIX Security было представлено исследование уязвимостей обязательного в Южной Корее ПО для обеспечения безопасности, непреднамеренно создающих обширную поверхность атаки.

В июле 2026 года правительство Южной Кореи и ряд местных поставщиков решений для ИБ также опубликовали совместный бюллетень, в котором описаны типичные техники атак Lazarus, в том числе эксплуатация ПО, предназначенного для защиты финансовых операций. Несмотря на то что информация в бюллетене пересекается с результатами наших исследований «Операции FlashHole» и «Операции SyncHole» и существует подробный аналитический отчет AhnLab под названием Operation Double Barrel о недавней активности группы Lazarus, мы проведем более точную атрибуцию на основе используемых группой тактик, техник и процедур (TTP). Подробнее об этом см. в разделе «Атрибуция и связь с другими кампаниями».

Первоначальный вектор заражения

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

Внешний вид вредоносных сайтов

Внешний вид вредоносных сайтов

На первом сайте с резюме было размещено изображение — якобы фотография соискателя, но отсутствие метаданных EXIF и неестественная текстура позволяют предположить, что оно было создано при помощи ИИ. Это указывает на то, что Lazarus, как и другие корейскоязычные группы (1, 2), дополнила свою давнюю стратегию применением генеративного ИИ. Вероятнее всего, группа также использовала ИИ для создания сайта-приманки: имя соискателя похоже на «Иван Иванов», адаптированное на корейский манер, а само портфолио заполнено, по всей видимости, бессмысленными сведениями и случайно подобранными названиями компаний. Сгенерированный сайт затем вручную дорабатывали под конкретных жертв.

По нашим предположениям, на сайте с резюме было использовано изображение, сгенерированное с помощью ИИ

По нашим предположениям, на сайте с резюме было использовано изображение, сгенерированное с помощью ИИ

Сайты содержали ссылки, по которым с помощью тега script загружался внешний JavaScript-файл.

  • Вредоносная ссылка, встроенная в сайт с резюме: hxxps://javadevhouse.co[.]kr/ajax/libs/jquery/1.7.3/jquery.min.js
  • Вредоносная ссылка, встроенная в сайт о дизайне интерьеров: hxxps://pythonapischool[.]com/api/detach

По результатам анализа мы со степенью уверенности от средней до высокой предполагаем, что жертвы получали фишинговые письма со ссылками на вредоносный сайт, размещенный на GitHub Pages (с использованием домена <username>.github.io). Согласно результатам исследования, посещение сайта с высокой вероятностью приводило к заражению с использованием ПО CrossWeb EX. Эта версия соответствует подходу группы Lazarus, который наблюдается в последнее время и описан в совместном бюллетене правительства Южной Кореи и поставщиков защитных решений.

Полная цепочка заражения

После первоначальной компрометации целевой системы из процесса CrossWeb EX запускался легитимный исполняемый файл Windows fsquirt.exe, в который затем внедрялся шелл-код с вредоносной DLL — зловредом TechHub. В ходе тщательного исследования мы выявили несколько видов вредоносной нагрузки и восстановили полную цепочку заражения. Цепочка достаточно сложна; группа применила на атакуемых узлах усовершенствованные техники с целью скрыть как вредоносную нагрузку, так и общие цели атаки, а также использовала нетривиальную схему доставки вредоносного ПО. Последняя была существенно доработана по сравнению с предыдущей кампанией, несмотря на то что новая стартовала менее чем через год. Примечательно, что приведенная ниже цепочка первоначального заражения существует только в памяти: злоумышленники явно приложили немало усилий, чтобы скрыть факт компрометации.

Общая цепочка первоначального заражения

Общая цепочка первоначального заражения

После первоначальной компрометации атакующие стремились закрепиться в сети: для этого они внедряли вредоносное ПО TouchHub и TouchShift методом динамической загрузки (DLL sideloading) библиотеки под именем mscoree.dll. Зловред TouchHub развертывался с помощью первого экземпляра TechHub. Затем методом DLL sideloading TouchHub запускал TouchShift, что в итоге приводило к выполнению в памяти еще одного экземпляра TechHub. При втором запуске TechHub развертывал еще два компонента, ClientHub и LPEClient, а не запускал Cubridge напрямую. На диске обнаружились лишь минимальные следы этих файлов, а остальной вредоносный код находился исключительно в памяти.

Расширенная цепочка заражения после закрепления

Расширенная цепочка заражения после закрепления

На этапе первоначальной компрометации зловред Cubridge существует только в памяти, поэтому мы полагаем, что эта непрямая многоступенчатая цепочка нужна группе для его повторного развертывания после закрепления в сети. Ведь именно он выполняет роль самого сложного оркестратора в атаке.

Вредоносный инструментарий

Полная цепочка включает усовершенствованные варианты известного вредоносного ПО Lazarus: TechHub, Cubridge, TouchShift и LPEClient, а также недавно обнаруженные TouchHub и ClientHub.

TechHub: начало цепочки

TechHub (загрузчик, играющий в этой атаке центральную роль) взаимодействует с GitHub при помощи персонального токена доступа (PAT). Он является первой вредоносной нагрузкой, с которой начинается цепочка. Его функциональности достаточно для профилирования скомпрометированных узлов и развертывания последующих нагрузок.

Эта разновидность загрузчика представляет собой улучшенную версию вредоносного ПО, которое компания Mandiant назвала CLOUDBURST, а ESET — NickelLoader. Согласно отчетам, более ранняя версия взаимодействовала с командным сервером по HTTP(S) для получения дополнительных вредоносных нагрузок. Однако в последней обнаруженной нами итерации вместо этого используется GitHub, а строки команд обновлены.

В цепочке мы обнаружили три варианта TechHub: первый работает только в памяти, второй использует простую схему DLL sideloading, а третий также применяет DLL sideloading, но с регистрацией службы Windows. Вредоносная программа обращается к закрытому репозиторию GitHub через API GitHub. В зависимости от того, на каком этапе она загружается, она использует либо зашитые в код, либо взятые из конфигурационного файла учетные данные.

При загрузке TechHub генерирует 4-байтовый шестнадцатеричный идентификатор (ID) в диапазоне 0x1000–0xFFFF или считывает его из конфигурационного файла. По этому идентификатору злоумышленники различают скомпрометированные узлы. Загрузчик проверяет задачи (issues) на GitHub с помощью запроса GET /issues?state=[open/closed] и выясняет, остался ли активным какой-либо предыдущий сеанс связи. Если такой сеанс найден, TechHub удаляет его следы, а затем переходит к процедуре рукопожатия.

  1. Он создает новую задачу с заголовком 1[ID] и телом «hel» с помощью запроса POST /issues и выставляет ей статус open.
  2. Затем он получает из репозитория файл, в имени которого содержится значение 2[ID]. Этот файл содержит открытый ключ RSA.
  3. Загрузчик генерирует случайный 16-байтовый ключ XOR и шифрует его полученным открытым ключом RSA, после чего загружает результат с префиксом 1[ID] в репозиторий.
  4. Зашитый в код вектор инициализации (IV) объединяется со сгенерированным 16-байтовым ключом с помощью операции XOR и применяется после рукопожатия.

При обмене файлами их имена соответствуют шаблону [1|2][ID][случайный 16-байтовый ключ]. Это происходит на протяжении всего взаимодействия. Префикс «2» означает передачу из репозитория в TechHub, а «1» — передачу из TechHub в репозиторий. Случайный 16-байтовый ключ, содержащийся в имени файла, служит для шифрования и расшифрования содержимого каждого файла по алгоритму AES. При этом используется либо зашитый в код IV, либо обновленный.

После обмена ключами TechHub повторно считывает файл с префиксом «2» и проверяет, совпадают ли полученные данные со строкой «hel». Если проверка пройдена, загрузчик собирает подробные данные о зараженном узле. Затем данные шифруются и отправляются в репозиторий. После передачи информации об устройстве процедура завершается изменением тела ранее созданной задачи с «hel» на «hey» при помощи запроса PATCH /issues/[номер задачи]. С этого момента вредоносное ПО полностью готово к получению команд из репозитория.

TechHub поддерживает четыре команды. Команда laeca запускает развертывание вредоносной нагрузки, упакованной в шелл-код, который рефлексивно загружает встроенную нагрузку прямо в память.

Команда Описание
mqdrz Собирает информацию об устройстве и запущенных на нем процессах
laeca Напрямую вызывает полученный шелл-код в памяти
aqvxp Завершает текущий процесс
rtcya Отправляет сигнальные сообщения после рукопожатия

Cubridge — оркестратор комплекса вредоносного ПО

Зловред Cubridge, развернутый на скомпрометированном узле с помощью TechHub, способен получать различные вредоносные нагрузки несколькими способами. Он выполняет функции центрального оркестратора всего комплекса вредоносного ПО и работает с рядом плагинов, модулей и инструментов. Более ранняя версия Cubridge также упоминалась в отчетах, в которых рассматривалась предыдущая версия TechHub. В отчете Mandiant зловред Cubridge упоминался под названием SIDESHOW, а специалисты ESET назвали один из его модулей LightlessCan.

Cubridge случайным образом выбирает один из предопределенных командных серверов и связывается с ним, формируя для каждого запроса отдельный серверный URL-адрес по шаблону [C2_URL]/[page1]/[page2]/[page3]. В этом URL-адресе объединяются слова из заранее заданных списков. В ходе анализа мы выявили один жестко прописанный в коде командный сервер hxxps://cubedesign[.]co[.]kr/news/AABBCC, связанный с исследуемым экземпляром, который был настроен на версию 5.1. При генерации URL-адреса значение AABBCC заменяется пустым. Сегменту page3 присваивается случайно сгенерированное целое число в диапазоне от 10000000 до 99999999. Таким образом каждый запрос получает свой уникальный URL-адрес, при этом все они выглядят правдоподобно.

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

Ниже приведен предопределенный список слов для page2:

Таким образом URL-адрес, зашитый в код, можно затем преобразовать по описанной выше схеме, например, в hxxps://cubedesign[.]co[.]kr/news/economy/article/12345678.

Для аутентификации на командном сервере с помощью POST-запроса требуются три параметра «ключ — значение». Каждый ключ генерируется случайным образом на основе других предопределенных словарей, а значения состоят из случайно сгенерированного 8-байтового шестнадцатеричного идентификатора бота, фиксированного токена аутентификации (KW4Ofw982CNJjxd51AVqkGAop) и случайно сгенерированного 16-байтового шестнадцатеричного идентификатора сессии.

В Cubridge используется более надежное рукопожатие, чем в TechHub: в нем сочетаются алгоритмы RSA и RC6. В отличие от TechHub, Cubridge пропускает этап профилирования и сразу после рукопожатия переходит к получению команд и управлению. При обмене данными вредоносная программа имитирует запросы браузера. Для аутентификации она использует заголовки X-CSRF-Token и X-Requested-With, а для запроса дополнительных данных — заголовок Upgrade-Insecure-Requests.

Последовательность обмена данными между Cubridge и командным сервером

Последовательность обмена данными между Cubridge и командным сервером

У Cubridge много функций, но в первую очередь он предназначен для загрузки вредоносной нагрузки следующих этапов. В этих командах применяются различные техники, в том числе внедрение DLL, рефлексивная загрузка и внедрение в общие области памяти (section mapping injection). Вредоносная нагрузка может доставляться в различных формах:

  • Плагины — расширения в виде шелл-кода и DLL. Они добавляют функции по мере необходимости и могут вызываться в любой момент.
  • Инструменты (в виде DLL) — самостоятельные утилиты, выполняющие разовые задачи.
  • Модули — компоненты, которые загружаются единожды и остаются активными, расширяя набор доступных функций.

Мы предполагаем, что команды для плагинов и шелл-кода загружают одни и те же типы плагинов, поскольку и те и другие поддерживают экспортируемую функцию схожего вида для выполнения дальнейших действий. Шелл-код можно получить из плагина в формате DLL с помощью инструмента с открытым исходным кодом sRDI. Скорее всего, формат одиночной DLL используется для независимого запуска отдельных инструментов. В этом случае доступна лишь точка входа DllMain с ее параметрами, а остальные экспортируемые функции не используются.

Команда Тип вредоносной нагрузки Описание
0 — Собирает информацию об устройстве: имя компьютера, часовой пояс, PID и прочее
1 Архивирует указанный файл или каталог с помощью устаревшего алгоритма ZipCrypto с жестко заданным паролем xdkiTajAAxc3i/w[<881fnC!G*cb1Dit2sh.gAk/
2 Создает файл по указанному пути
3 Возможно, плагин Внедряет переданную DLL с вредоносной нагрузкой в целевой процесс и загружает ее методом рефлексивного внедрения DLL
4 Плагин Рефлексивно загружает плагин в формате DLL
5 Получает адрес указанной экспортируемой функции целевого плагина и запускает ее с переданными параметрами
6 Получает всю информацию о загруженных плагинах
7 Выгружает указанный плагин
8 Шелл-код Внедряет переданный шелл-код в целевой процесс и загружает его через общие области памяти
9 Загружает переданный шелл-код непосредственно в память
10 Получает адрес указанной экспортируемой функции из целевого шелл-кода (который, скорее всего, является плагином в виде шелл-кода) и запускает ее с переданным параметром
11 Получает всю информацию о загруженном шелл-коде
12 Выгружает указанный шелл-код
13 — Задает время запланированного запуска Cubridge (в минутах) путем обновления глобальной переменной
14 Задает время запланированного запуска Cubridge (в минутах) путем обновления глобальной переменной и отключает мониторинг путем обновления другой глобальной переменной
15 Корректно завершает работу Cubridge
16 Получает конфигурацию Cubridge: глобальные флаги, количество командных серверов, их адреса и прочие настройки
17 Обновляет глобальные флаги, количество командных серверов, их адреса и прочие настройки
18 Инструмент Рефлексивно загружает DLL с указанным параметром
19 Настраивает параметры загрузки отдельной DLL
20 Выгружает отдельную DLL
21 Модуль Рефлексивно загружает «модуль действий» (ActionModule.dll) и вызывает его экспортируемую функцию AppinfoView
22 Рефлексивно загружает «функциональный модуль» (FunctionModule.dll) и вызывает его экспортируемую функцию PresentationFontConfig

Команды 21 и 22 загружают разные модули. Судя по внутренним названиям, модуль действий отвечает за базовые операции с файлами и процессами, а функциональный модуль реализует стандартные команды Windows. Модуль действий работает с командами 23–41, а функциональный модуль — с командами 42–79.

Модуль действий обрабатывает команды системных операций, взаимодействия с файловой системой и управления процессами. Он вызывается путем передачи нужной команды и параметров в его экспортируемую функцию AppinfoView. Модуль поддерживает 19 команд с номерами от 23 до 41. Результаты выполнения передаются оркестратору Cubridge, а тот пересылает их на командный сервер.

Команда Назначение
23 Получает объем каждого локального диска
24 Получает информацию об указанном файле или каталоге
25 Выполняет переданную команду
26 Получает информацию об указанном файле или каталоге (аналогично команде 24)
27 Выполняет переданную команду от имени целевого процесса (подмена PPID)
28 Выполняет переданную команду от имени целевого процесса в рамках указанной сессии (подмена PPID и имитация сессии)
29 Получает подробную информацию о процессах
30 Завершает указанный процесс
31 Приостанавливает все потоки указанного процесса
32 Возобновляет выполнение всех потоков указанного процесса
33 Безвозвратно удаляет файл путем перезаписи его содержимого следующей последовательностью: 0 → 1 → случайные байты → 1 → 0
34 Переименовывает указанный файл в :EFS (область альтернативного потока данных) и удаляет его через нативный API SetFileInformationByHandle
35 Задает текущий рабочий каталог
36 Копирует указанный файл по заданному пути
37 Удаляет указанный каталог
38 Перемещает указанный файл по заданному пути
39 Создает указанный каталог
40 Инициирует неблокирующую попытку подключения к указанным IP-адресу и порту (возможно, для сканирования портов)
41 Читает указанный файл

Функциональный модуль реализует команды, которые эмулируют встроенные команды Windows. Аналогично модулю действий, его процедура DllMain инициализирует все поддерживаемые функции команд, которые затем вызываются через экспортируемую функцию PresentationFontConfig. Всего модуль выполняет 38 команд с номерами от 42 до 79. Мы полагаем, что этот модуль основан на более раннем LightlessCan, но в виде отдельного модуля мы видим его впервые.

Команда Назначение
42 Делает снимки всех экранов и архивирует их с использованием устаревшего алгоритма ZipCrypto с жестко заданным паролем xdkiTajAAxc3i/w[<881fnC!G*cb1Dit2sh.gAk/
43 Синхронизирует MAC-метки времени (изменения, доступа и создания) файла, указанного во втором аргументе, с метками файла, указанного в первом аргументе
44 Получает информацию об указанном каталоге
45 Получает информацию об указанном диске
46 Внедряет переданную библиотеку DLL с вредоносной нагрузкой в целевой процесс
47 Выгружает указанную DLL из указанного процесса
48 Реализует команду ipconfig
49 Реализует команду net
50 Реализует команду netsh advfirewall firewall
51 Реализует команду netstat
52 Реализует команду ping -6
53 Реализует команду reg
54 Реализует команду sc
55 Реализует команду ping
56 Реализует команду whoami
57 Реализует команду nslookup
58 Реализует команду schtasks
59 Реализует команду systeminfo
60 Реализует команду arp
61 Вызывает функцию CryptUnprotectData, чтобы получить AES-ключ, защищенный с помощью DPAPI. Извлекает ключ по ключевому слову encrypted_key из файла Local State браузера на основе Chromium. Файл расположен по адресу: %LOCALAPPDATA%\Google\Chrome\User Data\Local State
62 Не реализовано
63 Не реализовано
64 Читает указанный файл и расшифровывает его с помощью операции XOR с ключом 0x59. Затем извлекает из расшифрованного буфера пути и архивирует файлы и каталоги по этим путям с помощью устаревшего алгоритма ZipCrypto с жестко заданным паролем xdkiTajAAxc3i/w[<881fnC!G*cb1Dit2sh.gAk/
65–79 Не реализовано

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

Тип вредоносной нагрузки Название Описание
Плагин ADFinder (AdFinder.dll) Выполняет LDAP-запросы в среде Active Directory и принимает шесть аргументов, среди которых путь к файлу журнала, ADsPath, фильтр поиска и имена атрибутов.
Плагин FileCollector (Dll.dll) Рекурсивно сканирует все подкаталоги и файлы в указанном каталоге и собирает подробную информацию о каждом из них.
Инструмент Стилер для сбора данных из браузеров Может внедряться в браузеры на основе Chromium, такие как Google Chrome, Microsoft Edge и Brave. После внедрения извлекает файлы и учетные данные из браузеров жертвы, включая сохраненные пароли, закладки, историю, настройки и файлы cookie.
Инструмент Сборщик данных о процессах Перебирает все запущенные процессы и извлекает идентификатор, путь и командную строку каждого из них.

TouchHub устанавливает службу для TouchShift

В ходе анализа мы получили из приватного GitHub-репозитория TechHub ранее неизвестный образец вредоносного ПО, который служил установщиком для TouchShift. Мы назвали это вредоносное ПО TouchHub. При запуске оно копирует легитимный файл printfilterpipelinesvc.exe в C:\Windows\System32\RasConv\ImeBroker.exe, регистрирует его как службу и помещает в тот же каталог встроенную вредоносную нагрузку TouchShift с именем mscoree.dll. После этого вредоносное ПО синхронизирует MAC-метки времени (изменения, доступа и создания) файла C:\Windows\System32\drivers\monitor.sys с метками только что записанного файла, чтобы затруднить криминалистический анализ.

Затем оно переходит к регистрации службы. Для этого оно собирает до 100 имен легитимных служб, входящих в группу netsvcs процесса svchost и указанных в разделе реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost. TouchHub случайным образом выбирает одно из этих имен и создает новое имя службы путем добавления двух случайных букв. Под этим именем программа создает службу с описанием Microsoft Service, которая запускает жестко прописанную в коде командную строку C:\Windows\System32\RasConv\ImeBroker.exe -TimeBroker. Созданная служба сразу же запускается.

Всего TouchHub создает в указанном каталоге три файла для запуска TouchShift с привилегиями SYSTEM.

Путь Тип Описание
C:\Windows\System32\RasConv\ImeBroker.exe Исполняемый файл, зарегистрированный как служба Скопирован из C:\Windows\System32\printfilterpipelinesvc.exe
C:\Windows\System32\RasConv\mscoree.dll Вредоносная нагрузка TouchShift, загружаемая методом DLL sideloading Файл, создаваемый TouchHub, который содержит зашифрованные вредоносные нагрузки и фрагменты легитимной DLL, что значительно увеличивает его размер
C:\Windows\System32\RasConv\ActivationStore.dat Файл конфигурации TechHub Создается TouchHub после извлечения значений конфигурации

TouchShift — широко распространенный загрузчик, используемый во множестве цепочек заражения

Загрузчик TouchShift, загружаемый TouchHub, почти идентичен версии, описанной в блоге Mandiant, и даже содержит такую же вредоносную экспортируемую функцию LockClrVersion. Он берет аргумент, получаемый от TouchHub, и применяет к нему операцию XOR с жестко заданным ключом. Полученное значение еще раз подвергается операции XOR с именем исполняемого файла, и результат используется в качестве ключа AES. Длина каждой из строк, участвующих в этом процессе (аргумента, ключа XOR и имени файла), должна составлять ровно 16 байт. Более короткие строки дополняются нулевыми байтами (\x00), а более длинные обрезаются до 16 символов. Например, одна из комбинаций строк в полученном образце выглядела следующим образом:

  • Аргумент: -TimeBroker\x00\x00\x00\x00\x00 (дополнен нулевыми байтами)
  • Жестко заданный ключ XOR: x809G736iC3f8Wp8
  • Имя исполняемого файла: ImeBroker.exe\x00\x00\x00 (дополнен нулевыми байтами)

Получив ключ, вредоносное ПО расшифровывает встроенную вредоносную нагрузку по алгоритму AES-CBC-128 без дополнения до длины, кратной размеру блока. Расшифрованные данные представляют собой шелл-код, который начинается с инструкции call и содержит вредоносную нагрузку следующего этапа. Это третий вариант TechHub (с DLL sideloading и регистрацией службы), который использует ActivationStore.dat как внешний конфигурационный файл.

ClientHub

Кроме того, мы обнаружили новое вредоносное ПО, которое хранилось в закрытом репозитории TechHub, и назвали его ClientHub. Оно поддерживает различные команды, которые формируются с помощью битовой маски. Существует как минимум две версии ClientHub: одна взаимодействует с веб-сайтами по протоколу HTTP(S), а другая обращается к API Dropbox с использованием учетных данных.

В зависимости от версии конфигурация берется либо из внутренних ресурсов, либо из внешнего файла конфигурации C:\Program Files\Common Files\System\msadc\msadc.inc. Конфигурация включает в себя ключи и векторы инициализации для алгоритма SNOW 1.0, время запланированного запуска и адреса командных серверов, зашифрованные потоковым шифром SNOW. SNOW — семейство высокоскоростных потоковых шифров, которые применяются для защиты данных в телекоммуникациях и беспроводных сетях. Это первый случай, когда такой шифр наблюдается во вредоносном ПО группы Lazarus.

Для установления связи с командным сервером вредоносное ПО сначала генерирует случайный 32-байтовый массив. Затем оно перезаписывает части этого массива данными, собранными на скомпрометированном устройстве. Результирующий 32-байтовый массив представляет собой смесь случайных байтов и значимой информации. Позже этот массив используется как ключ алгоритма SNOW для расшифровки данных, полученных от командного сервера. Наконец, массив с ключом шифруется с помощью жестко заданного открытого ключа RSA и кодируется в Base64.

Смещение Размер Значение поля
0 4 Идентификатор текущего процесса
4 4 Первые четыре байта расшифрованной информации о командном сервере.
8 7 Случайно сгенерированные байты
15 1 Вычисляемое значение флага, указывающее на текущее состояние конечного автомата.
16 8 Текущее системное время в виде структуры FILETIME.
24 8 Случайно сгенерированные байты

Зашифрованный текст передается на командный сервер с помощью GET-запросов. Каждый запрос содержит нетипичные для вредоносного ПО заголовки: Sec-CH-UA, Sec-CH-UA-Platform, Sec-CH-UA-Mobile, Sec-Fetch-Mode и Sec-Fetch-Dest. Обычно такие заголовки используются легитимными браузерами на основе Chromium, поэтому вредоносная программа может с их помощью выдавать свой трафик за обычный и избегать обнаружения. Командный сервер отвечает командами, которые передает в нестандартном заголовке и теле сообщения.

По полю body_type в заголовке определяется способ обработки следующей вредоносной нагрузки. Это значение работает как битовая маска, где каждый бит соответствует отдельному флагу (например, 0x1, 0x2, 0x4 и так далее). Итоговое поведение зависит также от того, установлен ли младший значащий бит (бит 0): если значение нечетное, вредоносное ПО воспринимает тело входящего сообщения как дополнительную вредоносную нагрузку, которая затем загружается в память. Если же значение четное, вредоносное ПО вызывает ранее загруженную нагрузку.

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

Битовая маска Значение в десятичном виде Описание Результат, отправляемый на командный сервер
0x00000001 1 Загрузка DLL: рефлексивно загрузить полученное тело сообщения вместе с переданным параметром Базовый адрес образа нагрузки
0x00000011 3 Плагин: рефлексивно загрузить полученное тело сообщения, определить адрес функции во вредоносной нагрузке и вызвать эту функцию с переданным параметром Базовый адрес образа нагрузки, адрес вызванной функции и результат выполнения
0x00000101 5 Плагин: рефлексивно загрузить полученное тело сообщения и получить адрес функции во вредоносной нагрузке, но не вызывать ее сразу Базовый адрес образа нагрузки и адрес функции
0x00001011 11 Плагин: выполнить действия, соответствующие значению 3, и сразу после вызова плагина выгрузить его —
0x00010001 17 Загрузка DLL: рефлексивно загрузить полученное тело сообщения с переданным параметром и поддерживать обмен данными с сохранением состояния в рамках постоянного интерактивного сеанса через общий буфер Базовый адрес образа нагрузки, адрес интерактивного общего буфера и результат выполнения

Четное значение флага соответствует двум разным способам вызова DLL и плагинов, загруженных в соответствии с нечетной битовой маской. Флаг 2 (0x10) позволяет повторно использовать и напрямую вызывать нагрузку, ранее загруженную с битовой маской 1, 3 или 5. Значение 16 (0x10000) соответствует флагу 17 (0x10001) в режиме загрузки и использует установленный интерактивный общий буфер для обмена данными. Все значения гарантированно работают независимо друг от друга.

Битовая маска Значение в десятичном виде Описание Результат, отправляемый на командный сервер
0x00000010 2 Вызывает ранее загруженные DLL и плагины с переданным параметром Результат выполнения
0x00000100 4 Не реализовано —
0x00001000 8 Выгрузка ранее загруженных DLL и плагинов Результат выполнения
0x00010000 16 Передает обновленный параметр вредоносной нагрузке, загруженной командой со значением 17, и обменивается с ней данными в рамках интерактивного сеанса. Команда также определяет, нужно ли получить результат выполнения или выгрузить вредоносную нагрузку. Результат выполнения

Исходя из механизма загрузки, мы выявили четыре плагина, внедряемых в атакуемую систему, которые предназначены для работы с ClientHub.

Плагин Описание
Архиватор файлов Архивирует указанный файл с помощью устаревшего алгоритма ZipCrypto (без защиты паролем) и возвращает сжатые данные.
Сборщик данных о файлах Ищет все файлы, соответствующие указанному шаблону поиска, и собирает метаданные: имя файла, MAC-метки времени (изменения, доступа и создания), размер файла и значения атрибутов.
Утилита для удаления файлов Перезаписывает указанный файл нулевыми байтами (NULL), переименовывает его в случайно сгенерированное имя такой же длины, а затем удаляет. Если указан каталог с шаблоном поиска, находит все подходящие файлы, переименовывает каждый из них в случайно сгенерированное имя, длина которого совпадает с длиной исходного, и удаляет их.
Инструмент мониторинга дисков и сессий Отслеживает изменения в удаленных сессиях и на локальных дисках в течение указанного времени (с интервалом в 10 минут) и возвращает собранную информацию о состоянии.

Помимо плагинов, ClientHub поддерживает загрузку вредоносного ПО LPEClient и взаимодействие с ним. Мы установили, что значения body_type 16 и 17 соответствуют механизму взаимодействия LPEClient с командным сервером.

LPEClient

LPEClient — единственная разновидность вредоносного ПО, которая также встречалась в «Операции SyncHole». Это указывает на то, что группа активно использует его для профилирования жертв и доставки вредоносной нагрузки в различных кампаниях. Инструмент LPEClient появился в 2019 году и был обнаружен в 2020 году. С тех пор он неоднократно встречался в кампаниях Dream Job и Cascade Hole, направленных против целей в Южной Корее. Как показало недавнее исследование Check Point, с помощью LPEClient через уязвимость нулевого дня развертывалось вредоносное ПО FudModule.

LPEClient постоянно развивается, но недавно, как мы выяснили, его принцип работы был серьезно переработан. Адрес командного сервера в нем больше не содержится: вместо этого программа взаимодействует с ClientHub через общий буфер. Мы полагаем, что это изменение призвано повысить скрытность.

История LPEClient

История LPEClient

Предыдущая версия собирала имя компьютера, сведения о состоянии памяти, характеристики процессора, данные об операционной системе, версию файла ntoskrnl.exe, таблицу микропрограмм, название антивируса, имя домена, имя пользователя и уровень целостности текущего процесса и добавляла к ним случайную последовательность из 1568 байт. Новый вариант LPEClient собирает в основном все те же данные, однако в нем появилось и несколько изменений.

  • Он больше не определяет версию файла ntoskrnl.exe путем запроса значения FileVersion. Вместо этого, в зависимости от конкретной сборки, он получает номер ревизии сборки Windows из параметра реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\UBR или из структуры SYSTEM_BUILD_VERSION_INFORMATION. Эти значения позволяют определить, какие накопительные обновления или исправления установлены в системе.
  • Чтобы собрать информацию об установленных антивирусных продуктах, LPEClient теперь не выполняет WQL-запрос, а напрямую читает файл репозитория WMI C:\Windows\System32\wbem\Repository\OBJECTS.DATA и ищет ключевые слова, такие как AntiVirusProduct, companyName и displayName, чтобы выявить установленные продукты.
  • Также вредоносное ПО собирает сведения о состоянии низкоуровневых механизмов защиты Windows. Для этого оно проверяет структуру SYSTEM_KERNEL_VA_SHADOW_INFORMATION, чтобы узнать состояние защиты Kernel VA Shadow, и структуру SYSTEM_SHADOW_STACK_INFORMATION, чтобы узнать состояние защиты Shadow Stack (CET).

Кроме того, оно генерирует случайный уникальный 32-байтовый идентификатор с помощью алгоритма HighwayHash и операции XOR с текущим системным временем. Собранная информация, в том числе сгенерированный идентификатор, упаковывается по алгоритму XPRESS Huffman с максимальной степенью сжатия. Затем к сжатым данным добавляется идентификатор сообщения 0xF07D6B34. Результат шифруется алгоритмом, известным как «Магма». Это российский государственный стандарт шифрования со структурой, сходной с DES. После шифрования данные передаются в ClientHub через общий буфер. Первоначально KrCERT описал этот алгоритм как нестандартный вариант DES. Однако дальнейший анализ, проведенный нами и Check Point, подтвердил, что на самом деле это алгоритм «Магма». Ключ генерируется случайным образом с помощью собственного алгоритма и добавляется в начало зашифрованного сообщения.

Следующий запрос отвечает за обмен ключами: в нем передаются идентификатор сообщения 0xA39CF278 и сгенерированный уникальный идентификатор. Ответ расшифровывается алгоритмом AES-CBC-256. В качестве ключа расшифровки используется хэш SHA-256 от сгенерированного ранее случайного значения размером 1568 байт, которое на этапе сбора данных было отправлено на командный сервер.

В результате LPEClient получает из ответа командного сервера массив байтов, состоящий из четырех блоков размером 1568 байт каждый. Каждый блок содержит открытый ключ ML-KEM-1024. ML-KEM — стандартизированный NIST постквантовый механизм инкапсуляции ключей, разработанный на основе CRYSTALS-Kyber. Из этих блоков LPEClient генерирует четыре различные пары общих ключей и шифротекстов, шифрует шифротексты алгоритмом «Магма» и передает их на командный сервер через ClientHub вместе с идентификатором сообщения 0xEF8C0D51 и связанным уникальным идентификатором. Подготовка завершена, и теперь вредоносная программа готова принимать нагрузку и необходимые параметры, которые ClientHub пересылает ей с командного сервера. Использование постквантовой криптографии показывает, что группа прилагает дополнительные усилия, чтобы скрыть последующую вредоносную нагрузку.

Ответ на сообщение 0xEF8C0D51 расшифровывается алгоритмом Threefish с использованием 256-байтового ключа, составленного из четырех различных общих ключей. Threefish — блочный шифр с модификатором, который помимо ключа и сообщения принимает значение tweak (модификатор). Модификатор по своей роли похож на одноразовое число (nonce) или вектор инициализации, которые применяются в разных типах шифров. При обмене данными с LPEClient модификатор для расшифровки получается применением операции XOR к уникальному идентификатору и значению 165 (0xA5). Первые четыре байта расшифрованного сообщения должны указывать длину параметра, затем следует сам параметр, а за ним — вредоносная нагрузка. Она должна быть больше 4 КБ и начинаться с символов MZ. Это значит, что после расшифровки получается исполняемый файл. Затем вредоносная нагрузка рефлексивно загружается в память. После успешной загрузки LPEClient отправляет на командный сервер идентификатор сообщения 0xCB790A25.

Перед загрузкой полученной вредоносной нагрузки LPEClient принимает меры для обхода защитных решений. Вместо прямого вызова VirtualProtect вредоносное ПО использует найденную функцию HeapPageAllocator::ProtectPages из библиотеки jscript9.dll, чтобы изменить защиту страниц памяти, в которых находится функция MD4Update. Затем начало функции заменяется жестко прописанной в коде последовательностью опкодов, которая служит заглушкой системного вызова с нужными аргументами. С помощью заглушки системного вызова LPEClient отключает перехват системных вызовов, установленный для их инструментирования в пользовательском режиме.

Полная схема процесса взаимодействия изображена ниже. Как мы выяснили, финальная вредоносная нагрузка — Cubridge.

Схема ретрансляции данных между LPEClient и командным сервером через ClientHub

Схема ретрансляции данных между LPEClient и командным сервером через ClientHub

Сравнение плагинов и модулей

В ходе расследования мы обнаружили множество вредоносных нагрузок, развернутых с помощью TechHub, Cubridge и ClientHub. Эти нагрузки мы разделили на инструменты, плагины и модули, из которых состоит модульный комплекс вредоносного ПО группы. Нам пока не удалось установить, какие нагрузки применяются при тех или иных условиях, однако имеющиеся данные говорят о том, что набор инструментов группы Lazarus постоянно усложняется и разделяется на специализированные компоненты вместо единого универсального бэкдора. Кроме того, мы полагаем, что TechHub и Cubridge могут использовать схожие инструменты.

Способ развертывания Тип вредоносной нагрузки Название семейства
TechHub/Cubridge Инструмент Сборщик данных о процессах,
Стилер для сбора данных из браузеров
Cubridge Модуль Модуль действий, функциональный модуль
Cubridge Плагин ADFinder, FileCollector
ClientHub Плагин Архиватор файлов, сборщик данных о файлах, утилита для удаления файлов, инструмент мониторинга дисков и сессий

Такая модульность свойственна не только образцам из этой кампании. Как уже отмечалось, схожие закономерности выявлены в CookiePlus, MISTPEN, SIGNBT и IMETHOD. Обратите внимание на то, что мы переклассифицировали вариант ThreatNeedle, использованный в «Операции SyncHole», как последнюю версию IMETHOD — предшественника ThreatNeedle, применявшегося как минимум с 2016 года.

Инфраструктура

На основе данных, полученных при анализе вредоносного ПО TechHub, мы выявили как минимум три основных репозитория, используемых в качестве командных серверов, и один резервный. Судя по самым ранним обнаруженным следам, группа использует GitHub в качестве командного сервера как минимум с июля 2025 года. Мы предполагаем, что все учетные записи были зарегистрированы через взломанные почтовые ящики. Для маскировки в репозиториях создавали или копировали обычные проекты.

В качестве командных серверов для Cubridge и ClientHub группа Lazarus использовала лишь небольшое число взломанных легитимных южнокорейских онлайн-СМИ и сайтов о дизайне интерьера. Позже мы заметили, что эксплуатировались и другие взломанные легитимные сайты из самых разных отраслей. Кроме того, один из обнаруженных нами образцов ClientHub в качестве канала управления использовал Dropbox.

Жертвы

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

Разработка программного обеспечения — единственная отрасль, ставшая целью как кампании SyncHole, так и кампании FlashHole. Это говорит о том, что злоумышленники стремятся скомпрометировать организации этой отрасли, похитить исходный код, найти в нем уязвимости и использовать их для дальнейших атак.

Атрибуция и связь с другими кампаниями

«Операция FlashHole» — последняя волна более масштабной кампании Cascade Hole, в ходе которой злоумышленники используют легитимное южнокорейское ПО как потенциальную точку входа для доставки вредоносного ПО, нацеленного на Южную Корею. Хотя цепочка вредоносного ПО значительно эволюционировала по сравнению с прошлым годом, мы со средней или высокой степенью уверенности полагаем, что за «Операцией SyncHole» и «Операцией FlashHole» стоит одна и та же группа. На это указывают вектор первоначального проникновения, выбор жертв, многоступенчатая цепочка, а также технические и тактические улучшения. Особенно весомым аргументом в пользу этой оценки служит использование LPEClient.

Вредоносное ПО, задействованное в атаке, связано с инструментами, которые применялись группой Lazarus в нашумевшей кампании Dream Job. Более ранние версии TechHub (также известного как CLOUDBURST и NickelLoader), Cubridge (также известного как SIDESHOW и LightlessCan) и TouchShift встречались в указанной кампании, особенно в период с 2022 по 2023 год.

Кроме того, мы обнаружили, что зловреды CookiePlus и ClientHub во многом совпадают: у них одинаковые имена классов, пути к файлам конфигурации и плагины. На этом основании мы со средней или высокой степенью уверенности полагаем, что ClientHub представляет собой усовершенствованную версию CookiePlus.

Как минимум с июля 2025 года, то есть примерно с того момента, когда «Операция SyncHole» пошла на спад, мы также наблюдаем ряд заметных атак на различные южнокорейские организации с использованием бэкдора COPPERHEDGE. Любопытно, что эта активность началась примерно тогда же, когда появились самые ранние из выявленных нами следов «Операции FlashHole». Хотя бэкдор входил в состав второго этапа «Операции SyncHole», в новых атаках он действует независимо и использует собственный загрузчик. В этих инцидентах применялись цепочки заражения и инструменты, отличные от тех, что использовались в «Операции SyncHole» и «Операции FlashHole».

Как отмечали в своем отчете специалисты AhnLab, тот же бэкдор, вероятно, использовался и в нетипичной для группы активности, а именно при заражении программой-вымогателем Gunra. Кроме того, в ходе расследования мы выяснили, что в одном из случаев заражение бэкдором в итоге привело к утечке данных на сайт в даркнете, и это был явно не сайт Gunra. Судя по всему, этот сайт создавался специально для данной активности. Таким образом, в отличие от других атак, бэкдор использовался в сочетании с вымогателями и кражей данных.

Сайт утечек в даркнете, связанный с бэкдором COPPERHEDGE

Сайт утечек в даркнете, связанный с бэкдором COPPERHEDGE

Стоит также отметить, что в недавней кампании Dream Job используется обновленная цепочка вредоносного ПО. Примерно с 2024 года ее основу составляют MISTPEN и ForestTiger, а не прежний арсенал группы, в который входили, в частности, TechHub и Cubridge. Однако обновленные версии этого старого вредоносного ПО вновь появились в рамках «Операции FlashHole». С учетом этих изменений и всех аспектов TTP каждой атаки мы построили дерево кампаний, отразив на нем их различия и взаимосвязи.

Пересечения между недавними атаками группы Lazarus

Пересечения между недавними атаками группы Lazarus

Заключение

Наш анализ показывает, что группа Lazarus начинает подготовку к новым операциям вскоре после завершения предыдущих кампаний, дорабатывает имеющиеся инструменты и в итоге применяет усовершенствованную цепочку заражения на их основе. Группа по-прежнему использует улучшенную версию LPEClient для профилирования жертв и доставки вредоносной нагрузки, что указывает на активное развитие и поддержку инструмента. Интересно, что группа, похоже, перешла на более защищенную постквантовую криптографию быстрее, чем многие легитимные защитные решения. Все это говорит о присутствии в группе разработчика, отвечающего за техническую часть, в то время как другие члены группы выстраивают комплексный сценарий атаки на целевое ПО.

Хотя мы ожидали, что целевые атаки на Южную Корею продолжатся, мы не предполагали, что одновременно будут вестись сразу несколько кампаний, каждая из которых будет использовать свое ПО и инструменты. Примечательно, что кластер COPPERHEDGE, судя по всему, занимается монетизацией атак, тогда как «Операция FlashHole» нацелена на шпионаж. Мы внимательно следим за этими изменениями, чтобы понять мотивы и конечные цели злоумышленников.

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

Решения «Лаборатории Касперского» детектируют эксплойты и вредоносное ПО, использованные в этой атаке, со следующими вердиктами: MEM:Trojan.Win64.Shellcode.gen, Trojan.Win64.DLLhijack.*, Trojan.Win64.Lazarus.*.

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

Хэш-суммы файлов

TouchShift
ec84d6cb2ae7974767aedac246b50a3e             mscoree.dll
a28cba214058fcae2883d8cffc883abd                mscoree.dll
c105d6b16f544582772de0159f24c00a               mscoree.dll
2f8475a90a25624ed02f1d18d4e6d65d              mscoree.dll
676fabe30a28b53925fba98e34b35986              mscoree.dll
b4a7eff35f048f06fb0a2d7631f23a7d                  mscoree.dll

ClientHub Loader
ff07641dc56914dd90ee0bd7404d7ad7               liblzma.dll

Пути к файлам

C:\ProgramData\Dell\Dell1.tmp
C:\ProgramData\Dell\Dell3.tmp
C:\ProgramData\Package.txt
C:\ProgramData\RasConv\mscoree.dll
C:\ProgramData\Apple\mscoree.dll
C:\ProgramData\ssh\mscoree.dll
C:\ProgramData\qorestor\mscoree.dll
C:\ProgramData\Dell\mscoree.dll
C:\ProgramData\Dell\Dell1.tmp
C:\ProgramData\Dell\Dell3.tmp
C:\Windows\System32\RasConv\mscoree.dll
C:\Windows\System32\RasConv\ActivationStore.dat
C:\Windows\System32\DrvConh\mscoree.dll
C:\Windows\System32\DrvConh\ActivationStore.dat
C:\Program Files\Common Files\System\msadc\msadc.inc
C:\ProgramData\desktops.ini

Командные серверы

javadevhouse.co[.]kr
pythonapischool[.]com
hxxps://cubedesign[.]co[.]kr/news            C2 of Cubridge
hxxps://cubedesign[.]co[.]kr/mobile/fashion            C2 of Cubridge
hxxps://fp-news[.]co[.]kr/shop/cart                                C2 of Cubridge
hxxps://k-wbc[.]co[.]kr/skin/social/social_view.php         C2 of ClientHub
hxxps://rcsh[.]co[.]kr/modules/bbs/tiles/bbs_div/inputForm.php    C2 of ClientHub
hxxps://www[.]ksog[.]org/insert_file/handle.php                   C2 of ClientHub

«Операция FlashHole»: Lazarus взламывает защиту и обходит контроль

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

Отчеты

Благотворительность как приманка: Armored Likho расширяет арсенал инструментов для кибершпионажа

Эксперты «Лаборатории Касперского» разбирают новую кампанию Armored Likho, маскирующуюся под благотворительность и доставляющую новый Still Toolkit, нацеленный на кражу данных из Telegram и прослушку.

ToddyCat — ваш скрытый почтовый ассистент. Часть 2

Разбираем Umbrij — новый инструмент APT-группы ToddyCat для компрометации корпоративной переписки в сервисе Gmail. Целью атак стал токен авторизации OAuth, при помощи которого злоумышленники получали доступ к сервисам Google.

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

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