Злоумышленники из Ирана, известные под псевдонимом Nimbus Manticore, развернули новую кампанию против аэрокосмических и оборонных организаций на Ближнем Востоке и в Европе. На этот раз они использовали фишинг через профессиональную социальную сеть LinkedIn, выдавая себя за рекрутеров известных компаний. Схема оказалась многоступенчатой и включала поддельный портал найма, а также мнимое приложение для двухфакторной аутентификации, которое на деле оказалось вредоносным загрузчиком.
Описание
Группа Nimbus Manticore (также отслеживается как UNC1549 и Smoke Sandstorm) давно специализируется на целевых фишинговых операциях. В прошлом её жертвами становились предприятия авиационной и оборонной промышленности. Новая атака продолжила эту линию, но операторы изменили технику доставки вредоносного кода. Теперь они не просто рассылают письма с вложениями, а завязывают личное общение через LinkedIn.
Жертве писал якобы хедхантер с верифицированным профилем. Он предлагал вакансию в реально существующей компании Ebix и обещал зарплату в 200 тысяч долларов. В подтверждение своих слов он отправлял PDF-файл с подробным описанием обязанностей и условиями работы. Файл выглядел как официальный документ, подписанный HR-отделом самого Ebix (сама компания не причастна к атаке). После того как кандидат заинтересовывался, злоумышленники направляли его на фальшивый портал найма, зарегистрированный на домене ebix.recruitment-flow.com.
Портал был размещён за Cloudflare и скрывал реальный сервер. Для входа нужно было ввести временные учётные данные, которые передавал рекрутер. После авторизации система предлагала скачать ZIP-архив якобы с приложением для двухфакторной аутентификации. На самом деле архив содержал вредоносное программное обеспечение. Файл setup.exe был переименованным легитимным компонентом Microsoft Visual Studio, подписанным настоящим сертификатом Microsoft. Но из-за подмены конфигурации .NET он загружал вредоносную библиотеку TOTPGuard.dll вместо обычной.
Этот приём - перехват домена приложения (.NET AppDomain hijacking) - позволяет выполнить произвольный код, маскируясь под доверенный процесс. После запуска жертве показывали окно ввода секретного ключа, а затем генерировали одноразовые пароли. Приложение было полностью рабочим, что усиливало доверие. В то же время в фоне загрузчик расшифровывал и сохранял на диск основную вредоносную нагрузку. Как сообщили исследователи, ключи шифрования были жёстко прописаны в коде и не обфусцированы, что позволило создать сигнатуры для их обнаружения.
Далее загрузчик копировал себя и файл конфигурации в папку AppData\Roaming\2FAGuard и создавал задачу в планировщике Windows с именем BackupCheck. При каждом входе пользователя в систему задача запускала копию setup.exe с аргументом doit. Этот аргумент указывал загрузчику не показывать интерфейс, а сразу загрузить основной имплант из main.dll. Таким образом вредоносная программа получала постоянное закрепление в системе.
Основной имплант написан на нативном коде и зашифрован. Он проверяет окружение: если его процесс называется не setup.exe или родительский процесс - svchost.exe, то работа прекращается. Эти проверки служат защитой от песочниц и отладчиков. В отличие от предыдущих версий, текущий вариант содержит гораздо больше мусорного кода и обфускации потока управления, что усложняет анализ. В частности, используются непрозрачные предикаты - алгебраические тавтологии, которые выглядят как настоящая логика, но на самом деле только запутывают дизассемблер.
Командные серверы (C2) размещены в облаке Microsoft Azure и используют поддомены вида *.azurewebsites.net, что позволяет смешиваться с обычным трафиком. Адреса и маршруты API остаются незашифрованными, их легко извлечь статически. Это даёт защитникам возможность блокировать инфраструктуру по сетевым признакам. Кроме того, зафиксирован характерный user-agent: Chrome/146.0.0.0 Safari/537.36, а также пути /agent/poll, /agent/init и /agent/result.
Для защиты от подобных атак специалисты рекомендуют несколько мер. Прежде всего стоит пересмотреть программы обучения сотрудников: фишинг всё чаще происходит не через почту, а через социальные сети и мессенджеры. Сотрудники HR, финансов и маркетинга особенно уязвимы, так как часто получают внешние предложения о работе. Им необходимо объяснять, что настоящие рекрутеры не просят скачивать приложения для аутентификации со сторонних сайтов.
Также полезно ограничить запуск исполняемых файлов из пользовательских папок, таких как AppData, Temp и Downloads. Это можно сделать с помощью встроенного инструмента AppLocker. Период регистрации домена тоже играет роль: в этой кампании фишинговый домен был зарегистрирован всего за десять дней до атаки. Блокировка или ограничение доступа к свежим доменам для критичных отделов может снизить риск.
Несмотря на увеличение уровня обфускации, базовая логика импланта осталась прежней. Операторы Nimbus Manticore продолжают совершенствовать методы социальной инженерии и технические приёмы. Но благодаря публикации индикаторов компрометации и YARA-правил у защитников есть инструменты для своевременного выявления этой угрозы. Важно не полагаться только на почтовую безопасность, а расширять мониторинг на все каналы коммуникации, включая профессиональные сети.
Индикаторы компрометации
Domains
- business-dns-ns-joiners.azurewebsites.net
- business-joiners-exam.azurewebsiets.net
- ebix-exam-join-from-app.azurewebsites.net
- globalbusiness-checkers-it.azurewebsites.net
- global-check-business-it.azurewebsites.net
- global-check-itbusiness.azurewebsites.net
- global-it-checkbusiness.azurewebsites.net
- global-it-checkers.azurewebsites.net
- globalitconsultants.azurewebsites.net
- globalit-consultants.azurewebsites.net
- global-it-consultants.azurewebsites.net
- join-exam-now-ebix.azurewebsites.net
SHA256
- 06d12a4c4e3cc725dba37445cebeba41803718ccdb63d9d637355a241f651668
- 072744ce205bb89a36e563a86f30df5689e64eee75106b97ce708551c8194bbc
- 3628d13d2f8af7663d58dd1aa352c8f12d12233a7318ee203f01f195573a2ed2
- 620c51f4376cb79f0109c21971c28661418ae50b119585e3ffdb8011189fcb7b
- 8e5fc0998838559ca8611e6c03fd998a17ffc2eade24715b2fc3e723c712eb8b
- 9b63b744dc1f3a24f057a404c5622ed0ca933752a00ce05117727c7d11f05536
- c7ef2ec19d158301773b1590f5b5eeb362a30f725acad8f5b3a230e9f26d14be
- d1f525eb9347133b92e9558e1413558c8348c0f35a62577f60a5192ba38eb776
- dfa1e3137a032ee8561a1cd5e1a0f71a10bebb36aef7c336c878638a9c1239ee
- eee657ffdb2af8ed6412221e7d5fbf4f5742f2ac2c88f43f12db46af0697de71
YARA
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | rule SUSP_Nimbus_Manticore_PDF_Indicators_May26 { meta: description = "Detects inidcators found in PDF files created by Nimbus Manticore (UNC1549). The PDF files usually contain fake job offers or descriptions to lure victims into installing malware." author = "Jonathan Peters (cod3nym)" date = "2026-05-25" reference = "Internal Research" hash = "620c51f4376cb79f0109c21971c28661418ae50b119585e3ffdb8011189fcb7b" score = 70 strings: $op = { 3C 3C 2F 41 75 74 68 6F 72 28 4A 65 72 72 79 29 20 2F 43 72 65 61 74 6F 72 28 FE FF 00 4D 00 69 00 63 00 72 00 6F 00 73 00 6F 00 66 00 74 00 AE 00 20 00 57 00 6F 00 72 00 64 00 20 00 4C 00 54 00 53 00 43 29 } condition: 1 of them } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | rule MAL_APT_Nimbus_Manticore_Agent_May26 { meta: description = "Detects Nimbus Manticore (UNC1549) agent implant featuring data exfiltration and remote control." author = "Jonathan Peters (cod3nym)" date = "2026-05-28" reference = "Internal Research" hash = "dfa1e3137a032ee8561a1cd5e1a0f71a10bebb36aef7c336c878638a9c1239ee" score = 80 strings: $a1 = "Chrome/146.0.0.0 Safari/537.36" wide $a2 = ".azurewebsites.net" wide $s1 = "/agent/poll?token=" wide fullword $s2 = "/agent/init" wide fullword $s3 = "/agent/result" wide fullword condition: uint16(0) == 0x5a4d and 1 of ($a*) and 1 of ($s*) or 3 of them } |
| 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 | rule MAL_APT_Nimbus_Manticore_Stager_May26 { meta: description = "Detects .NET based stager using AppDomain Hijacking observed to be used by Nimbus Manticore (UNC1549). The stager drops another payload and establishes persistence via scheduled task." author = "Jonathan Peters (cod3nym)" date = "2026-05-20" reference = "https://research.checkpoint.com/2026/fast-and-furious-nimbus-manticore-operations-during-the-iranian-conflict/" hash = "eee657ffdb2af8ed6412221e7d5fbf4f5742f2ac2c88f43f12db46af0697de71" score = 80 strings: $x1 = "MyCompany-Product-TOTP-Salt-2024!@#$" wide fullword $x2 = "TOTPGuardRunner" ascii fullword $x3 = "\\AppDomainInjection-metlifeScenario\\TOTP" ascii $sa1 = "EncData" ascii fullword $sa2 = "DecryptAndSaveToDesktop" ascii fullword $sa3 = "CopyHelloToDesktop" ascii fullword $sb1 = "doit" wide fullword $sb2 = "DailyTrigger" wide fullword $sb3 = "GetTypeFromCLSID" ascii $sb4 = "yyyy-MM-ddTHH:mm:ss" wide fullword condition: uint16(0) == 0x5a4d and ( 1 of ($x*) or all of ($sa*) or all of ($sb*) ) } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | rule SUSP_ScheduledTasks_Nimbus_Manticore_Persistence_May26 { meta: description = "Detects scheduled task used for persistence by Nimbus Manticore (UNC1549). The task is used to persistenly load a custom implant that features data exfiltration and remote control capabilities." author = "Jonathan Peters (cod3nym)" date = "2026-05-27" reference = "Internal Research" score = 75 strings: $a0 = "<Task version=" wide $a1 = "xmlns=\"http://schemas.microsoft.com/windows/" wide $x1 = "<Arguments>doit" wide condition: uint16(0) == 0xfeff and all of them } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | rule SUSP_PE_Contains_Encrypted_Executable_May26 { meta: description = "Detects executables containing an encrypted embedded payload using parameters commonly observed in malware, suggesting obfuscation or staged execution." author = "Jonathan Peters (cod3nym)" date = "2026-05-20" reference = "Internal Research" hash = "eee657ffdb2af8ed6412221e7d5fbf4f5742f2ac2c88f43f12db46af0697de71" score = 70 strings: // MZ header AES encrypted with key: 1234567890123456 and IV: abcdefghijklmnop $op = { ae b6 8d 86 71 f0 a9 c8 90 66 53 31 ef 7f 1f d2 b4 a8 21 bc 39 77 c2 c2 60 db 24 4a 12 32 f9 69 09 09 46 22 a6 d1 0a 5e a7 dc 62 fa 96 56 ad dd } condition: uint16(0) == 0x5a4d and 1 of them } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | rule SUSP_AppDomainInjection_Keyword_May26 { meta: description = "Detects link files, archives and binaries that contain keywords related to AppDomain hijacking/injection a technique used by malware to sideload payloads." author = "Jonathan Peters (cod3nym)" date = "2026-05-27" reference = "https://attack.mitre.org/techniques/T1574/014/" hash = "eee657ffdb2af8ed6412221e7d5fbf4f5742f2ac2c88f43f12db46af0697de71" score = 70 strings: $x1 = "AppDomainInjection" ascii wide fullword $x2 = "AppDomainHijack" ascii wide fullword condition: ( uint16(0) == 0x5a4d // PE or uint16(0) == 0x4b50 // ZIP or uint32(0x8000) == 0x30444301 // ISO or uint16(0) == 0x004c and uint32(4) == 0x00021401 // LNK ) and 1 of ($x*) } |