Обзор
Lazarus APT и его субгруппа BlueNoroff являются высокопрофессиональными и многогранными киберпреступными группировками, говорящими по-корейски. Мы внимательно следим за их деятельностью и нередко замечаем, что в своих атаках они используют свое фирменное вредоносное ПО — полнофункциональный бэкдор Manuscrypt. Согласно нашим исследованиям, Lazarus использует это вредоносное ПО как минимум с 2013 года, и мы задокументировали более 50 уникальных кампаний, в которых оно использовалось для атак на правительственные организации, дипломатические представительства, финансовые институты, военных и оборонных подрядчиков, криптовалютные платформы, операторов ИТ и телекоммуникаций, игровые компании, средства массовой информации, казино, университеты и даже исследователей в области безопасности — и это далеко не полный список.
13 мая 2024 года продукт Kaspersky Total Security для потребителей обнаружил новую инфекцию Manuscrypt на персональном компьютере жителя России. Поскольку Lazarus редко атакует отдельных лиц, это вызвало наш интерес, и мы решили разобраться в ситуации. Вскоре выяснилось, что до обнаружения Manuscrypt наши технологии также обнаружили эксплойт веб-браузера Google Chrome, исходящий с веб-сайта detankzone[.com]. На первый взгляд, этот сайт напоминал профессионально разработанную страницу продукта для децентрализованной финансовой (DeFi) игры класса MOBA с невзаимозаменяемыми токенами (NFT). Пользователям предлагалось скачать пробную версию. Но это было лишь маскировкой. На самом деле этот сайт содержал скрытый скрипт, который запускался в браузере Google Chrome пользователя, используя эксплойт нулевого дня и предоставляя злоумышленникам полный контроль над ПК жертвы. Посещение этого сайта было всем, что нужно было для заражения — игра была всего лишь отвлекающим маневром.
Мы смогли извлечь первый этап атаки — эксплойт, который выполняет удаленное выполнение кода в процессе Google Chrome. Убедившись, что эксплойт основан на уязвимости нулевого дня, нацеленной на последнюю версию Google Chrome, мы в тот же день сообщили о своей находке в Google. Два дня спустя Google выпустила обновление и поблагодарила нас за то, что мы обнаружили эту атаку.
Подтверждение CVE-2024-4947 (выдержка из исправлений безопасности, включенных в Chrome 125.0.6422.60)
Уведомив Google об обнаруженной уязвимости, мы следовали политике ответственного раскрытия информации об уязвимостях и воздержались от публикации конкретных деталей в открытом доступе, дав пользователям достаточно времени для установки исправления. Этот подход также направлен на предотвращение дальнейшего использования данной уязвимости киберпреступниками. Google предприняла дополнительные шаги, заблокировав detankzone[.com] и другие сайты, связанные с этой кампанией, гарантируя, что любой, кто попытается получить доступ к этим сайтам, даже без наших продуктов, будет предупрежден об их вредоносном характере.
Хотя мы уважали просьбу Google об определенном периоде неразглашения, 28 мая 2024 года Microsoft опубликовала сообщение в блоге под названием «Moonstone Sleet – новый северокорейский киберпреступник с новыми хитростями», в котором частично раскрыла наши выводы. Согласно сообщению в блоге, Microsoft также отслеживала данную кампанию и связанные с ней сайты с февраля 2024 года. Однако в их анализе был упущен ключевой момент вредоносной кампании: наличие эксплойта браузера и тот факт, что он представлял собой проблему высокой серьезности — эксплойт нулевого дня. В этом отчете мы подробно рассмотрим уязвимости, используемые злоумышленниками, и игру, которую они использовали в качестве приманки (спойлер: нам пришлось разработать собственный сервер для этой онлайн-игры).
Эксплойт
Веб-сайт, используемый злоумышленниками в качестве прикрытия для своей кампании, был разработан в TypeScript/React, и один из его index.tsx-файлов содержал небольшой фрагмент кода, который загружал и запускал эксплойт Google Chrome.
Графический интерфейс веб-сайта и скрытый загрузчик эксплойта
Эксплойт содержит код для двух уязвимостей: первая используется для получения возможности читать и записывать память процесса Chrome из JavaScript, а вторая — для обхода недавно представленной песочницы V8.
Первая уязвимость (CVE-2024-4947)
Сердцем каждого веб-браузера является его JavaScript-движок. JavaScript-движок Google Chrome называется V8 — собственный движок JavaScript с открытым исходным кодом от Google. Для меньшего расхода памяти и максимальной скорости V8 использует довольно сложный конвейер компиляции JavaScript, в настоящее время состоящий из одного интерпретатора и трех JIT-компиляторов.
Конвейер компиляции JavaScript V8
Когда V8 начинает выполнять JavaScript, он сначала компилирует скрипт в байт-код и выполняет его с помощью интерпретатора Ignition. Ignition — это регистрово-ориентированная машина с несколькими сотнями инструкций. Во время выполнения байт-кода V8 отслеживает поведение программы и может JIT-компилировать некоторые функции для повышения производительности. Лучший и самый быстрый код создается TurboFan — высокооптимизирующим компилятором с одним недостатком: генерация кода занимает слишком много времени. Тем не менее, разница в производительности между Ignition и TurboFan была настолько существенной, что в 2021 году был представлен новый неоптимизирующий JIT-компилятор под названием Sparkplug, который почти мгновенно компилирует байт-код в эквивалентный машинный код. Сгенерированный Sparkplug код работает быстрее, чем интерпретатор, но разрыв в производительности между сгенерированным Sparkplug- и TurboFan-кодом все еще был велик. Из-за этого в Chrome 117 (выпущенном в четвертом квартале 2023 года) разработчики представили новый оптимизирующий компилятор Maglev, целью которого является достаточно быстрая генерация достаточно хорошего кода путем выполнения оптимизаций, основанных исключительно на отзывах от интерпретатора. CVE-2024-4947 (выпуск 340221135) — уязвимость в этом новом компиляторе.
Чтобы понять эту уязвимость и как она была использована, давайте рассмотрим код, который злоумышленники использовали для ее запуска.
import * as moduleImport from 'export var exportedVar = 23;'; function trigger() { moduleImport.exportedVar; const emptyArray = [1, 2]; emptyArray.pop(); emptyArray.pop(); const arrHolder = { xxarr: doubleArray, xxab: fakeArrayBuffer }; function f() { try { moduleImport.exportedVar = 3.79837e-312; } catch (e) { return false; } return true; } while (!f()) {} weakRef = new WeakRef(moduleImport); return { emptyArray, arrHolder }; }
Код, используемый злоумышленниками для запуска CVE-2024-4947
Мы видим в этом коде, что он сначала обращается к экспортируемой переменной exportedVar модуля moduleImport, а затем создает пустой массив emptyArray и словарь arrHolder. Однако, похоже, что никакая реальная работа с ними не ведется, они просто возвращаются функцией trigger. А затем происходит нечто интересное: функция f выполняется до тех пор, пока не вернет «истина». Однако эта функция возвращает «истина» только в том случае, если может установить для экспортируемой переменной moduleImport.exportedVar значение «3. 79837e-312», а если возникает исключение из-за этого, функция f возвращает «ложь». Как может быть, что выполнение одного и того же выражения moduleImport.79837e-312; всегда должно возвращать «ложь», пока оно не вернет «истина»?
LdaImmutableCurrentContextSlot [53] Star1 LdaConstant [0] SetNamedProperty r1, [1], [0] // moduleImport.79837e-312;
Байт-код, созданный интерпретатором Ignition для «moduleImport.79837
Пульс Новости 8.4 из 10
- Значимость новости: 10/10. Новость об APT-атаке, которая нацелена на криптовалютный рынок, является чрезвычайно значимой для отрасли.
- Инновационная ценность новости: 8/10. Новость выявляет новые методы и тактики, используемые хакерами для проведения криптовалютных атак, включая использование игр в качестве приманки.
- Потенциальное влияние новости на рынок: 9/10. Новость подчеркивает постоянную угрозу кибератак для криптовалютной индустрии и может повысить осведомленность и бдительность среди инвесторов.
- Релевантность новости: 10/10. Новость напрямую связана с криптовалютным рынком и предоставляет информацию о современных угрозах и методах защиты.
- Актуальность новости: 9/10. Новость о недавней атаке содержит свежую информацию и анализирует недавние события.
- Достоверность новости: 9/10. Новость опубликована авторитетным источником (Kaspersky), известным своей надежной и достоверной информацией о кибербезопасности.
- Общий тон новости: 7/10. Новость объективно освещает атаку, подчеркивая серьезность угрозы, но также предоставляя некоторые положительные моменты, такие как успешный отчет об уязвимости Google.