تحلیل و بررسی Dino آخرین بدافزار جاسوسی گروه فرانسوی در ایران
تحلیل و بررسی Dino آخرین بدافزار جاسوسی گروه فرانسوی در ایران
تحلیل و بررسی Dino آخرین بدافزار جاسوسی گروه فرانسوی در ایران: در این مقاله بصورت تخصصی به بررسی عملکرد بدافزار Dino پرداخته شده است. لازم به ذکر است که هرگونه کپی برداری غیرمجاز ، خلاف قوانین بوده و پیگرد قانونی دارد ، لذا در صورت استفاده از این متن حتماً منبع را ذکر نمایید.
بدافزار جاسوسی Dino جدیدترین روش حمله به منابع مختلف کشورهای سراسر جهان هست که در ماه ژوئن کشف شد. Dino نوعی درب پشتی (Backdoor) است. این بدافزار به گروه مجرم سایبری مزرعه حیوانات (Animal Farm espionage group) نسبت دادهشده است که دیگر بدافزارهای جاسوسی مانند Casper، Bunny و Barber را ساختهاند.
به نقل از محققان این بدافزار دو سال در حال جاسوسی در ایران و منابع این کشور (مراکز علمی و صنعتی کشورمان: وزارت امور خارجه، دانشگاه علم و صنعت ایران، شرکت ارتباطات زیرساخت، سازمان پژوهشهای علمی و صنعتی، دانشگاه امام حسین(ع) ، دانشگاه مالک اشتر و …) و همچنین در کشور سوریه مشاهده شده است.
نمونههایی از Dino در سال 2013 علیه ایران استفاده شد(بر اساس شواهد سازمان امنیت اطلاعات کانادا (Canada’s CSE) اکثریت حملهها در سال 2013 به سمت ایران بوده است. ). منبع اصلی این بدافزار نامعلوم است. تحلیل و بررسی Dino آخرین بدافزار جاسوسی گروه فرانسوی در ایران
با نگاهی به دستورات اجرایی آن میتوان نتیجهگیری کرد که احتمالاً هدف اصلی بدافزار سرقت فایل از سیستمهای نقض شده است. باینری اصلی آن “Dino.exe” نام دارد و نویسنده این فایل را پنهان نکرده است.
Dino یک درب پشتی پیچیده مادولار (modular) میباشد. در نوآوریهای فنی این بدافزار، یک فایل سیستم custom وجود دارد که دستورات را پنهانی اجرا میکند و یک مادول پیچیده task-scheduling نیز دیده میشود که مشابه به دستورات یونیکس “cron” میباشد. کدهای باینری Dino به هکرها اجازه میدهد تا بدافزار را ساکن در نقاط مختلف دنیا نشان بدهند.
در باینری آن پیامهای خطای verbose متعدد وجود دارد که انتخاب خاص لغت گذاری نویسنده دیده میشود و به نظر میآید نویسنده فرانسوی است.
مبانی اولیه ساختار دینو :
Dino با زبان C++ نوشتهشده است و یک معماری منظم verbose دارد. لیست ذیل مادول ها و اسم آنان را در باینری بدافزار نشان میدهد.
Dino
با یک ساختار دادهای custom به نام “DataStore” کار میکند. همه مادول های Dino در این ساختار ذخیرهشده است.
DataStore یک نقشه کلیدهای رشتهها است که 8 نوع ارزشدارند (از جمله integers, strings) این ساختار دادهای بر اساس جدول هش میباشد. برای به دست آوردن ارزش یک کلید باید هش کلید را از یک bucket محاسبه نمود
. هش (hash) بدافزار ارزش یک بیتی دارد که توسط یک سری عملیات XOR بر روی کلید محاسبهشده است و هر bucket یک لیست لینک دارای یک جفت کلید/ارزش را شروع میکند. کد زیر وظیفه بازیابی مقادیر مرتبط با یک کلید را نشان میدهد.
// Get the hash of the key to look for hash = 6×55; for ( i = arg_key_to_look_for; *i; key_char = *i ) { ++i; hash “= key_char; } // Look for the key in the linked list starting // at the index “hash {fea3c28d3890e38680ec32848aac0d612e51e58d6c76d9449e10e3199002478e} number of buckets” for ( current_fie1d = (datastore->array_of_buckets + 4 * (hash {fea3c28d3890e38680ec32848aac0d612e51e58d6c76d9449e10e3199002478e} datastore->number_of_buckets)); current_field; current_fie1d = (obj_datastore_fie1d *)current_field->next_fie1d ) { // True when the two strings are equals if ( !_stricmp((const char *)current_fie1d->key, arg_key_to_1ook_for) ) break; } |
اشیا DataStore میتواند بهصورت custom سری شود و با حرف “DxSx” شروع میشود.
این مورد در مادول PSM برای ذخیره محتویات مادول های Dino در فایلهای زمرگذاری شده استفاده میگردد. در زمان تغییر یافتن محتویات مادول در حافظه، مادول PSM خود را در DataStore زنجیره شده ذخیره میکند.
با ریست شدن بدافزار مادول از فایل desterilized شده و به حافظه لود میشود. کلید رمزگذاری فایل بر روی دیسک “ PsmIsANiceM0du1eWith0SugarInside” میباشد.
تنظیمات :
تنظیمات Dino در اصل در DataStore زنجیره شده و در یک فایل زیپ در آخر باینری ذخیره میشود. در زمان runtime این objectdeserialized میشود و در داخل مادول core ذخیره میشود. میتوان تنظیمات محتوای Dino را بافرمان “ conf –l CORE” لیست نمود.
در جدول زیر در هر سطر بصورت جداگانه نام هر کلید و مقادیر آن لیست شده است:
Started:5523F782 QWORD InitialWaitDone:00000001 DWORD InteractiveDelay:00000005 DWORD MaxNothingSaidCount:00000078 DWORD InstallDate: 5523F782 QWORD fields:78537844…[REDACTED]…66B3900 BYTES recID:11173-01-PRS WIDESTR Version:1.2 WIDESTR BD_Keys: 4D41474943424F58…[REDACTED]…9EB3506 BYTES CC_Keys: 4D41474943424F58…[REDACTED]…0000000 BYTES MaxDelay:00000E10 DWORD ComServer0:hXXp://www.azhar.bf/…[REDACTED]…/postal.php STR ComServer1:hXXp://www.rsvniima.org/…[REDACTED]…/din12/postal.php STR ComServer2:hXXp://www.azhar.bf/…[REDACTED]…/postal.php STR ComServer3:hXXp://www.rsvniima.org/…[REDACTED]…/din12/postal.php STR ComServer4:hXXp://dneprorudnoe.info//…[REDACTED]…/postal.php STR ComServer5:hXXp://dneprorudnoe.info//…[REDACTED]…/postal.php STR ComServer6:hXXp://dneprorudnoe.info//…[REDACTED]…/postal.php STR NextSendReceive:5CC33097FB72D001 BYTES CC:000064F7-72E4-3F7D-C817-474D-A9BDBDF7 STR DaysOfLife:00000000 DWORD GUID:12FEB4A9EEDEE411B283000C29FD2872 BYTES InitialDelay:00000000 DWORD now:5523F78E QWORD hash:A88E8181CA5CE35AE70C76145DFB820D BYTES InitialCommands:78537844…[REDACTED]…000000 BYTES xT0rvwz:DC188352A…[REDACTED]…00000 BYTES tr4qa589:K/[RAFtIP?ciD?:D STR jopcft4T:a.ini WIDESTR |
اکثر اسامی فایلها بهراحتی قابلدرک است اما چند مورد ذیل نیاز به توضیح دارد:
recID: باینریهای این گروه دارای یک شناسه است که ارزش آن ظاهراً هدف را شناسایی میکند. برای مثال “11173-01-PRS“. معنای PRS در اینجا معلوم نیست.
ComServer: این کلیدها دارای URL های سرورهای C&C هستند.
Version: ورژن کد Dino را نشان میدهد.
کلیدهای BD و CC: دارای کلیدهای رمزنگاریشده هستند که ارتباطات بین شبکه و سرورهای C&C را رمزنگاری میکنند. ارزشهای آنها بالغت “Magicbox” شروع میشود.
آخرین کلیدها (3 عدد) با اسامی obfuscated ((“xT0rvwz”, “tr4qa589” and “jopcft4T” نشان داده میشوند و پارامترهای سیستم فایل custom در آنها ذخیرهشده است .
دستورات :
جدول زیر لیست دستورات قابل اجرا توسط باینری Dino را نمایش میدهد که هر یک ممکن است یک یا چند ارگومان داشته باشند.
یکی از دستورات مهم در این بدافزار جستجو (search) است که به مجرم اجازه میدهد که فایلها را خیلی دقیق جستجو کند. بطور مثال میتوان فایل های با پسوند خاص (مثلا *.doc) را جستجو نمود یا فایل ها بزرگتر از مثلا 10kilobyte که طی 5 روز پیش بازبینی شده اند را جستجو کرد.تحلیل و بررسی Dino آخرین بدافزار جاسوسی گروه فرانسوی در ایران
در زمان startup دستورات پشت سرهم ذخیرهشده در فیلد “ InitialCommands” بدافزار در تنظیمات خود را اجرا میکند و در مثال زیر آنالیز شده است.
sysinfo cominfos !ipconfig /all !ipconfig /displaydns !tracert www.google.com |
این فرمانها یک عملیات شناسایی برای هکر است. اجرا توسط مادول CMDEXEC مدیریت میشود و فرمانها در یک صف در داخل مادول CMDEXECQ ذخیره میشوند. نتیجه به سرور C&C گزارش میشود.
پس از ارایه توضیحات در مورد مبانی Dino حالا بصورت عمقی تر به دو کامپوننت جذاب در آن میپردازیم. دو اجزا اصلی جالب در Dino وجود دارد، یک سیستم فایل custom استفادهشده توسط بدافزار و یک مادول CRONTAB که فایلها را schedule میکند.
RamFS: یک سیستم فایل موقتی
Dino دارای یک سیستم فایل custom بانام “RamFS” است که یک ساختار پیچیده دادهای برای ذخیره فایل در حافظه ارائه میدهد و نام هر فایل با نام آن در سیستم فایل یکی است. این سیستم یک سری فرمانهای custom دارد که آنها در فایلها ذخیرهشده و اجرا میگردند. محتوای ramFS در مرحله اول در تنظیمات Dino بهصورت رمزگذاری شده بانام کلید “ xT0rvwz” و کلید مربوط RC4 بانام “ tr4qa589” ذخیره میگردد. در زمان بازگشایی رمز در حافظه بهعنوان لیست لینک شده اشیا در تکههای حافظه 512 بیتی ذخیره میگردند که هر یک از تکهها جداگانه با کلید RC4 رمزگذاری شدهاند. در زمان جستجو برای یک فایل در RamFS، هر تکه بازگشایی، پروسه و مجدداً رمزنگاری میشود. درنتیجه بازمانده RamFS بهندرت در زمان استفاده یافت میگردد.
مشخصات مهم این سیستم فایل به شرح ذیل است.
- اسامی و محتوای فایل به Unicode رمزگذاری میشود.
- طول اسم فایل به 260 کاراکتر محدود میشود.
- در زمان بازگشایی رمز محتوای فایل بهصورت تکههای 540 بیتی ارائه میشود.
- هیچ نوع metadata با فایلها مرتبط نمیشود.
به دلیل اینکه هیچ سیستم فایلی در ساختارهای حافظه پیدا نشد که با این سیستم و مشخصات RamFS هماهنگ باشد، محققان اعتقاددارند که این بدافزار توسط گروه مزرعه حیوانات ساختهشده است. کدهای موجود در بدافزار در زمان مقایسه با دیگر بدافزارهای ساختهشده توسط این گروه تشابههای زیادی دیده میشود. Dino توسط RamFS با دستور “killBD” از روی سیستم پاک میگردد.
چندین فرمان که در Dino در محتوای RamFS قابلاجرا است به شرح ذیل میباشد.
روش استفادهء Dino از RamFS:
Dino از RamFS با دستور “killBD” از روی سیستم پاک میگردد. این فایل cleaner نام دارد و زمانی که بدافزار دستور “KillBD” را دریافت میکند اجرا میشود. کد مسئول اجرا فایل پاکسازی در تصویر ذیل قابلمشاهده است. این دستور اسم فایل را از تنظیمات Dino (“a.ini“) استخراج میکند، کلید بازگشایی رمز را از ramFS دریافت میکند و فایل را در فایل سیستم وارد میکند تا محتوای انرا اجرا کند. Verbosity پیام خطا مشخصکننده هدف کد است.
// Search for the cleaner file name in Dino configuration c1eaner_fi1e_naue = Datastore::SearchForKey(dino_config_datastore, k_cleaner_file_name); if ( cleaner_fi1e_nane && cleaner_file_nane->type == NIDESTR ) { // Search for the key to decrypt ramFS ranfs_crypto_key = Datastorez:SeerchForKey(dino_confi¢_datastore, k_renfs_crypto_key); if ( ranfs_crypto_key && ranfs_crypto_key->type == STR ) { if ( MountRamFS(.“) { ExecuteCleenerRemFS((int)&ver_remfs_obj); Datastorez:StoreVa1ue(v14, “results”, L”c1eaner executed, exiting”, e1); Datestorez:StoreValueFixedSize(arg_datestore, “destroyPSM”, 1, 0, 1); } else { Datastore::Storevalue(v11, “results”, L“Unable to mount cleaner RamFS, exiting‘, a1); } } else { Datastore::StoreValue(v10, “results”, L”No cleaner Passphrase Found, exiting”, a1); } } else { Datestore::StoreValue(a1, “results”, L”No cleaner Script Found, exiting“, a1); } |
پاککننده فایل دارای رشته (“INSTALL -A “wusvcd” -U”) میباشد و در زمان اجرا بدافزار را از سیستم پاک میکند. اسم ثبت dino در سیستم “wusvcd” میباشد. RamFS بهعنوان محتوای محافظتشده فایلها که باید در سیستم اجرا شود عمل میکند و یک محیط برای اجرا یکبارمصرف بشمار میآید. این حافظه ردپایی کمی از خود بجای میگذارد.
اجرای Task ها به سبک یونیکس:
فرمانهای (cronadd، cronlist، crondel) برای اضافه کردن، لیست کردن و برداشتن task های ثبتشده در مادول CRONTAB میباشند. Syntax مشخصشده برای scheduled tasks مشابه بهفرمان cron Unix است. به همراه فرمان اجرا یکرشته “ minute hour day month year dayofweek” وجود دارد که میتوان آنرا با “@reboot” برای هر استارتاپ جایگزین نمود. در مثال ذیل خروجی فرمان cronlist پس از فرمان wakeup برای اجرا در تاریخ 7th April 2015 ساعت 15:44 برنامهریزیشده است
.
Visibility | Command | Count | Local | String | Cron | Id |
regular | wakeup | -1 | -d | * | 44 15 07 04 2015 | C1 |
هر ورودی با یک “Id” شناسایی میگردد که یک عدد incrementing hexadecimal است و با 0xC0 شروع میشود. هدف فیلد Local نامشخص است و ارزش دیگر آن ممکن است “-1” باشد. پارامتر count تعداد اجرا فرمانها را شمارش میکند. “-1” نشانگر این است که فرمان فقط یکبار اجرا میشود. فیلد visibility مشخصکننده این است که آیا فرمان باید به C&C گزارش شود یا خیر. فرمان دیگر این فیلد Silent است.
چه شواهدی وجود دارد که نشان دهد Dino متعلق به گروه Farm است؟:
موارد ذیل شواهدی است که این برنامه توسط گروه مزرعه حیوانات نوشتهشده است.
- در شروع اجرا Dino اسم پروسه فعلی در مقابل اسم پروسههای مشابه بدافزار Sandbox تیک میخورد.
// Converts the file name to lowercase _wcs1wr_s(Fi1ename, ex104u); // Checks the file name against sandbox names if ( wcsstr(Fi1ename, L”k1avme.exe”) ) ExitProcess(e); if ( wcsstr(Fi1ename, L”myapp.exe”) ) ExitProcess(e); if ( wcsstr(Fi1ename, L”testapp.exe”) ) ExitProcess(e); result = (Dw0RD)wcsstr(Fi1ename, L”afyjevmv.exe”); if ( result ) ExitProcess(e); |
- یک تیک مشابه در نمونههای بدافزار Bunny (“klavme”, “myapp”, “TESTAPP” and “afyjevmv.exe”) و در اوایل مراحل اجرا آن وجود دارد.
- برای پنهانسازی خود Dino از برخی عملکردهای API کمک میگیرد که یکی از روشهای گروه مزرعه حیوانات میباشد. یک هش از اسم عملکرد محاسبه میگردد و برای پیدا کردن آدرس عملکردAPI استفاده میشود. الگوریتم این هش در کاسپر استفاده میشود که یک “ rotate-left (ROL) of 7 bits” و مختص عملیات XOR است.
- سیستم فایل Dino “custom” است و RamFS در چند دراپر که توسط گروه مزرعه حیوانات استفاده میشود وجود دارد. در این باینریها سیستم فایل بهعنوان Persistant Payload عمل میکند. تصویر زیر فرمانهای اجراشده توسط دراپرهای NBOT را در قالب RamFS نشان میدهد.
INSTALL -A “Net3D” -B “Net3d.exe” -D ”3D Network Service” -C “3D Network Service” -F |
- یک نشانگر دیگر که Dino توسط گروه مزرعه حیوانات نوشتهشده، این است که خروجی فرمان sysinfo آن مانند یک ورژن بهروزرسانی شده beacon کاشته شده در بدافزار snowball میماند.
sysinfo نمونه خروجی |
Login/Domain (owner): Administrator/JOHN (john) Computer name: JOHN Organization (country): (United States) RecId: 11173-01-PRS MaxDelay: 3600 Version: 1.2 OS version (SP): 5.1 (Service Pack 3) WOW64: No Default browser: firefox.exe IE version: Mozilla/4.0 (compatible; MSIE 7.0; Win32) First launch: 04/01/2015 – 18:31:14 Time to kill: N/A Last launch : 04/01/2015 – 19:21:44 Mode: N/A | Rights: Admin | UAC: No ID: 4635BEF0-D89D-11E4-B283-000C-29FD2872 InstallAv: 0 Inj: Yes |
همچنین به گفته توسعه گران فرانوسوی دو مورد ذیل شواهدی است که این برنامه توسط گروه مزرعه حیوانات نوشتهشده است:
- باینری دینو دارای منبع کد زبانی 1036 است. با این باینری نویسنده میتواند منابعی مانند منو، ایکن، اطلاعات ورژن را برای نقاط مختلف دنیا و زبان مربوط وارد برنامه کند. نویسنده لازم نیست دستی زبان را تعیین کند. Compiler دستگاه بهطور خودکار این کار را انجام میدهد. کد 1036 برای زبان فرانسه تعیینشده است. دینو نمونهای از باینری کد زبانی 1036 از گروه مزرعه حیوانات است.
- باینری Dino با کتابخانه GnuMP بهصورت استاتیک لینک شده است که برای استفاده از اعداد در الگوریتمهای رمزنگاری میباشد. کد GnuMP دارای مسیرهای فایلی است که منبع آن دستگاه نویسنده بدافزار است.
….srcarithmetiquempnmul.c ….srcarithmetiqueprintfdoprnt.c ….srcarithmetiquempntdiv_qr.c ….srcarithmetiquempnmul_fft.c ….srcarithmetiquempnget_str.c |
باینری Dino نشان میدهد که تلاش زیادی در توسعه ساختار دادههای custom شده است و یستم فایل آن خانگی به نظر میرسد. همانند باینریهای دیگر ساختهشده توسط گروه مزرعه حیوانات ، توسعه گران حرفهای و مجرب میباشند. توسعهدهندگان اطلاعات کمی یا عدم علاقه به روشهای ضد آنالیز نشان دادهاند که برخلاف سیستمهای کاسپر میباشد. تحلیل و بررسی Dino آخرین بدافزار جاسوسی گروه فرانسوی در ایران
“update ttk with negative of null value is forbidden, consider using killbd instead” “update not done, value wasn’t already in module and type misgelled or missed” “archive {fea3c28d3890e38680ec32848aac0d612e51e58d6c76d9449e10e3199002478e}s successfully created, but unable to schedule download.Try to manually download/erase it.” “Date is invalid ! Date Format is ddmmyyyy” “decyghering failed on gg” |
تمامی این پیامها کمک زیادی برای درک کارکرد بدافزار Dino فراهم میکند. در این پیامها تعداد زیادی خطاهای نوشتاری وجود دارد. تحلیل و بررسی Dino آخرین بدافزار جاسوسی گروه فرانسوی در ایران
پایان
هرگونه کپی برداری غیرمجاز ، خلاف قوانین بوده و پیگرد قانونی دارد ، لذا در صورت استفاده از این متن حتماً منبع را ذکر نمایید.