В мире информационной безопасности появилась новая угроза, нацеленная на разработчиков. Злоумышленники создали поддельные страницы установки популярного инструмента Claude Code, чтобы получить доступ к браузерным хранилищам учётных данных. Атака обходит современную защиту браузеров на основе Application-Bound Encryption (так называемое связывание ключа шифрования с процессом браузера). Это стало возможным благодаря комбинации вредоносного PowerShell и компактного вспомогательного модуля, который восстанавливает ключ через штатный сервис повышения привилегий Chrome.
Описание
Кампания идёт как минимум с начала 2026 года. Злоумышленники покупают рекламные объявления в поисковых системах, чтобы их поддельная страница появлялась первой при запросе "install claude code". Страница визуально копирует официальную документацию, но вместо настоящей команды установки "irm https://claude[.]ai/install.ps1 | iex" жертве показывают строку, ведущую на подконтрольный домен "events.msft23[.]com". Самое хитрое в том, что файл по адресу "/install.ps1" содержит полностью легитимный, оригинальный скрипт от Anthropic. Любая автоматическая проверка репутации видит чистый PowerShell. Вредоносная же строка вшита прямо в HTML-код страницы - её видит только человек, копирующий команду в терминал.
После того как жертва выполняет команду, начинается многоступенчатая цепочка заражения, использующая три разных домена, зарегистрированных в течение недели в апреле 2026 года и защищённых Cloudflare. Первый этап перенаправляет запрос на второй домен, который отдаёт PowerShell только тем клиентам, чей User-Agent совпадает с тем, что генерирует Invoke-RestMethod. Обычные браузеры и краулеры получают лишь ошибку 404.
Третий этап - загрузчик с сервера "mt7263[.]com". Перед выполнением скрипт проверяет региональные настройки системы. Если страна входит в список государств СНГ или Иран, работа немедленно прекращается. В противном случае загрузчик собирает идентификаторы пользователя (SID и MachineGuid), а затем перебирает установленные браузеры на основе Chromium: Chrome, Edge, Brave, Vivaldi, Opera и другие. Для каждого браузера считывается файл Local State, в котором хранятся зашифрованные ключи.
Ключевая особенность атаки - работа с Application-Bound Encryption (далее - ABE). Эта технология, введённая Google в Chrome 127 летом 2024 года, связывает ключ шифрования данных (cookie, паролей) с системным сервисом повышения привилегий. Простое копирование файлов базы данных больше не позволяет их расшифровать на другой машине. Однако ABE не защищает от атак, выполняемых в контексте того же пользователя. Именно это и используют злоумышленники.
Для старых версий браузеров (до внедрения ABE) загрузчик напрямую расшифровывает ключи через .NET-функцию ProtectedData.Unprotect. Для новых версий применяется вспомогательный модуль размером всего 4608 байт. Этот модуль внедряется в живой процесс браузера через технику под названием "процесс-холлоуинг": создаётся новый процесс браузера в приостановленном состоянии, его память очищается, туда записывается код модуля, после чего выполнение возобновляется. Внедрение происходит через Win32 API - CreateProcess, NtUnmapViewOfSection, VirtualAllocEx, WriteProcessMemory, SetThreadContext.
Внутри процесса помощник выполняет только одну задачу. Он создаёт именованный канал с именем, похожим на легитимные Mojo-каналы Chromium: "\\.\pipe\mojo.<pid>.<tid>.<хеш_имени_файла>". В отличие от настоящих каналов, где последнее поле - 64-битное случайное число, здесь используется детерминированный хеш от имени исполняемого файла браузера (например, "chrome.exe" даёт значение "0x03ee0040"). Это позволяет легко обнаружить помощника при анализе инфраструктуры.
Затем помощник вызывает COM-интерфейс службы повышения привилегий браузера. При этом он пробует сначала новый интерфейс IElevator2 (появился в Chrome 144 в январе 2026 года), а в случае неудачи переключается на старый IElevator. Интересная деталь: для Edge злоумышленники допустили ошибку - в GUID интерфейса IElevator2 перепутаны два байта ("0x4740" вместо "0x4047"). Из-за этого вызов всегда завершается неудачей, и используется устаревший интерфейс. Но расшифровка всё равно срабатывает.
После получения 32-байтового ключа PowerShell расшифровывает cookie, сохранённые пароли и платёжные данные из SQLite-баз браузера. Вся украденная информация упаковывается в ZIP-архив прямо в памяти (без записи на диск) и отправляется на сервер командования через HTTP PUT. Постоянство в системе обеспечивается с помощью планировщика задач Windows, который запускает PowerShell каждую минуту для опроса сервера на предмет новых команд.
Специалисты Ontinue сообщили, что данный образец не соответствует ни одному из известных семейств стилеров. Ближайший аналог - Glove Stealer, описанный Gen Digital в ноябре 2024 года, но он использует нативный исполняемый файл, а не PowerShell, и не поддерживает IElevator2. Архитектура, при которой всё обнаруживаемое поведение (доступ к базам данных, сжатие, передача по сети) вынесено в PowerShell, а нативный модуль отвечает только за один COM-вызов, серьёзно затрудняет обнаружение. Поведенческие анализаторы, проверяющие нативный PE-файл в изоляции, не видят ничего подозрительного.
Сборка модуля датируется 2026-03-24 - менее чем через два месяца после выхода Chrome 144. Это свидетельствует о том, что злоумышленники активно отслеживают изменения в коде Chromium и быстро адаптируют свои инструменты. Географический фильтр исключает страны постсоветского пространства и Иран, что указывает на вероятное происхождение или операционную базу группы.
Для защиты от подобных атак специалистам рекомендуется включить режим ограниченного языка PowerShell (Constrained Language Mode), задействовать правило снижения поверхности атаки, блокирующее выполнение обфусцированных скриптов, а также вести логирование блоков PowerShell (Event ID 4104). Отдельного внимания заслуживает блокировка недавно зарегистрированных доменов через веб-фильтрацию - три домена кампании были зарегистрированы за несколько дней до начала атак.
Главный вывод: данная угроза показывает, что даже продвинутая защита на уровне шифрования ключей не является панацеей, если злоумышленник может выполнить код в контексте пользователя. Техническая деталь - ошибочный GUID для Edge - парадоксальным образом становится отличным индикатором компрометации, поскольку ни один легитимный компонент не зарегистрирует такой идентификатор. Ожидается появление новых образцов в этой кампании, и специалистам по безопасности стоит включить описанные индикаторы в свои системы обнаружения.
Индикаторы компрометации
URLs
- https://events.msft23.com/
- https://install-claude.com/
- https://mt7263.com/gate/auto/c09d19a0/
- https://mt7263.com/gate/init/c09d19a0/
- https://mt7263.com/gate/start/c09d19a0
Imphash
- 551c967b0ddbc198545038c596a3c10d
SHA256
- 4563483704a8190d3ed69005fb2f593e53ca4496399e96afdb48fbde8ccdb51d
- 54ab86b72423832e1d821e19486844375e1428079e1622f1c967d5a66bdc0b48
- 566cd98ddd48865caa5cd73a060d6df06bade6d481823675c0eb509042fef9f3
- 677dac2412576267599d058cbc257d32902e53654a4ec0f552be4a26ecb31df7
- 844c67c405eb7bdd8e61720f542eee7f87ec8470612a1dc19e332c35a174ae22
- ac5c6d38b45bb429b7f690530c5ffaf329193f606796c602566702450dc9099f
- bcb515be6344720a3b06e6bd56e5eeaa661810eb14456acceb7eab5029704117
- bdcfccf3e0aa2a524251c0594d3c308a940b23054374f36f2e4b73f4bc11b11d
YARA
| 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | import "pe" rule mt7263_abe_helper { meta: author = "Rhys Downing" Company = "Ontinue AG" date = "2026-04-20" family = "mt7263-stealer" component = "abe-helper" description = "Chromium App-Bound Encryption IElevator abuse helper (XOR-0x57 CLSID obfuscation)" reference = "https://mt7263.com/gate/init/<campaign>/<uid>" sha256_x64 = "54ab86b72423832e1d821e19486844375e1428079e1622f1c967d5a66bdc0b48" sha256_x86 = "4563483704a8190d3ed69005fb2f593e53ca4496399e96afdb48fbde8ccdb51d" strings: // Mojo-pipe camouflage - the full format string is very distinctive $pipe_fmt = "\\\\.\\pipe\\mojo.%d.%d.%d" wide // 4-byte App-Bound magic - appears as a mov-immediate (0x42505041) // so it's embedded in a `mov dword ptr [...], 42505041h` instruction; // no `fullword` modifier because the preceding byte is a register/disp. $appb = { 41 50 50 42 } // Target-process allowlist (wide) $exe_edge = "msedge.exe" wide fullword $exe_edge2 = "msedge_proxy.exe" wide fullword $exe_brave = "brave.exe" wide fullword $exe_brave2 = "brave_proxy.exe" wide fullword $exe_avast = "AvastBrowser.exe" wide fullword // XOR-0x57-encoded Data1 of each embedded CLSID/IID. Real GUID in comment. // These appear as 32-bit `mov` immediates, scattered across .text. $clsid_chrome_x57 = { B7 37 DF 27 } // {708860E0-...} GoogleChromeElevatorClass $clsid_edge_x57 = { 3B BE 9C 48 } // {1FCBE96C-...} MicrosoftEdgeElevatorClass $clsid_brave_x57 = { F8 66 3C 00 } // {576B31AF-...} BraveElevatorClass $clsid_avast_x57 = { BF 19 84 BD } // {EAD34EE8-...} Avast Secure Browser elevator $iid_ielevator_x57 = { 98 E9 6D 11 } // {463ABECF-...} public IElevator $iid_ielevator2_x57= { DC 77 A2 4C } // {1BF5208B-...} IElevatorChrome / IElevatorChromium // In-place XOR-decode loop body (8-bit xor 0x57 on ptr advance). // x64: `xor byte ptr [...], 57h` ; `inc rdx/rax` ; `dec rcx/r8` ; `jnz` // This is a tight and unusual sequence at both compiles. $xor57_x64 = { 80 34 ?? 57 } // xor byte ptr [rXX+rYY], 57h (x64 form) $xor57_x86 = { 80 30 57 } // xor byte ptr [eax], 57h (x86 form) condition: // Small Chromium-helper-sized PE uint16(0) == 0x5A4D and filesize < 16KB and // Mandatory imports (ensures it's the COM+pipe combo, not arbitrary code) pe.imports("kernel32.dll", "CreateNamedPipeW") and pe.imports("kernel32.dll", "ConnectNamedPipe") and pe.imports("kernel32.dll", "GetModuleFileNameW") and pe.imports("ole32.dll", "CoCreateInstance") and pe.imports("ole32.dll", "CoSetProxyBlanket") and pe.imports("oleaut32.dll", "SysAllocStringByteLen") and // Must include the Mojo camouflage, the APPB magic, and the XOR decoder $pipe_fmt and $appb and ($xor57_x64 or $xor57_x86) and // At least THREE of the browser-specific CLSID Data1s present // (all four are embedded, so a genuine hit has all four; three guards // against false positives where one signature happens to collide) 3 of ($clsid_chrome_x57, $clsid_edge_x57, $clsid_brave_x57, $clsid_avast_x57) and // Plus at least one of the IElevator IIDs ($iid_ielevator_x57 or $iid_ielevator2_x57) and // And at least two browser-name allowlist entries 3 of ($exe_edge, $exe_edge2, $exe_brave, $exe_brave2, $exe_avast) } |