محققان ایسِت (ESET) اخیراً حملات هدفمندی را شناسایی کردهاند که حداقل از سال 2020 فعال بوده و با بکارگیری ابزارهای ناشناختهای، سازمانهایی را در کشورهای مختلف از جمله منطقه خاورمیانه مورد هدف قرار دادهاند. این حملات توسط یک گروه جاسوسی که قبلاً ناشناخته بود، انجام شده و محققان ایسِت آن را Worok نامیدهاند.
در این گزارش که با همکاری شرکت مهندسی شبکه گستر و مرکز مدیریت راهبردی افتای ریاست جمهوری تهیه گردیده به بررسی این حملات پرداخته شده است.
مجموعه ابزار بکارگرفته شده توسط گروه Worok شامل یک بارگذاری کننده ++C به نام CLRLoad، یک «دسترسی غیرمجاز» از نوع PowerShell به نام PowHeartBeat و یک راهانداز #C به نام PNGLoad میباشد که از نوعی رمزنگاری خاص موسوم به Steganography برای پنهان نمودن کد مخرب در فایلهای PNG استفاده میکند.
Worok
در طول افشای آسیبپذیری ProxyShell به شناسه CVE-2021-34523، فعالیتهایی از گروههای مختلف APT مشاهده شد که به نظر میرسید با گروه هکری چینی TA428 مرتبط باشد چون همگی دارای ویژگیهای مشترکی نظیر زمان فعالیت، هدفمند بودن حملات و بکارگیری ShadowPad بودند.
بقیه مجموعه ابزارهایی که توسط مهاجمان Worok بکارگرفته میشود، بسیار متفاوت است. گروه هکری TA428 در آلودهسازی و هک Able Desktop در سال 2020 مشارکت داشت ولی Worok به اندازه کافی پیشرفته نیست که بتوان آن را همانند گروه TA428 در نظر گرفت با این حال این دو گروه ممکن است ابزارهای مشترکی داشته باشند. نام این گروه هکری با عنوان Worok، از mutex که در بارگذاریکننده (Loader) آن مورد استفاده قرار گرفته، برگرفته شده است. به نقل از محققان ایسِت، Worok از اواخر سال 2020 فعال بوده و تا زمان نگارش این گزارش همچنان فعال است.
در پاییز سال 1400، این گروه دولتها و سازمانهای مختلفی را در کشورهای مختلف از جمله منطقه خاورمیانه مورد هدف قرار داد.
گروه هکری Worok پس از وقفه قابل توجهی در بازه زمانی اردیبهشت 1400 تا دی سال 1400، فعالیت خود را مجدد در بهمن 1400 با حمله به یک نهاد عمومی در جنوب شرق آسیا و بخش انرژی در آسیای مرکزی مجدد از سر گرفت.
با توجه به ابزارهای بکارگرفته شده علیه این قربانیان، به نظر میرسد که هدف اصلی Worok سرقت اطلاعات است.
تحلیل تکنیکال
با وجود این که اکثر دسترسیها و نفوذ اولیه در این حملات همچنان ناشناخته است، در برخی حملات انجام شده در سالهای 1400 و 1401 از آسیبپذیری ProxyShell سوءاستفاده شده است. در چنین مواردی، معمولاً Webshell پس از بهرهجویی از این آسیبپذیریها به منظور تداوم در شبکه قربانی بارگذاری میشود. سپس اپراتورها از کدهای مخرب مختلف جهت به دست آوردن قابلیتهای بیشتر استفاده میکنند.
بعد از نفوذ به سیستم موردنظر، هکرهای Worok با بکارگیری ابزارهای متعدد و معتبری نظیر Mimikatz ،EarthWorm ،ReGeorg و NBTscan، کدهای مخرب و شخصیسازی شده خود را اجرا میکنند. به دنبال بکارگیری یک راهانداز در مرحله اول، یک بارگذاریکننده l(PNGLoad).NETدر مرحله دوم اجرا میشود. در سال 1400، بارگذاریکننده مرحله اول CLR Assembly به نام CLRLoad بود در حالی که در سال 1401، در اکثر موارد، یک «دسترسی غیرمجاز» از نوع PowerShell با عنوان (PowHeartBeat) با قابلیتهای کاملتر جایگزین آن شده است. هر دوی این زنجیره اجرایی در شکل زیر نشان داده شدهاند. ابزارها به تفصیل در بخشهای فرعی زیر تشریح شدهاند.
CLRLoad
CLRLoad بارگذارکنندهای است که به زبان ++C نوشته شده و یک PE مربوط به Windows است که در هر دو نسخه 32 و 64 بیتی وجود دارد و در واقع فایل DLL از نوع Common Language Runtime (CLR) assembly میباشد. این کد از فایلی که بر روی دیسک و در یک دایرکتوری معتبر قرار دارد و احتمالاً برای گمراه کردن قربانیان یا پاسخدهندگان به رویدادها، بارگذاری میشود تا گمان کنند که نرمافزاری معتبر و قانونی است.
برخی از نمونههای CLRLoad با رمزگشایی مسیر کامل فایلی که محتوای آن در مرحله بعدی بارگذاری میشود، شروع میشود. این مسیرها با یک XOR تک بایتی و با یک کلید متفاوت در هر نمونه کدگذاری میشوند. مسیرهای فایل به صورت رمزگشایی شده یا متن شفاف زیر میباشد:
- C:\Program Files\VMware\VMware Tools\VMware VGAuth\xsec_1_5.dll
- C:\Program Files\UltraViewer\msvbvm80.dll
- C:\Program Files\Internet Explorer\Jsprofile.dll
- C:\Program Files\WinRar\RarExtMgt.dll
- C:\Program Files (x86)\Foxit Software\Foxit Reader\lucenelib.dll
در مرحله بعد، یک mutex ایجاد شده و در هر نمونه نامی متفاوت مشاهده میشود. بارگذاریکننده این mutex را بررسی میکند. اگر پیدا شد، یعنی بارگذاریکننده از قبل در حال اجرا است، پس خارج میشود. در یکی از نمونهها، یک mutex با نام Wo0r0KGWhYGO مشاهده شده که نام Worok را محققان از برداشت شده است.
سپس CLRLoad یک CLR Assembly را از مسیر فایل احتمالاً رمزگشایی شده، بارگذاری میکند. به عنوان کد مدیریت نشده، CLRLoad از طریق فراخوانی CorBindToRuntimeEx در Windows API در نسخههای 32 بیتی یا فراخوانی CLRCreateInstance در نسخههای 64 بیتی اجرا میشود.
PowHeartBeat؛ دسترسی غیرمجاز از نوع PowerShell
PowHeartBeat که در PowerShell نوشته شده، «دسترسی غیرمجاز» را فراهم میکند و با استفاده از تکنیکهای مختلفی نظیر فشردهسازی، رمزگذاری و کدگذاری، مبهمسازی شده است. به نقل از محققان ایسِت، در کارزارهای اخیر Worok ،PowHeartBeat به عنوان ابزاری جهت راهاندازی PNGLoad، جایگزین CLRLoad شده است.
اولین لایه کد «دسترسی غیرمجاز» شامل چند تکه کد PowerShell است که به صورت base64 کدگذاری شده است. پس از ایجاد کدمخرب، این کد از طریق IEX اجرا میشود و پس از کدگذاری، لایه دیگری از کد مبهمسازی شده همانند شکل زیر اجرا میشود.
لایه دوم یعنی base64 کدگذاری شده، کد لایه بعدی خود را رمزگشایی میکند و سپس با Triple DES (وضعیت CBC) رمزگشایی میشود. پس از رمزگشایی، این کد با استفاده از الگوریتم Gzip از حالت فشرده خارج میشود و به این ترتیب لایه سوم کد PowerShell که همان «دسترسی غیرمجاز» واقعی است، ایجاد شده و به دو بخش اصلی تقسیم میشود: پیکربندی، و کنترل دستورات «دسترسی غیرمجاز».
لایه اصلی کد «دسترسی غیرمجاز» نیز در PowerShell نوشته شده و از HTTP یا ICMP برای ارتباط با سرور C&C استفاده میکند. همانطور که در شکل زیر نشان داده شده است.
پیکربندی
این پیکربندی شامل چندین فیلد از جمله شماره نسخه، پیکربندی اختیاری پروکسی و نشانی C&C است. جدول زیر معانی فیلدهای پیکربندی را در نسخههای مختلف توضیح میدهد.
شکل زیر پیکربندی استخراج شده از یک نمونه PowHeartBeat را که دارای هش زیر میباشد، نشان میدهد.
SHA-1: 757ABA12D04FD1167528FDD107A441D11CD8C427
رمزگذاری دادهها
PowHeartBeat لاگهای مربوطه و محتوای فایل پیکربندی را رمزگذاری میکند.
محتوای فایل لاگ از طریق XOR چند بایتی و با کلیدی که در متن شفاف مشخص شده، رمزگذاری میشود. کلید مذکور یک آرایه 256 بایتی است که در تمام نمونههای مشاهده شده، یکسان میباشد. محتوای فایل پیکربندی از طریق XOR چند بایتی و کلید آن که دارای مقدار SecretKey، است، رمزگذاری میشود.
ارتباطات C&C
PowHeartBeat تا نسخه 2.4 برای ارتباطات C&C از HTTP استفاده میکند و سپس به ICMP تغییر مییابد. در هر دو مورد، ارتباط رمزگذاری نشده است.
HTTP
در یک حلقه نامتناهی، «دسترسی غیرمجاز» ضمن ارسال یک درخواست GET به سرور C&C، صدور فرمانی را تقاضا میکند. پاسخ رمزگذاری شده توسط «دسترسی غیرمجاز» رمزگشایی میشود و ضمن پردازش فرمان و نوشتن خروجی فرمان در یک فایل، محتوای آن از طریق یک درخواست POST به سرور C&C ارسال میشود. فرمت درخواستهای GET به صورت زیر میباشد:
توجه داشته باشید که درخواستها با استفاده از فیلدهای پیکربندی همنام ساخته شده است.
در پاسخ سرور C&C، سومین بایت محتوا، شناسه فرمان است که command_id نامیده شده و دستور پردازش شده توسط «دسترسی غیرمجاز» را نشان میدهد. محتوای باقیمانده از پاسخ به عنوان یک آرگومان به دستور پردازش شده ارسال میشود. این محتوا با الگوریتم نشان داده شده در شکل زیر رمزگذاری شده، taskId مقدار کوکی است که پس از مقدار CookieTaskId در پیکربندی نامگذاری شده است.
همچنین پاسخ سرور C&C حاوی کوکی دیگری است که نام آن توسط متغیر پیکربندی «دسترسی غیرمجاز» به نام CookieTerminalId مشخص شده است. مقدار این کوکی در درخواست POST مربوط به «دسترسی غیرمجاز» تکرار میشود و نباید خالی باشد. پس از اجرای دستور PowHeartBeat نتیجه را به عنوان یک درخواست POST به سرور C&C ارسال میکند. نتیجه به صورت فایلی با نام <command_id>.png ارسال میشود.
ICMP
در PowHeartBeat، از نسخه 2.4، HTTP با ICMP جایگزین شده و بستههای ارسالی دارای بازه زمانی شش ثانیهای و غیرقطعهبندی شده میباشند. به احتمال زیاد ارتباط از طریق ICMP، گزینهای برای دور زدن راهکارهای امنیتی است و هیچ تغییر عمدهای در نسخههای 2.4 به بعد وجود ندارد اما به نقل از محققان، تغییراتی در کد ایجاد شده است.
- PowHeartBeat بستهای را که حاوی رشته abcdefghijklmnopqrstuvwxyz است، در هر حلقه قبل از صدور فرمان ارسال میکند. این به سرور C&C اطلاع میدهد که «دسترسی غیرمجاز» آماده دریافت فرامین میباشد.
- درخواستهایی برای دریافت فرامین توسط «دسترسی غیرمجاز» که شامل رشته abcdefghijklmnop میباشد، ارسال میشود. این بستهها دارای فرمتی همانند شکل زیر هستند.
تفاوت بین شناسه کلاینت و Flag کلاینت این است که شناسه کلاینت در هر نمونه متفاوت است در حالی که Flag مربوط به کلاینت در هر یک از نمونههای ICMP، یکسان است. hearbeat Flag نشان میدهد که «دسترسی غیرمجاز» در حال ارسال heartbeat است. پاسخ سرور C&C دارای فرمتی همانند شکل زیر میباشد.
flag در اینجا نشان میدهد که آیا فرمانی برای صدور به «دسترسی غیرمجاز» وجود دارد یا خیر. درخواستها برای دریافت فرامین دارای فرمتی همانند شکل زیر میباشند.
توجه داشته باشید که ICMP در «دسترسی غیرمجاز» امکان دریافت مقدار نامحدودی از دادهها را که به بخشهایی تقسیم شده، میدهد و از طول داده متغیر، موقعیت فعلی و طول کل برای پیگیری دادههای ارسالی استفاده میکند. پاسخها به این درخواستها دارای فرمتی همانند شکل زیر میباشند.
همانند پاسخهای HTTP، سومین بایت داده، شناسه فرمان (Command Identifier) میباشد.
پس از هفت پاسخ متوالی ICMP با محتوای خالی یا با فرمت متناقض، انتقال بین «دسترسی غیرمجاز» و سرور C&C تمام شده در نظر گرفته میشود.
با درنظر گرفتن درخواستها جهت ارسال نتیجه فرمان صادر شده به سرور C&C، وضعیت سرور به وضعیت Post تبدیل شده و رشته نهایی abcdefghijklmnop برای دادههای نتیجه تغییر میکند.
فرامین «دسترسی غیرمجاز»
PowHeartBeat دارای قابلیتهای مختلفی از جمله اجرای فرمان/پروسه و دستکاری فایل است. جدول زیر تمام فرامین پشتیبانی شده توسط نمونههای مختلف و تحلیل شده آن را فهرست میکند.
در صورت بروز خطا در «دسترسی غیرمجاز»، این «دسترسی غیرمجاز» از شناسه فرمان 0x00 در فرمان POST به سرور C&C استفاده میکند که نشان دهنده وجود خطا میباشد.
توجه داشته باشید که قبل از ارسال مجدد اطلاعات به سرور C&C، دادهها با Gzip فشرده میشوند.
PNGLoad؛ بارگذاریکننده Steganographic
در مرحله دوم PNGLoad بر روی سیستمهای هک شده، مستقر شده و توسط CLRLoad یا PowHeartBeat بارگذاری میشود. با این که در ظاهر هیچ کدی در PowHeartBeat که مستقیماً PNGLoad را بارگذاری میکند، شناسایی و مشاهده نشد، «دسترسی غیرمجاز» قابلیت دانلود و اجرای کدهای مخرب دیگری را از سرور C&C دارد که احتمالاً مهاجمان اینگونه PNGLoad را در سیستمهایی که با PowHeartBeat آلوده شدهاند، مستقر کردهاند. PNGLoad بارگذاریکنندهای است که از فایلهای PNG برای ایجاد و اجرای کد مخرب استفاده میکند. این یک فایل اجرایی 64 بیتی و از نوع NET. است که با NetRecorder. مبهمسازی شده و به عنوان نرمافزاری معتبر شناخته شده است.
پس از رفع ابهام، فقط یک کلاس وجود دارد. همانطور که در شکل زیر نشان داده شده، در این کلاس، یک Attribute به نام MainPath وجود دارد که شامل مسیر فهرست و زیر شاخههای آن است که در «دسترسی غیرمجاز» جهت جستجوی فایلهایی با پسوند png. مورد استفاده قرار میگیرد.
سپس محتوای هر فایل png. که توسط MainPath مورد جستجوی قرار گرفته، به منظور کشف رمزنگاری موسوم به Steganography مورد بررسی قرار میگیرد. ابتدا، کماهمیتترین بیت از هر پیکسل R (Red)، G (Green)، B (Blue) و A (Aloha) واکشی شده و در یک بافر جمع میشود. اگر هشت بایت اول آن بافر با عدد جادویی که در شکل زیر مشاهده میشود مطابقت داشته باشد و مقدار هشت بایت بعدی و بیت Control غیر تهی باشد، فایل PNGLoad از بررسی محتوای رمزنگاری Steganography عبور میکند. برای چنین فایلهایی، پردازش باقیمانده بافر که با یک XOR چند بایتی رمزگشایی شده و با بکارگیری کلیدی که در SecretKeyBytes PNGLoad ذخیرهشده، ادامه مییابد. در ادامه بافر رمزگشایی شده از حالت Gzip خارج میشود. انتظار میرود نتیجه، یک اسکریپت PowerShell باشد که بلافاصله اجرا میشود.
جالب اینجاست که عملیات انجام شده توسط PNGLoad در فایلی ثبت میشود که مسیر آن در متغیر LogFilePath ذخیره میشود. عملیات تنها زمانی ثبت میشود که فایلی وجود داشته باشد و مسیر آن توسط متغیر داخلی IfLogFilePath مشخص شده باشد.
محققان در این تحقیق نتوانستند یک نمونه فایل .png را که همراه با PNGLoad استفاده میشود، به دست آورند، اما نحوه عملکرد PNGLoad نشان میدهد که تنها با فایلهای PNG معتبر کار میکند. به منظور پنهان کردن کد مخرب، Worok از Bitmap Object در #C استفاده میکند و به فراداده (Metadata) مربوط به فایل نیازی ندارند و فقط اطلاعات پیکسل را از فایلها میگیرند. این بدان معناست که هکرهای Worok میتوانند کدهای مخرب خود را در تصاویر PNG معتبر و به ظاهر بیضرر مخفی کنند و در نتیجه از دید پنهان شوند.
جمعبندی
Worok یک گروه جاسوسی سایبری است که ضمن توسعه ابزارهای شخصیسازی شده خود، از ابزارهای موجود و معتبر نیز برای آلوده نمودن اهداف خود استفاده میکنند. به نظر میرسد این گروه به دنبال سرقت اطلاعات از قربانیان میباشند چون سازمانهای مختلفی اعم از بخشهای خصوصی، نهادهای دولتی و سازمانهای مهمی در آسیا و آفریقا را مورد هدف قرار دادند. زمانهای فعالیت و مجموعه ابزارهای بکارگرفته شده توسط Worok نشاندهنده ارتباط احتمالی آنها با گروه هکری TA428 است. مجموعه ابزار سفارشی آنها شامل دو بارگذاریکننده یکی به زبان ++C و دیگری به زبان C# .NET و یک «دسترسی غیرمجاز» از نوع PowerShell است. با این حال هنوز اطلاعات بیشتری درخصوص این گروه هکری منتشر نشده است.
فهرست جامعی از شاخصهای آلودگی (Indicators of Compromise – به اختصار IoC) و نمونههای آن در لینک زیر قابل دریافت و مشاهده است.
https://github.com/eset/malware-ioc/tree/master/worok
مشروح گزارش ایسِت در نشانی زیر قابل مطالعه میباشد:
https://www.welivesecurity.com/2022/09/06/worok-big-picture/