کمیته رکن چهارم – چند روز پیش محققان امنیتی یک فرآیند پیچیده فیشینگ را شناسایی کردند که در آن یک فایل مخرب مایکروسافت اکسل به عنوان پیوست ایمیل، وظیفه توزیع و گسترش نوع جدیدی از تروجان Dridex را بر عهده داشت. Dridex یک بدافزار تروجانی است که با نام های Bugat و Cridex نیز شناخته می شود و قادر به آلوده کردن سیستم قربانی و سرقت اطلاعات بانکی آنلاین می باشد. از آنجایی که ما در سیستم های خانگی و سازمانی خود از این فایل زیاد استفاده می کنیم باید مراقب این گونه فعالیت های مخرب باشیم.
محققان امنیتی در آزمایشگاه خود پیلود Dridex را که توسط ماکرو مخرب در سند Excel ترکیب شده بود را مورد تحلیل قرار دادند. فرآیندهایی که در این تحقیق امنیتی مورد بررسی قرار گرفته شامل موارد زیر است:
چگونه پیلود Dridex توسط ماکرو بارگیری می شود؟ ، چگونگی شروع کار با پیلود Dridex، چه تکنیکی برای انجام آنالیز لازم است، چه اطلاعاتی از دستگاه قربانی جمع آوری می شود، نحوه جمع آوری اطلاعات و ارسال آن به سرور C2 چگونه صورت می گیرد و …
کمپین فیشینگ شامل سند Microsoft Excel با صدها آدرس URL مخرب
ایمیل موجود در کمپین فیشینگ شناسایی شده (در شکل زیر) را مشاهده می کنید که شخص قربانی روی آن کلیک کرده است. این ایمیل در اصل یک درخواست پرداخت با یک فاکتور جعلی اکسل پیوست شده است که اگر شخص قربانی روی آن دو بار کلیک کند ، Microsoft Office Excel باز می شود.
علاوه بر فایل پیوست، یک لینک در متن ایمیل موجود است. با کلیک روی آن هم فایل مشابه اکسل دانلود خواهد شد و علنا فرقی بین لینک و فایل پیوست شده وجود ندارد. هکرها با این کار حق انتخاب به شخص قربانی را می دهند و در هر دو حالت به اهداف خود می رسند.
همانطور که در شکل زیر مشاهده می کنید، مایکروسافت اکسل نوار زرد رنگ با یک پیام اخطار امنیتی را نشان می دهد. این پیام بدین معنی است که فایل باز شده حاوی محتوای مشکوک و خطرناکی مانند VBA Macro می باشد. هنگامی که شخص قربانی دکمه “Enable Content” را کلیک کند، محتوای مخاطره آمیز دانلود شده و حتی بصورت خودکار اجرا می شود.
طبق تحلیل ما، این فایل حاوی یک ماکرو مخرب (کد VBA) است که از دو طریق قابل اجرا می باشد. اولین مورد با کلیک کردن روی دکمه سبز “All-Open and pay” است که با اجرای کد VBA مخرب همراه می باشد. روش دیگر این است که وقتی یک Layout event اتفاق می افتد، یک تابع ()Formsa_Layout خصوصی برای انجام چنین رویدادی وجود دارد که کد VBA مخرب را اجرا کند. اینگونه Layout event ها بارها هنگام کارکردن شخص قربانی بر روی فایل اکسل ظاهر می شوند.
کد VBA با رمزهای عبور و خصوصیات ویژه محافظت می شود. هنگامی که کاربر سعی کند پروژه VBA را مشاهده کند یک پیام هشدار دهنده همانطور که در شکل بالا نشان داده شده ظاهر می شود. تغییر فایل باینری آن می تواند جلوی تشخیص را بگیرد.
در ادامه تحلیل کد dynamic VBA متوجه شدیم که این کد قادر است یک URL را بطور تصادفی از حدود ۲۹۰ URL رمزگذاری شده (که بر روی سیستم نیز دانلود شده اند) انتخاب و رمزگشایی و همچنین آن را اجرا کند.
این URL های دانلود شده در اولین برگه سند اکسل رمزگذاری و پنهان شده اند (رنگ قلم آنها به رنگ سفید ، همان رنگ پس زمینه تنظیم شده است). شکل زیر لیستی از URL های رمزگذاری شده را نشان می دهد ، از شماره سلول A720 شروع می کند، جایی که من رنگ قلم آنها را به رنگ سیاه تنظیم کرده ام.
یک کارکرد به نام ()printerSave وجود دارد که کد VBA داینامیک را در string رمزگشایی می کند، سپس در ()API function ExecuteExcel4Macro اجرا می شود.
همانطور که در شکل زیر مشاهده می کنید ، ()ExecuteExcel4Macro پس از فراخوانی تابع ()rep یک پارامتر رشته ای که کد رمزگذاری شده VBA است را دریافت می کند. برای درک بهتر کد، من تمام کد VBA رمزگشایی شده را در sub-window چاپ کردم که در شکل زیر می توانید مشاهده کنید
اگر با کد VBA آشنا باشید، می دانید که دو پوشه با نام رشته های تصادفی (“J1fljSfQ” و “QVluls2”) ایجاد می شوند. سپس یکی از ۲۹۰ آدرس اینترنتی “https [:] // umeskin [.] com / 4i1sgz [.] pdf” را در فایل محلی “bLAZ6Ji” دانلود می کند. در پوشه “C: \ J1fljSfQ \ QVluls2”. نام این فایل محلی یا به اصطلاح Local نیز تصادفی است.
آخرین خط فایل دانلود شده را با استفاده از فرآیند “regsvr32.exe” با پارامتر “s-” استارت می زند. فایل دانلود شده همان فایل payload Dridex است. بنابراین از سند اکسل به عنوان دانلودر تروجان Dridex استفاده می شود.
بازشدن پک تروجانی Dridex در Regsvr32.exe و اکسپورت توابع بر روی سیستم هدف
Dridex در پروسه regsvr32.exe اجرا می شود، این پروسه یک ابزار خط فرمان مایکروسافت ویندوز است که برای ثبت و عدم ثبت نام DLL ها و کنترل های ActiveX در سیستم عامل Registry استفاده می شود. فایل بارگذاری شده Dridex یکی از این پرونده های DLL است. شکل زیر تصویری از درخت فرآیند است که Dridex را در “regsvr32.exe” اجرا می کند.
Regsvr32.exe فایل پیلود Dridex را لود می کند و DllEntryPoint()function خود را برای انجام فرآیند initialization فراخوانی می کند. این یک بلوک داده رمزگذاری شده با ابعاد ۷B600H است که رمز گشایی شده و در یک بافر حافظه تازه ایجاد شده استخراج می شود. سپس به کد رمزگشایی شده که آدرس آن در EAX بلود شده می رود. شکل زیر کد استخراج شده و متن کد را نشان می دهد.
با اجرای کد می توانید یک فایل PE کامل که همان ماژول کرنل Dridex است را رمزگشایی و استخراج کرده و به حافظه منتقل کنید. سپس پرونده PE را در یک فضای اجرایی مستقر می کند. این فرآیند دقیقاً شبیه به نحوه بارگیری ویندوز سیستم عامل برای اجرای پرونده EXE است با تفاوت هایی از قبیل محدود کردن بخش های آدرس های مجازی نسبی (RVA) ، بارگذاری API های وارد شده ، تنظیم داده های جابجایی و غیره.
پس از انجام فرآیند فوق، تابع Entry Point از PE استخراج می شود همانطور که در شکل زیر نشان داده شده است با قطعه ای از کد ASM فراخوانی می شود. از کد ASM “push edx” و “retn” استفاده می کند ، که در اینجا شبیه به “jmp edx” است.
تکنیک های ضد آنالیز مورد استفاده در Dridex
توسعه دهنده تروجان Dridex تمام فعالیت های مخرب خود را در تابع ()DllRegisterServer قرار می دهد ، که می توان آن را به عنوان تابع ()Main در سایر فرآیندهای عادی تصور کرد.
بسیاری از تکنیک های ضد آنالیز در کرنل Dridex مشاهده می شوند تا از تجزیه و تحلیل کد آن جلوگیری شود. در این بخش برخی از آنها را معرفی می کنم.
مخفی کردن API
بیشتر توابع API ویندوز پنهان هستند و قبل از فرآخوانی بازیابی می شوند. این می تواند مشکلات بیشتری را برای تجزیه و تحلیل استاتیک ایجاد کند. تابعی (که در این مقاله ()GetAPIByHash گفته می شود) با کد هش خود API را بازیابی می کند.
شکل بالا نمونه ای از بازیابی ()API RegEnumKeyW با استفاده از ()GetAPIByHash را نشان می دهد که به دو دلیل نیاز دارد. اول مقدار هش (۶۸EFDF75h) از کد XORed CRC32 ماژولی به نام “ADVAPI32.DLL” (همه با حروف بزرگ) با مقدار ثابت ۶AECC489h است. دوم مقدار هش (۰A7373679h) از کد XORed CRC32 API با نام “RegEnumKeyW” با مقدار ثابت ۶AECC489h است.
در این حالت ، کد CRC32 از “RegEnumKeyW” با نام CDDBF2F0H است که در آن XORed با مقدار ثابت ۶AECC489h برابر است با ۰A7373679h.
()GetAPIByHash تمام API هایی را در یک ماژول مشخص برای شناسایی یک API با مقایسه کد هشی که در پارامتر قرار دارد بررسی می کند.
رمزگذاری استرینگ ها
استرینگ های کلیدی در سراسر کرنل Dridex رمزگذاری شده اند. بنابراین تحلیلگران نمی توانند با جستجوی استرینگ های اصلی در فضای حافظه، رفتارهای آن را پیدا کنند. همانند مخفی کردن API ، استرینگ ها قبل از استفاده رمزگشایی می شوند. شکل زیر نمونه ای از رمزگشایی استرینگ یونیکد “POST” را نشان می دهد. تابع ۸۱۳B00 تابع رمزگشایی است که سه آرگومان را در بر می گیرد. ECX ایندکس (۰ برای “GET” و ۱ برای “POST”) استرینگ رمزگشایی است. (۸۲۹۶D0 به بافر رشته رمزگذاری شده اشاره می کند)
ایجاد یک استثناء در فرآخوانی API
این بدافزار همانطور که در ابتدا توضیح داده شد نه تنها API های پنهان را در خود جای داده است بلکه هنگام فراخوانی این API های مخفی از ترفندی نیز استفاده می کند. با مراجعه به شکلی که در مخفی کردنAPI درج شده می بینید که در پایین آن کد ASM “int 3” وجود دارد که با کد ۸۰۰۰۰۰۰۳ ( BREAKPOINT trap ) استثنائی ایجاد می کند. اجرای آن را قطع می کند و منتظر می ماند تا استثناء پردازش شود.
Dridex موفق به راه اندازی یک کنترل کننده استثناء (یک عملکرد محلی مانند Try… Catch block) در تابع ورودی شده است. برای انجام این کار آن را به ()API RtlAddVectoredExceptionHandler فراخوانی می کند تا یک تابع محلی را به عنوان کنترل کننده استثناء اضافه کند. به این ترتیب هر وقت Dridex هرگونه استثنائی ایجاد کند، ابتدا این تابع محلی برای رسیدگی به آن فراخوانی می شود.
وقتی که کنترل کننده استثناء محلی فرآخوانی شود،
استدلال آن یک DATA _EXCEPTION_RECORD است که شامل اطلاعات استثناء و یک ساختار زمینه ای با مقادیر همه رجیستری ها است. سپس مقدار EAX را به داخل پشته سوق می دهد و مقادیر دیگر رجیستر ها مانند EIP و ESP را تغییر می دهد. در پایان (۰FFFFFFFFh (-1 را نشان می دهد که مخفف EXCEPTION_CONTINUE_EXECUTION است و به سیستم می گوید که کل رجیسترها را با مقادیر اصلاح شده بازیابی کند. سرانجام این فرآیند را از خط بعدی خط استثناء اجرا می کند ، جایی که API را از پشته با استدلال (ها) به آن فراخوانی می کند.
این کل مکانیسم نحوه استفاده Dridex از یک استثنا برای تماس با API است. شکل زیر عملکرد کنترل کننده استثناء محلی را نشان می دهد.
به جز این، اگر فرآیند Dridex توسط یک debugger انجام شود (ردیابی تک مرحله ای) می تواند یک استثناء EXCEPTION_SINGLE_STEP ایجاد کند (کد ۸۰۰۰۰۰۰۴). مدیریت استثناء محلی می تواند این استثناء را شناسایی کرده و مقدار رجیستر را برای داشتن کرش Dridex اصلاح کند تا از تحلیل و رفع باگ محافظت کند.
ارسال اطلاعات جمع آوری شده به سرور C2
در تابع ()DllRegisterServer، تروجان Dridex اطلاعات را از دستگاه قربانی جمع کرده و سپس آن را به سرورهای C2 خود ارسال می کند. در این بخش توضیح خواهم داد که Dridex چگونه این کار را انجام می دهد.
ابتدا ، نام کاربری و نام کامل رایانه را به دست می آورد. سپس زمان نصب ویندوز را از رجیستری سیستم می خواند. مقادیر فوق جمع شده و مقدار MD5 از آنها ساخته می شود. قسمت اول (طول ۲Fh) از بسته شامل طول داده + نام رایانه + مقدار MD5 است. سپس با استفاده از فراخوانی ()API GetVolumeInstructionW از بافر بسته های داده VolumeInformation ( حدود ۲۰ برابر مقدار hex ) به دست آمده استفاده می کند.
Dridex تمام اطلاعات نرم افزار نصب شده را از رجیستری سیستم قربانی جمع آوری می کند. سپس با استفاده از “HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall” شروع به فعالیت کرده و همه subkey ها را که مقادیر DisplayName و DisplayVersion است را فهرست می کند. در قسمت “Uninstall” تمام اطلاعات رجیستری نرم افزار نصب شده برای استفاده در فرآیند Uninstall وجود دارد.
به عنوان مثال، اطلاعات خوانده شده برای برنامه ۷-Zip می تواند “۷-Zip 18.05 (18.05)” باشد، همانطور که در شکل زیر نشان داده شده است.
کل اطلاعات نرم افزاری جمع آوری شده به بسته اضافه می شوند.
آخرین قسمت از بسته بندی مربوط به متغیرهای محیط سیستم قربانی است. برای انجام این کار، Dridex با ()API GetEn EnvironmentStringsW تماس می گیرد تا یک pointer را به بلوکی از حافظه که شامل متغیرهای محیطی است را return کند.
شکل بعدی کلیاتی از مطالب بسته را نشان می دهد ، جایی که مقادیر مشخص شده به رنگ قرمز نشان داده شده است. مقادیر تقسیم شده با نوار عمودی آبی زمینه های داده ای هستند که قبلاً توضیح داده ام.
کل داده های جمع آوری شده با استفاده از یک الگوریتم RC4 رمزگذاری میشود تا در هنگام انتقال از آن محافظت شود.
تروجان Dridex دارای چهار سرور C2 است که بصورت باینری کد گذاری می شوند ، دقیقاً همانطور که در شکل نشان داده شده است. Dridex ارسال بسته نهایی را مکررا تکرار می کند تا زمانی که بسته پاسخی با وضعیت HTTP “۲۰۰ OK” دریافت شود.
برای این کار، این API ها را فراخوانی می کند:
InternetOpenA () ، InternetConnectW () ، HttpOpenRequestW () ، HttpSendRequestW () و InternetReadFile ()
که همه آنها توسط GetAPIByHash بازیابی می شوند
ما تاکنون پاسخ “۲۰۰ ” از سرورهای C2 دریافت نکرده ایم. بنابراین نمی دانیم این کمپین Dridex چه عملیات های دیگری را انجام می دهد.
نتیجه
در این مقاله تحلیلی، آموختید که چگونه یک تروجان (Dridex) از طریق یک ایمیل فیشینگ توزیع می شود ، چگونه ماکرو مخرب در سند اکسل پیوست شده پیلود های خود را از صدها آدرس اینترنتی دانلود می کند. من همچنین روند بارگذاری پرونده payload را در regsvr32.exe و اینکه Dridex از چه نوع تکنیکی استفاده می کند
و در آخر ، من نشان دادم که چه اطلاعاتی را می توان از دستگاه قربانی جمع آوری کرد و چگونه هکرها آنها را دریافت می کنند، همچنین نحوه پردازش داده ها و ارسال به سرورهای C2 آن متوجه شدید.
منبع: ایران سایبر