۶۰ ثانیه – 60Sanieh

تحلیل و بررسی Dino آخرین بدافزار جاسوسی گروه فرانسوی در ایران

در این مقاله بصورت تخصصی به بررسی عملکرد بدافزار Dino پرداخته شده است. لازم به ذکر است که هرگونه کپی برداری غیرمجاز ، خلاف قوانین بوده و پیگرد قانونی دارد ، لذا در صورت استفاده از این متن حتماً منبع را ذکر نمایید.

بدافزار جاسوسی Dino جدیدترین روش حمله به منابع مختلف کشورهای سراسر جهان هست که در ماه ژوئن کشف شد. Dino نوعی درب پشتی (Backdoor) است. این بدافزار به گروه مجرم سایبری مزرعه حیوانات (Animal Farm espionage group) نسبت داده‌شده است که دیگر بدافزارهای جاسوسی مانند Casper، Bunny و Barber را ساخته‌اند.

به نقل از محققان این بدافزار دو سال در حال جاسوسی در ایران و منابع این کشور (مراکز علمی و صنعتی کشورمان: وزارت امور خارجه، دانشگاه علم و صنعت ایران، شرکت ارتباطات زیرساخت، سازمان پژوهش‌های علمی و صنعتی، دانشگاه امام حسین(ع) ، دانشگاه مالک اشتر و …) و همچنین در کشور سوریه مشاهده ‌شده است.

نمونه‌هایی از Dino در سال ۲۰۱۳ علیه ایران استفاده شد(بر اساس شواهد سازمان امنیت اطلاعات کانادا (Canada’s CSE) اکثریت حمله‌ها در سال ۲۰۱۳ به سمت ایران بوده است. ). منبع اصلی این بدافزار نامعلوم است. با نگاهی به دستورات اجرایی آن می‌توان نتیجه‌گیری کرد که احتمالاً هدف اصلی بدافزار سرقت فایل از سیستم‌های نقض شده است. باینری اصلی آن “Dino.exe” نام دارد و نویسنده این فایل را پنهان نکرده است. Dino یک درب پشتی پیچیده مادولار (modular) می‌باشد. در نوآوری‌های فنی این بدافزار، یک فایل سیستم custom وجود دارد که دستورات را پنهانی اجرا می‌کند و یک مادول پیچیده task-scheduling نیز دیده می‌شود که مشابه به دستورات یونیکس “cron” می‌باشد. کدهای باینری Dino به هکرها اجازه می‌دهد تا بدافزار را ساکن در نقاط مختلف دنیا نشان بدهند. در باینری آن پیام‌های خطای verbose متعدد وجود دارد که انتخاب خاص لغت گذاری نویسنده دیده می‌شود و به نظر می‌آید نویسنده فرانسوی است.

 

مبانی اولیه ساختار دینو :

Dino با زبان C++ نوشته‌شده است و یک معماری منظم verbose دارد. لیست ذیل مادول ها و اسم آنان را در باینری بدافزار نشان می‌دهد.

 

هدف مادول اسم مادول
Encrypted on-disk copy for Dino modules PSM
Configuration storage CORE
Task scheduler CRONTAB
File upload and download manager FMGR
Command execution manager CMDEXEC
Storage queue for commands to execute CMDEXECQ
Storage for environment variables ENVVAR

Dino با یک ساختار داده‌ای custom به نام “DataStore” کار می‌کند. همه مادول های Dino در این ساختار ذخیره‌شده است. DataStore یک نقشه کلیدهای رشته‌ها است که ۸ نوع ارزش‌دارند (از جمله 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 % number of buckets”

for ( current_fie1d = (datastore->array_of_buckets

+ ۴ * (hash % 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:۵۵۲۳F782 QWORD
InitialWaitDone:۰۰۰۰۰۰۰۱ DWORD
InteractiveDelay:۰۰۰۰۰۰۰۵ DWORD
MaxNothingSaidCount:۰۰۰۰۰۰۷۸ DWORD
InstallDate: ۵۵۲۳F782 QWORD
fields:۷۸۵۳۷۸۴۴…[REDACTED]…۶۶B3900 BYTES
recID:۱۱۱۷۳-۰۱-PRS WIDESTR
Version:۱.۲ WIDESTR
BD_Keys: ۴D41474943424F58…[REDACTED]…۹EB3506 BYTES
CC_Keys: ۴D41474943424F58…[REDACTED]…۰۰۰۰۰۰۰ BYTES
MaxDelay:۰۰۰۰۰E10 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:۵CC33097FB72D001 BYTES
CC:۰۰۰۰۶۴F7-72E4-3F7D-C817-474D-A9BDBDF7 STR
DaysOfLife:۰۰۰۰۰۰۰۰ DWORD
GUID:۱۲FEB4A9EEDEE411B283000C29FD2872 BYTES
InitialDelay:۰۰۰۰۰۰۰۰ DWORD
now:۵۵۲۳F78E QWORD
hash:A88E8181CA5CE35AE70C76145DFB820D BYTES
InitialCommands:۷۸۵۳۷۸۴۴…[REDACTED]…۰۰۰۰۰۰ BYTES
xT0rvwz:DC188352A…[REDACTED]…۰۰۰۰۰ BYTES
tr4qa589:K/[RAFtIP?ciD?:D STR
jopcft4T:a.ini WIDESTR

اکثر اسامی فایل‌ها به‌راحتی قابل‌درک است اما چند مورد ذیل نیاز به توضیح دارد:

recID: باینری‌های این گروه دارای یک شناسه است که ارزش آن ظاهراً هدف را شناسایی می‌کند. برای مثال “۱۱۱۷۳-۰۱-PRS“. معنای PRS در اینجا معلوم نیست.

ComServer: این کلیدها دارای URL های سرورهای C&C هستند.

Version: ورژن کد Dino را نشان می‌دهد.

کلیدهای BD و CC: دارای کلیدهای رمزنگاری‌شده هستند که ارتباطات بین شبکه و سرورهای C&C را رمزنگاری می‌کنند. ارزش‌های آنها بالغت “Magicbox” شروع می‌شود.

آخرین کلیدها (۳ عدد) با اسامی obfuscated ((“xT0rvwz”, “tr4qa589” and “jopcft4T” نشان داده می‌شوند و پارامترهای سیستم فایل custom در آنها ذخیره‌شده است .

دستورات :

جدول زیر لیست دستورات قابل اجرا توسط باینری Dino را نمایش میدهد که هر یک ممکن است یک یا چند ارگومان داشته باشند.

Purpose Command
Retrieve reconnaissance information from the machine sysinfo
Uninstall Dino using the custom file system (see ramFS description below for details) killBD
Execute Windows batch command passed as a parameter !
Change the current work directory cd
Retrieve the current work directory path pwd
List files in a given directory with various additional information dir
Set or remove environment variables stored in the ENVVAR module set
Display or update module content conf
Search for files whose names match given patterns. The files found are packed in an archive, which is then scheduled for upload to the C&C using the FMGR module. search
Create an archive from given file paths archive
Unpack an archive to a given location unarchive
Schedule a file transfer to the C&C using the FMGR module download
Remove the next file transfer scheduled in the FMGR module cancel
Remove all scheduled file transfers in the FMGR module cancelall
Schedule a command to be executed at a certain time by the CRONTAB module (see CRONTAB description below for details) cronadd
List registered entries in the CRONTAB module cronlist
Remove an entry in the CRONTAB module crondel
Schedule a wake-up of the malware after a certain amount of time using the CRONTAB module wakeup
N/A: the command is actually not implemented restart
Display the public IP of the infected machine showip
Display information about the currently used C&C server cominfos
Display information about all known C&C servers comallinfos
Download a file from the currently used C&C server onto the machine wget
Delay the de-installation of the malware, if scheduled delayttk

یکی از دستورات مهم در این بدافزار جستجو (search) است که به مجرم اجازه می‌دهد که فایل‌ها را خیلی دقیق جستجو کند. بطور مثال میتوان فایل های با پسوند خاص (مثلا *.doc) را جستجو نمود یا فایل ها بزرگتر از مثلا ۱۰kilobyte که طی ۵ روز پیش بازبینی شده اند را جستجو کرد.

در زمان 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” ذخیره می‌گردد. در زمان بازگشایی رمز در حافظه به‌عنوان لیست لینک شده اشیا در تکه‌های حافظه ۵۱۲ بیتی ذخیره می‌گردند که هر یک از تکه‌ها جداگانه با کلید RC4 رمزگذاری شده‌اند. در زمان جستجو برای یک فایل در RamFS، هر تکه بازگشایی، پروسه و مجدداً رمزنگاری می‌شود. درنتیجه بازمانده RamFS به‌ندرت در زمان استفاده یافت می‌گردد.

مشخصات مهم این سیستم فایل به شرح ذیل است.

  • اسامی و محتوای فایل به Unicode رمزگذاری می‌شود.
  • طول اسم فایل به ۲۶۰ کاراکتر محدود می‌شود.
  • در زمان بازگشایی رمز محتوای فایل به‌صورت تکه‌های ۵۴۰ بیتی ارائه می‌شود.
  • هیچ نوع metadata با فایل‌ها مرتبط نمی‌شود.

به دلیل اینکه هیچ سیستم فایلی در ساختارهای حافظه پیدا نشد که با این سیستم و مشخصات RamFS هماهنگ باشد، محققان اعتقاددارند که این بدافزار توسط گروه مزرعه حیوانات ساخته‌شده است. کدهای موجود در بدافزار در زمان مقایسه با دیگر بدافزارهای ساخته‌شده توسط این گروه تشابه‌های زیادی دیده می‌شود. Dino توسط RamFS با دستور “killBD” از روی سیستم پاک می‌گردد.

چندین فرمان که در Dino در محتوای RamFS قابل‌اجرا است به شرح ذیل می‌باشد.

معنی فرمان
Change the current work directory on the real file system CD
N/A: the command is actually not implemented MD
Installation or de-installation of Dino, in Windows registry and/or as a service INSTALL
Extracts a file stored in ramFS onto the machine EXTRACT
Deletes a file stored on the machine DELETE
Executes a file stored in ramFS EXEC
Injects a file stored in ramFS into a running process INJECT
Sleeps for a given amount of time SLEEP
Terminates a running process KILL
N/A: the command is actually not implemented AUTODEL

روش استفادهء 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”, ۱, ۰, ۱);

}

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 برای اجرا در تاریخ ۷th April 2015 ساعت ۱۵:۴۴ برنامه‌ریزی‌شده است.

Visibility Command Count Local String Cron Id
regular wakeup -d * ۴۴ ۱۵ ۰۷ ۰۴ ۲۰۱۵ C1

هر ورودی با یک “Id” شناسایی می‌گردد که یک عدد incrementing hexadecimal است و با ۰xC0 شروع می‌شود. هدف فیلد Local نامشخص است و ارزش دیگر آن ممکن است “” باشد. پارامتر count تعداد اجرا فرمان‌ها را شمارش می‌کند. “” نشانگر این است که فرمان فقط یک‌بار اجرا می‌شود. فیلد 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 است.
  • سیستم فایل Dinocustom” است و RamFS در چند دراپر که توسط گروه مزرعه حیوانات استفاده می‌شود وجود دارد. در این باینری‌ها سیستم فایل به‌عنوان Persistant Payload عمل می‌کند. تصویر زیر فرمان‌های اجراشده توسط دراپرهای NBOT را در قالب RamFS نشان می‌دهد.
INSTALL -A “Net3D” -B “Net3d.exe” -D ”۳D 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 – ۱۸:۳۱:۱۴
Time to kill: N/A
Last launch : 04/01/2015 – ۱۹:۲۱:۴۴
Mode: N/A  |  Rights: Admin  |  UAC: No
ID: 4635BEF0-D89D-11E4-B283-000C-29FD2872
InstallAv: 0
Inj: Yes

همچنین به گفته توسعه گران فرانوسوی دو مورد ذیل شواهدی است که این برنامه توسط گروه مزرعه حیوانات نوشته‌شده است:

  • باینری دینو دارای منبع کد زبانی ۱۰۳۶ است. با این باینری نویسنده می‌تواند منابعی مانند منو، ایکن، اطلاعات ورژن را برای نقاط مختلف دنیا و زبان مربوط وارد برنامه کند. نویسنده لازم نیست دستی زبان را تعیین کند. Compiler دستگاه به‌طور خودکار این کار را انجام می‌دهد. کد ۱۰۳۶ برای زبان فرانسه تعیین‌شده است. دینو نمونه‌ای از باینری کد زبانی ۱۰۳۶ از گروه مزرعه حیوانات است.
  • باینری Dino با کتابخانه GnuMP به‌صورت استاتیک لینک شده است که برای استفاده از اعداد در الگوریتم‌های رمزنگاری می‌باشد. کد GnuMP دارای مسیرهای فایلی است که منبع آن دستگاه نویسنده بدافزار است.
….srcarithmetiquempnmul.c
….srcarithmetiqueprintfdoprnt.c
….srcarithmetiquempntdiv_qr.c
….srcarithmetiquempnmul_fft.c
….srcarithmetiquempnget_str.c

باینری Dino نشان می‌دهد که تلاش زیادی در توسعه ساختار داده‌های custom شده است و یستم فایل آن خانگی به نظر می‌رسد. همانند باینری‌های دیگر ساخته‌شده توسط گروه مزرعه حیوانات ، توسعه گران حرفه‌ای و مجرب می‌باشند. توسعه‌دهندگان اطلاعات کمی یا عدم علاقه به روش‌های ضد آنالیز نشان داده‌اند که برخلاف سیستم‌های کاسپر می‌باشد.

“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 %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 فراهم می‌کند. در این پیام‌ها تعداد زیادی خطاهای نوشتاری وجود دارد.

منبع : شرکت پارس فناوران خوارزم

دسته بندی ها:   PBDP, امنیت

دیدگاه ها