PDA

View Full Version : گامی برای تجزیه و تحلیل بدافزارهای کامپیوتری



C3phalex1n_0x
یک شنبه 07 دی 1393, 09:29 صبح
http://myfreetime.ir/blog/wp-content/uploads/2014/12/malware-spyware-virus.jpg

لینک اصلی خبر : http://myfreetime.ir/blog

بسم الله الرحمن الرحیم؛ همانطور که می دانید مبحث تجزیه و تحلیل بدافزارهای کامپیوتری یک موضوع بسیار حیاطی است که روزانه بر اهمیت آن افزوده می شود. خصوصا برای افرادی که در کشور جمهوری اسلامی ایران زندگی می کنند، زیرا شدت آماج حملات طراحی شده برای تاسیسات زیرساختی و سازمانی کشور ما بسیار زیاد است. به عنوان مثال از این نوع حملات می توانیم به حمله استاکس نت، دکو، بتچ ویپر و اخیرا رجین (مقاله تحلیل جاسوس افزار رجین را می توانید در این لینک (http://myfreetime.ir/blog/?p=246) مورد مطالعه قرار بدهید) اشاره کرد. در لیست زیر خلاصه ای از برخی بدافزار ها و هدف آنها آورده شده است که شما می توانید مشاهده کنید، البته اطلاعات آورده شده در تصویر زیر به روز نیست ولی به هر حال منظور بنده را می تواند به مخاطبین می رساند.


http://myfreetime.ir/blog/wp-content/uploads/2014/12/Capture.jpg


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

امیدوارم از این مقالات نهایت استفاده را ببرید و با کمک های مالی (Donate) بنده را برای ادامه این راه کمک کنید. البته این آموزش های کاملا رایگان هستند و هیچ الزامی به منظور کمک مالی به بنده در آن وجود ندارد. اما اگر مقالات نوشته شده توسط بنده برای شما مفید و سودمند واقع شد، می توانید به حساب 8742-3626-9918-6037 به نام میلاد کهساری الهادی مبلغی را به عنوان کمک مالی ارسال کنید.شایان ذکر است، بنده کتاب Practical Malware Analysis نوشته آقایان اندرو هوینگ و مایکل سیکروسکی که پژوهشگران حال حاضر در NSA هستند را کاملا ترجمه کرده ام که اکنون در حال گذراندن فرآیند گرفتن مجوز است.

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





[*=right]قسمت 01 : تجزیه و تحلیل بدافزار در یک محیط مجازی (قسمت اول (http://myfreetime.ir/blog/?p=282)، قسمت دو (http://myfreetime.ir/blog/?p=304))
[*=right]قسمت 02 : درآمدی بر دیباگ کردن بدافزارها در سطح 3 (Ring 3) (قسمت اول (http://myfreetime.ir/blog/?p=346))
[*=right]قسمت 03 : درآمدی بر روش های ضد دیباگ کردن بدافزارها (قسمت اول (http://myfreetime.ir/blog/?p=363) ، قسمت دوم (http://myfreetime.ir/blog/?p=381)، قسمت سوم)
[*=right]قسمت 04 : درآمدی برخود کدگشایی (Self-Decoding) و خود استخراج کردن قسمت کد (Self-Extraction Code Segment)
[*=right]قسمت 05 : کاوش کردن ساختارهای داده ای هسته (Kernel)
[*=right]قسمت 06 : جدول خروجی (Export Table) و سرآیند فایل PE
[*=right]قسمت 07 : جدول خروجی کدگذاری شده (Encoded Export Table)
[*=right]قسمت 08 : حقه هایی برای گیج کردن ابزارهای تجزیه و تحلیل ایستا
[*=right]قسمت 09 : تکنیک Starling و ربودن (Hijack) فراخوانی های سیستمی هسته (Kernel) با استفاده از نقطه های توقف سخت افزاری
[*=right]قسمت 10 : دیباگ کردن دیباگر – درست کردن اطلاعات ماژول و فایل UDD
[*=right]قسمت 11 : دنبال کردن نقطه ورودی DLL
[*=right]قسمت 12 : بازیابی کلید خودکدگشایی بدافزار
[*=right]قسمت 13 : تزریق کردن (Injecting) یک ترد (Thread) به درون یک فرآیند در حال اجرا
[*=right]قسمت 14 : حمله برنامه نویسی بازگشتی (Return Oriented Programing)
[*=right]قسمت 15 : آلوده کردن ماژول های سیستم
[*=right]قسمت 16 : آلوده کردن فایل های درایور
[*=right]قسمت 17 : آناتومی یک درایور آلوده شده
[*=right]قسمت 18 : دیباگ کردن هسته – بررسی کردن بارگزاری درایورها
[*=right]قسمت 19 : ربودن (Hijack) درایور دیسک
[*=right]قسمت 20 : کنترل کننده IRP و درایور دیسک آلوده شده
[*=right]قسمت 21 : دنبال کردن اطلاعات و داده های کرنل با استفاده از نقطه های توقف اطلاعاتی
[*=right]قسمت 22 : دنبال کردن رفتارهای شبکه مخرب TDI بدافزار Max++
[*=right]قسمت 23 : فراخوانی رویه تعویق افتاده (Deferred Procedure Call) و تماس TCP
[*=right]قسمت 24 : پیکربندی روتکیت
[*=right]قسمت 25 : بارگزاری مخفیانه یک درایور مخرب
[*=right]قسمت 26 : شکستن محافظ مخفی درایور روتکیت Max++
[*=right]قسمت 29 : بارگزاری مخفیانه کتاب خانه (قسمت دوم، استفاده از Self-Modifying APC)
[*=right]قسمت 30 : خود رونویسی بارگزاری COM برای بارگزاری راه دور DLL
[*=right]قسمت 31 : فاش کردن جریان کنترل مخفی
[*=right]قسمت 32 : کاوش کردن کلاینت یک بات نت
[*=right]قسمت 33 : ارزیابی یک سیستم تجزیه و تحدید خودکار بدافزارها

C3phalex1n_0x
چهارشنبه 10 دی 1393, 14:47 عصر
لینک اصلی : http://myfreetime.ir/blog/?p=401
بسم الله الرحمن الرحیم؛ در مقاله گذشته بحث تئوری و عملی روش های ضد دیباگ کردن را به لطف خدا با همدیگر شروع کردیم و مباحث مقدماتی آن را تا حدودی مورد بررسی قرار دادیم. همچنین حتی بررسی کردیم که چرا از روش های ضد دیباگ کردن استفاده می شود. حال که با مباحث نسبتاً تئوری به صورت نسبی آشنایی پیدا کردیم، در این مقاله مباحث گذشته را با موضوعات جدیدتری ادامه خواهیم داد. شایان ذکر است، در مقاله گذشته چند منبع به منظور مطالعه بیشتر در مورد روش های ضد دیباگ کردن معرفی شد که در اینجا بهتر است ابتدا مطالب آن مقالات را به صورت خلاصه مورد بررسی قرار بدهیم و سپس به مباحث دیگر روش های ضد دیباگ کردن بپردازیم.

خلاصه از مقالات معرفی شده در مورد روش های ضد دیباگ کردن :



در مقاله Bonfa که شما می توانید نسخه کامل آن را در آدرس (http://resources.infosecinstitute.com/step-by-step-tutorial-on-reverse-engineering-malware-the-zeroaccessmaxsmiscer-crimeware-rootkit/) مورد مطالعه قرار بدهید، اشاره شده است که دستورالعمل اسمبلی int 2Dموجب یک وقفه می شود (اگر در مورد زبان اسمبلی اطلاعات داشته باشید، می دانید که دستورالعمل هایی که با int شروع می شوند، وقفه ها هستند). این وقفه هنگامیکه برنامه به یک دیباگر پیوست شود، مورد کنترل قرار می گیرد و برنامه متوجه وجود دیباگر می شود، اما اگر دیباگری وجود نداشته باشد از این وقفه چشم پوشی می شود و برنامه (در اینجا Max++) وقفه را مشاهده خواهد کرد. لذا نتیجه بر این میشود که برنامه به دیباگر پیوست نشده است. این روش یک راه ساده برای شناسایی دیباگر است. شایان ذکر است، اجرای وقفه Int 2d موجب Byte Scission (بایت بریدگی) می شود، یعنی بایت بعدی دستورالعمل int 2d نادیده گرفته (Skipped) می شود. به هر صورت برای این Byte Scission هیچ توضیحی ارائه نشده است. تنها راه حل برای فائق آمدن بر این روش ضد دیباگ کردن استفاده ازپلاگین StrongOD در دیباگر OllyDBG است که اجرای صحیح int 2d را کنترل می کند.
در مقاله بعدی نوشته شده توسط Tyler Sheilds که می توانید مقاله آن را از آدرس (https://mega.co.nz/#!lUhhnTIR!KNqJlRtUCNoTHjm-cwGhoQ1fD-O6cut5Q2Jgis2C9jE) دانلود کنید. یک کد با زبان ++C برای حقه ضد دیباگ کردن Int 2D آورده شده است. در مثال آورده شده در مقاله Tyler Shields توضیح داده شده است که چگونه بدافزار می تواند دیباگر را با استفاده از ساختار Try-catch در C++‎‎‎ مشاهده کند. هنگامیکه یک دیباگر به برنامه پیوست شود، دستورالعمل try-catchنخواهد توانست وقفه را دریافت کند (زیرا دیباگر آن را پیش از ساختار Try-Catch دریافت کرده است.) اما زمانیکه برنامه به دیباگر پیوست نشود، ساختار Try-Catch می تواند آن را دریافت کند و مسیراجرایی برنامه را کنترل کند.
در مقاله بعدی، Ferrie یک توضیح عالی ارائه می دهد که چرا یک بایت بریدگی (Byte Scission) در اجرا برنامه وجود دارد. در قسمت 1.3 این مقاله، Ferrie یک مثال عالی بدین منظور ارائه می دهد. به هر صورت ما به این مثال بعد از اینکه با کنترل کننده ساخت یافته استثناء ( Structued Exception Handling ) آشنا شدیم، دوباره باز خواهیم گشت.



1 . کنترل کننده ساخت یافته استثناء (Structued Exception Handling )

1.1 وقفه ها و استثناء ها

هنگامیکه یک برنامه از دستورالعمل هایی مانند Int 2D استفاده می کنند، که استثناء هستند، باعث می شوند تعداد زیادی رویه کنترل وقفه اجرا شوند. به همین دلیل مطالعه و بدست آوردن اطلاعات کامل از جزئیات تخصصی که در سناریو کنترل کردن وقفه ها وجود دارد، می تواند برای ما سودمند باشد. پیشنهاد بنده این است که راهنمای IA32 Manual را مورد مطالعه قرار بدهید. با این حال، برخی اطلاعات از کنترل وقفه ها در زیر لیست شده است.



وقفه ها (Interrupts) به علت سیگنال های سخت افزار اتفاق می افتند. به عنوان مثال، سیگنالهای کامل شدن ورودی و خروجی (I/O) و اجرا شدن دستورالعمل های اسمبلی INT XX موجب ایجاد شدن وقفه در سیستم می شوند. همچنین شایان ذکر است، وقفه ها به جزء فراخوانی مستقیم دستورالعمل های INT XX، در زمان های تصادفی اتفاق می افتند (مثل سیگنال ورودی و خروجی).
استثناء ها (Exceptions) هنگامیکه پردازنده یک خطا در حین اجرای یک دستورالعمل شناسایی می کند، استثناء ها در سیستم اتفاق می افتند.
هنگامیکه یک استثناء یا وقفه رخ می دهد، اجرای عادی متوقف می شود و پردازنده به کنترل کننده وقفه پرش (Jump) می کند (یک قطعه کد که استثناء/وقفه را کنترل می کند). هنگامیکه کنترل کننده وقفه کار خود را کامل انجام دهد، برنامه مسیر عادی خود را دوباره ادامه خواهد داد. کنترل های وقفه توسط سیستم عامل هنگام بوت سیستم بارگزاری می شوند و یک جدول وکتور وقفهوجود دارد (همچنین جدول تشریح کننده وقفه (Interrupts Descriptor Table) هم نامیده می شود) که تعریف می کند، کدام کنترل کننده با کدام وقفه ارتباط دارد.
قابل ذکر است، درحالت کلی چهار وقفه/استثناء در سیستم وجود دارد که در زیر نوع آنها آورده شده است.

استثناء های تولیده شده نرم افزاری (دستورالعمل های INT XX از این قبیل به شمار می روند.)
وقفه های بررسی ماشین
اسثثناء خطا (Fault)
وقفه تله (Trap) (هنگام گذاشتن Breakpoint در برنامه از کد این استثناء استفاده می شود)


هنگامیکه یک وقفه/استثناء رخ دهد، پردازنده اطلاعات ثبات های EIP، CS و ثبات پرجم (EFLAGS) و کد خطا را در Stack یا پشته قرار می دهد البته قابل ذکر است، مبتنی بر نوع وقفه این اطلاعات متفاوت خواهند بود. سپس آدرس ورودی کنترل کننده وقفه را با استفاده از IDT پیدا کرده و به آن پرش می کند. سپس کنترل کننده وقفه کار خود را انجام می دهد و سیستم با استفاده از اطلاعات موجود در ثبات های EIP/CS اجرای برنامه را ادامه می دهد.



به هر صورت، به منظور اطلاعات به دست آوردن در مورد وقفه ها و استثناء ها به صورت کامل بهتر است راهنمای اینتل را به صورت کامل مورد مطالعه قرار بدهید. چیزی که در بالا آورده شده است، یک توضیح فوق العاده مختصر از این موارد است. در مقاله بعدی این مبحث را ادامه خواهیم داد.