В мире киберпреступности редко можно наблюдать ситуации, где жертвами становятся сами злоумышленники. Однако недавно обнаруженный инцидент наглядно демонстрирует, что криминальные экосистемы подвержены внутренним конфликтам и атакам ничуть не меньше, чем легитимный бизнес. Исследователи обнаружили, что панель управления вредоносным ПО для macOS под названием Odyssey была скомпрометирована конкурирующей группировкой. В результате операторы ворующего ПО сами стали жертвами кражи своих учётных данных в реальном времени, что подрывает основы их бизнес-модели и ставит под угрозу данные тысяч пользователей.
Описание
Инцидент начался, когда исследователь информационной безопасности под ником @500mk500 обнаружил две активные панели управления вредоносным ПО Odyssey, размещённые в одной подсети в Казахстане. Последующий анализ, проведённый экспертами, показал, что одна из этих панелей содержит скрытую вставку - бэкдор, который перехватывает логины и пароли её операторов. Каждый раз, когда администратор входит в систему, его учётные данные незаметно отправляются на контролируемый злоумышленниками сервер. При этом функциональность самой панели не нарушается, что делает компрометацию практически незаметной для владельца.
Технический анализ выявил изящный и эффективный механизм атаки. В JavaScript-бандл (собранный набор файлов) панели, размещённой по адресу 86.54.25[.]202, был добавлен дополнительный код объёмом всего 960 байт. Этот код выполняет две ключевые функции. Во-первых, при каждой загрузке страницы он собирает все файлы cookie (куки) сессии и отправляет их на удалённый сервер. Во-вторых, и это главное, он перехватывает вызовы функции "fetch", используемой для взаимодействия с сервером. Когда система обнаруживает POST-запрос на эндпоинт входа в систему ("/api/v1/sign-in"), код извлекает логин и пароль из тела запроса и также отправляет их злоумышленнику. После этого оригинальный запрос выполняется как обычно, поэтому оператор панели даже не подозревает о краже своих данных.
Сервер для приёма похищенной информации, размещённый на домене "scan-tron[.]link", представляет собой предельно минималистичное решение. Все запросы к нему возвращают только двухбайтовый ответ "ok", что делает его своеобразным "чёрным ящиком" - данные в него только записываются, но не могут быть оттуда извлечены через веб-интерфейс. Это классический пример инфраструктуры, спроектированной для скрытного сбора информации. Сертификат TLS для этого домена был выпущен 16 апреля 2026 года - в тот же день, когда была изменена скомпрометированная панель управления, что указывает на скоординированность действий атакующих.
Любопытно, что вторая панель управления Odyssey в той же подсети (86.54.25[.]204) оказалась чистой от вставок. Она использует более новую версию сборки, была обновлена двумя днями позже и содержит дополнительные функции, такие как управление сид-фразами (seed phrases) криптокошельков. Это наводит на мысль, что оператор мог обновить одну из своих панелей, не заметив компрометации другой, или что атака была направлена на конкретный экземпляр.
Сама программа-вор Odyssey является хорошо известным в сообществе информационной безопасности вредоносным ПО, специализирующимся на краже данных с компьютеров Apple macOS. Оно представляет собой ребрандинг более раннего стеалера (вора) Poseidon и унаследовало функциональность от Atomic macOS Stealer (AMOS). Панель управления предлагает злоумышленникам широкий набор инструментов: от управления заражёнными ботами (компьютерами жертв) и построения фишинговых сценариев на AppleScript до фильтрации украденных данных по странам и экспорта информации о криптокошельках. Обнаружение полной карты из 29 API-эндпоинтов, включая ранее недокументированные, таких как "/api/v1/admin/safe-exit" для аварийного удаления панели, даёт специалистам по безопасности ценную информацию для построения сигнатур обнаружения.
Инфраструктура операторов Odyssey, согласно данным регистрации, привязана к сети в Казахстане, при этом контактное лицо администратора указано в Латвии, а адрес для жалоб - в Казахстане. Это типичная схема, используемая киберпреступниками для запутывания следов и усложнения юрисдикционного преследования. Эксперты, проводившие расследование, сообщили, что подобные атаки "злоумышленник на злоумышленника" (threat-actor-on-threat-actor) становятся всё более распространёнными в теневой экономике. Мотивы могут быть разными: от конкурентной борьбы и желания переманить клиентов до простого желания получить доступ к уже собранным базам данных жертв без необходимости проводить собственные кампании.
Этот случай служит мрачным напоминанием о нескольких важных аспектах современной кибербезопасности. Во-первых, он иллюстрирует хрупкость и ненадёжность нелегальных киберпреступных инфраструктур, которые часто создаются с минимальными затратами на безопасность. Во-вторых, он демонстрирует, что данные, похищенные у конечных жертв, могут неоднократно менять "владельцев", увеличивая масштабы ущерба. Для специалистов по защите инцидент подчёркивает важность мониторинга не только за известными угрозами, но и за их инфраструктурой, поскольку компрометация последней может иногда приводить к прекращению деятельности вредоносной кампании. В конечном счёте, война внутри преступного мира не делает законопослушных пользователей в безопасности, но периодически приоткрывает завесу над внутренней кухней цифровой тени, предоставляя защитникам уникальные данные для анализа.
Индикаторы компрометации
IPv4
- 107.189.23.185
- 71.115.236.254
- 86.54.25.202
- 86.54.25.204
Domains
- scan-tron.link
- vash-server.com
URLs
- https://scan-tron.link/c
- https://scan-tron.link/l
Emails
- shereverov.marat@outlook.com
SHA256
- 6c0c64c2da550ecab6eb9b855afe2833fde8f928a37168b7e4527665a9a7ae47
- 95c17869073bff8a045083315c97583cb0d4f4c19165e657ed584ef7e16868a1
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 | rule ScanTron_Panel_Backdoor { meta: description = "Credential harvester injected into stealer panel JS bundles" author = "Breakglass Intelligence" date = "2026-04-20" tlp = "TLP:CLEAR" strings: $domain = "scan-tron.link" ascii $cookie_ep = "/c?d=" ascii $login_ep = "/l?d=" ascii $fetch_hook = "window.fetch = function" ascii $sign_in = "/api/v1/sign-in" ascii $beacon = "new Image().src" ascii condition: $domain and ($cookie_ep or $login_ep) and $beacon } rule Odyssey_Panel_Indicators { meta: description = "Odyssey macOS stealer panel JS bundle" author = "Breakglass Intelligence" date = "2026-04-20" strings: $api1 = "/api/v1/auth/bots" ascii $api2 = "/api/v1/auth/builder" ascii $api3 = "/api/v1/auth/socks" ascii $api4 = "/api/v1/admin/safe-exit" ascii $api5 = "/api/v1/auth/seeds" ascii $vendor = "vash-server.com" ascii condition: 3 of ($api*) or $vendor } |