Reverse Code Engineering

逆向工程代码 обратная код машиностроения

Reverse Code Engineering

逆向工程代码 обратная код машиностроения

Reverse Code Engineering

Share what I know............... learn what I don’t

آخرین نظرات

روت کیت و اندرونیات ویندوز (قسمت اول)

دوشنبه, ۲۲ آذر ۱۳۹۵، ۰۸:۴۶ ق.ظ

با سلام خدمت همه دوستان.

متاسفانه مشکلات اجازه نمیده که بتونم زود به زود مطالب برای وبلاگ آماده کنم و ازین بابت از شما دوستان پوزش میخوام.

امروز میخام مبحث جدیدی رو شروع کنیم و جلو بریم :

Windows Internal and Rootkit

خوب ما همزمان چندتا مبحث رو جلو خواهیم برد؛ یکیش تحلیل بدافزار (ZeroAccess) , یکیش همین WI&R هستش. البته لابه لای اینها شاید آموزش های دیگری هم داده بشه:)


Ring Zero


میکروچیب های خانواده Intel, از مفهومی به نام ring (حلقه) برای کنترل دسترسی استفاده می کنند.

4 حلقه از( 0 تا 3 ) وجود دارد که 0 بیشترین امتیاز و 3 کمترین امتیاز را دارد.

همه کدهای کرنل ویندوز در ring 0 اجرا می شود, و برنامه های user mode هم در ring 3 اجرا میشوند.

در سیستم عامل هایی مثل ویندوز و لینوکس فقط ring0 و ring3 استفاده می کنند و 2تای دیگه استفاده نمیشه.

CPU مسئول اداره کردن کد نرم افزار و حافظه ی متعلق به اون در هر ring هستش, و از دسترسی بین ring ها جلوگیری میکنه.

اصولا هر برنامه ای شماره ring متعلق به خودشو داره (CPL) و نمیتونه به ring های دیگه با شماره کمتر دسترسی داشته باشه.

البته تحت شرایط خاص امکانی وجود داره که اجازه میده به برنامه تا به ring پایین تر دسترسی داشته باشه.

برای مثال برای لود کردن درایور پرینتر در کرنل نیاز به برنامه ای (ring 3) با دسترسی ادمین داریم تا بتونه device driver در کرنل (ring 0) لود کنیم.

 

بیشتر ابزارهایی که برای تشخیص روتکیت ها بکار میرن به دسترسی ادمین در ring 3 اجرا میشوند .نویسنده روتکیت باید بدونه چطور ازین امکان برای روتکیت خودش استفاده کنه و امتیاز بیشتر نسبت به برنامه های ادمین پیدا کنه.

برای مثال , ازین روش میتونه برای مخفی کردن خودش از ابزار استفاده کنه, یا اینکه اطلاعات نادرست به اونها ارسال کنه.

همچنین یه روتکیت به وسیله یک لودر نصب میشه که یک برنامه ring3 هستش.

برای لود کردن روتکیت در کرنل ,لودر از توابع خاصی که این اجازه رو دارن استفاده میکنه.


علاوه بر محدودیت دسترسی به حافظه, تدارکات امنیتی دیگه ای هم هستن.

مثلا دستوراتی وجود دارند که فقط می تونند در ring 0 اجرا شوند.

این دستورات بنوعی برای تغییر رفتار CPU یا دسترسی مستقیم به سخت افزار استفاده میشن.

بعنوان مثال:

·         cli — stop interrupt processing (on the current CPU)

·         sti — start interrupt processing (on the current CPU)

·         in — read data from a hardware port

·         out — write data to a hardware port

 

 

Tables, Tables, and More Tables

بعلاوه ی مسئولیت که در CPU در بالا داره, کارهای دیگه ای هم انجام میده.

برای مثال, CPU باید بدونه چه زمانی از وقفه ها (interrupt) استفاده کنه, هنگامی که یک برنامه کرش میشه, سیگنال اخطار از طرف سخت افزار میرسه, زمان تلاش یه برنامه ی user mode برای ارتباط با یک برنامه ی kernel mode, سوییچ بین thread های یک برنامه Multithread.

واضع هستش که مسیولیت تمام این کارا باید با سیستم عامل باشه اما CPU اول به اینها رسیدگی میکنه.

برای هر رخداد (event) مهمی, CPU باید عکس العمل مناسبی در برابر اون رخداد انجام بده. بنابراین برای هندل کردن هر رخداد یک routine تعریف شده که مسئول پاسخدهی به رخداد هستش.

هر routine در حافظه وجود داره و CPU نمیتونه همه آدرسهارو در خودش نگهداره پس این کار توسط جداول آدرس صورت میگیره.

زمانی که یک رخداد اتفاق میافته, CPU بسته به اون رخداد میاد و آدرس روتینی که مسئول پاسخدهی به اون رخداد هستش رو از جدول پیدا میکنه و این روتین میاد و رخداد رو هندل میکنه.

پس CPU فقط به آدرس مبنا(base address) این جدول ها در حافظه نیاز داره.

 

جدول های مهم :

·         Global Descriptor Table (GDT), used to map addresses

·         Local Descriptor Table (LDT), used to map addresses

·         Page Directory, used to map addresses

·         Interrupt Descriptor Table (IDT), used to find interrupt handlers

 

به علاوه ی این جدول های CPU, خود سیستم عامل هم برای خودش جداولی رو داره, البته اینا توسط CPU به صورت مستقیم پشتیبانی نمیشن, و خود سیستم عامل کد و توابع خاصی برای مدیریتشون داره.

مهمترینشون جدول زیر هستش:

 

System Service Dispatch Table (SSDT), used by the Windows OS for handling system calls


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

موفق باشید
Pcrlth0n

نظرات (۳)

سلام
ممنون لطفا ادامه بدید...!
سلام عالی بود ممنونم ازتون

لطفا ادامه بدین خیلی خوبه:(

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