محققان ایسِت (ESET) حملات هدفمندی را شناسایی کردهاند که گروه جاسوسی Worok با بهکارگیری ابزارهای ناشناختهای، در کشورهای مختلف از جمله منطقه خاورمیانه، سازمانهایی را هدف قرار دادهاند.
به گزارش افتانا (پایگاه خبری امنیت فناوری اطلاعات)، مجموعه ابزار بکار گرفته شده توسط گروه Worok شامل یک بارگذاری کننده C++ به نام CLRLoad، یک «دسترسی غیرمجاز» از نوع PowerShell به نام PowHeartBeat و یک راهاندازC# به نام PNGLoad است که از نوعی رمزنگاری خاص موسوم به Steganography برای پنهان نمودن کد مخرب در فایلهای PNG استفاده میکند.
در طول افشای
آسیبپذیری ProxyShell به شناسه CVE-2021-34523، فعالیتهایی از گروههای مختلف APT مشاهده شد که به نظر میرسید با گروه هکری چینی TA۴۲۸ مرتبط باشد؛ چون همگی دارای ویژگیهای مشترکی نظیر زمان فعالیت، هدفمند بودن حملات و بهکارگیری ShadowPad بودند.
بقیه مجموعه ابزارهایی که توسط مهاجمان Worok بکار گرفته میشود، بسیار متفاوت است. گروه هکری TA428 در آلودهسازی و هک Able Desktop در سال ۲۰۲۰ مشارکت داشت ولی Worok بهاندازه کافی پیشرفته نیست که بتوان آن را همانند گروه TA428 در نظر گرفت بااینحال این دو گروه ممکن است ابزارهای مشترکی داشته باشند.
نام این گروه هکری با عنوان Worok، از mutex که در بارگذاری کننده (Loader) آن استفاده شده، برگرفته شده است.
به نقل از محققان ایسِت، Worok از اواخر سال ۲۰۲۰ فعال بوده و تا زمان نگارش این گزارش همچنان فعال است.
در پاییز سال ۱۴۰۰، این گروه دولتها و سازمانهای مختلفی را در کشورهای مختلف از جمله منطقه خاورمیانه هدف قرارداد.
گروه هکری Worok پس از وقفه قابلتوجهی در بازه زمانی اردیبهشت ۱۴۰۰ تا دی سال ۱۴۰۰، فعالیت خود را دوباره در بهمن ۱۴۰۰ با حمله به یک نهاد عمومی در جنوب شرق آسیا و بخش انرژی در آسیای مرکزی از سر گرفت.
باتوجهبه ابزارهای بکار گرفته شده علیه این قربانیان، به نظر میرسد که هدف اصلی Worok سرقت اطلاعات است.
تحلیل تکنیکالبا وجود این که اکثر دسترسیها و نفوذ اولیه در این حملات همچنان ناشناخته است، در برخی حملات انجام شده در سالهای ۱۴۰۰ و ۱۴۰۱ از آسیبپذیری ProxyShell سوءاستفاده شده است. در چنین مواردی، معمولاً Webshell پس از بهرهجویی از این آسیبپذیریها بهمنظور تداوم در شبکه قربانی بارگذاری میشود. سپس اپراتورها از کدهای مخرب مختلف جهت بهدستآوردن قابلیتهای بیشتر استفاده میکنند.
بعد از نفوذ به سیستم موردنظر، هکرهای Worok با بهکارگیری ابزارهای متعدد و معتبری نظیر Mimikatz، EarthWorm، ReGeorg و NBTscan، کدهای مخرب و شخصیسازی شده خود را اجرا میکنند. به دنبال بهکارگیری یک راهانداز در مرحله اول، یک بارگذاری کننده .NET (PNGLoad) در مرحله دوم اجرا میشود. در سال ۱۴۰۰، بارگذاری کننده مرحله اول CLR Assembly به نام CLRLoad بود درحالیکه در سال ۱۴۰۱، در اکثر موارد، یک «دسترسی غیرمجاز» از نوع PowerShell با عنوان (PowHeartBeat) با قابلیتهای کاملتر جایگزین آن شده است. هر دوی این زنجیره اجرایی در شکل زیر نشان داده شدهاند.
ابزارها بهتفصیل در بخشهای فرعی زیر تشریح شدهاند:
CLRLoad بارگذارکنندهای است که به زبان C++ نوشته شده و یک PE مربوط به Windows است که در هر دو نسخه ۳۲ و ۶۴ بیتی وجود دارد و در واقع فایل DLL از نوع Common Language Runtime (CLR) assembly است. این کد از فایلی که بر روی دیسک و در یک دایرکتوری معتبر قرار دارد و احتمالاً برای گمراه کردن قربانیان یا پاسخدهندگان به رویدادها، بارگذاری میشود تا گمان کنند که نرمافزاری معتبر و قانونی است.
برخی از نمونههای CLRLoad با رمزگشایی مسیر کامل فایلی که محتوای آن در مرحله بعدی بارگذاری میشود، شروع میشود. این مسیرها با یک XOR تک بایتی و با یک کلید متفاوت در هر نمونه کدگذاری میشوند.
مسیرهای فایل بهصورت رمزگشایی شده یا متن شفاف زیر است:
C:Program FilesVMwareVMware ToolsVMware VGAuthxsec_۱_۵.dll
C:Program FilesUltraViewermsvbvm۸۰.dll
C:Program FilesInternet ExplorerJsprofile.dll
C:Program FilesWinRarRarExtMgt.dll
C:Program Files (x۸۶)Foxit SoftwareFoxit Readerlucenelib.dll
در مرحله بعد، یک mutex ایجاد شده و در هر نمونه نامی متفاوت مشاهده میشود. بارگذاری کننده این mutex را بررسی میکند. اگر پیدا شد، یعنی بارگذاری کننده از قبل در حال اجرا است، پس خارج میشود. در یکی از نمونهها، یک mutex با نام Wo۰r۰KGWhYGO مشاهده شده که نام Worok را محققان از برداشت شده است.
سپس CLRLoad یک CLR Assembly را از مسیر فایل احتمالاً رمزگشایی شده، بارگذاری میکند. بهعنوان کد مدیریت نشده، CLRLoad از طریق فراخوانی CorBindToRuntimeEx درWindows API در نسخههای ۳۲ بیتی یا فراخوانی CLRCreateInstance در نسخههای ۶۴ بیتی اجرا میشود.
PowHeartBeat؛ دسترسی غیرمجاز از نوع PowerShellPowHeartBeat که در PowerShell نوشته شده، «دسترسی غیرمجاز» را فراهم میکند و با استفاده از تکنیکهای مختلفی نظیر فشردهسازی، رمزگذاری و کدگذاری، مبهمسازی شده است.
محققان ایسِت میگویند: در کارزارهای اخیر Worok، PowHeartBeat بهعنوان ابزاری جهت راهاندازی PNGLoad، جایگزین CLRLoad شده است.
اولین لایه کد «دسترسی غیرمجاز» شامل چندتکه کد PowerShell است که بهصورت base64 کدگذاری شده است. پس از ایجاد کد مخرب، این کد از طریق IEX اجرا میشود و پس از کدگذاری، لایه دیگری از کد مبهمسازی شده همانند شکل زیر اجرا میشود.
لایه دوم یعنی base64 کدگذاری شده، کد لایه بعدی خود را رمزگشایی میکند و سپس با Triple DES (وضعیت CBC) رمزگشایی میشود. پس از رمزگشایی، این کد با استفاده از الگوریتم Gzip از حالت فشرده خارج میشود و به این ترتیب لایه سوم کد PowerShell که همان «دسترسی غیرمجاز» واقعی است، ایجاد شده و به دو بخش اصلی تقسیم میشود: پیکربندی، و کنترل دستورات «دسترسی غیرمجاز».
لایه اصلی کد «دسترسی غیرمجاز» نیز در PowerShell نوشته شده و از HTTP یا ICMP برای ارتباط با سرور C&C استفاده میکند. همانطور که در شکل زیر نشاندادهشده است.
پیکربندیاین پیکربندی شامل چندین فیلد از جمله شماره نسخه، پیکربندی اختیاری پروکسی و نشانی C&C است.
جدول زیر معانی فیلدهای پیکربندی را در نسخههای مختلف توضیح میدهد.
شکل بعدی پیکربندی استخراج شده از یک نمونه PowHeartBeat را که دارای هش زیر است، نشان میدهد.
SHA-۱: ۷۵۷ABA۱۲D۰۴FD۱۱۶۷۵۲۸FDD۱۰۷A۴۴۱D۱۱CD۸C۴۲۷
$Script:nouse = ۱۰۰;
if(Test-Path $MyInvocation.MyCommand.Path){Remove-item $MyInvocation.MyCommand.Path -Force;}
$Script:ClientId = "۸۳";
$Script:Version = "۲.۱.۳.۰۰۰۳";
$Script:ExecTimes = ۱۰;
$Script:UserAgent = "Mozilla/۵.۰ (Windows NT ۱۰.۰; WOW۶۴) AppleWebKit/۵۳۷.۳۶ (KHTML, like Gecko) Chrome/۶۹.۰.۳۴۸۷.۱۰۰ Safari/۵۳۷.۳۶";
$Script:Referer = "www.adobe.com";
$Script:AcceptEncoding = "text/html,app۱ication/xhtml+xml,app۱ication/xml;q=۰.۹,*/*;q=۰.۸";
$Script:CookieClientId = "s_ecid";
$Script:CookieTaskId = "aam_uuid";
$Script:CookieTerminalId = "AAMC_adobe_۰";
$Script:UrlHttps = "http://";
$Script:UrlDomain= " ۱۱۸.۱۹۳.۷۸[.]۲۲:۴۴۳";
$Script:UrlSendHeartBeat = "/latest/AdobeMessagingClient.js";
$Script:UrlSendResult = "/content/dam/offers-homepage/homepage.jpg";
$Script:GetUrl = $Script:UrlHttps + $Script:UrlDomain + $Script:UrlSendHeartBeat;
$Script:PutUrl = $Script:UrlHttps + $Script:UrlDomain + $Script:UrlSendResult;
$Script:currentPath = Split-Path -Parent $MyInvocation.MyCommand.Definition;
$Script:ProxyEnableFlag = $false;
$Script:Proxymsg;
$Script:Interval = ۱۰ ;
$Script:BasicConfigPath = "C:ProgramDataunins.dat";
$Script:UpTime = ۰;
$Script:DownTime = ۲۴;
$Script:Domains;
$Script:DomainIndex;
$Script:SecretKey = "###ConfigKey###";
#$Script:IfLog = $true;
$Script:IfLogFilePath = "C:ProgramData pncp.dat";
$Script:logpath = "C:ProgramDataunins۰۰۰.dat";
$Script:ProxyFile = "C:ProgramDatahwrenalm.dat";
$Script:IfConfig = $false;
رمزگذاری دادههاPowHeartBeat لاگهای مربوطه و محتوای فایل پیکربندی را رمزگذاری میکند.
محتوای فایل لاگ از طریق XOR چند بایتی و با کلیدی که در متن شفاف مشخص شده، رمزگذاری میشود. کلید یادشده یک آرایه ۲۵۶ بایتی است که در تمام نمونههای مشاهده شده، یکسان است. محتوای فایل پیکربندی از طریق XOR چند بایتی و کلید آن که دارای مقدار SecretKey، است، رمزگذاری میشود.
ارتباطات C&CPowHeartBeat تا نسخه ۲.۴ برای ارتباطات C&C از HTTP استفاده میکند و سپس به ICMP تغییر مییابد. در هر دو مورد، ارتباط رمزگذاری نشده است.
در یک حلقه نامتناهی، «دسترسی غیرمجاز» ضمن ارسال یک درخواست GET به سرور C&C، صدور فرمانی را تقاضا میکند. پاسخ رمزگذاری شده توسط «دسترسی غیرمجاز» رمزگشایی میشود و ضمن پردازش فرمان و نوشتن خروجی فرمان در یک فایل، محتوای آن از طریق یک درخواست POST به سرور C&C ارسال میشود. فرمت درخواستهای GET بهصورت زیر است:
GET <UrlSendHeartBeat> HTTP/1.1
User-Agent: <UserAgent>
Referer: <Referer>
Host: <Domain>
Cookie: <CookieClientId>=<ClientId>
Connection: close
توجه داشته باشید که درخواستها با استفاده از فیلدهای پیکربندی همنام ساخته شده است.
در پاسخ سرور C&C، سومین بایت محتوا، شناسه فرمان است که command_id نامیده شده و دستور پردازش شده توسط «دسترسی غیرمجاز» را نشان میدهد. محتوای باقیمانده از پاسخ بهعنوان یک آرگومان به دستور پردازش شده ارسال میشود. این محتوا با الگوریتم نشاندادهشده در شکل زیر رمزگذاری شده، taskId مقدار کوکی است که پس از مقدار CookieTaskId در پیکربندی نامگذاری شده است.
o[int] $pos = $taskId % ۲۵۶;
for ($i = ۰; $i -lt $tmpBytes.Value.Length; $i++)
{
$pos = $pos + $clientId;
if ($pos -ge ۲۵۶)
{
$pos = $pos % ۲۵۶;
}
$tmpBytes.Value[$i] = [byte]($tmpBytes.Value[$i] -bxor $hexEnc[$pos]);
}
همچنین پاسخ سرور C&C حاوی کوکی دیگری است که نام آن توسط متغیر پیکربندی «دسترسی غیرمجاز» به نام CookieTerminalId مشخص شده است. مقدار این کوکی در درخواست POST مربوط به «دسترسی غیرمجاز» تکرار میشود و نباید خالی باشد. پس از اجرای دستور PowHeartBeat نتیجه را بهعنوان یک درخواست POST به سرور C&C ارسال میکند. نتیجه بهصورت فایلی با نام <command_id>.png ارسال میشود.
ICMPدر PowHeartBeat، از نسخه ۲.۴، HTTP با ICMP جایگزین شده و بستههای ارسالی دارای بازه زمانی شش ثانیهای و غیر قطعهبندی شده هستند. بهاحتمال زیاد ارتباط از طریق ICMP، گزینهای برای دورزدن راهکارهای امنیتی است و هیچ تغییر عمدهای در نسخههای ۲.۴ به بعد وجود ندارد؛ اما به نقل از محققان، تغییراتی در کد ایجاد شده است.
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 دارای قابلیتهای مختلفی از جمله اجرای فرمان/پروسه و دستکاری فایل است؛ جدول زیر تمام فرامین پشتیبانی شده توسط نمونههای مختلف و تحلیل شده آن را فهرست میکند.
در صورت بروز خطا در «دسترسی غیرمجاز»، این «دسترسی غیرمجاز» از شناسه فرمان ۰x۰۰ در فرمان POST به سرور C&C استفاده میکند که نشاندهنده وجود خطا است.
توجه داشته باشید که قبل از ارسال مجدد اطلاعات به سرور C&C، دادهها با Gzip فشرده میشوند.
PNGLoad؛ بارگذاری کننده Steganographicدر مرحله دوم PNGLoad بر روی سیستمهای هک شده، مستقر شده و توسط CLRLoad یا PowHeartBeat بارگذاری میشود. با این که در ظاهر هیچ کدی در PowHeartBeat که مستقیماً PNGLoad را بارگذاری میکند، شناسایی و مشاهده نشد، «دسترسی غیرمجاز» قابلیت دانلود و اجرای کدهای مخرب دیگری را از سرور C&C دارد که احتمالاً مهاجمان اینگونه PNGLoad را در سیستمهایی که با PowHeartBeat آلوده شدهاند، مستقر کردهاند. PNGLoad بارگذاریکنندهای است که از فایلهای PNG برای ایجاد و اجرای کد مخرب استفاده میکند. این یک فایل اجرایی ۶۴ بیتی و از نوع .NET است که با .NET Recorder مبهمسازی شده و بهعنوان نرمافزاری معتبر شناخته شده است.
پس از رفع ابهام، فقط یک کلاس وجود دارد. همانطور که در شکل زیر نشاندادهشده، در این کلاس، یک 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 نشاندهنده ارتباط احتمالی آنها با گروه هکری TA۴۲۸ است. مجموعه ابزار سفارشی آنها شامل دو بارگذاری کننده یکی به زبان C++ و دیگری به زبان C# .NET و یک «دسترسی غیرمجاز» از نوع PowerShell است. بااینحال هنوز اطلاعات بیشتری در خصوص این گروه هکری منتشر نشده است.