Специалисты платформы анализа угроз Triage обнаружили ранее неизвестный вредоносный загрузчик, получивший название Eimeria. Этот образец отличается сложной многоступенчатой архитектурой, включающей пять последовательных уровней запутывания кода. Цепочка заражения начинается с RAR5-архива, а заканчивается установкой WebSocket-соединения с сервером управления, что делает Eimeria одним из самых изощрённых инструментов доставки вредоносной нагрузки, обнаруженных в последнее время.
Описание
Начальный этап атаки - это архив формата RAR5, размещённый на инфраструктуре провайдера Dedik Services Ltd, зарегистрированной в Великобритании, а хост физически находится во Франкфурте-на-Майне. Внутри архива содержатся четыре файла: подписанный исполняемый файл dsclock.exe, библиотеки libcurl.dll, zlibwapi.dll и зашифрованный объект msbuilder64.dll. Названия и структура папки jjez явно указывают на попытку организовать боковую загрузку DLL - уязвимую технику, при которой Windows загружает вредоносную библиотеку из той же директории, где лежит легитимный исполняемый файл.
Файл dsclock.exe не представляет угрозы сам по себе. Он подписан сертификатом Authenticode российской компании Duality Software Co. Ltd. и числится на VirusTotal с 2022 года с нулевым уровнем обнаружения. Это типичная утилита для отображения часов, которая импортирует сетевые функции из libcurl.dll. Но в той же папке лежит zlibwapi.dll - внешне похожий на легитимную библиотеку для работы с алгоритмами сжатия. На самом деле в его секции .text спрятан движок AES-CBC-шифрования с собственной таблицей замен SBOX. Вредоносная DLL умеет перечислять заголовки PE-файлов, выполнять системные вызовы и генерировать криптографически стойкие случайные числа - ничего общего с архивацией.
Именно этот движок расшифровывает третий файл msbuilder64.dll. Первые 16 байт этого блока служат вектором инициализации для AES-128-CBC. После расшифровки получается исполняемый файл PE32+, который представляет собой самораспаковывающийся архив, созданный с помощью утилиты IExpress (стандартной утилиты Windows для создания установщиков). Внутри этого архива спрятаны 26 файлов: 19 из них имеют расширение .potm и напоминают презентации PowerPoint, а семь не имеют расширения. Все эти файлы - пустышки, зашифрованные двоичные данные, которые служат лишь для отвлечения внимания. При запуске IExpress извлекает их на диск, но реальная полезная нагрузка таится в двух дополнительных объектах: Deal.exe и большом файле bMgXiqSim.
Deal.exe - это компилированный скрипт на языке AutoIt, который выполняет полный цикл внедрения кода в процессы Windows. AutoIt интерпретирует pcode-скрипт из 24 773 строк. Сначала загрузчик восстанавливает чистую копию ntdll.dll с диска, перезаписывая участки памяти, где могли бы быть установлены точки перехвата EDR-систем (программ обнаружения конечных точек). Затем он расшифровывает большой шестнадцатеричный блок с помощью алгоритма RC4 при помощи ключа длиной 38 символов. После этого применяет декомпрессию LZNT1 - встроенный механизм Windows для распаковки данных. Полученный чистый модуль вставляется в один из системных процессов - explorer.exe, svchost.exe или taskhostw.exe - через технику сброса отображения памяти и последующей записи в адресное пространство жертвы. Загрузчик умеет определять разрядность целевого процесса и обрабатывать сборки .NET отдельно.
Антианалитические возможности Eimeria впечатляют. Перед запуском вредоносной активности скрипт вставляет 28-секундную паузу. Затем выполняется вычисление числа π с точностью до одной миллионной для обхода эмуляторов. Проверяется реальная продолжительность сна - если она не совпадает с ожидаемой, работа прекращается. Также запускается стресс-тест памяти и процессора для выявления тонких виртуальных машин. После завершения операций чувствительные буферы обнуляются через RtlZeroMemory.
Для закрепления в системе Eimeria добавляет запись в реестр в раздел автозагрузки текущего пользователя, копирует исполняемый файл и скрипт в скрытую системную папку AppData\Local\Material\ReportFootballHost и создаёт задачу в Планировщике заданий с триггером входа в систему. Таким образом, загрузчик будет запускаться при каждом новом сеансе пользователя.
Сервер управления (C2) использует протокол WebSocket и расположен по адресу ws://94.26.90[.]139:3006. В ходе проверки соединения тестовая утилита nc -vz подтвердила, что порт открыт, однако ответных данных загрузчик не получил - видимо, C2 ожидает определённый протокол рукопожатия. DNS не используется, IP-адрес жёстко зашит в коде.
В ходе исследования специалисты отметили, что архитектура Eimeria напоминает загрузчик DarkGate, который также применяет AutoIt, RC4 и RunPE с восстановлением ntdll. Однако отличия существенны: Eimeria использует пять слоёв доставки (RAR5, подписанный EXE, поддельная zlib DLL, IExpress, AutoIt) вместо одного скрипта. Подпись Duality Software Co. Ltd. - легитимный российский сертификат - делает первый этап практически невидимым для антивирусов. Техника сокрытия AES-движка внутри zlib DLL ранее не встречалась. И, наконец, выбор WebSocket вместо HTTP/HTTPS для C2 свидетельствует о низкоуровневой настройке протокола.
Сложность Eimeria указывает на целенаправленную разработку, а не на покупку готового инструмента. Организациям рекомендуется усилить мониторинг боковой загрузки DLL, особенно для файлов, подписанных малоизвестными сертификатами, а также обращать внимание на запуск IExpress из браузерных загрузок. Обнаружение такого загрузчика - серьёзный сигнал для SOC-центров (центров мониторинга информационной безопасности) о необходимости обновления правил YARA и поведенческих анализаторов.
Индикаторы компрометации
IPv4 Port Combinations
- 94.26.90.139:3006
SHA256
- 53abc3c2f3e919ecd84724439b4d4fb679857316c6af91987e6db1dde9e8a198
- 5d69a932a077fee044b193c28e84564143f5c7e51079ab48e88fef74ab0b77b7
- 62fdad7df8fd7bc2b211c2de06c002831b36987b48a943758432f25006661578
- 84fdf804149920cb474a030479fda1d5c9a5939388353054169ec692b8f75d3a
- c872cd101d9c2a773f08558dde7b716161cf977d4aa99c2347c0269423434f8c
- e155acf50ab0dad1a80f0a67d396d0ad5691fc9e314e4efd1da1dd3180c9632f
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | /* Eimeria RAT -- Multi-Stage Loader Chain YARA Rule Author: derp.ca Date: 2026-05-16 Source: https://github.com/kirkderp/yara Five-layer RAR5-to-RunPE loader chain: signed carrier (dsclock.exe) -> zlibwapi.dll hidden AES loader -> msbuilder64.dll AES-CBC decryption -> IExpress self-extracting archive -> AutoIt RunPE hollowing (RC4+LZNT1) -> .NET C2 beacon at ws://94.26.90.139:3006 Hashes: RAR5: c872cd101d9c2a773f08558dde7b716161cf977d4aa99c2347c0269423434f8c zlibwapi.dll: 53abc3c2f3e919ecd84724439b4d4fb679857316c6af91987e6db1dde9e8a198 Deal.exe: 5d69a932a077fee044b193c28e84564143f5c7e51079ab48e88fef74ab0b77b7 */ rule Eimeria_MultiStage_Loader { meta: id = "4KwQv5HVdzRxtlSq39Hu2t" fingerprint = "a6b4c8d2e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6" version = "1.0" date = "2026-05-16" modified = "2026-05-16" status = "RELEASED" sharing = "TLP:CLEAR" source = "HTTPS://GITHUB.COM/KIRKDERP/YARA" author = "derp.ca" description = "Eimeria RAT -- five-layer loader chain: RAR5, zlib DLL with hidden AES, IExpress archive, AutoIt RunPE hollowing (RC4+LZNT1), .NET C2 beacon at ws://94.26.90.139:3006" category = "MALWARE" malware = "EIMERIA" malware_type = "RAT" mitre_att = "T1055.012" reference = "https://github.com/kirkderp/yara" triage_score = 10 triage_description = "Eimeria multi-stage loader detected. Five-layer chain with signed carrier, hidden AES in zlib DLL, IExpress archive, AutoIt process hollowing." yarahub_uuid = "41ee8f0e-3835-46fd-b5c6-6321117ba729" yarahub_license = "CC0 1.0" yarahub_rule_matching_tlp = "TLP:WHITE" yarahub_rule_sharing_tlp = "TLP:WHITE" yarahub_reference_md5 = "f8a9f400ee56eb3bb2d539fa662b60da" strings: // zlibwapi.dll -- hidden AES loader $zlib_exports_combined = "deflateinflatecompressuncompresszlibVersionunzOpenzipOpen" ascii $aes_sbox_start = {63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 76} $rcon_start = {01 02 04 08 10 20 40 80 1b 36} $bcrypt_genrandom = "BCryptGenRandom" ascii $bcrypt_dll = "bcrypt.dll" ascii // dsclock.exe -- signed carrier (PDB path marker) $dsclock_pdb = "DSClock.x86.pdb" ascii $duality_signer = "Duality Software Co. Ltd." ascii // IExpress self-extracting archive markers $iexpress_sed = "IExpress" ascii $iexpress_makecab = "makecab.exe" ascii $iexpress_rundll_del = "DelNodeRunDLL32" ascii // AutoIt compiled executable markers $autoit_runtime = "AutoIt Error" ascii $autoit_corrupt = "AutoIt has detected the stack has become corrupt" ascii $require_admin = "#requireadmin" ascii // Eimeria-specific AutoIt script strings $eimeria_company = "Material" ascii $eimeria_appdir = "ReportFootballHost" ascii $eimeria_exe = "KitchenTaylor.exe" ascii $eimeria_task = "Material_ReportFootballHost_Startup" ascii $eimeria_run_key = "ReportFootballHost_EXX" ascii // Eimeria AutoIt script anti-analysis $antiemu_math = "Anti-Emu" ascii $restore_ntdll = "RESTORENTDLLHOOKS" ascii // Eimeria RC4+LZNT1 decryption $runpe_func = "RUNPE_EXACT" ascii $lznt1_func = "DECOMPRESS_LZNT1" ascii $rc4_func = "DECRYPT_RC4_SHELLCODE" ascii // Eimeria process injection APIs $unmap_view = "NtUnmapViewOfSection" ascii $set_context = "SetThreadContext" ascii $write_proc_mem = "WriteProcessMemory" ascii $alloc_ex = "VirtualAllocEx" ascii // C2 endpoint // RunOnce registry (from rbin emulation) condition: uint16(0) == 0x5A4D and ( // zlibwapi.dll variant -- hidden AES loader ($zlib_exports_combined and $aes_sbox_start and $bcrypt_genrandom and $bcrypt_dll) or // zlibwapi.dll variant -- AES SBOX + RCON + BCrypt (broader) ($aes_sbox_start and $rcon_start and $bcrypt_dll and filesize < 200KB) or // dsclock.exe variant -- signed carrier ($dsclock_pdb and $duality_signer) or // dsclock.exe variant -- PDB + IExpress ($dsclock_pdb and 2 of ($iexpress_sed, $iexpress_makecab, $iexpress_rundll_del)) or // IExpress self-extractor variant ($iexpress_sed and $iexpress_makecab and filesize > 4MB and filesize < 5MB) or // Eimeria AutoIt script -- specific config + RC4/LZNT1 ($eimeria_company and $eimeria_appdir and $eimeria_exe and 2 of ($lznt1_func, $rc4_func, $runpe_func, $antiemu_math, $restore_ntdll)) or // Eimeria AutoIt executable -- runtime markers + config ($autoit_runtime and $eimeria_run_key) or // Eimeria AutoIt -- persistence + process injection ($eimeria_task and 3 of ($unmap_view, $set_context, $write_proc_mem, $alloc_ex)) or // Deal.exe AutoIt compiled -- broad detection ($autoit_corrupt and $require_admin and $restore_ntdll and $runpe_func) ) } |