mownten

بلاگ شخصی سپهر هاشمی

mownten

بلاگ شخصی سپهر هاشمی

Mownten

بلاگ شخصی سپهر هاشمی

من اینجا همه چیز مینویسم.

  • ۰
  • ۰

نوسنده مقاله :  Xiaopeng Zhang (ترجمه به زبان اول شخص خواهد بود)

تاریخ انتشار : 29 بهمن 97

محل پژوهش و انتشار : نشریه مقالات پژوهشی تحلیل تهدیدات - مجموعه آزمایشگاه های FortiGuard

خبر وجود اعضای خانواده ی بدافزار Emotet چیز جدیدی نیست در واقع مربوط به چندین سال قبل است. ظاهرا قبلاً در سال 2017 این تیم پژوهشی یک فایل جاوااسکریپت مربوط به این بدافزار را رصد کرده که پس از تحلیل در دو بخش منتشر شده است. برای مشاهده گزارشات قبلی کلیک کنید : بخش یک و بخش دو

اخیرا آزمایشگاه FortiGuard یک نوع تازه از Emotet را کشف کرده است. این دفعه، در یک سند نرم افزار واژه پرداز Microsoft Word جاساز شده است. من هم یک تحلیل سریع روی آن انجام دادم و در این مقاله قصد دارم برای شما بیان کنم که چگونه بر روی دستگاه قربانی عمل خواهد کرد)

برای مشاهده ادامه مطلب کلیک کنید.

نمونه فایل Word همراه با Macro

شکل 01 - فایل word همراه با یک هشدار امنیتی باز شده است

شکل 01 - فایل Word همراه با هشدار امنیتی باز شده است

اسم اصلی سند آلوده شده PAY09735746167553.doc می باشد که حاوی کد مخرب VBA در یک ماکرو می باشد. ( VBA مخفف Visual Basic for Applications هست). شکل 01 محتوای درون یک فایل Word را نشان می دهد.

به محض اینکه کاربر بر روی Enable Editing کلیک کند، کد VBA مخرب به طور خودکار با استفاده از تابع "autoopen" اجرا می شود، همانطور که در شکل 1 نشان داده شده است. بعد از مدتی، مقدار بسیار فراوانی از کد را در PowerShell تولید میکند و سپس آن را اجرا می کند. همانطور که در شکل 2 نشان داده شده است، این کد تولید شده توسط PowerShell، فایل واقعی Emotet را از چندین لینک (URL) مختلف که به طور پویا تولید می شوند را دانلود می کند.

شکل 02 - دانلود بدافزار توسط کد تولید شده در پاورشل

شکل 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+1Fj

002FFB9A   call  ds:memset

002FFBA0   call  sub_2F1250      ;;;CreateDirectoryW

002FFBA5   push  1Eh

002FFBA7   lea   eax, [ebp-20h]

002FFBAA   push  edi

002FFBAB   push  eax

002FFBAC   call  ds:memset

002FFBB2   add   esp, 18h

002FFBB5   mov   dword ptr [ebp-1Ch], 1  ;; FO_MOVE

002FFBBC   lea   eax, [ebp-20h]         ; SHFILEOPSTRUCTA structure

002FFBBF   mov   dword ptr [ebp-18h], offset unk_3083F8 ; ; current file path in %temp% folder.

002FFBC6   mov   esi, 0E14h

002FFBCB   mov   dword ptr [ebp-14h], offset

word_307EE0 ;  %LocalAppData%\culturesource\culturesource.exe.

002FFBD2   mov   [ebp-10h], si

002FFBD6   push  eax

002FFBD7   call  ds:SHFileOperationW

002FFBDD   test  eax, eax

002FFBDF   jnz   short loc_2FFBEA

002FFBE1   cmp   [ebp-0Eh], edi

002FFBE4   jz    loc_2FFCA0

[.....]

در نهایت، API CreateProcessW را برای اجرای فایل culturesource.exe فراخوانی می کند و پس از آن از پراسس فعلی خارج می شود.

تکنیک ضد-تحلیل

سپس، این بدافزار، پراسس (بهتر است بگوییم فرآیند) دوم culturesource.exe را آغاز می کند که در آن، توابع مهم Emotet نگهداری و اجرا می شوند. هنگامی که culturesource.exe دوم به طور معمول اجرا می شود، پراسس اولیه از کار می افتد. پس از آن Emotet به صورت پویا کد و اطلاعات را در تعدادی از بلوک های حافظه منتشر می کند که پس از آن، کار Emotet را پیگیری می کند.

اکثر توابع به چند قسمت تقسیم می شوند. من یکی را انتخاب میکنم تا به شما نشان دهم که چگونه از این ترفند استفاده میکند. شکل 3 نشان می دهد که تابع نرمال و معمولی به هفت بخش تقسیم شده است که همه آنها با استفاده از دستورالعمل "jmp" به یکدیگر متصل می شوند تا مشکل تجزیه و تحلیل کد را افزایش دهند.

شکل 03 - یک تابع به هفت بخش تقسیم می شود

شکل 03 - یک تابع به هفت بخش تقسیم می شود

تمام رشته ها رمزگذاری می شوند و سپس قبل از استفاده در زمان اجرا رمزگشایی می شوند.

تمام API های وارد ( Import ) شده نیز رمزگذاری شده اند و همگی در ابتدای اجرا نیز رمزگشایی می شوند. شکل 4 یک قطعه کد را نشان می دهد که یک رشته ی "user32.dll" را از "unk_3031F0" رمزگشایی می کند. سپس API LoadLibraryW را برای بارگیری "user32.dll" فراخوانی می کند و بعد از آن، از اطلاعاتِ API رمزگشایی شده برای پیدا کردن API های صادر شده در ماژول "user32.dll" استفاده می کند.

شکل 04

شکل 04 - رشته رمزنگاری شده و API بارگذاری شده از user32.dll

تابع Timer

Emotet همچنین از یک رویداد تایمر ویندوز برای اجرای کدِ خود استفاده می کند. در تجزیه و تحلیل قبلی من ، از تابع "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

شکل 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

شکل 07 - ارسال دیتای جمع آوری شده به سرور فرماندهی C&C

در شکل 7 همچنین می توانید سرور C & C به بعضی از داده ها پاسخ داده است. هنگامی که دستگاه برای اولین بار از سرور C & C اطلاعات دریافت می کند، یک ورودی خودکار به نام "cultruesource" تحتِ زیر-کلیدِ "HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run" در رجیستری سیستم ایجاد می کند. در حال حاضر دو راه برای شروع Emotet، یعنی سرویس سیستم و اجرای خودکار ( Auto Run ) در رجیستری سیستم وجود دارد. در شکل 8 و 9 شما می توانید اطلاعات بیشتری در مورد اضافه کردن ورودیِ اجرایِ خودکار ( Autorun ) به رجیستری مشاهده کنید.

شکل 08

شکل 08 - اضافه کردن ورودیِ اجرایِ خودکار ( Autorun ) به رجیستری 

شکل 09

شکل 09 - تصویری از ورودیِ اجرایِ خودکار به نام "culturesource" در رجیستری

با رمزنگاری داده های دریافت شده، من می توانم فایل PE را دریافت کنم، مطابق آنچه که ​​در شکل 10 مشاهده می کنید. از این تحلیل من، متوجه شدم که فایل PE رمز گشایی شده یک بدافزار Emotet دیگر است که این فقط برای ارتقاء خود بدافزار از آن استفاده می شود.

شکل 10

شکل 10 - داده های رمزگشایی شده ای که از سرور فرماندهی C&C دریافت شده اند.

تا به اینجا، این تحلیل من برای این نوع جدید (از بدافزار) است. من همچنان برای نظارت بر این کمپین Emotet در خصوص توابع و تغییرات اضافی ادامه خواهم دا

همانند نسخه قبلی بدافزار، لیست IP سرورهای فرماندهی C&C در حافظه ی آن Hardcode شده و در یک متغیر گلوبال ذخیره می شود. هر جفت آی پی و پورت از 8 بایت حافظه استفاده می کند و در مجموع 62 سرور فرماندهی C&C وجود دارد. لیست آی پی و پورت Hardcode شده ی این نسخه از بدافزار تشریح شده است:

01> 71.91.161.118 : 21

02> 70.164.196.211 : 995

03> 175.101.79.120 : 80

04> 187.233.136.39 : 143

05> 5.107.250.192 : 995

06> 50.224.156.190 : 8080

07> 5.107.161.71 : 993

08> 186.179.243.7 : 995

09> 71.240.202.13 : 443

10> 190.215.53.85 : 80

11> 133.242.164.31 : 7080

12> 115.71.233.127 : 443

13> 69.136.227.134 : 22

14> 216.49.114.172 : 443

15> 153.121.36.202 : 7080

16> 181.119.30.27 : 995

17> 70.164.196.211 : 20

18> 98.157.215.153 : 80

19> 62.75.187.192 : 8080

20> 189.234.165.149 : 8080

21> 154.72.75.82 : 20

22> 45.123.3.54 : 443

23> 217.13.106.160 : 7080

24> 75.99.13.124 : 7080

25> 198.74.58.47 : 443

26> 69.195.223.154 : 7080

27> 172.114.175.156 : 8080

28> 73.124.73.90 : 20

29> 74.80.16.10 : 80

30> 24.11.67.222 : 443

31> 181.143.53.227 : 21

32> 173.76.44.152 : 20

33> 208.78.100.202 : 8080

34> 47.44.164.107 : 993

35> 45.63.17.206 : 8080

36> 50.31.0.160 : 8080

37> 62.75.191.231 : 8080

38> 98.142.208.27 : 443

39> 78.187.172.138 : 7080

40> 67.205.149.117 : 443

41> 98.186.90.192 : 443

42> 5.230.147.179 : 8080

43> 50.240.162.242 : 995

44> 94.76.200.114 : 8080

45> 178.62.37.188 : 443

46> 83.222.124.62 : 8080

47> 70.184.83.93 : 20

48> 173.255.196.209 : 8080

49> 208.107.230.235 : 20

50> 186.179.80.102 : 443

51> 72.95.118.97 : 21

52> 162.250.19.59 : 80

53> 134.129.126.86 : 443

54> 69.198.17.7 : 8080

55> 8.17.46.42 : 53

56> 70.90.183.249 : 7080

57> 47.149.54.132 : 8080

58> 200.116.160.31 : 80

59> 175.143.84.108 : 50000

60> 178.254.31.162 : 8080

61> 175.110.104.150 : 20

62> 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

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی