به گزارش جام جم کلیک: با انتشار خبر کشف بدافزار "معادله" ، کار تحلیل دقیق ماژولهای این بدافزار توسط کارشناسان پادویش آغاز شد. با بررسیهای اولیهی صورت گرفته مشخص شد طراحی و پیادهسازی این بدافزار نیز، همچون موارد پیشرفتهی قبلی، ماژولار است. به طور کلی کدهای مربوط به بدافزار در قالبهای متفاوتی از جمله فایلهای اجرایی، درایور و پلاگین در سیستم اجرا میشود و تا کنون حدود پنج ماژول مختلف با نسخههای متفاوت کشف شدهاند.
بررسی فایلهای مرتبط با این بدافزار نشان میدهد که تاریخ پیادهسازی آنها به اوایل سال 2008 میلادی بازمیگردد. هرچند تاریخ موجود در فایلهای بسیاری از بدافزارها قابل اعتماد نیست، اما استفادهی بدافزار از اکسپلویت معروفی که آسیبپذیری آن در نسخههای بعد از ویندوز xp برطرف شد به ما اطمینان میدهد که طراحی و پیادهسازی ماژولهای بدافزار به زمانی قبل از به بازار آمدن نسخههای بعد از ویندوز xp بازمیگردد.
در قدم اول، دو ماژول EquationDrug و GrayFish به عنوان راه اندازهای اصلی ماژولهای مراحل بعدی تشخیص داده شده و هدف تحلیل قرار گرفتند. این دو ماژول نه تنها از لحاظ عملکردی مشابهاند بلکه ساختار کد آنها نیز بسیار به یکدیگر نزدیک است. علاوه براین استفاده از درایور و موتکسی با نام یکسان توسط این دو ماژول ارتباط نزدیک طراحان آن را تایید میکند. نکتهی جالب توجه این است که اکسپلویت ذکر شده نیز توسط هر دو ماژول با اندکی تفاوت به طور مشترک مورد استفاده قرارگرفتهاست! شاید ذکر این نکته جالبتر باشد که همین اکسپلویت در سالهای بعد توسط بدافزار stuxnet نیز مورد استفاده قرارگرفت. به همین دلیل است که وجود ارتباط میان طراحان این دو بدافزار، stuxnet و Equation، دور از انتظار نیست. علاوهبر استفادهی مشترک از این اکسپلویت، آن هم در زمانی قبل از انتشار این آسیبپذیری در سیستم عامل ویندوز، پیلودهای اجرا شده نیز اهدافی بسیار مشابه دارند.
اگرچه در روزهای اخیر انتشار خبر کشف این بدافزار کارشناسان زیادی را ترغیب به تحلیل این بدافزار کردهاست، اما هنوز هیچ تحلیل دقیقی از این بدافزار منتشر نشدهاست.
در ادامه بخشهایی از تحلیل دقیق این دو ماژول توسط کارشناسان پادویش ارایه میشود:
1- ماژول راهانداز EquationDrug
به طور خلاصه میتوان گفت اجرای این ماژول در سیستم به عدم حضور برخی از دیوارههای آتش وابستهاست. در ادامه لیست دیوارههای آتش مورد نظر بدافزار آمدهاست. این ماژول برای اطمینان از عدم وجود این دیوارههای آتش از خواندن کلیهی زیرکلیدهای مسیر رجیستری زیر استفاده میکند.
HKEY_LOCAL_MACHINE / Software
در صورت وجود هر یک از دیوارههای آتش، EquationDrug فایل خود را قبل از اولین راهاندازی مجدد از بین برده و در غیر این صورت، بررسی میکند که دسترسیهای لازم برای ساختن فایل و بارگذاری درایور را دارد یا خیر. در صورتی که دسترسی پایینتری داشته باشد با استفاده از آسیب پذیری که در win32k.sys وجود دارد، با بهرهگیری از Privilege escalation exploit دسترسیهای لازم را به دست میآورد و سپس ماژولهای مراحل بعدی را دراپ کرده و راهاندازی و اجرا میکند.
بعد از این عملیات و اجرای کلیهی فایلهای مورد نظر، در نهایت ماژول EquationDrug با دستور قبلی اقدام به از بین بردن فایل خود قبل از اولین راهاندازی مجدد میکند.
در جدول زیر اطلاعات مربوط به کلیه فایلهای دراپشده توسط این ماژول آمدهاست.
سایز(byte) |
MD5 |
نام |
شماره |
380928 |
4556CE5EB007AF1DE5BD3B457F0B216D |
EquationDrug dropper |
1 |
385024 |
60C21E45D6EE3B18205957D3E09E83ED |
msnadt.exe |
2 |
249856 |
5767B9D851D0C24E13ECA1BFD16EA424 |
MSCFG32.DLL |
3 |
22016 |
C3AF66B9CE29EFE5EE34E87B6E136E3A |
MSCFG32.EXE |
4 |
9728 |
EF4405930E6071AE1F7F6FA7D4F3397D |
unilay.dll |
5 |
105120 |
C4F8671C1F00DAB30F5F88D684AF1927 |
MSNDSRV.SYS |
6 |
512 |
C2AC3057054A19FB5A33B43125E3414A |
mslog32.dat |
7 |
77824 |
FD167CA95FC0A5242E20E6C50DA7475A |
MSDIRECTX.EXE |
8 |
نکتهای که باید به آن اشاره کرد این است که کلیهی کدهای مربوط به ماژولهای مراحل بعدی و اطلاعاتی همچون نام دیوارههای آتش، همگی با الگوریتمی یکسان رمز شده و در بخش منابع، resource، ماژول EquationDrug قرارگرفتهاند. این کدها و اطلاعات در مراحل مختلف لود شده، رمزگشایی میشوند و مورداستفادهی بدافزار قرار میگیرند. علاوه بر این، این ماژول موتکسی با نام prkMtx را در سیستم میسازد.
2- ماژول راهانداز GrayFish
به طور کلی این ماژول یکی از ماژولهای راه انداز بدافزار است که نسبت به راه انداز دیگر گروه "معادله"، EquationDrug، از ساختاری پیشرفتهتر برخورداراست. با توجه به اینکه زمان کامپایل این ماژول به اوایل سال 2008 میلادی بازمیگردد میتوان گفت تکنیکهای بهکاررفته در آن در زمان خود بسیار پیشرفته بوده و حتی برخی از آنها برای اولین بار استفاده شدهاند.
تقریبا تمامی رشتههای مهم از قبیل نام APIها و Eventها، فایلها و ماژولهای دیگر به صورت رمزشده نگهداری میشود. علاوه بر این به غیر از بخش انتهایی برنامه که بعد از انجام عملیات دراپ کردن و راهاندازی موفقیتآمیز درایورها فرامیرسد، کد سایر بخشها غیرمبهم و تمیز است. در واقع در بخش ابتدایی برای دشوارشدن روال تحلیل، برنامه بهجای استفاده از تکنیکهای مبهمسازی و چندریختی، از تکنیک هوک بهرهبردهاست. به طور دقیقتر میتوان گفت برنامهنویس سعیکردهاست برای جلوگیری از مشخصشدن روال کار، با استفاده از پیگیری APIهای استفاده شده، بخشی از کد یک درایور را در کرنل هوک کند. برای رسیدن به این هدف تابع IRP_MJ_DEVICE_CONTROL مربوط به درایور Null.sys انتخاب و هوک میشود. این هوک با بهره گیری از یک اکسپلویت معروف پیادهسازی شدهاست که توسط بدافزار stuxnet نیز مورد استفاده قرار گرفته بود (آسیب پذیری که در win32k.sys وجود دارد، همانند ماژول قبلی). در این قسمت از توضیح دقیق روال کاری این اکسپلویت خودداری کردهایم. نکتهی جالب توجه این است که علی رغم برطرف شدن این آسیبپذیری در ویندوزهای نسخههای بالاتر، بدافزار همچنان تلاش میکند از اکسپلویت مذکور استفاده کند.
بعد از هوک کردن این تابع، کلیهی فراخوانیها به جای فراخوانی مستقیم APIها از طریق فراخوانی این تابع صورت میگیرد. برای مثال در زمان درخواست ساخت یک کلید رجیستری و یا نوشتن در آن، به جای استفاده از توابع معمول مثل RegCreateKey, RegSetValue به درایور Null.sys دستورات کنترلی ارسال میشود. بنابراین میتوان گفت که کد فعال شده در این بخش همچون یک API عمومی، GeneralAPI، عمل میکند. به این معنی که با توجه به کنترل کد و ورودیهای دریافتی تشخیص میدهد که باید چه اقدامی در سیستم صورت دهد.
با توجه به توضیحات داده شده به طور خلاصه روال کار بدافزار در این بخش در سه مرحله انجام میپذیرد.
مرحلهی اول: هوک کردن تابع ZwShutdownSystem
نتیجه: قرار گرفتن کد اولیه برای هوک کردن تابع IRP_MJ_DEVICE_CONTROL مربوط به درایور Null.sys
مرحلهی دوم: فراخوانی تقلبی تابع ZwShutdownSystem و اجرای کد اولیه
نتیجه: قرار گرفتن کد ثانویه به عنوان API عمومی در تابع مربوطه
مرحلهی سوم: فراخوانی متوالی API عمومی از طریق فراخوانی تقلبی تابع DeviceIoControl برای فایل با مسیر //.// NUL
نتیجه: انجام کلیهی فعالیتهای راه انداز از این طریق
لازم به ذکر است که بدافزار از API عمومی خود برای مقاصد زیر استفاده میکند.
در شکل زیر میتوانید نمایی از ابتدای دومین پیلود تابع را که به عنوان API عمومی عمل میکند مشاهده کنید. فلشهای قرمز نمایشگر کدهای کنترلیست که از سمت بخش کاربری به عنوان پارامتری کنترلی برای بخش کرنل ارسال شده و توسط بدافزار پشتیبانی میشود.
بعد از آماده شدن API عمومی، نوبت به ایجاد فایلهای درایور بدافزار و لود کردن آنها میرسد. همانطور که در شکل نمایش داده شده است سه درایور بدافزار به نامهای hrilib، msndsrv و ntevt در مسیر SYSTEM32 ایجاد شده و در مرحلهی بعد راهاندازی میشوند. علاوه بر این برای هر یک از درایورها در مسیر رجیستری زیر کلیدی با پارامترهای مربوط ساخته شده و با مقادیری که در ادامه آمده است مقداردهی میشود.
* به جای نام hrilib در توضیحات رجیستری بالا میتواند نام هر یک از درایورهای ساخته شده توسط راهانداز قرار گیرد.
توضیح این نکته ضروری به نظر میرسد که استفاده از نوع LegacyDriver در ماژولهای درایور میتواند به قدیمی بودن زمان طراحی و پیادهسازی این ماژول اشاره داشته باشد؛ چرا که این درایورها وابسته به طراحی legacy Windows NT بوده و از نوع Non-Plug and Play Drivers میباشند.
در ادامه ماژول GrayFish از میان کلیدهای مربوط به سرویسهای درایوری در رجیستری دو کلید را بهصورت تصادفی انتخاب کرده و پلاگینهای خود را که به فرمت رمز شده است به عنوان پارامتر در آنها ذخیره میکند. به نظر میرسد این پلاگینها در مراحل بعدی توسط سایر ماژولها مورد استفاده قرار گیرند.
یکی دیگر از موارد جالب دیده شده در روال این برنامه استفاده از تابع سند نشدهی RtlImageDirectoryEntryToData برای دریافت جدول Import ماژول ntkrnlpa است. با استفاده از این تابع سند نشده میتوان اطلاعات متفاوتی را از یک فرمت PE لود شده در حافظه استخراج کرده و خواند.
در انتها نیز فایل INSTV4.BAT در مسیر زیر ساخته میشود که حاوی دستور از بین بردن فایل اصلی برنامه است.
C:/Documents and Settings/***/Local Settings/Temp
بخش دیگر فایل ورژن سیستم عامل را با موارد زیر مقایسه میکند.
Service Pack 1
Service Pack 2, v.2055
Service Pack 2, v.2096
Service Pack 2, v.2149
Service Pack 2
Service Pack 3, v.3244
نتیجهی مقایسهی نسخهی سیستم در این مرحله تاثیری عملی بر روال کاری ماژول نخواهد داشت؛ اما این امکان وجود دارد که تغییرات ایجاد شده در پلاگینها وابسته به این موضوع باشد.
بخش انتهایی برنامه دارای کدهای مبهم است به گونهای که سعیشدهاست به جای استفاده از فراخوانیها و یا پرشهای مشخص، آدرس بعدی اجرای کد در هر مرحله به روشهای متفاوت ساختهشده و به وسیلهی فراخوانیهای غیر مستقیم، رجیستری و یا دستور بازگشت ادامهی برنامه اجرا شود. در شکلهای بعدی بخشهایی از کد پایانی بدافزار را مشاهده میکنید.
سایز(byte) |
MD5 |
نام |
شماره |
573,440 |
9B1CA66AAB784DC5F1DFE635D8F8A904 |
GrayFish dropper |
1 |
6,400 |
8E13014032DF7CC9757F05742E56D9BE |
hrilib.sys |
2 |
45,920 |
C87E249A802CBB610F19E9D90AEE80E2 |
msndsrv.sys |
3 |
91,136 |
DECB89B1C2A1354666FF398AE9D0D948 |
ntevt.sys |
4 |
1. Drop driver modules
2. Create/Write to registry key
3. Drop encrypted plugins
4. Create thread
منبع: پادویش
سید رضا صدرالحسینی در یادداشتی اختصاصی برای جام جم آنلاین مطرح کرد
دانشیار حقوق بینالملل دانشگاه تهران در یادداشتی اختصاصی برای جام جم آنلاین مطرح کرد
یک پژوهشگر روابط بینالملل در گفتگو با جام جم آنلاین مطرح کرد
در یادداشتی اختصاصی برای جام جم آنلاین مطرح شد
در گفتوگو با امین شفیعی، دبیر جشنواره «امضای کری تضمین است» بررسی شد