مقدمات تحلیل ایستای بدافزار – تحلیل مقدماتی چند بدافزار معروف

0 80
۵/۵ - (۳ امتیاز)

فهرست

تحلیل بدافزار یکی از زمینه های جذاب و بسیار تخصصی امنیت می باشد. یک متخصص تحلیل بدافزار حرفه ای علاوه بر تخصص بالایی که دارد، اگر فکر استخدام باشد دارای حقوق بسیاری خوبی نیز خواهد بود. به طور کلی متخصص تحلیل بدافزار حرفه ای، مخصوصا در کشورهای در حال توسعه به سختی پیدا می شود و بسیاری از شرکت ها به حداقل ها بسنده می کنند. در این مقاله قصد داریم در مورد تحلیل ایستای بدافزار یا Static Malware Analysis صحبت کنیم و چند نمونه را به صورت مقدماتی با هم انجام دهیم.

تحلیل ایستای بدافزار یا Static Malware Analysis

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

فایل اجرایی قابل حمل ویندوز یا Windows Portable Executable (PE)

شاید بتوان به راحتی ادعا کرد بیشترین تعداد بدافزارها برای سیستم عامل ویندوز توسعه داده می شوند. پر واضح است که برای تحلیل یک موجودیت باید ابتدا درک مناسبی از ساختار آن به دست آورد. در این قسمت قصد داریم مرور کوتاهی بر فرمت ویندوزی PE که نرم افزارهای مدرن ویندوزی مثل exe، dll و sys از آن استفاده می کنند بیندازیم. در یک فایل PE مواردی چون دستورالعمل های معماری x86، تصاویر (مثل آیکون ها)، متن یا رشته ها و فراداده یا متادیتا که یک برنامه برای اجرا به آن ها نیاز دارد وجود دارد. در شکل زیر ساختار یک فایل PE را مشاهده می کنیم:

pe file format thregence

البته این ساختار یک ساختار سطح بالا است که برای این مقاله کافی است (در ساختار یک فایل PE موارد دیگری همچون DOS Stub و Signature هم وجود دارد).
همانطور که در تصویر مشاهده می شود فایل PE شامل تعداد سرآیند یا هدر (Header) است که برای سیستم عامل مشخص می کند که فایل چگونه باید در حافظه بارگذاری شود. قسمت هایی نیز در آن وجود دارد که شامل داده های واقعی و قابل استفاده در برنامه هستند. بگذارید کمی در مورد هر قسمت صحبت کنیم.

سرآیند DOS یا DOS Header

این سرآیند از دهه ۸۰ که سیستم عامل داس شرکت مایکروسافت ارائه شده بود در فایل وجود دارد و در بحث فعلی ما نقش خاصی ندارد اما اگر بخواهیم توصیحی دهیم باید بگوییم این هدر جهت سازگاری فایل با سیستم عامل وجود دارد. منظور این است که برای مثال اگر شما فایلی را قصد داشته باشید در حافظه سیستمی بارگذاری کنید که ویندوز ۳.۱ یا قبل تر یا داس ۲ به بعد روی آن وجود داشته باشد، سیستم عامل سریعا متوجه می شود که فایل با سیستم عامل سازگار نیست و عموما می گوید: برنامه در مود داس نمی تواند اجرا شود (This program cannot be run in DOS mode).

سرآیند PE یا PE Header

این هدر خواص عمومی باینری را در خود دارد. این خواص شامل کد باینری، تصاویر و سایر خواص باینری می باشد. همچنین این سرآیند است که مشخص می کند باینری برای معماری ۳۲ بیتی توسعه داده شده است یا ۶۴ بیتی.
وقتی یک بدافزار تحلیل می کنید، سرآیند PE‌می تواند به شما بگوید توسعه دهنده بدافزار چه زمانی فایل را کامپایل کرده است. البته اگر توسعه دهنده حرفه ای بوده باشد این مقدار را با یک مقدار اشتباهی جایگزین می کند!

سرآیند Optional یا Optional Header

یک باینری دارای یک نقطه ورود یا Entry Point است. نقطه ورود مشخص می کند هنگامیکه فایل در حافظه بارگذاری شد اولین دستورالعملی که اجرا می شود کدام است. سرآیند Optional این مورد و مواردی همچون سایز داده ای که ویندوز هنگام بارگذاری PE در حافظه بارگذاری می کند، زیر سیستم ویندوز، GUI یا خط فرمان و موارد دیگری را در مورد برنامه مشخص می کند. منظور از زیرسیستم ویندوز مشخص کردن نسخه صحیح و اعشاری ویندوز است. برای مثال اگر ویندوز NT را در نظر بگیرید دارای یک نسخه Major و یک نسخه Minor است. این سرآیند این موارد را نیز مشخص می کند.

سرآیند Section یا Section Header

یک بخش یا سکشن در یک فایل PE شامل داده ای است که باید در هنگام بارگذاری برنامه به حافظه نگاشت شود یا شامل دستورالعمل هایی است که به سیستم عامل می گوید برنامه چگونه باید در حافظه بارگذاری شود. طبیعی است که این قسمت شامل یک دنباله از بایت ها می باشد که روال یا بخشی از روال بارگذاری را مشخص می کند. این سرآیند همچنین مشخص می کند که وقتی برنامه اجرا می شود چه مجوزی باید به قسمت های مختلف PE توسط سیستم عامل داده شود. برای مثال بخش text. که شامل کد x86 است نباید قابل نوشتن یا Writable باشد و فقط باید قابل خواندن یا Readable و اجرا شدن Executable باشد.

بخش text. یا text Section.

یک برنامه PE حداقل دارای یک بخش در سرآیند Section است که شامل کد x86 است که مجوز اجرا دارد یا Executable است. این بخش (بخش ها) را text. می گوییم. این بخش برای دیس اسمبل کردن و مهندسی معکوس یک بخش ویژه است.

بخش idata. یا idata Section.

این بخش شامل Import Address Table یا IAT است که این جدول شامل کتابخانه ها و توابعی است که Linker به صورت پویا آن ها را به برنامه اضافه می کند. IAT به همراه ساختار PE نقش مهمی در مهندس معکوس و تحلیل بدافزار بازی می کنند چرا که توابعی که فایل اجرایی حین اجرا فراخوانی می کند را مشخص می کنند.

بخش rsrc. یا rsrc Section.

این بخش بخشی از بخش داده یا Data به شمار می رود. بخش داده شامل بخش های مختلف دیگری همچون data. و rdata. نیز هستند اما بخش rsrc. به طور خاص شامل کاراکترهای قابل چاپ می باشد. باید بگوییم که اطلاعاتی که در این بخش وجود دارد جز مهم ترین اطلاعات در هنگام تحلیل بدافزار به شمار می روند. در ادامه همین مقاله و مقالات بعدی اطلاعاتی که می توان از این بخش استخراج کرد را بررسی می کنیم.

بخش reloc. یا reloc Section.

کد باینری یک فایل PE مستقل از مکان نیست. یعنی اگر از مکان مشخص شده در حافظه به مکان دیگری منتقل شود نمی تواند درست کار کند. بخش reloc. به کد کمک می کند تا بتواند در هنگام انتقال نیز به درستی کار کند.  بهتر است بگوییم به ویندوز می گوید که اگر کد به مکان دیگری منتقل شد عملیات ترجمه را (با کم و زیاد کردن آفست یا Offset) انجام بده. این بخش نیز یکی از بخش های بسیار مهم در مهندسی معکوس است.

تحلیل ایستای بدافزار در عمل: پیدا کردن تصاویر در بدافزار

شما وقتی قرار است یک فایل را باز کنید چقدر به فرمت و ساختار و چقدر به آیکون آن توجه می کنید؟!
فرض کنید در گوگل سرچ می کنید دانلود کتاب برنامه نویسی به زبان پایتون نوشته دایتل. وارد سایتی می شوید و در قسمتی از سایت یک لینک برای دانلود فایل وجود دارد. لینک را که میبینید سریع روی آن کلیک کرده و آن را دانلود می کنید. به قسمت فایل های دانلودی سیستم عامل خود می روید و میبینید که فایلی که دانلود شده حاوی آیکون یکی از برنامه های باز کردن فایل های PDF مثل Adobe Acrobat است. سریع روی آن کلیک می کنید تا خواندن را شروع کنید. اما بعد از چند لحظه متوجه می شوید فایل شما باز نشد و گویی سیستم عامل مشغول انجام کار دیگری است. ممکن است فکر کنید فایل خراب است. آن را حذف می کنید اما کار از کار گذشته است! شما گول خورده اید! فایلی که دانلود کرده اید تنها آیکون آن آیکون PDF بوده اما خودش یک فایل اجرایی (مثلا ویروس) بوده است.
در این قسمت قصد داریم تصاویر استفاده شده در یک بدافزار واقعی را بازیابی کنیم (این عمل به ما کمک می کند که تکنیک مورد استفاده توسط هکر برای اغوای کاربران و… را متوجه شویم). همچنین اگر در ابتدا مطمئن نباشیم که فایل یک بدافزار است می توان با بررسی تصاویر در کنار عملکرد آن (تحلیل پویا) سرنخ هایی دریافت کنیم. بدافزار مورد نظر ما بدافزار fakepdfmalware.exe است. برای بازیابی تصاویر داخل آن از ابزار wrestool به همراه icotool استفاده می کنیم. این دو ابزار به صورت پیش فرض در توزیع های مختلف لینوکس همچون  کالی لینوکس و پروت نصب هستند. بدفزار fakepdfmalware.exe کاربر را با استفاده از آیکون Adobe Acrobat اغوا می کند.
ابزار wrestool یک فایل اجرایی ویندوزی دریافت کرده و منابع موجود در آن مثل تصاویر را استخراج می کند. این ابزار از بخش rsrc. فایل PE استفاده می کند. حال برویم سراغ اصل مطلب:

$ wrestool -x fakepdfmalware.exe --output=.

سوییچ x در این ابزار عملیات استخراج یا Extract را انجام می دهد. درواقع با استفاده از بخش rsrc. منابع موجود در باینری را استخراج می کند. حال اگر به مکانی که برای خروجی مشخص کرده اید (ما در این مثال . یعنی Working Directory را انتخاب کرده ایم) بروید میبینید که منابعی ایجاد شده اند. حال با ابزار icotool فرمت ico. شرکت Adobe را به PNG تبدیل می کنیم:

$ icotool -x *.ico -o images

این ابزار با سوییچ x منابع منابع مربوط به فرمت ico. شرکت Adobe را استخراج کرده و آن ها را برای نمایش در نمایشگرهای تصویر استاندارد به فرمت PNG تبدیل می کند.
اگر فایل نهایی را باز کنید با آیکون Adobe Acrobat مواجه می شوید که توانستیم آن را از این بدافزار استخراج کنیم.

تحلیل ایستای بدافزار در عمل: پیدا کردن رشته ها در بدافزار

رشته ها در تحلیل ایستای بدافزار یکی از منابع با ارزش و با اهمیت هستند. رشته ها در بدافزارها می توانند شامل موارد گوناگونی همچون فرمان های FTP و HTTP برای دانلود فایل های مخرب دیگر یا درخواست های به سرور های کنترل و فرمان، آدرس های IP و… باشند. همچنین رشته های می توانند در عملیات جرم شناسی یا فارنزیک نیز مورد استفاده قرار گیرند. برای مثال با استفاده از زبانی که رشته ها با آن نگارش شده اند می توان منطقه یا کشور حمله را مشخص کرد. اطلاعات دیگری که با استفاده از رشته ها می توان دریافت کرد عبارتند از: کامپایل مورد استفاده برای کامپایل کردن فایل، زبان برنامه نویسی مورد استفاده برای توسعه بدافزار، اسکریپت های جاسازی شده و… اما باید توجه داشت که هکرهای حرفه ای سعی میکنند با دستکاری این موارد کمترین رد پا را از خود بر جای گذارند.
برای مثال عملی این بخش بدافزار ircbot.exe را در نظر گرفته ایم. ircbot یک درب پشتی یا Backdoor (بکدور) به صورت کرم یا Worm است که از طریق پیام رسان MSN منتشر می شود. برای استخراج رشته ها در فایل exe از ابزار strings در لینوکس استفاده می کنیم. استفاده از این ابزار بسیار ساده است:

$ strings ircbot.exe

این فرمان کلیه رشته های موجود در باینری ircbot را روی stdout چاپ می کند. برای اینکه بتوانید بهتر به این اطلاعات دسترسی داشته باشید بهتر است stdout را روی یک فایل Redirect کنید:

$ strings ircbot.exe > ircbot.txt

یک فایل به نام ircbot.txt ایجاد شده و تمامی رشته های موجود در ircbot.exe داخل آن ذخیره می شود. فایل شامل حدود دو هزار خط می باشد.
در تصویر زیر مشاهده می کنیم که بدافزار سعی در دانلود یک فایل مخرب دیگر بر روی ماشین هدف را داشته است:

ircbot strings thregence 0

یا در شکل زیر مشاهده می شود که ircbot توانسته شبیه یک وب سرور برای اتصال هکر به ماشین آلوده عمل کند. این عمل باعث می شود هکر به ماشین آلوده متصل شده و عملیات خود همچون اجرای فرمان، گرفتن اسکرین شات و… را اجرا کند:

ircbot strings thregence 1

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

سخن پایانی

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

درباره ما

ترجنس | thregence.ir
آکادمی ترجنس | edu.thregence.ir
دوره‌های آکادمی ترجنس | courses.thregence.ir
اینستاگرام | instagram.com/thregence
تلگرام | t.me/thregence
یوتوب | https://bit.ly/30mGowo
آپارات | aparat.com/thregence

ارسال یک پاسخ