- شرکت Cisco Talos پس از مشاهده اجرای یک DLL با نام “verification.google” از WebDAV در یک سازمان دولتی اوکراین، تحقیق را آغاز کرد. با اطمینان متوسط ارزیابی میکنیم که این حملات متوجه یک سازمان خاص نیست، بلکه بخشی از یک عملیات سرقت رمزارز و اعتبارنامهها است که در آن بدافزار سرقت اطلاعات Amatera بهعنوان پیلود اصلی بهکار میرود.
- تمرکز بر رفتار مشابه WebDAV ما را به لودر دومی با نام “pf.ch” رساند و امکان بازسازی مراحل اولیه تحویل آن را فراهم کرد. این زنجیره از یک Cloudflare Worker برای تزریق کد JavaScript که روی BNB Smart Chain ذخیره شده است و یک پنجره ClickFix که خود را بهجای Google CAPTCHA جا میزند استفاده میکند و در نهایت به دانلود و اجرای بدافزار سرقت اطلاعات Amatera منتهی میشود. این زنجیره به احتمال زیاد بسیار مشابه همان چیزی است که اجرای مبتنی بر WebDAV در سازمان دولتی اوکراین را موجب شده است.
- دو بیلد از Amatera توسط زیرساخت command-and-control (C2) متناظر خود به پیلودهای ثانویه متفاوتی مأمور شده بودند: به لودر “pf.ch” دستور داده شده بود یک لودر مبتنی بر NativeAOT را که ZigCryptoStealer را اجرا میکند بههمراه یک پراکسی معکوس مبتنی بر Go مستقر کند، در حالیکه به لودر “verification.google” دستور داده شده بود یک نمونه غیرمجاز از NetSupport Manager نصب کند.
- نصب NetSupport Manager دارای پیکربندیای بود که در آن سرور C2 از یک نشانی IP مستقر در روسیه استفاده میکرد. با اطمینان متوسط ارزیابی میکنیم که شاخه حمله “verification.google” توسط یک بازیگر تهدید روسی انجام شده است.
در آوریل 2026، شرکت Cisco Talos اجرای غیرمعمول یک DLL از طریق WebDAV را در تلهمتری نقطهپایانیِ متعلق به یک سازمان دولتی اوکراین شناسایی کرد. فایل راهدور “verification.google” نام داشت و از طریق نسخه 32-بیتی “rundll32.exe” راهاندازی شده بود. این کشف اولیه ما را به دو زنجیره تحویل مشابه، دو لودر DLL متفاوت و دو پیلود سرقت اطلاعات از ACR/Amatera رساند. شرکت Talos بازیگر تهدیدِ پشت فعالیت مشاهدهشده “verification.google” را با شناسه UAT-10820 رهگیری میکند.
پس از بررسی اولیه، تصمیم گرفتیم برای بازیابی زنجیره کامل آلودگی، بهدنبال الگوهای مشابه WebDAV و اجرای ordinal باشیم. با استفاده از VirusTotal توانستیم یک زنجیره کامل را که از یک لودر DLL دوم با نام “pf.ch” آغاز میشد شناسایی کنیم.
این دو نمونه بخشی از مجموعه گستردهتری از کمپینهای اخیر هستند که Amatera را از طریق زنجیرههای آلودگی متفاوت تحویل میدهند. در ژوئیه 2026، شرکت Malwarebytes مستندسازی کرد دانلودهای جعلی بازی و نرمافزار را که پیش از تحویل Amatera از RenPy Loader، MSBuild و EtherHiding استفاده میکردند. شرکت Blackpoint Cyber تشریح کرد یک زنجیره تأیید جعلی دیگر را که از یک اسکریپت امضاشده Microsoft App-V، پیکربندی ذخیرهشده در Google Calendar و پیلودی پنهانشده در یک تصویر PNG استفاده میکرد. بهجز خانواده بدافزاری پیلود اصلی، هیچ زیرساخت مشترک یا شاهد دیگری نیافتیم که آن فعالیتها را به زنجیرههای توصیفشده در این پست پیوند دهد.
یافته اولیه در تلمتری اندپوینت
رویداد اولیهای که آغازگر این تحقیق بود در آوریل 2026 ثبت شد و نشان میداد اجرای یک فایل DLL از طریق یک مسیر UNC مبتنی بر WebDAV همراه با راهاندازی سرویس Windows WebClient انجام شده است. علاوه بر خط فرمان اولیه، جزئیات چکسام DLL اجراشده را داشتیم؛ اما مشخص نبود چه چیزی زنجیره اجرا را آغاز کرده است. وقت آن بود که در مخازن هوش متنباز (OSINT) و پلتفرم تحلیلی Talos به شکار بپردازیم. میخواستیم اجرایی مشابه، با همان لودر و خانواده پیلود بیابیم و در حالت ایدهآل کل زنجیره آلودگی را بازیابی کنیم که احتمالاً نشان میداد اجرای “verification.google” چگونه آغاز شده است. این موضوع ما را به لودر “pf.ch” و زنجیرهای که کشف کردیم رهنمون شد.
شکار، زنجیره تحویل WebDAV دومی را آشکار میکند
نمونه “pf.ch” از همان ترکیب WebDAV، یک نام فایل DLL استتارشده و اجرای ordinal از طریق “rundll32.exe” استفاده میکند. همچنین توانستیم کل دنباله مرتبط با ClickFake که به این لودر منتهی میشد را بازیابی کنیم. شکل 1 هر دو زنجیره را نشان میدهد و عناصر خطچین، مراحلی را مشخص میکنند که بهصورت مستقیم بازیابی نشدند. با اطمینان پایین تا متوسط، ارزیابی میکنیم که این دو زنجیره تحویل یکسان هستند.
زنجیره لودر “pf.ch” کشفشده با جاوااسکریپت ClearFake آغاز شد که توسط یک Cloudflare worker مخرب در محتوای یک وبسایت بهخطرافتاده تزریق شده بود.
سرور C2 پیکربندیای بازمیگرداند که به استیلر دستور میدهد یک بسته لود جانبی DLL را دانلود کند که در آن یک مؤلفه امضاشده Chrome، یک DLL مخرب NativeAOT با نام “secur32.dll” را بهصورت جانبی بارگذاری میکند. این DLL، ZigCryptoStealer را بارگذاری میکند و با استفاده از یک درایور آسیبپذیر، نرمافزارهای EDR را خاتمه میدهد. همچنین یک لودر shellcode جداگانه برای x86 بههمراه یک Go reverse TCP proxy نیز بهعنوان payload ثانویه، توسط پیکربندی Amatera که از سوی سرور C2 ارسال میشود، دانلود میشود.
در شاخه “verification.google” و طبق دستور C2 خودش، payload ثانویه یک اسکریپت PowerShell است که تلاش میکند یک نمونه از ابزار دسترسی از راه دور NetSupport Manager را نصب کند.
بازیابی کد مرورگر از BNB Smart Chain توسط ClearFake
شاخه “pf.ch” احتمالاً بر روی یک وبسایت بهخطرافتاده آغاز میشود. یک Cloudflare Worker یک JavaScript مخرب تزریق میکند که از طریق “bsc-testnet-rpc[.]publicnode[.]com” قرارداد testnet در BNB Smart Chain با نشانی 0x886d310Ac23e05EA705e24E513D19f53793832A9 را پرسوجو میکند.
زنجیره BNB Smart Chain یک بلاکچین عمومی سازگار با Ethereum است که تراکنشها و قراردادهای هوشمند را میزبانی میکند. عامل تهدید از این قرارداد بهعنوان فضای ذخیرهسازی قابلتغییر از راه دور برای JavaScript کدگذاریشده استفاده میکند؛ تکنیکی که با نام EtherHiding شناخته میشود. بر پایه سیستمعامل دستگاه قربانی، کد JavaScript مرحله بعد را از بلاکچین بازیابی میکند؛ بلاکچینی که بهمنزله یک ارائهدهنده میزبانی bulletproof برای کد مخرب عمل میکند. پیشتر، Potent Pages Cloudflare Workers غیرمجاز را که همان قرارداد مرحله اول را پرسوجو میکردند مستندسازی کرده است.
کد ابتدایی Javascript شامل روالهایی برای بررسی محیطهای مرورگر محلی و headless است، سیستمعامل را شناسایی میکند و بر پایه نتیجه عملیات، یک قرارداد دوم را پرسوجو میکند. اگر قربانی Windows را اجرا کند، کد را از 0x46790e2Ac7F3CA5a7D1bfCe312d11E91d23383Ff بازیابی میکند و اگر قربانی macOS را اجرا کند، از 0x68DcE15C1002a2689E19D33A3aE509DD1fEb11A5 استفاده میکند. پاسخ، بهصورت Base64 رمزگشایی و بهعنوان JavaScript ارزیابی میشود.
مرحله مرورگر Windows یک شناسه قربانی ایجاد میکند، آن را در کوکی cjs_id ذخیره میکند و از یک قرارداد ردیابی میپرسد که آیا هدف برای آن شناسه از پیش محقق شده است یا خیر. اگر مرورگر headless نباشد و هدف Windows باشد، اسکریپت یک چکباکس جعلی به سبک Google CAPTCHA روی صفحه بهخطرافتاده قرار میدهد و به قربانی دستور میدهد پنجره Run در Windows را باز کند، محتوای کلیپبورد را جایگذاری کند و کلید Enter را فشار دهد.
دستور کپیشده یک مسیر WebDAV را روی یک زیردامنه تصادفی از “leaguejazire[.]com” باز میکند، شناسه قربانی را در مسیر قرار میدهد و “pf.ch” را از طریق ordinal #1 اجرا میکند.
شرکت Censys همان قراردادهای Windows و macOS را در یک زنجیره ClickFix پشتیبانیشده با بلاکچین مستند کرده است، هرچند payloadهای پاییندستی در آن گزارش با مواردی که اینجا تحلیل شدهاند تفاوت دارد.
مرحله مرورگر macOS از همان بررسیهای headless-browser، ردیابی قربانی و طراحی تأیید جعلی استفاده میکند، اما زنجیره اجرای آن متفاوت است. به قربانی دستور میدهد Terminal را باز کند و دستوری را جایگذاری کند که از curl با رشته user-agent مربوط به macOS استفاده میکند. درخواست به یک زیردامنه از “riyazinikokar[.]xyz” ارسال میشود. از آنجا که موضوع پژوهش اولیه ما مشتریای با Windows بوده است، مسیر macOS در شاخه “pf.ch” را بیش از این پیگیری نکردهایم.
اجرای DLLهای استتارشده از طریق WebDAV
هر دو واریانت مشاهدهشده یک DLL 32-bit را از طریق WebDAV با نام پسوند فایلی دریافت میکنند که نشان نمیدهد یک فایل DLL استاندارد است. هر دو از فرایند 32-bit “rundll32.exe” استفاده میکنند و با فراخوانی ordinal #1 یک تابع را اجرا میکنند. export نخست متناظر بهترتیب moor در “pf.ch” و CfgInspectModuleData در “verification.google” است.
لودرهای اولیه متفاوت
اگرچه الگوی اجرای WebDAV یکسان است، دو لودر اولیه از کد و روشهای حفاظتی متفاوتی استفاده میکنند.
کنترل جریان مبتنی بر استثناء در “pf.ch”
لودر “pf.ch” یک DLL فشرده 32-bit است که تنها export نامگذاریشده آن moor است و جدول import آن تنها شامل توابع AddVectoredExceptionHandler و __mb_cur_max است.
کد بستهشده از vectored exception handling، حلقههای XOR، API hashing و الگوهای control-flow استفاده میکند که تحلیل ایستای کد را دشوارتر میکند. پس از مقداردهی اولیه، یکی از نخهای آن در انتظار رویدادی با نام hit است. بهمحض فعال شدن رویداد، یک blob تعبیهشده را به حافظه کپی میکند و با استفاده از Windows fibers کنترل را به آن منتقل میکند. رمزگشای مرحله بعدی از XOR و LZNT1 برای رمزگشایی payload نهایی Amatera استفاده میکند.
پرونده PE بازگشاییشده، که یک نمونه از Amatera است، نیز 32-bit است، جدول import ندارد و با پیمایش جدولهای export ماژولهای بارگذاریشده، آدرس APIها را استخراج میکند. این نمونه برای اجرای system callها از گذارهای 32-to-64-bit استفاده میکند؛ احتمالا بهمنظور دورزدن hookهای EDR.
این نمونه برچسب build «4.1.5-alpha» و رشته «GETWELLV2» را در خود دارد. معروف است که Amatera از پروفایلهای Steam Community بهعنوان C2 dead drop resolver استفاده میکند، و رشته «GETWELL2» در برخی نمونههای پیشین بهعنوان نام یک پروفایل Steam Community که برای بازیابی نشانی IP سرور C2 بهکار میرفت مشاهده شد. پس از resolve شدن نشانی سرور C2، پیکربندی اصلی دانلود میشود.
payload مربوط به Amatera تنها بهصورت یک artifact مقیم حافظه بازیابی شد و مشاهده نشد که روی دیسک نوشته شود. بااینهمه، hash آن در فهرست indicator of compromise (IOC) زیر گنجانده شده است، زیرا hashهایی که از حافظه مشتق میشوند همچنان برای memory scanning قابل استفادهاند.
نمونه “verification.google” از DLL hollowing در “dbghelp.dll” استفاده میکند
گونه “verification.google” payload خود را بلافاصله unpack نمیکند. ابتدا وضعیت را آماده میکند و سپس جریان اجرا را از طریق یک callback منتقل میکند. این callback با استفاده از تابع “TpAllocWork” که بهشکل پویا resolve شده است، ثبت میشود؛ این تابع یک تابع داخلی Native NT و undocumented در “ntdll.dll” است. این callback بعدتر بهصورت غیرهمگام توسط Windows اجرا میشود. تابع callback بیشتر قابلیتهای unpacking مخرب را در یک حلقه بزرگ با control-flow flattening پیادهسازی میکند.
loader توابع را بر اساس hash resolve میکند، وضعیت اجرا را از محیط مشتق میکند و stubs مستقیم برای WoW64 syscallها پیادهسازی میکند. این stubs شمارههای syscall را در زمان اجرا decode میکنند و بهجای توابع متناظر exportشده در “ntdll.dll”، اشارهگر گذار WoW64 را فراخوانی میکنند.
لودر مرحلهی بعدی خود را از دادههای موجود در بخش .rdata بازسازی میکند. ابتدا یک تصویر پاک از کتابخانهی معتبر “dbghelp.dll” را در حافظه نگاشت میکند و سپس ابتدای بخش کد آن را با مرحلهی بعدیِ از حالت بستهبندی خارجشده بازنویسی میکند. در نهایت، پیش از انتقال کنترل به بخش کد بازنویسیشدهی “dbghelp.dll”، حفاظت اجرایی را بازمیگرداند.
این تکنیکِ بازنویسی ماژول (stomping) با نامهای DLL hollowing یا module overloading نیز شناخته میشود. مرور فنی VMRay دربارهی DLL hollowing همان توالی هستهای را توصیف میکند: بارگذاری یک DLL معتبر، بازنویسی کد نگاشتشدهی آن با محتوای مخرب، و اجرا از همان ناحیهی بازنویسیشده. شرکت G DATA در یک زنجیرهی HijackLoader که ACRStealer را تحویل میداد، بازنویسی ماژول را مستند کرده است؛ با این تفاوت که بهجای “dbghelp.dll” مشاهدهشده در مورد ما، از DLLهای دیگری یعنی “evr.dll” و “rasapi32.dll” استفاده شده بود.
پیکربندیهای C2 برای Amatera
نمونهی بارگذاریشده در “pf.ch” از Amatera، C2 خود را از طریق یک صفحهی Telegraph resolve میکند
پیش از آغاز نشست C2 مربوط به Amatera، نمونهی Amatera که در شاخهی “pf.ch” بهکار رفته است، URL مربوط به 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) باز میکند و بهصورت مستقیم روی پورت TCP 443 به “145.249.109[.]147” متصل میشود.
پس از اتصال به سرور C2، Amatera به URL مربوط به GetEndpoints روی همان سرور متصل میشود. پاسخ، مسیرهای URI تصادفی برای توابع مختلف C2 فراهم میکند. سپس استیلر با استفاده از مسیر پیکربندی و بههمراه یک شناسهی build تعبیهشده، قوانین گردآوری اطلاعات خود را بازیابی میکند.
در بیلد “pf.ch”، بافر HTTP رمزگشاییشده از TLS که توانستیم تحلیل کنیم، حاوی یک شناسه نشست غیرصفر و بدنهای مات به طول 73 بایت بود که چارچوببندی آن با پروتکل ECDH و ChaCha20-Poly1305 مستندسازیشده برای نسخههای اخیر Amatera سازگار است.
پس از حذف لایههای رمزنگاری در سطح انتقال و کاربرد، پیکربندی ابتدا بهصورت Base64 رمزگشایی و سپس با کلید 852149723\x00 به روش XOR رمزگشایی میشود و آنگاه بهعنوان یک شیء JSON تجزیه میشود.
علاوه بر قواعد سرقت داده، پیکربندی دریافتی شامل دستورالعملهایی برای بارگذاری پیلودهای ثانویه در یک آرایه json به نام ld (load) نیز بود.
فیلد ld آرایهای از تسکهای لودر ثانویه است که توسط کنترلر Amatera ارائه میشود. در هر ورودی، u نشانی بارگیری است، tf نوع پیلود را انتخاب میکند و tr اجرای مبتنیبر فایل (1) یا بدون فایل (2) را برمیگزیند. لودر از فایلهای اجرایی، DLLها، اسکریپتهای فرمان، PowerShell، شلکد خام و پکیجهای 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 را ارسال میکند تا اندپوینتهای قابل استفاده برای ارتباطات بعدی را دریافت کند.
همانند پیلود 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 و دایرکتوری Recent-items در Windows را پوشش میدهند. در میان این قوانین، بیش از 100 الگوی یکتای نام فایل و پسوند بهدنبال کلیدهای خصوصی، نسخههای پشتیبان کیفپول، اقلام مرتبط با API و OAuth، دادههای احراز هویت دومرحلهای، پایگاههای داده گذرواژه و فایلهای گواهی مانند .kdbx، .p12، .pfx و .pem میگردند. بیشترِ قوانین جمعآوری بر سرقت دادهها و اعتبارنامههای مرتبط با رمزارز متمرکز است.
پیلودهای ثانویه Amatera
در ادامه، بر وظایف لودر ثانویه تمرکز میکنیم که با توجه به نوع پیلود ثانویه نصبشده، میتواند به یک عامل تهدید پیشرفتهتر اشاره کند.
نسخه Amatera با شناسه “pf.ch” دو وظیفه ثانویه دریافت کرد. یکی یک لودر NativeAOT و ZigCryptoStealer را استقرار داد، و دیگری یک پراکسی معکوس TCP مبتنی بر Go را از حافظه اجرا کرد. نسخه “verification.google” یک وظیفه PowerShell دریافت کرد که NetSupport Manager را نصب نمود.
شاخه Amatera
نوع وظیفه
قابلیتهای پس از آن
pf.ch
بایگانی مبتنی بر فایل
میزبان بارگذاری جانبی DLL مربوط به Chrome، لودر 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” وارد میکند؛ فایلی که یک DLL مخرب در همان بایگانی است و توسط مؤلفه Chrome بهصورت جانبی بارگذاری میشود.
فایل “Secur32.dll” که بهصورت جانبی بارگذاری شده است، یک لودر NativeAOT مبتنی بر .NET است که 2 فایل PE را رمزگشایی و بارگذاری میکند. فایل نخست یک پیلود در سطح user mode است و دومی یک درایور آسیبپذیر که برای ter استفاده میشود. این DLL مبتنی بر NativeAOT پردازش “C:\Windows\”explorer.exe” را در حالت معلق راهاندازی میکند، سرآیندها و بخشهای PE را بهصورت دستی در فرایند فرزند نگاشت میکند، کانتکست رشته اولیه آن را به نقطه ورود جدید تغییر میدهد و آن را از سر میگیرد.
بار مخرب یک سرقتکننده رمزارز است که با زبان Zig نوشته شده است — ZigCryptoStealer. این بدافزار کلیپبورد را پایش میکند، چندین قالب آدرس رمزارز را تشخیص میدهد و میتواند مقادیر منطبق را با آدرسهایی که در بار تعبیه شدهاند جایگزین کند.
این بار از طریق “bsc[.]rpc[.]blxrbdn[.]com” یک فراخوانی JSON-RPC از نوع eth_call به قرارداد 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 برای رصد فعالیت DNS همه شش دامنه در زمان فعال بودن آنها از Cisco Umbrella استفاده کرد. دو مقدار اخیر همچنین گستردهترین توزیع درخواست را داشتند. دادههای 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.
پیلود Go میزبان را به یک پراکسی TCP معکوس تبدیل میکند
نشانی URL مربوط به پیلود ثانویه دومِ شاخه “pf.ch” یک بلوک شلکد دودویی با SHA-256 643ef35536ff9273fb84b8504467b1a5645cd3ffd5476d64b99244b02131b205 برگرداند.
شلکد 32-بیتی بلوک محیط فرایند (PEB) را پیمایش میکند تا “ntdll.dll” را بیابد و آدرس توابع LdrLoadDll، NtAllocateVirtualMemory، NtProtectVirtualMemory و NtFreeVirtualMemory را بهدست میآورد. سپس پیلود نهاییِ ذخیرهشده در شلکد را با استفاده از XOR برای رمزگشایی و LZNT1 برای ازفشردهسازی، از حالت فشرده خارج و پیلود پراکسیِ فشرده را بازیابی میکند.
فایلِ ازفشردهشده دارای SHA-256 1819827e17f31e72d456158b6b9c90af25a65945f6f05d04a060da9f24179b25 است.
این پیلود یک فایل اجرایی 32-بیتی Windows نوشتهشده با Golang است که بسته main آن “github.com/acr/proxy-panel/cmd/bot” است. این برنامه شامل کتابخانه مولتیپلکسینگ شبکه Yamux از HashiCorp است و C2 هاردکدشده “wss://”update[.]dubbedmuch[.]cc”/” را دارد.
پروکسی مقدار Windows MachineGuid و نام میزبان را میخواند و سپس آنها را از طریق پروتکل WebSocket Secure (wss) ارسال میکند. پس از آنکه C2 server مشتری را میپذیرد، برنامه یک نشست سرور 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 از شرکت Proofpoint همین معانی ld، tf و tr را با جزئیات بیشتری مستند کرده است.
مرحله بعدی PowerShell بهصورت پویا آدرس توابع بومی را resolve میکند و پیش از نصب بار، یک بررسی محیطی اجرا میکند که شامل مراحل زیر است:
- سریال volume در درایو C: را میخواند و آن را با مقدار hard-coded برابر 4E014A2F مقایسه میکند. عبارت اصلی هنگامی که این مقدار برابر باشد true برمیگرداند و اجازه میدهد اجرا زودتر ادامه یابد و بررسیهای باقیمانده رد شوند.
- زمان کارکرد سیستم را از Win32_OperatingSystem.LastBootUpTime محاسبه میکند. کارکردی کمتر از 10 دقیقه مقدار false برمیگرداند و باعث خروج اسکریپت میشود.
- یک فراخوانی بومی NtDelayExecution با تأخیر 500 ms را با GetTickCount64 اندازهگیری میکند. اگر بهنظر برسد کمتر از 400 ms سپری شده است، دروازه مقدار 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 stealer دانلود و اجرا شود.
پاسخ در زمان تحلیل یک فایل ZIP با SHA256 برابر با bd36f4c15fe0acb6748da5ed12e45dcc37d412385812c078d1e4f04730e9f69b بود. در نهایت، PowerShell مسیرهای ورودیهای ZIP را اعتبارسنجی میکند، آرشیو را در پوشه %APPDATA% استخراج میکند، و فایل اجرایی “hypersnap.exe” را بدون پنجره مرئی اجرا میکند و یک scheduled task ایجاد میکند که در زمان ورود کاربر فعال میشود.
فایل ZIP حاوی نرمافزار قانونی NetSupport Manager است
فایل “hypersnap.exe” اجراشده در واقع “client32.exe” مربوط به NetSupport Manager نسخه 12.44 است که تغییرنام داده و امضا شده است. استاب “client32.exe” export بهنام _NSMClient32@8 را در “PCICL32.DLL” امضانشده فراخوانی میکند؛ این کتابخانه زماناجرای اصلی کلاینت NetSupport است که کارکردهای اصلی سکوی دسترسی از راه دور را در خود دارد.
پیکربندی NetSupport Manager در “client32.ini” که تحت کنترل عامل تهدید است، اجرای بیصدا را فعال میکند، رابط system-tray را پنهان میکند، کنترلهای قابلمشاهده chat، message، disconnect، replay و help را غیرفعال میکند و “paternal-angrily[.]com:443” را بهعنوان NetSupport HTTP Gateway تنظیم میکند.
کلاینت به دروازه وصل میشود؛ این دروازه بهعنوان یک پروکسی میان عامل تهدید و نصب کلاینت NetSupport Manager روی سیستم قربانی عمل میکند. کلاینت NetSupport طوری پیکربندی شده بود که هر 60 ثانیه دروازه را poll کند. در زمان تحلیل، این دامنه به نشانی 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
شاخصهای سازش (IOCها)
IOCهای مربوط به این تهدید در مخزن GitHub ما نیز در دسترس هستند و از طریق اینجا قابل دریافتاند.
پوشش یکپارچه
بهرهبرداری فعال از آسیبپذیریهای Cisco Secure Firewall Management Center
واحد Cisco Talos در حال رصد فعالِ بهرهبرداری از دو آسیبپذیری در نرمافزار Secure Firewall Management Center (FMC) شرکت Cisco است.
کارزار UAT-10147 SPECTRE را مستقر میکند: یک ایمپلنت چندسکویی با روتکیت Linux و قابلیتهای BYOVD
ایمپلنت SPECTRE که بهتازگی شناسایی شده است، نشاندهندهٔ تکامل در ابزارهای نفوذ تجاری است و عملیات C2 چندسکویی، تزریق فرایند، سرقت اعتبارنامه، محافظتهای ضدتحلیل و قابلیت دورزدن EDR در سطح هسته را یکپارچه میکند.
کارزار UAT-10147: مهاجم چینیزبان هوش مصنوعی agentic را در عملیات پس از نفوذ ادغام میکند
واحد Cisco Talos یک گروه جرایم سایبری چینیزبان را شناسایی کرد که با شناسه UAT-10147 رهگیری میشود و دامنهٔ گستردهای از وبسرورهای آسیبپذیر را هدف قرار میدهد. این متن مروری بر این کارزار است و کشورهای متاثر، پیامدهای احتمالی آلودگیهای BadIIS، زنجیرهٔ حمله و تاکتیکهای پس از نفوذ را بررسی میکند.














