Новая версия вредоносной кампании Omegatech EtherHiding демонстрирует интересную тактику: авторы отказались от экспериментов с ротацией инфраструктуры и вернулись к проверенным настройкам прошлой версии. Обновлённый загрузчик V10 был обнаружен на сайте израильской образовательной организации JBH, занимающейся подготовкой специалистов в области высоких технологий.
Описание
Основной вектор атаки остался прежним. Злоумышленники компрометируют сайты на WordPress и внедряют в них вредоносный скрипт css.js размером почти 124 килобайта. Этот скрипт замаскирован под файл стилей плагина Elementor, что позволяет ему долгое время оставаться незамеченным. Сама страница-приманка jbhtech.org[.]il размещена за Cloudflare и не использует сторонние аналитические трекеры, что упрощает её обнаружение лишь на этапе анализа трафика жертвы.
Механизм получения адреса полезной нагрузки остался неизменным во всех версиях. Скрипт css.js обращается к блокчейну Binance Smart Chain testnet, выполняя запрос eth_call к контракту 0x7Fd85c090f2b35071C57a3b9FeAF462aaEb0E437. Такой подход гарантирует, что адрес сервера никогда не прописывается жёстко в коде - злоумышленники могут менять его в любой момент, просто обновив данные в смарт-контракте. Для отказоустойчивости в скрипте прописаны три резервных RPC-точки, и если основная недоступна, загрузчик перебирает их по очереди.
После получения адреса из блокчейна css.js устанавливает TLS-соединение с хостом dntds[.]shop. Точный путь восстановить не удалось из-за шифрования, но по косвенным данным злоумышленники используют ту же схему ClickFix, что и в предыдущих версиях. Жертве показывают фальшивую CAPTCHA от Cloudflare и предлагают нажать сочетание клавиш Win+R, вставить команду из буфера обмена и нажать Enter. Именно этот шаг приводит к запуску вредоносного кода на компьютере пользователя.
Ключевое отличие V10 от предыдущей версии V9 заключается в реверсии инфраструктуры. Команда управления PowerShell вернулась с IP 91.92.240[.]121 обратно на 158.94.208[.]92, который использовался в V8. Имена файлов полезной нагрузки сменились с попытки обхода YARA-правил student_s.bin и student_l.bin на исходные my_newest_ll.png и my_s.bin. Даты изменения файлов совпадают с версией V8 - 3 июня 2026 года. Это указывает на то, что злоумышленники не пересобирают вредоносное ПО под каждую кампанию, а используют единый набор файлов, меняя лишь символьные ссылки на них в зависимости от версии.
Анализ статической структуры C#-заглушки BXZszqpgJvpmr показал, что её логика полностью идентична предыдущим версиям. Она компилируется на лету через csc.exe, выделяет область памяти с правами на чтение, запись и выполнение, записывает туда Donut shellcode и запускает его. Единственное изменение - новое имя класса и переменной tid, которая в V9 называлась sid. Специалисты обнаружили активность в январе 2026 года и детально описали всю цепочку техник, задействованных в этой кампании.
Файл my_s.bin размером 312 килобайт представляет собой 64-битный PE-файл со штампом компиляции 3 июня 2026 года. Он содержит импорты из mscoree.dll, что указывает на использование CLR-hosting для рефлексивной загрузки. Внутри найдена строка size95.exe, совпадающая с артефактом, документально подтверждённым для версии V8. Важный вывод: ни в одном из файлов не найдено жёстко прописанных адресов серверов управления. Все они передаются через PowerShell-стажер на этапе загрузки.
Проведённая полная статическая деобфускация css.js в изолированном окружении Node не выявила ни одного упоминания доменов, ранее ошибочно приписанных этой кампании. Речь идёт о s.ksrndkehqnwntyxlhgto[.]com, p.ksrndkehqnwntyxlhgto[.]com и process.iconnode[.]com, которые, как показало расследование, относятся к легитимной инфраструктуре сервиса WhatConverts. Версия V10 окончательно подтверждает, что эти домены никогда не были частью цепочки Omegatech.
Практическое значение этого инцидента выходит за рамки простой смены тактики. Возврат к V8 после экспериментов V9 говорит о том, что злоумышленники отдают приоритет стабильности атаки перед усложнением инфраструктуры. Они готовы жертвовать защитой от YARA-правил ради гарантированной доставки полезной нагрузки. Для специалистов по безопасности это сигнал не ослаблять мониторинг инфраструктуры, зафиксированной в V8, поскольку она остаётся основным арсеналом этой группы на протяжении всего наблюдаемого периода.
Индикаторы компрометации
IPv4
- 158.94.208.104
- 158.94.208.92
- 178.16.53.137
Domains
- bsc-testnet-rpc.publicnode.com
- dntds.shop
URLs
- http://158.94.208.104/x7GkP2mQ9zL4/my_newest_ll.pngREVERTED
- http://158.94.208.104/x7GkP2mQ9zL4/my_s.binREVERTED
MD5
- 09ac9b813cb34dedc439b26130c95f2d
- 5c861f86b1db893a36b13a39fc061b03
- 6b7d357d8e83d802a12a4dbf8aad9486
- ca77f877a7678a42c107cf3e7cdeee1f
SHA256
- 0a60144d4c1554223e78ad52b31ba5e15284cc7df18a77d3dd90cbcc7d428c11
- 12d19b6dd30e0ee8ca45df943faf7ec0bb4af21b7cc8ec28b492aff38fdc0445
- 13afe5810d32e39f5fad0b630a91d353937863803ef5d0d33f6dad157205c4dd
- 9bb96fa6aee45120d14660506320932691310adef4353e684775f590a17c22fc
YARA
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | rule SecureLeaf_Omegatech_V10_CSharp_Loader { meta: description = "Omegatech ClickFix C# P/Invoke shellcode loader stub - V8/V9/V10 (Tier-1 dev fingerprint)" author = "SecureLeaf / Dispensight" date = "2026-06-15" reference = "SL-ADV-2026-WP-001-V10" strings: $va = "VirtualAlloc(IntPtr a, uint sz, uint t, uint p)" ascii $ct = "CreateThread(IntPtr ta, uint ss, IntPtr sa, IntPtr p, uint cf" ascii $wfso = "WaitForSingleObject(IntPtr h, uint ms)" ascii $interop= "System.Runtime.InteropServices" ascii $kernel = "kernel32.dll" ascii $tid = "out uint tid" ascii // V8 + V10 $sid = "out uint sid" ascii // V9 condition: $interop and $kernel and $va and $ct and $wfso and ($tid or $sid) } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | rule SecureLeaf_Omegatech_EtherHiding_Contract { meta: description = "Omegatech EtherHiding BSC-testnet payload-pointer contract (eth_call) - stable across V8/V9/V10" author = "SecureLeaf / Dispensight" date = "2026-06-15" reference = "SL-ADV-2026-WP-001-V10" strings: $contract = "0x7Fd85c090f2b35071C57a3b9FeAF462aaEb0E437" ascii nocase $selector = "0x6d4ce63c" ascii $ethcall = "eth_call" ascii $rpc1 = "bsc-testnet-rpc.publicnode.com" ascii $rpc2 = "bnbchain.org" ascii $allfail = "All RPC nodes failed" ascii condition: ($contract or $selector) and $ethcall and ($rpc1 or $rpc2 or $allfail) } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | rule SecureLeaf_Omegatech_Payload_URL_V8V10 { meta: description = "Omegatech payload staging URL - path prefix survives V8/V9/V10 naming rotation" author = "SecureLeaf / Dispensight" date = "2026-06-15" strings: $path = "/x7GkP2mQ9zL4/" ascii $my = "my_" ascii // V8, V10 $student = "student_" ascii // V9 $bin = ".bin" ascii $png = ".png" ascii condition: $path and ($my or $student) and ($bin or $png) } |