- شرکت Cisco Talos پس از مشاهده اجرای یک DLL با نام “verification.google” از WebDAV در یک سازمان دولتی اوکراینی، تحقیق را آغاز کرد. با اطمینان متوسط ارزیابی میشود که این حملات متوجه یک سازمان خاص نیست و بخشی از یک عملیات سرقت رمزارز و اعتبارنامه است که در آن Amatera stealer بهعنوان payload اصلی بهکار میرود.
- تحلیل رفتار مشابه WebDAV پژوهشگران را به loader دومی با نام “pf.ch” رساند و امکان بازسازی مراحل پیشین تحویل آن را فراهم کرد. این زنجیره از یک Cloudflare Worker برای تزریق کد JavaScript که روی BNB Smart Chain ذخیره شده است و از یک اعلان ClickFix که خود را شبیه Google CAPTCHA جا میزند استفاده میکند و در نهایت به دانلود و اجرای Amatera stealer منتهی میشود. این زنجیره احتمالاً بسیار شبیه همان عاملی است که به اجرای مبتنی بر WebDAV در آن سازمان دولتی اوکراینی منجر شده است.
- دو build از Amatera توسط زیرساختهای command-and-control (C2) متناظر خود به payloadهای ثانویه متفاوتی مأمور شده بودند: loader “pf.ch” دستور داشت یک loader NativeAOT را که ZigCryptoStealer را اجرا میکند و یک reverse proxy مبتنی بر Go را مستقر کند، در حالی که loader “verification.google” موظف بود یک نمونه غیرمجاز از NetSupport Manager را نصب کند.
- نصب NetSupport Manager دارای پیکربندی با سرور C2 بود که از یک آدرس IP مستقر در روسیه استفاده میکرد. با اطمینان متوسط ارزیابی میشود که شاخه حمله “verification.google” توسط یک عامل تهدید روس انجام شده است.
در آوریل 2026، شرکت Cisco Talos یک اجرای غیرمعمول DLL از طریق WebDAV را در تلمتری endpoint یک سازمان دولتی اوکراینی شناسایی کرد. فایل راهدور “verification.google” نام داشت و از طریق نسخه 32-بیتی “rundll32.exe” راهاندازی شد. این یافته اولیه به دو زنجیره تحویل مشابه، دو loader DLL متفاوت و دو payload از ACR/Amatera stealer راه برد. Talos عامل پشت فعالیت “verification.google” مشاهدهشده را با شناسه UAT-10820 ردیابی میکند.
پس از بررسی اولیه، پژوهشگران تصمیم گرفتند برای بازیابی زنجیره کامل آلودگی به شکار الگوهای مشابه WebDAV و اجرای ordinal بپردازند. با استفاده از VirusTotal، پژوهشگران توانستند یک زنجیره کامل را از loader DLL دومی با نام “pf.ch” شناسایی کنند.
این دو نمونه بخشی از مجموعه گستردهتری از کارزارهای اخیر هستند که Amatera را از طریق زنجیرههای آلودگی متفاوت تحویل میدهند. در ژوئیه 2026، شرکت Malwarebytes مستندسازی کرد که دانلودهای جعلی بازی و نرمافزار پیش از تحویل Amatera از RenPy Loader، MSBuild و EtherHiding استفاده میکردند. شرکت Blackpoint Cyber توصیف کرد که زنجیره تأیید جعلی دیگری از یک اسکریپت امضاشده Microsoft App-V، پیکربندی ذخیرهشده در Google Calendar و یک محموله پنهانشده در یک تصویر PNG بهره میبرد. بهجز خانواده بدافزارِ محموله اصلی، زیرساخت مشترک یا شواهد دیگری که آن فعالیتها را به زنجیرههای توصیفشده در این مطلب پیوند دهد، یافت نشد.
یافته اولیه در تلهمتری اندپوینت
رویداد اولیهای که آغازگر این بررسی بود در آوریل 2026 ثبت شد و نشان داد که یک فایل DLL از طریق یک مسیر WebDAV UNC اجرا شده و همزمان سرویس Windows WebClient راهاندازی شده است. گذشته از خط فرمان اولیه، جزئیات checksum مربوط به DLL اجراشده در دست بود، اما روشن نبود چه چیزی زنجیره اجرا را آغاز کرده است. زمان جستوجو در مخازن اطلاعات متنباز (OSINT) و سکوی تحلیلی Talos فرارسید. هدف، یافتن اجرای مشابه با لودر و خانواده محموله مشابه و در حالت ایدهآل بازیابی کل زنجیره آلودگی بود که احتمالاً نشان میداد اجرای “verification.google” چگونه راهاندازی شده است. این موضوع به شناسایی لودر “pf.ch” و زنجیره کشفشده انجامید.
جستوجو یک زنجیره تحویل WebDAV دوم را آشکار میکند
نمونه “pf.ch” همان ترکیب WebDAV، نام فایل DLL استتارشده و اجرای تابع بهصورت ordinal از طریق “rundll32.exe” را به کار میگیرد. همچنین توالی کامل مرتبط با ClickFake که به این لودر منتهی میشود بازیابی شد. شکل 1 هر دو زنجیره را نشان میدهد و عناصر خطچین مراحل بازیابینشده بهطور مستقیم را مشخص میکنند. با اطمینان پایین تا متوسط، ارزیابی میشود که این دو زنجیره تحویل یکسان هستند.
زنجیره لودر “pf.ch” کشفشده با Javascript متعلق به ClearFake آغاز شد که توسط یک Cloudflare worker مخرب در محتوای یک وبسایت به خطر افتاده تزریق شده بود.
سرور C2 پیکربندیای برگرداند که به بدافزار سرقت اطلاعات دستور میداد یک بسته بارگذاری جانبی DLL را دانلود کند که در آن یک مولفه امضاشده Chrome یک DLL مخرب NativeAOT با نام “secur32.dll” را بهصورت جانبی بارگذاری میکند. این DLL بدافزار ZigCryptoStealer را بارگذاری میکند و با استفاده از یک درایور آسیبپذیر نرمافزارهای EDR را خاتمه میدهد. همچنین یک بارگذار shellcode مجزا برای x86 همراه با یک Go reverse TCP proxy، بهعنوان محموله ثانویه، طبق پیکربندی Amatera که از سوی سرور C2 ارسال شد، دانلود میشود.
محموله ثانویه شاخه “verification.google” طبق دستور C2 اختصاصی خود، یک اسکریپت PowerShell است که میکوشد نمونهای از ابزار دسترسی از راه دور NetSupport Manager را نصب کند.
بدافزار ClearFake کد مرورگر را از BNB Smart Chain بازیابی میکند
شاخه “pf.ch” احتمالاً از یک وبسایت بهخطرافتاده آغاز میشود. یک Cloudflare Worker یک JavaScript مخرب تزریق میکند که از طریق “bsc-testnet-rpc[.]publicnode[.]com” قرارداد testnet در BNB Smart Chain با شناسه 0x886d310Ac23e05EA705e24E513D19f53793832A9 را پرسوجو میکند.
بلاکچین عمومی سازگار با Ethereum به نام BNB Smart Chain میزبان تراکنشها و قراردادهای هوشمند است. مهاجم از این قرارداد بهعنوان فضای ذخیرهسازی قابلتغییر از راه دور برای JavaScript کدگذاریشده استفاده میکند؛ رویکردی که با نام EtherHiding شناخته میشود. بر اساس سیستمعامل دستگاه قربانی، کد JavaScript مرحله بعدی را از بلاکچین بازیابی میکند که بهعنوان یک ارائهدهنده میزبانی عملاً غیرقابلتعطیل برای کد مخرب عمل میکند. Potent Pages پیشتر Cloudflare Workers غیرمجاز را که همان قرارداد مرحله اول را پرسوجو میکردند مستند کرده بود.
کد اولیه JavaScript شامل روالهایی برای بررسی محیطهای مرورگر محلی و headless است، سیستمعامل را شناسایی میکند و بر اساس نتیجه عملیات یک قرارداد دوم را پرسوجو میکند. اگر سیستم قربانی Windows باشد، کد را از 0x46790e2Ac7F3CA5a7D1bfCe312d11E91d23383Ff بازیابی میکند و اگر macOS باشد، از 0x68DcE15C1002a2689E19D33A3aE509DD1fEb11A5 استفاده میکند. پاسخ با Base64 دیکد میشود و بهعنوان JavaScript ارزیابی میشود.
مرحلهٔ مرورگر در Windows یک شناسهٔ قربانی ایجاد میکند، آن را در کوکی cjs_id ذخیره میکند و از یک قرارداد ردیابی میپرسد که آیا هدف برای آن شناسه از پیش محقق شده است یا خیر. اگر مرورگر بدون واسط گرافیکی نباشد و هدف Windows باشد، اسکریپت یک چکباکس جعلی به سبک Google CAPTCHA روی صفحهٔ آلوده قرار میدهد و از قربانی میخواهد پنجرهٔ Run در Windows را باز کند، محتوای کلیپبورد را جایگذاری کند و کلید Enter را فشار دهد.
فرمان کپیشده یک مسیر WebDAV را روی یک زیردامنهٔ تصادفی از “leaguejazire[.]com” باز میکند، شناسهٔ قربانی را در مسیر قرار میدهد و “pf.ch” را از طریق ordinal #1 اجرا میکند.
شرکت Censys همان قراردادهای Windows و macOS را در یک زنجیرهٔ ClickFix مبتنی بر بلاکچین مستند کرده است، هرچند payloadهای پاییندستی در آن گزارش با آنچه در اینجا تحلیل شده متفاوت است.
مرحلهٔ مرورگر در macOS از همان بررسیهای مرورگر بدون واسط گرافیکی، ردیابی قربانی و طراحی تأیید جعلی استفاده میکند، اما زنجیرهٔ اجرای آن متفاوت است. از قربانی میخواهد Terminal را باز کند و فرمانی را جایگذاری کند که curl را با یک رشتهٔ user-agent مربوط به macOS بهکار میگیرد. این درخواست به یک زیردامنه از “riyazinikokar[.]xyz” ارسال میشود. با توجه به اینکه موضوع پژوهش اولیه یک مشتریِ در حال اجرای Windows بوده است، بخش macOS از شاخهٔ “pf.ch” بیشتر پیگیری نشده است.
اجرای DLLهای تغییرنامدادهشده توسط WebDAV
هر دو گونهٔ مشاهدهشده، یک DLL 32-بیتی را از طریق WebDAV بازیابی میکنند و از نام پسوندی استفاده میکنند که نشان نمیدهد فایل یک DLL استاندارد است. هر دو از فرایند 32-بیتی “rundll32.exe” استفاده میکنند و تابع را با فراخوانی ordinal #1 صدا میزنند. export نخست متناظر، moor در “pf.ch” و CfgInspectModuleData در “verification.google” است.
لودرهای آغازین متفاوت
اگرچه الگوی اجرای WebDAV یکسان است، دو لودر آغازین از کد و روشهای حفاظتی متفاوت استفاده میکنند.
استفاده از کنترل جریان مبتنی بر استثناء در “pf.ch”
لودر “pf.ch” یک DLL 32-بیتی فشردهشده است که تنها export نامگذاریشدهٔ آن moor است و جدول import آن فقط شامل توابع AddVectoredExceptionHandler و __mb_cur_max است.
کد پکرشده از vectored exception handling، حلقههای XOR، هشکردن API و الگوهای جریان کنترل استفاده میکند که تحلیل ایستای کد را دشوارتر میکند. پس از مقداردهی اولیه، یکی از نخهای آن منتظر رویدادی با نام hit میماند. بهمحض اینکه رویداد فعال شود، یک blob نهفته را به حافظه کپی میکند و با استفاده از Windows fibers کنترل را به آن منتقل میکند. دیکدر مرحلهٔ بعدی برای رمزگشایی پِیلود نهایی Amatera از XOR و LZNT1 استفاده میکند.
پروندهٔ PE آنپکشده، که نمونهای از Amatera است، نیز 32-بیتی است، جدول import ندارد و با پیمایش جدولهای export ماژولهای بارگذاریشده، APIها را resolve میکند. این نمونه برای اجرای سیستمکالها از گذارهای 32-به-64 بیتی استفاده میکند؛ احتمالاً برای دورزدن hookهای EDR.
این نمونه برچسب build بهصورت 4.1.5-alpha و رشتهٔ GETWELLV2 را در خود دارد. دربارهٔ Amatera شناخته شده است که از Steam community profiles بهعنوان resolverهای C2 از نوع dead drop استفاده میکند و رشتهٔ GETWELL2 در برخی نمونههای پیشین بهعنوان نام یک Steam community profile که برای بازیابی آدرس IP سرور C2 استفاده میشد مشاهده شده است. پس از اینکه آدرس سرور C2 resolve شد، پیکربندی اصلی دانلود میشود.
پِیلود Amatera تنها بهصورت آرتیفکتِ مقیمِ حافظه بازیابی شد و مشاهده نشد که روی دیسک نوشته شود. بااینحال هش آن در فهرست Indicator of Compromise (IOC) در پایین گنجانده شده است، زیرا هشهایی که از حافظه مشتق میشوند همچنان برای پویش حافظه قابل استفادهاند.
گونه “verification.google” از تکنیک DLL hollowing در “dbghelp.dll” استفاده میکند
گونهٔ “verification.google” بلافاصله پِیلود خود را آنپک نمیکند. ابتدا وضعیت را آماده میکند و سپس کنترل اجرا را از طریق یک callback عبور میدهد. این callback با استفاده از تابع TpAllocWork که بهصورت پویا resolve شده و یک تابع داخلی nativeِ NTِ بدون مستندات در “ntdll.dll” است ثبت میشود. این callback بعداً بهشکل غیرهمزمان توسط Windows اجرا میشود. تابع callback عمدهٔ قابلیت آنپک مخرب را در یک حلقهٔ بزرگِ مسطحسازی جریان کنترل پیادهسازی میکند.
لودر، توابع را با hash resolve میکند، وضعیت اجرای برنامه را از محیط مشتق میکند و استابهای مستقیم WoW64 برای سیستمکالها پیادهسازی میکند. این استابها شمارههای سیستمکال را در runtime رمزگشایی میکنند و بهجای توابع متناظر exportشده در “ntdll.dll”، اشارهگر گذار WoW64 را فراخوانی میکنند.
لودر مرحله بعدی خود را از دادههای موجود در بخش .rdata بازسازی میکند. ابتدا یک تصویر پاک از “dbghelp.dll” قانونی را در حافظه نگاشت میکند و سپس ابتدای بخش کد آن را با مرحله بعدیِ از بسته خارجشده بازنویسی میکند. در نهایت، پیش از انتقال کنترل به بخش کدِ بازنویسیشدهِ “dbghelp.dll”، حفاظت اجرایی را بازمیگرداند.
این تکنیک بازنویسی ماژول (stomping) با نامهای DLL hollowing یا module overloading نیز شناخته میشود. شرکت VMRay در بررسی فنی DLL hollowing همین توالی هستهای را توصیف میکند: بارگذاری یک DLL معتبر، بازنویسی کد نگاشتهشده آن با محتوای مخرب، و اجرا از همان ناحیه بازنویسیشده. شرکت G DATA مستندسازی module stomping را در یک زنجیره HijackLoader که ACRStealer را تحویل میداد، انجام داده است؛ با استفاده از DLLهای متفاوت “evr.dll” و “rasapi32.dll” بهجای “dbghelp.dll” مشاهدهشده در این مورد.
پیکربندیهای C2 Amatera
نمونه Amatera بارگذاریشده توسط “pf.ch” C2 خود را از طریق یک صفحه Telegraph حل میکند
پیش از آغاز نشست C2 مربوط به Amatera، نمونه Amatera که در شاخه “pf.ch” بهکار رفته است آدرس dead drop برای C2 را بهشکل “https[:]//telegra[.]ph/Functions-04-03” میسازد. در زمان تحلیل، این صفحه شبیه یک آموزش کوتاه برنامهنویسی Rust با عنوان «Functions.» بود که در نمونه کدِ تغییردادهشده، رشته r.]MTQ1LjI0OS4xMDkuMTQ3)0( را قرار داده بود.
کد HTML خام همان مقدار را درون یک عبارت println قرار میدهد.
با رمزگشایی MTQ1LjI0OS4xMDkuMTQ3، نشانی C2 برابر “145.249.109[.]147” بهدست میآید.
پس از حلکردن آدرس، payload درگاههای گذار WoW64 را تولید میکند، یک سوکت Auxiliary Function Driver (AFD) باز میکند و مستقیماً به “145.249.109[.]147” روی پورت TCP 443 متصل میشود.
پس از اتصال به سرور C2، Amatera به URL مربوط به GetEndpoints روی سرور متصل میشود. پاسخ، مسیرهای URI تصادفی برای عملکردهای مختلف C2 ارائه میکند. سپس بدافزار سرقت اطلاعات، با استفاده از مسیر پیکربندی بههمراه یک build identifier تعبیهشده، قواعد گردآوری اطلاعات خود را بازیابی میکند.
در بیلد “pf.ch”، یک بافر HTTP که از TLS رمزگشایی شده بود و امکان تحلیل آن فراهم شد، شامل یک شناسه نشست غیرصفر و بدنهای نامشفاف به طول 73 بایت بود که قاببندی آن با پروتکل ECDH و ChaCha20-Poly1305 که برای نسخههای اخیر Amatera مستند شده است همخوان است.
پس از حذف لایههای رمزنگاری انتقال و برنامه، پیکربندی ابتدا Base64 رمزگشایی و سپس با کلید 852149723\x00 به روش XOR رمزگشایی میشود، و پیش از آنکه بهعنوان یک شیء JSON تجزیه شود.
علاوه بر قواعد سرقت داده، پیکربندی دریافتی شامل دستورالعملهایی برای بارگذاری payloadهای ثانویه در یک آرایه json به نام ld (load) نیز بود.
فیلد ld آرایهای از وظایف لودر ثانویه است که از سوی کنترلر Amatera ارائه میشود. در هر ورودی، u آدرس دانلود URL است، tf نوع payload را انتخاب میکند و tr اجرای مبتنیبر فایل (1) یا بدونفایل (2) را تعیین میکند. لودر از اجراییها، DLLها، اسکریپتهای فرمان، PowerShell، shellcode خام و بستههای MSI پشتیبانی میکند که نوع آن با فیلد tf مشخص میشود. مقدار p ترتیب وظایف را تعیین میکند و مقادیر مثبت کوچکتر زودتر پردازش میشوند.
پیکربندی Amatera بارگذاریشده با “verification.google”
بیلد Amatera با “verification.google” کنترلر bootstrap خود را بهصورت یک رشته رمزگذاریشده ذخیره میکند. در زمان اجرا، آدرس ثابت “45.150.34[.]2” را رمزگشایی میکند و بهصورت مستقیم روی پورت TCP 443 به آن متصل میشود، در حالیکه “github[.]com” را بهعنوان نام سرور TLS و مقدار HTTP Host ارائه میدهد. برخلاف بیلد “pf.ch”، برای بهدست آوردن آدرس اولیه C2 از یک dead-drop resolver عمومی استفاده نمیکند. پس از اتصال، فرمان GetEndpoints را برای بهدست آوردن endpointهای فعال مورد استفاده در ارتباطات بعدی ارسال میکند.
مانند payload مربوط به Amatera در “pf.ch”، نخستین URL مربوط به C2 که فراخوانی میشود GetEndpoints است. پیکربندی این شاخه شامل بیش از 400 ورودی در فهرستهای گردآوری مرورگر، افزونه، پیامرسان، کیفپول و سایر برنامهها است، بهعلاوه چهار قاعده گردآوری فایل.
قواعد برنامه در blob پیکربندی، گردآوری اولیه اطلاعات مرتبط با مرورگر را به دادههای Telegram، Signal، WhatsApp و سایر پیامرسانها گسترش میدهند. این قواعد همچنین بیش از 100 مسیر کیفپول دسکتاپ و دادههای اعتبارنامه از مدیران گذرواژه، برنامههای احراز هویت، کلاینتهای FTP، کلاینتهای ایمیل، نرمافزارهای VPN و ابزارهای دسترسی راهدور را پوشش میدهند. اهداف نمونه شامل KeePass، Bitwarden، 1Password، RoboForm، NordPass، WinAuth، Authy، FileZilla، AnyDesk، NordVPN و AzireVPN است.
چهار قانون file grabber پوشههای Desktop، Downloads، Documents و Windows Recent-items را پوشش میدهند. در این قوانین، بیش از 100 الگوی منحصربهفرد برای نام فایل و پسوند بهدنبال کلیدهای خصوصی، نسخههای پشتیبان wallet، اطلاعات مربوط به API و OAuth، دادههای احراز هویت دومرحلهای، پایگاههای داده گذرواژه و فایلهای گواهی مانند .kdbx، .p12، .pfx و .pem میگردند. بیشتر قواعد جمعآوری بر سرقت دادهها و اعتبارنامههای مرتبط با رمزارز متمرکزند.
بارهای ثانویه Amatera
در ادامه، تمرکز بر وظایف بارگذار ثانویه است که بر پایه نوع بار ثانویه نصبشده، ممکن است به بازیگر تهدید پیشرفتهتری اشاره کند.
بیلد “pf.ch” از Amatera دو وظیفه ثانویه دریافت کرد. یکی یک بارگذار NativeAOT و ZigCryptoStealer را مستقر کرد و دیگری یک پراکسی معکوس TCP بهزبان Go را از حافظه اجرا کرد. بیلد “verification.google” یک وظیفه PowerShell دریافت کرد که NetSupport Manager را نصب کرد.
|
شاخه Amatera |
نوع وظیفه |
قابلیت پس از اجرا |
|
«pf.ch» |
آرشیو مبتنی بر فایل |
میزبان برای Chrome DLL side-loading، بارگذار NativeAOT، خاتمه پردازه و ZigCryptoStealer |
|
«pf.ch» |
shellcode بدون فایل |
پراکسی معکوس TCP بهزبان Go روی WebSocket و Yamux |
|
«verification.google» |
PowerShell بدون فایل |
دسترسی از راه دور غیرمجاز NetSupport Manager |
زنجیره NativeAOT، ZigCryptoStealer را اجرا میکند
مدخل “jquery.min.js” اولویت 1 دارد، بنابراین Amatera آن را ابتدا پردازش میکند. مقادیر tf: 1 و tr: 1 گرداننده اجرایی مبتنی بر فایل را برمیگزینند. پاسخ سرور الزامی ندارد یک فایل PE باشد و میتواند یک فایل آرشیوی نیز باشد. زمانی که این گرداننده یک آرشیو دریافت کند، بارگذار آن را در یک پوشه موقت از حالت فشرده خارج میکند، فایلهای *.exe حاصل را فهرست میکند و اجرایی منتخب را راهاندازی میکند. جدیدترین پاسخ مشاهدهشده یک آرشیو ZIP با SHA-256 برابر با 279d04c0cfd700c8bcb9acbed528131d3ffef8e25d12713e8649772739aecb92 بود.
این آرشیو شامل فایل “platform_experience_helper.exe” بود که یک مؤلفه قانونی Google Chrome است. این فایل اجرایی تابع GetUserNameExW را از “Secur32.dll” وارد میکند؛ “Secur32.dll” در آرشیو یک DLL مخرب است که توسط مؤلفه Chrome بهصورت side-loading بارگذاری میشود.
“Secur32.dll” بارگذاریشده بهصورت side-load یک بارگذار NET NativeAOT است که 2 فایل PE را رمزگشایی و بارگذاری میکند. فایل نخست یک payload در حالت کاربر است و دومی یک درایور آسیبپذیر که برای ter استفاده میشود. DLL مربوط به NativeAOT فرایند “C:\Windows\”explorer.exe” را در حالت معلق آغاز میکند، سرآیندها و بخشهای PE را بهصورت دستی در فرایند فرزند نگاشت میکند، متن رشته اولیه آن را به نقطه ورود جدید تغییر میدهد و آن را از سر میگیرد.
این پیلود یک استیلر ارز دیجیتال است که به زبان Zig نوشته شده — ZigCryptoStealer. کلیپبورد را پایش میکند، چندین قالب آدرس ارز دیجیتال را تشخیص میدهد و میتواند مقادیر منطبق را با آدرسهایی که در پیلود تعبیه شدهاند جایگزین کند.
این پیلود یک eth_call مجزای JSON-RPC از طریق “bsc[.]rpc[.]blxrbdn[.]com” به قرارداد BNB Smart Chain 0x7CC3cFC1Ac007B8c6566fD2C7419b15a75473468 انجام میدهد. این دومین استفاده از EtherHiding در زنجیره آلودگی است؛ این بار توسط پیلود نهایی و نه چارچوب تحویل مبتنی بر مرورگر. شرکت VMRay پیشتر مستندسازی کرده است که گونههایی از ZigCryptoStealer از قراردادهای BNB Smart Chain بهعنوان dead drop برای پیکربندی C2 استفاده میکنند.
ZigCryptoStealer این درخواست را در قالب یک پرسوجوی روتین برای موجودی توکن ERC-20 پنهان میکند. یک آدرس ارز دیجیتالِ بهصورت تصادفی تولیدشده ارائه میشود، اما قرارداد هوشمند آن را نادیده میگیرد و در عوض متنی را که توسط اپراتور ذخیره شده بازمیگرداند. اپراتور میتواند این متن را با استفاده از تابع setData(string) قرارداد تغییر دهد. در جریان تحلیل، قرارداد “lb[.]propertyfind[.]cc” را بازگرداند و سپس ZigCryptoStealer آن را بهعنوان دامنه C2 خود بهکار گرفت.
این قرارداد در 16 مارس 2026 مستقر شد. همان کیفپولی که آن را مستقر کرد تا 26 ژوئیه 39 فراخوانی موفق setData انجام داد. این فراخوانیها تاریخچهای عمومی از مقادیر C2 که به بدافزار ارائه شده بود فراهم میکنند، با شش دامنه که در طول ژوئیه فعال بودند:
|
بازه مؤثر برحسب UTC |
مقدار قرارداد |
|
30 ژوئن – 5 ژوئیه |
fd[.]gstats-api-contact[.]cc |
|
5 ژوئیه – 9 |
pkg[.]vogueatelier[.]cc |
|
9 ژوئیه – 12 |
kffd3[.]vogueatelier[.]cc |
|
12 ژوئیه – 18 |
kffd3[.]vexlatech[.]cc |
|
18 ژوئیه – 26 |
static[.]quorashift[.]cc |
|
26 ژوئیه – 30 |
lb[.]propertyfind[.]cc |
گروه Talos از Cisco Umbrella برای مشاهده فعالیت DNS برای هر شش دامنه در زمان فعالبودن آنها استفاده کرد. دو مقدار اخیر همچنین گستردهترین توزیع کوئری را داشتند. دادههای Umbrella شامل کوئریهای DNS از 38 کشور برای “static[.]quorashift[.]cc” و از 98 کشور برای “lb[.]propertyfind[.]cc” است. بیشترین کوئری برای مقدار جاری از ایالات متحده، اندونزی، برزیل، هند و مصر آمده است.
دادههای Passive DNS نشان میدهد که هر شش دامنه به آدرسهای مشترک Cloudflare نگاشت شدهاند.
دومین PE رمزگشاییشده یک درایور امضاشده Windows است که اطلاعات نسخه آن شامل نامهای MOCOMSYS & DCRC و DCRCV_U Driver (for SCM) است. نام پرونده اصلی آن “DCRCVDrv.sys” است و دستگاه \Device\DCRCVDRV_U را ایجاد میکند.
لودر NativeAOT فرایندهای در حال اجرا را فهرست میکند، نامهای آنها را هش میکند و هشها را با فهرست هدف داخلی از نرمافزارهای EDR و دیگر ابزارهای امنیتی مقایسه میکند. برای هر نام فرایندی که تطابق دارد، شناسه فرایند را با IOCTL 0x2205c0 به درایور میفرستد. هندلر درایور PID چهاربایتی را میپذیرد، یک هندل فرایند بهدست میآورد و ZwTerminateProcess را فراخوانی میکند. هیچ بررسی مجوزدهی فراخواننده در آن شاخه IOCTL مشاهده نشد. در نتیجه، لودر به یک ابتداییِ پایاندادنِ فرایند در حالت کرنل دست مییابد؛ یک BYOVD driver.
محموله Go میزبان را به یک پروکسی TCP معکوس تبدیل میکند
URL مربوط به دومین محموله ثانوی شاخه “pf.ch” یک blob شلکد دودویی با SHA-256 643ef35536ff9273fb84b8504467b1a5645cd3ffd5476d64b99244b02131b205 برگرداند.
شلکد 32-بیتی بلوک محیط فرایند (PEB) را پیمایش میکند تا “ntdll.dll” را بیابد و LdrLoadDll، NtAllocateVirtualMemory، NtProtectVirtualMemory و NtFreeVirtualMemory را resolve میکند. سپس محموله نهایی ذخیرهشده در شلکد را با استفاده از XOR برای رمزگشایی و LZNT1 برای بازفشردهسازیِ محموله پروکسیِ فشردهشده، رمزگشایی و از حالت فشرده خارج میکند.
پرونده از حالت فشرده خارجشده دارای SHA-256 1819827e17f31e72d456158b6b9c90af25a65945f6f05d04a060da9f24179b25 است.
این محموله یک اجرایی Windows 32-بیتی با Golang است که بسته main آن “github.com/acr/proxy-panel/cmd/bot” است. کتابخانه مالتیپلکسینگ شبکه HashiCorp Yamux را شامل میشود و C2 بهصورت hardcoded برابر با “wss://”update[.]dubbedmuch[.]cc”/” است.
پروکسی مقادیر Windows MachineGuid و hostname را میخواند و سپس آنها را از طریق پروتکل WebSocket Secure (wss) ارسال میکند. پس از آنکه سرور C2 کلاینت را پذیرفت، برنامه یک نشست Yamux server ایجاد میکند و ارتباطات خروجی را روی همان اتصال مالتیپلکس میکند. هر جریان منطقی یک نشانی مبدأ و یک نشانی مقصد فراهم میکند. کلاینت به مقصد درخواستی متصل میشود و بایتها را در هر دو جهت رله میکند.
PowerShell در شاخه “verification.google” نرمافزار NetSupport Manager را نصب میکند
پرتاب ثانویه در این شاخه “https://kr[.]cedar2glanz[.]ru/jewel[.]js” است. مقدار tf برابر 4 برای تک دستور بارگذار محموله ثانویه (ld) این محموله را بهعنوان PowerShell شناسایی میکند. مقدار tr برابر 2 مسیری از اجرا را انتخاب میکند که URL را با PowerShell DownloadString بازیابی میکند و آن را از طریق Invoke-Expression (IEX) اجرا میکند. تحلیل Amatera همین معناشناسی برای ld، tf و tr را با جزئیات بیشتری مستند کرده است.
مرحله بعدی PowerShell توابع بومی را بهصورت پویا resolve میکند و پیش از نصب محموله، یک بررسی محیط اجرا میکند که شامل مراحل زیر است:
- شماره سریال volume درایو C: را میپرسد و آن را با مقدار hard-coded برابر 4E014A2F مقایسه میکند. عبارت اولیه زمانی که این مقدار منطبق باشد مقدار true بازمیگرداند و امکان میدهد اجرا زودتر ادامه یابد و بررسیهای بعدی نادیده گرفته شوند.
- زمان کارکرد سیستم را از Win32_OperatingSystem.LastBootUpTime محاسبه میکند. زمان کارکرد کمتر از 10 دقیقه مقدار false بازمیگرداند و باعث خروج اسکریپت میشود.
- یک فراخوانی بومی NtDelayExecution به مدت 500 میلیثانیه را با GetTickCount64 اندازهگیری میکند. اگر به نظر برسد کمتر از 400 میلیثانیه گذشته است، این شرط مقدار false بازمیگرداند که میتواند محیطی را شناسایی کند که تأخیرها را تسریع میکند یا از آنها عبور میکند.
- تعداد پردازنده را بررسی میکند. تعداد کمتر از سه پردازنده بهطور غیرمنتظره مقدار true بازمیگرداند و اجازه میدهد اجرا زودتر ادامه یابد، بهجای آنکه سیستم با منابع کم رد شود.
- کل حافظه فیزیکی را پرسوجو میکند. مقدار گزارششده کمتر از 3.2GiB مقدار false بازمیگرداند.
- Win32_VideoController را پرسوجو میکند و بزرگترین مقدار گزارششده AdapterRAM را انتخاب میکند. حداکثر گزارششده کمتر از 384 MiB مقدار false بازمیگرداند.
- نامهای کاربرپسند و تولیدکنندگانِ دستگاهِ نمایش را با 36 رشته مرتبط با گرافیک مجازی، نمایشگرهای راهدور، پلتفرمهای ابری و آداپتورهای مجازی عمومی تطبیق میدهد. انطباق مقدار false بازمیگرداند.
پس از بررسیهای محیط، اسکریپت با هشکردن MachineGuid|zdozwoqx3c یک مسیر نصب استخراج میکند. همچنین دو runspace پسزمینه در Powershell راهاندازی میکند که تعداد زیادی URL مشروع را درخواست میکنند، از جمله GitHub API، npm، Docker Hub، PyPI، NuGet و PowerShell Gallery. این درخواستها ظاهراً ترافیک فریبندهای تولید میکنند تا دانلود مخرب را درون فعالیت قابلقبولِ توسعهدهنده پنهان کنند.
اسکریپت “https://phys[.]stunned-amniotic[.]com/hub[.]log” را دانلود میکند. هرچند لاگهای موجود در سیستم هدف در اوکراین هیچ نشانهای از دسترسی به این URL نداشت، پژوهشگران توانستند فایلی را دانلود کنند که بهاحتمال زیاد منظور بوده است که توسط payload سرقتگر Amatera دانلود و اجرا شود.
پاسخ در زمان تحلیل یک فایل ZIP با SHA256 bd36f4c15fe0acb6748da5ed12e45dcc37d412385812c078d1e4f04730e9f69b بود. در نهایت، PowerShell مسیرهای ورودیهای ZIP را اعتبارسنجی میکند، آرشیو را در پوشه %APPDATA% استخراج میکند، فایل اجرایی “hypersnap.exe” را بدون پنجرهٔ قابلمشاهده اجرا میکند و یک وظیفهٔ زمانبندیشده ایجاد میکند که با ورود کاربر فعال میشود.
فایل ZIP شامل نرمافزار معتبر NetSupport Manager است
فایل “hypersnap.exe” اجراشده در واقع “client32.exe” مربوط به NetSupport Manager 12.44 است که تغییرنام یافته و امضا شده است. بخش stub در “client32.exe” خروجیِ export با نام _NSMClient32@8 را در فایل امضاشده “PCICL32.DLL” فراخوانی میکند؛ این فایل همان runtime اصلی کلاینت NetSupport است که قابلیتهای اصلی سکوی دسترسی از راه دور را در خود دارد.
پیکربندی NetSupport Manager در فایل “client32.ini” که تحت کنترل مهاجم است، اجرای بیصدا را فعال میکند، رابط ناحیه اعلان سیستم را پنهان میکند، کنترلهای قابلمشاهدهٔ گفتوگو، پیام، قطع اتصال، بازپخش و راهنما را غیرفعال میکند و “paternal-angrily[.]com:443” را بهعنوان NetSupport HTTP Gateway تنظیم میکند.
کلاینت به gateway متصل میشود که بهعنوان پروکسی میان عامل تهدید و نصب کلاینت NetSupport Manager روی سیستم قربانی عمل میکند. کلاینت NetSupport طوری پیکربندی شده بود که هر 60 ثانیه gateway را بررسی کند. در زمان تحلیل، این دامنه به نشانی IP “212.118.56[.]166” resolve میشد که در روسیه قرار دارد.
استقرار NetSupport از یک لایسنس با نام KAKAN و شماره سریال NSM789508 استفاده میکرد. همین فایل لایسنس عیناً در بستههای مخرب متعدد NetSupport مشاهده شده است، از جمله فعالیتی که بهصورت عمومی با عنوان EVALUSION و IClickFix ردیابی شده است. ازاینرو، این مورد بهعنوان شاخصی از تبار مشترک استقرار تلقی میشود و نشانگر یکتای عامل تهدید نیست.
نرمافزار NetSupport پس از گردآوری خودکار Amatera، قابلیتی هدایتشده توسط اپراتور اضافه میکند. Amatera اعتبارنامههای پیکربندیشده، دادههای نشست، اطلاعات مرتبط با رمزارز و فایلهای منتخب را سرقت میکند. سپس یک کلاینت NetSupport غیرمجاز میتواند کنترل صفحه و ورودی، انتقال فایل، فهرستبرداری، مدیریت فرایند و سرویس، و اجرای از راه دور فرمان یا PowerShell را فراهم کند. این امر میتواند به یک اپراتور اجازه دهد دادههایی خارج از قواعد ازپیشتعریفشده Amatera را بازرسی کند، بر نشستهایی که از نقطهٔ پایانی اصلی آغاز شدهاند عمل کند، یا ابزارهای بیشتری مستقر کند.
پوشش
امضاهای ClamAV زیر این تهدید را شناسایی و مسدود میکنند:
- Win.Backdoor.BadDav-10060502-0
- Win.Backdoor.GoProxShell-10060503-0
- Win.Malware.AmateraStomper-10060507-0
- Win.Backdoor.BadNetSup-10060508-0
- Js.Downloader.ClickFix-10060510-0
















