Cisco Talos ClearFake WebDAV infection chain delivers Amatera stealer, ZigCryptoStealer, and NetSupport Manager

کارزار ClearFake Amatera و NetSupport Manager را تحویل می‌دهد

  • شرکت 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 هر دو زنجیره را نشان می‌دهد و عناصر خط‌چین مراحل بازیابی‌نشده به‌طور مستقیم را مشخص می‌کنند. با اطمینان پایین تا متوسط، ارزیابی می‌شود که این دو زنجیره تحویل یکسان هستند. 

شکل 1. زنجیره‌های آلودگی WebDAV موازی و محموله‌های ثانویه Amatera.

زنجیره لودر “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 ارزیابی می‌شود. 

کارزار ClearFake Amatera و NetSupport Manager را تحویل می‌دهد

شکل 2. کد JavaScript تغییر‌یافته و رفع‌ابهام‌شده یک قرارداد BNB Smart Chain متناسب با سیستم‌عامل را انتخاب می‌کند و پاسخ دیکدشده را ارزیابی می‌کند.

مرحلهٔ مرورگر در Windows یک شناسهٔ قربانی ایجاد می‌کند، آن را در کوکی cjs_id ذخیره می‌کند و از یک قرارداد ردیابی می‌پرسد که آیا هدف برای آن شناسه از پیش محقق شده است یا خیر. اگر مرورگر بدون واسط گرافیکی نباشد و هدف Windows باشد، اسکریپت یک چک‌باکس جعلی به سبک Google CAPTCHA روی صفحهٔ آلوده قرار می‌دهد و از قربانی می‌خواهد پنجرهٔ Run در Windows را باز کند، محتوای کلیپ‌بورد را جای‌گذاری کند و کلید Enter را فشار دهد. 

شکل 3. اعلان تأیید Windows ClickFix.

 فرمان کپی‌شده یک مسیر WebDAV را روی یک زیردامنهٔ تصادفی از “leaguejazire[.]com” باز می‌کند، شناسهٔ قربانی را در مسیر قرار می‌دهد و “pf.ch” را از طریق ordinal #1 اجرا می‌کند. 

شکل 4. فرمان رمزگشایی‌شدهٔ Windows ClickFix. گسترش با تأخیر در زمان اجرا pushd، rundll32 و popd را بازسازی می‌کند.

شرکت 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 استفاده می‌کند. 

کارزار ClearFake Amatera و NetSupport Manager را تحویل می‌دهد

پروندهٔ 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 را فراخوانی می‌کنند. 

شکل 5. استاب مستقیم syscall که توسط “verification.google” پیش از آن‌که یک “dbghelp.dll” سالم را در حافظه نگاشت و بازنویسی کند، به‌کار می‌رود.

لودر مرحله بعدی خود را از داده‌های موجود در بخش .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” مشاهده‌شده در این مورد. 

شکل 6. لودر “verification.google” اقدام به module stomping می‌کند.

پیکربندی‌های 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( را قرار داده بود. 

شکل 7. صفحه “Telegra.ph” که به‌عنوان حل‌کننده استفاده شده است.

کارزار ClearFake Amatera و NetSupport Manager را تحویل می‌دهد

 کد HTML خام همان مقدار را درون یک عبارت println قرار می‌دهد.  

شکل 8. کد منبع HTML بازیابی‌شده نشانی IP مربوط به C2 را که با base64 کدگذاری شده است، میان نشانگرهایی که payload استفاده می‌کند در خود دارد.  

با رمزگشایی 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) نیز بود.  

شکل 9. پیکربندی تسکینگ Amatera مربوط به pf.ch که وظایف payload ثانویه را نشان می‌دهد.

فیلد 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 است. 

کارزار ClearFake Amatera و NetSupport Manager را تحویل می‌دهد

چهار قانون 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

کارزار ClearFake Amatera و NetSupport Manager را تحویل می‌دهد

گروه Talos از Cisco Umbrella برای مشاهده فعالیت DNS برای هر شش دامنه در زمان فعال‌بودن آن‌ها استفاده کرد. دو مقدار اخیر همچنین گسترده‌ترین توزیع کوئری را داشتند. داده‌های Umbrella شامل کوئری‌های DNS از 38 کشور برای “static[.]quorashift[.]cc” و از 98 کشور برای “lb[.]propertyfind[.]cc” است. بیشترین کوئری برای مقدار جاری از ایالات متحده، اندونزی، برزیل، هند و مصر آمده است.  

شکل 10. توزیع Cisco Umbrella از درخواست‌های DNS برای “lb[.]propertyfind[.]cc” از زمانی که در 26 ژوئیه به مقدار جاری قرارداد تبدیل شد تا 30 ژوئیه. نقشه سهم گزارش‌شده خاستگاه‌های کوئری DNS را نشان می‌دهد. 

داده‌های 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. 

شکل 11. دیکامپایلِ دست‌کاری‌شده از لودر کاربری مخرب “Secur32.dll”. فرایندها را فهرست می‌کند، هشِ نام‌های آن‌ها را با فهرست هدف خود مقایسه می‌کند و PID هر موردِ مطابق را از طریق IOCTL 0x2205c0 به درایور جداگانه می‌فرستد. 

​

​شکل 12. دیکامپایلِ دست‌کاری‌شده از درایور کرنلی امضاشده و جداگانه “DCRCVDrv.sys”. هندلر IOCTL آن PID تأمین‌شده توسط “Secur32.dll” را می‌خواند، یک هندل فرایند به‌دست می‌آورد و ZwTerminateProcess را فراخوانی می‌کند. برای خوانایی، نوع‌ها و نام‌ها جایگزین شده‌اند.

محموله 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 ایجاد می‌کند و ارتباطات خروجی را روی همان اتصال مالتی‌پلکس می‌کند. هر جریان منطقی یک نشانی مبدأ و یک نشانی مقصد فراهم می‌کند. کلاینت به مقصد درخواستی متصل می‌شود و بایت‌ها را در هر دو جهت رله می‌کند. 

کارزار ClearFake Amatera و NetSupport Manager را تحویل می‌دهد

Figure 13. “pf.ch” Amatera runtime and tasking.

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 را با جزئیات بیشتری مستند کرده است.  

​Figure 14. بازسازی لایه نخست رمزگشایی PowerShell.

مرحله بعدی 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 ردیابی شده است. ازاین‌رو، این مورد به‌عنوان شاخصی از تبار مشترک استقرار تلقی می‌شود و نشانگر یکتای عامل تهدید نیست. 

کارزار ClearFake Amatera و NetSupport Manager را تحویل می‌دهد

نرم‌افزار 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⁩

مطالب مرتبط

The Hacker News P7 DarkSword iOS Exploit Kit Adds Crypto Wallet Data Theft and Remote Commands
اخبار

افشای واریانت P7 DarkSword برای iOS با سرقت کیف‌پول و فرمان‌پذیری

پژوهشگران واریانت تازه P7 DarkSword را معرفی کردند که ردپا را کاهش می‌دهد، سرقت keychain و کیف‌پول رمزارزی را روی دستگاه انجام می‌دهد و با C2 دوطرفه هر 15 ثانیه فرمان‌های دوره‌ای را روی iPhone اجرا می‌کند.

ادامه مطلب »

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

انتخاب مسیریاب

برای مسیریابی یکی از اپلیکیشن های زیر را انتخاب کنید.