تحلیل یک نوع جدید از بدافزار Emotet

نوسنده مقاله : Xiaopeng Zhang (ترجمه به زبان اول شخص خواهد بود)تاریخ انتشار در منبع : 29 بهمن 97محل پژوهش و انتشار : نشریه مقالات پژوهشی تحلیل تهدیدات - مجموعه آزمایشگاه های FortiGuardخبر وجود اعضای خانواده ی بدافزار Emotet چیز جدیدی نیست در واقع مربوط به چندین سال قبل است. ظاهرا قبلاً در سال 2017 این تیم پژوهشی یک فایل جاوااسکریپت مربوط به این بدافزار را رصد کرده که پس از تحلیل در دو بخش منتشر شده است. برای مشاهده گزارشات قبلی کلیک کنید : بخش یک و بخش دواخیرا آزمایشگاه FortiGuard یک نوع تازه از Emotet را کشف کرده است. این دفعه، در یک سند نرم افزار واژه پرداز Microsoft Word جاساز شده است. من هم یک تحلیل سریع روی آن انجام دادم و در این مقاله قصد دارم برای شما بیان کنم که چگونه بر روی دستگاه قربانی عمل خواهد کرد)نمونه فایل Word همراه با Macroشکل 01 - فایل Word همراه با هشدار امنیتی باز شده است اسم اصلی سند آلوده شده PAY09735746167553.doc می باشد که حاوی کد مخرب VBA در یک ماکرو می باشد. ( VBA مخفف Visual Basic for Applications هست). شکل 01 محتوای درون یک فایل Word را نشان می دهد.به محض اینکه کاربر بر روی Enable Editing کلیک کند، کد VBA مخرب به طور خودکار با استفاده از تابع "autoopen" اجرا می شود، همانطور که در شکل 1 نشان داده شده است. بعد از مدتی، مقدار بسیار فراوانی از کد را در PowerShell تولید میکند و سپس آن را اجرا می کند. همانطور که در شکل 2 نشان داده شده است، این کد تولید شده توسط PowerShell، فایل واقعی Emotet را از چندین لینک (URL) مختلف که به طور پویا تولید می شوند را دانلود می کند.شکل 02 - کد پاورشل بدافزار Emotet را دانلود و اجرا می کند بدافزار Emotet در آدرس %LocalAppData% جای می گیردفایل دانلود شده، نرم افزار مخرب Emotet است. نامی که از آن استفاده می کند یک رشته ی تصادفی است و در پوشه ی %temp% قرار دارد. هنگامی که اجرا می شود، مسیرِ فایلِ پراسسِ فعلی را مقایسه می کند و همان آدرس %LocalAppData%\culturesource\culturesource.exe نباشد، فایل exe اصلی را از پوشه ی %temp% به پوشه فوق منتقل می کند (حتی اگر پوشه ای وجود نداشته باشد، پوشه را ایجاد می کند) و آن را به اسم culturesource.exe تغییر نام می دهد. کلمه "culturesource" یک رشته ثابت است که از حافظه آن رمزگشایی شده است.در زیر کد قطعه کد ASM مربوطه درج شده است. این برنامه API SHFileOperationW را برای اجرای فایل فراخوانی می کند که در یک تابع فراخوانی Timer فراخوانی می شود که بعداً درباره آن صحبت خواهم کرد.کد :[.....]002FFB9A loc_2FFB9A: ; CODE XREF: sub_311D78+1Fj002FFB9A call ds:memset002FFBA0 call sub_2F1250 ;;;CreateDirectoryW002FFBA5 push 1Eh002FFBA7 lea eax, [ebp-20h]002FFBAA push edi002FFBAB push eax002FFBAC call ds:memset002FFBB2 add esp, 18h002FFBB5 mov dword ptr [ebp-1Ch], 1 ;; FO_MOVE002FFBBC lea eax, [ebp-20h] ; SHFILEOPSTRUCTA structure002FFBBF mov dword ptr [ebp-18h], offset unk_3083F8 ; ; current file path in %temp% folder.002FFBC6 mov esi, 0E14h002FFBCB mov dword ptr [ebp-14h], offsetword_307EE0 ; %LocalAppData%\culturesource\culturesource.exe.002FFBD2 mov [ebp-10h], si002FFBD6 push eax002FFBD7 call ds:SHFileOperationW002FFBDD test eax, eax002FFBDF jnz short loc_2FFBEA002FFBE1 cmp [ebp-0Eh], edi002FFBE4 jz loc_2FFCA0[.....]در نهایت، API CreateProcessW را برای اجرای فایل culturesource.exe فراخوانی می کند و پس از آن از پراسس فعلی خارج می شود.تکنیک ضد-تحلیلسپس، این بدافزار، پراسس (بهتر است بگوییم فرآیند) دوم culturesource.exe را آغاز می کند که در آن، توابع مهم Emotet نگهداری و اجرا می شوند. هنگامی که culturesource.exe دوم به طور معمول اجرا می شود، پراسس اولیه از کار می افتد. پس از آن Emotet به صورت پویا کد و اطلاعات را در تعدادی از بلوک های حافظه منتشر می کند که پس از آن، کار Emotet را پیگیری می کند.اکثر توابع به چند قسمت تقسیم می شوند. من یکی را انتخاب میکنم تا به شما نشان دهم که چگونه از این ترفند استفاده میکند. شکل 3 نشان می دهد که تابع نرمال و معمولی به هفت بخش تقسیم شده است که همه آنها با استفاده از دستورالعمل "jmp" به یکدیگر متصل می شوند تا مشکل تجزیه و تحلیل کد را افزایش دهند.شکل 03 - یک تابع به هفت بخش تقسیم می شودتمام رشته ها رمزگذاری می شوند و سپس قبل از استفاده در زمان اجرا رمزگشایی می شوند.تمام API های وارد ( Import ) شده نیز رمزگذاری شده اند و همگی در ابتدای اجرا نیز رمزگشایی می شوند. شکل 4 یک قطعه کد را نشان می دهد که یک رشته ی "user32.dll" را از "unk_3031F0" رمزگشایی می کند. سپس API LoadLibraryW را برای بارگیری "user32.dll" فراخوانی می کند و بعد از آن، از اطلاعاتِ API رمزگشایی شده برای پیدا کردن API های صادر شده در ماژول "user32.dll" استفاده می کند.شکل 04 - رشته رمزنگاری شده و API بارگذاری شده از user32.dll تابع TimerEmotet همچنین از یک رویداد تایمر ویندوز برای اجرای کدِ خود استفاده می کند. در تجزیه و تحلیل قبلی من ، از تابع "WindowProc" برای ضبط یک پیام تایمر به منظور انجام فعالیت های مخرب استفاده نمود اما در این نسخه کمی متفاوت است. در اینجا، مستقیماً از تابع Timer Callback استفاده می کند.هنگامی که API SetTimer را فراخوانی می کند، فاصله زمانی ( Interval Time ) را روی 1000 تنظیم میکند. این به این معنی است که تابع callback در هر 1000 میلی ثانیه یک بار فراخوانی می شود. در زیر، شبه کد این تابع فراخوانی آورده شده است:void __stdcall Timer_fun(int a1, int a2, int a3, int a4){ unsigned int v4; // esi@6 int v5; // eax@6 unsigned int v6; // esi@15 int v7; // eax@15 int v8; // esi@16 int v9; // eax@16 if ( qword_307C94 <= (unsigned __int64)(unsigned int)GetTickCount() ) { switch ( HIDWORD(qword_307C94) ) { مورد شماره 1 : HIDWORD(qword_307C94) = 0; if ( !sub_2F6BA0() || !sub_2F7170() || check_if_process_is_in_correct_path() ) goto LABEL_7; v4 = GetTickCount() % 0xBB8u; v5 = GetTickCount(); HIDWORD(qword_307C94) = 2; LODWORD(qword_307C94) = v4 + v5 + 3000; break; مورد شماره 2 : HIDWORD(qword_307C94) = 0; if ( sub_2F8300() && sub_2F8430() && sub_2F8B20() && sub_2F95B0() && sub_2FA320() && sub_2FB750() && sub_2F68D0() ) { dword_307CC4 = (int)&unk_3080E8; dword_307CC8 = (int)&unk_303430; dword_307CCC = 106; v6 = GetTickCount() % 0xBB8u; v7 = GetTickCount(); HIDWORD(qword_307C94) = 3; LODWORD(qword_307C94) = v6 + v7 + 3000; } else {LABEL_7: HIDWORD(qword_307C94) = 4; } break; مورد شماره 3 : HIDWORD(qword_307C94) = 0; v8 = GetTickCount(); v9 = sub_2FCB20(); HIDWORD(qword_307C94) = 3; LODWORD(qword_307C94) = v9 + v8; break; مورد شماره 4 : SetEvent(dword_304C0C); break; default: return; } }}در مورد شماره 0 (ظاهرا منظور نویسنده کد های قبل از مورد شماره 1 می باشد )، یکی از اهداف آن انتقال فرایند به موقعیت مورد نظر با نام فایل است که قبلا ذکر کردم. همچنین مشخصات نام کامپیوتر، سیستم فایل و پارتیشن ها را با نام Callback API GetComputerNameW و GetVolumeInformationW جمع آوری می کند. در ادامه این دو مجموعه ی داده را در کنار هم قرار می دهد و آنها را در یک متغیر گلوبال (و رایج) ذخیره می کند، که در سرور C & C ( یعنی دستور و کنترل - همان سرور مرکزیِ فرماندهی) به عنوان شناسه برای این قربانی ذخیره و استفاده می شود. این شناسه بعداً در بسته هایی که با سرور فرماندهی در ارتباط هستند مورد استفاده قرار می گیرد. بدافزار Emotet سپس میزان CRC32 ی فایل EXE خود را محاسبه می کند و آن را در یک متغیر گلوبال دیگر ذخیره می کند که در هنگام ارسال اولین بسته به سرور فرماندهی مورد استفاده قرار می گیرد. من در مورد آن در بخش بعدی صحبت خواهم کرد. ( توضیح ، crc32 یک تابع تشخیص خطا است که از الگوریتم CRC32 برای تشخیص تغییرات بین اطلاعات مبدا و هدف - source and target data - استفاده می کند - مانند تغییر در سایز یا محتوای بسته یا فایل ارسالی)شکل 05 - تصویری از سرویس culturesource در ویندوز قربانی از مورد شماره 1 برای راه اندازی تعدادی از ماژول های DLL و رمزگشایی توابع API صادر شده منجمله "urlmon.dll"، "userenv.dll"، "wininet.dll" و غیره که Emotet از آنها بهره می برد، استفاده می شود.مورد شماره 2 شاخه اصلی است. داده ها را از سیستم قربانی جمع آوری می کند و این داده ها را به سرور فرماندهی ( که بصورت عمومی با عنوان C&C server برای روتکیت ها و بدافزار ها شناخته می شود) ارسال می کند و همچنین دستورات آن سرور را نیز اجرا می کند.ارتباط با سرور فرماندهی C&Cاین بدافزار چندین تابع API را برای جمع آوری اطلاعات فرا می خواند. به عنوان مثال، "RtlGetVersion" را برای به دست آوردن اطلاعات نسخه ویندوز، و "GetNativeSystemInfo" را برای جمع آوری اطلاعات سیستم و پردازنده فراخوانی می کند. همچنین مقدار DWORD درون افست 0x1D4 که در PEB قرار دارد و به عنوان SessionID تعریف می شود را برمیدارد. (برداشتن از فعل pick می آید و به معنای حذف کردن نیست. به معنای استفاده کردن است) - (وازه PEB در مبحث دیباگ ویندوز خلاصه ی عبارت Process Enviroment Block یعنی بلوک محیط پراسس می باشد) بدافزار Emotet همچنین با فراخوانی APIs CreateToolhelp32Snapshot، Process32FirstW و Process32NextW به جمع آوری نام پراسس های در حال اجرا ادامه می دهد. گام بعدی این است که همه داده های جمع آوری شده را در یک ساختار قرار داده و سپس کل مجموعه ی داده ها را رمزگذاری کند. شکل 6 نشان می دهد که داده ها در یک ساختار کپی شده اند. مقادیر درون مستطیل قرمز پرچم هایی (Flag) هستند تا نشان دهند که اطلاعات زیر چه اطلاعاتی هستند. رشته ی پشت "12" ، نام کامپیوتر است. اطلاعات پشت "18" اطلاعات سیستم قربانی است و بایت بعد از "20" همان SessionID مربوط به PEB است. مقدار DWORD در کنار '2D' مقدار CRC32 در Emotet می باشد، رشته زیر '32' لیستِ اسم پراسس ها است که جمع آوری شده است و مقدار با خط زیر آبی طول داده های زیر است که از نوعی از کدگذاری utf-8 استفاده می کند.سرور C&C قابلیت این را دارد که بفهمد آیا روی سیستم قربانی ابزارهای تجزیه و تحلیل همانند Wireshark ، دیباگر هایی مانند ollydbg و windbg و ... وجود دارند یا خیر. اگر وجود داشته باشند سرور به داده های دریافت شده از سیستم قربانی پاسخ نخواهد داد تا از احتمال افشای بدافزار بکاهد.شکل 06 - داده ها را در یک ساختار قرار می دهد (منظور این است که ساختاری انحصاری ایجاد میکند و داده ها را آنجا جمع می کند)بدافزار، مجموعه اطلاعات را پس از رمزگذاری با استفاده از Base64 کدگذاری (encode) می کند. علاوه بر این، پس از کد Base64 را به عنوان مقدار کوکیِ یک هدر HTTP مخفی می کند. شما می توانید کد Base64 را در شکل 7 مشاهده کنید.شکل 07 - ارسال دیتای جمع آوری شده به سرور فرماندهی C&C در شکل 7 همچنین می توانید سرور C & C به بعضی از داده ها پاسخ داده است. هنگامی که دستگاه برای اولین بار از سرور C & C اطلاعات دریافت می کند، یک ورودی خودکار به نام "cultruesource" تحتِ زیر-کلیدِ "HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run" در رجیستری سیستم ایجاد می کند. در حال حاضر دو راه برای شروع Emotet، یعنی سرویس سیستم و اجرای خودکار ( Auto Run ) در رجیستری سیستم وجود دارد. در شکل 8 و 9 شما می توانید اطلاعات بیشتری در مورد اضافه کردن ورودیِ اجرایِ خودکار ( Autorun ) به رجیستری مشاهده کنید.شکل 08 - اضافه کردن ورودیِ اجرایِ خودکار ( Autorun ) به رجیستری شکل 09 - تصویری از ورودیِ اجرایِ خودکار به نام "culturesource" در رجیستری با رمزنگاری داده های دریافت شده، من می توانم فایل PE را دریافت کنم، مطابق آنچه که در شکل 10 مشاهده می کنید. از این تحلیل من، متوجه شدم که فایل PE رمز گشایی شده یک بدافزار Emotet دیگر است که این فقط برای ارتقاء خود بدافزار از آن استفاده می شود.شکل 10 - داده های رمزگشایی شده ای که از سرور فرماندهی C&C دریافت شده اند. تا به اینجا، این تحلیل من برای این نوع جدید (از بدافزار) است. من همچنان برای نظارت بر این کمپین Emotet در خصوص توابع و تغییرات اضافی ادامه خواهم داهمانند نسخه قبلی بدافزار، لیست IP سرورهای فرماندهی C&C در حافظه ی آن Hardcode شده و در یک متغیر گلوبال ذخیره می شود. هر جفت آی پی و پورت از 8 بایت حافظه استفاده می کند و در مجموع 62 سرور فرماندهی C&C وجود دارد. لیست آی پی و پورت Hardcode شده ی این نسخه از بدافزار تشریح شده است:01> 71.91.161.118 : 2102> 70.164.196.211 : 99503> 175.101.79.120 : 8004> 187.233.136.39 : 14305> 5.107.250.192 : 99506> 50.224.156.190 : 808007> 5.107.161.71 : 99308> 186.179.243.7 : 99509> 71.240.202.13 : 44310> 190.215.53.85 : 8011> 133.242.164.31 : 708012> 115.71.233.127 : 44313> 69.136.227.134 : 2214> 216.49.114.172 : 44315> 153.121.36.202 : 708016> 181.119.30.27 : 99517> 70.164.196.211 : 2018> 98.157.215.153 : 8019> 62.75.187.192 : 808020> 189.234.165.149 : 808021> 154.72.75.82 : 2022> 45.123.3.54 : 44323> 217.13.106.160 : 708024> 75.99.13.124 : 708025> 198.74.58.47 : 44326> 69.195.223.154 : 708027> 172.114.175.156 : 808028> 73.124.73.90 : 2029> 74.80.16.10 : 8030> 24.11.67.222 : 44331> 181.143.53.227 : 2132> 173.76.44.152 : 2033> 208.78.100.202 : 808034> 47.44.164.107 : 99335> 45.63.17.206 : 808036> 50.31.0.160 : 808037> 62.75.191.231 : 808038> 98.142.208.27 : 44339> 78.187.172.138 : 708040> 67.205.149.117 : 44341> 98.186.90.192 : 44342> 5.230.147.179 : 808043> 50.240.162.242 : 99544> 94.76.200.114 : 808045> 178.62.37.188 : 44346> 83.222.124.62 : 808047> 70.184.83.93 : 2048> 173.255.196.209 : 808049> 208.107.230.235 : 2050> 186.179.80.102 : 44351> 72.95.118.97 : 2152> 162.250.19.59 : 8053> 134.129.126.86 : 44354> 69.198.17.7 : 808055> 8.17.46.42 : 5356> 70.90.183.249 : 708057> 47.149.54.132 : 808058> 200.116.160.31 : 8059> 175.143.84.108 : 5000060> 178.254.31.162 : 808061> 175.110.104.150 : 2062> 211.115.111.19 : 443راهکار :این سند مخرب نرم افزار Word به عنوان "VBA / Agent.AFD! tr.dldr" شناخته شده است و فایل اصلی Emotet توسط سرویس آنتی ویروس FortiGuard به عنوان "W32 / Emotet.GBUH! tr" شناخته شده است.ما همچنین یک امضا IPS به نام "Emotet.Botnet" برای تشخیص ترافیک بین سرور فرماندهی C&C و قربانی ایجاد کرده ایم.لینک های دانلود Emotet نیز توسط سرویس FortiGuard WebFilter به عنوان "وب سایت های مخرب" دسته بندی شده اند.لینک ها :"hxxp://muathangnhom.com/6DOpkmOL9_yfO""hxxp://gmcvietnam.vn/abMbIaTzHSDkAq""hxxp://hugoclub.sk/yCq4xkYzeqAJK_v""hxxp://foreprojects.webedge.com.ng/Lc3UYXyQixr_Dp""hxxp://evonline.liceoriosdechile.com/NpDgofVhpankbq_I8AaJbzQj"مشخصات SHA256 نمونه :فایل WORD به نام PAY09735746167553.doc :1194bab2c4a8e63e59ef01220ebe8e4d3511b12a16da30e713c2fbee6c2cb520فایل EXE اصلی دانلود شده که همان بدافزار EMOTET می باشد:7C5CDC5B738F5D7B40140F2CC0A73DB61845B45CBC2A297BEE2D950657CAB658منبع : https://www.fortinet.com/blog/threat-research/analysis-of-a-fresh-variant-of-the-emotet-malware.html