آنالیز ساختار ویندوز و روت کیت های سطح هسته-بخش اول

در این پست و چند پست آتی به نحوه آنالیز و تحلیل Rootkit ها خواهیم پرداخت که پیش نیاز آن، آشنایی با ساختار و تکنیک های مورد استفاده در آنها می باشد. Rootkit ها مختص به یک سیستم عامل و پلتفرم خاص نیستند، در واقع یک اصطلاح می باشد که به دسته خاصی از بدافزارها اشاره می شود. روت کیت هایی برای MS Windows ، Linux ، Cisco IOS و … نوشته شده و می توان نوشت. مایکروسافت درباره روت کیت چنین می گوید که نویسندگان بدافزارها برای پنهان کردن بدافزار از روت کیت ها استفاده می کنند، حال روت کیت بدافزار است یا بخشی از بدافزار و تعریف و تعابیر دیگر از این واژه ، خود را درگیر این قبیل مباحث نخواهیم کرد.

rootkit

Rootkit را می توان به دو بخش root و kit تقسیم کرد تا بهتر به مفهوم آن آشنا شد. سیستم عامل ویندوز به طورکلی به دو سطح تقسیم می شود یعنی Ring0 و Ring3 (به هر سطح Ring گوییم). Ring0 دارای بالاترین سطح دسترسی می باشد که به آن Kernel-mode نیز گفته می شود و همچنین Ring3 دارای کمترین سطح دسترسی که به آن نیز User-mode گوییم.

هر سطح دارای ساختار و ویژگی خاص خود می باشد بنابراین در مبحث دیباگینگ نیز تفاوت هایی وجود دارد. WinDBG دیباگر مایکروسافتی است که می توان در هر دوسطح عمل دیباگ را انجام دهیم ولی نکته قابل توجه کارایی آن است که در Ring3 دیباگر هایی مانند OllyDBG ، ImmunityDBG و… کارایی بهتری را دارا هستند. با توجه به ویژگی های WinDBG ، در دیباگ سطح هسته از آن استفاده می کنیم. راه های دیباگ در windbg را می توان در تصویر زیر مشاهده نمود:

windbg-debug-ways

 

برای دیباگ کرنل به دو صورت Remote و یا Local می توانیم عمل نماییم. Local Debug در سطح هسته بدین معنی است که خود سیستم مان را دیباگ نماییم که در این حالت دارای محدودیت هایی خواهیم بود و کارهایی مانند: توقف در اجرا، قرار دادن نقاط توقف در روند اجرا و امثالهم را نمی توان انجام داد. برای این حالت علاوه بر WinDBG ممکن است به ابزار LiveKD [1]  نیاز شود. در حالت Remote که در واقع بحث اصلی مان خواهد بود، علاوه بر روش های مختلف موجود که محبوبترین آن Serial است با استفاده از ابزار Virtual KD [2]  نیز میتوانید دیباگ را انجام دهید. روش Serial دارای سرعت پایین تری نسبت به Virtual KD می باشد. در حالت Serial سرعتی که داریم   bps  115200 است ولی در Virtual KD  حداکثر سرعت در Virtual Box نیز 450 KB/s  و برای VMware حداکثر 150 KB/s  است. بعد از نصب و راه اندازی Virtual KD در ماشین مجازی براحتی میتوان با استفاده از WinDBG و یا IDA به آن متصل شد و دیباگینگ را انجام دهیم.

حال نحوه ارتباط بصورت Serial را خواهیم گفت، ابتدا تنظیمات مرتبط با VM ایجاد شده در Virtual Box را بصورت زیر ست می کنیم:

vm

بعد از آن در ویندوز VM با استفاده از کامند msconfig در run ویندوز، سربرگ BOOT.INI و انتخاب Advanced Options …  تنظیمات را بصورت تصویر زیر ست می کنیم :

msconfig

سپس ویندوز را ریستارت کرده و حالت دیباگ ویندوز را انتخاب می کنیم.

win-boot

حال در دیباگرمان از منوی File  -> Kernel Debug یعنی تصویر زیر ، با استفاده از تنظیمات اعمال شده به ویندوز مان متصل شده و آن را به مد دیباگ می آوریم.

windbg-kernel-debug1

در تصویر بالا سربرگ Local برای حالت Local Debug است که قبلا توضیح داده شده است. نکته حائز اهمیت در دیباگ دریافت Symbol ها از سرور مایکروسافت است که نیاز مبرم به آنها خواهیم داشت. برای دانلود symbol ها مورد نیاز  با استفاده از منوی File -> Symbol file path … در دیباگر مقدار زیر را ست می کنیم:

یا می توان از کامند زیر استفاده نمود :

در صورت نیاز به سرور مایکروسافت متصل شده و Symbol ها را دانلود و در مسیر مشخص شده ذخیره می کند.  بعد از اتصال و اجرا روند بارگزاری ویندوز می توانیم با زدن Ctrl+Break روند اجرا را متوقف نماییم:

windbg-kernel-debug2

خوب حال بر روند اجرا تسلط کامل داریم و می توانیم براحتی هرکاری که نیازمان است اعم از بررسی ساختارها، توقف روند اجرا، تریس یک روت کیت و …  را انجام دهیم.

روت کیت های سطح هسته همان درایور ها می باشند که دارای پسوند  *.sys هستند. این نوع فایل ها از ساختار PE پیروی می کنند. پس می توان از تکنیک PE Infection نیز استفاده نمود که روت کیت TDL3 بدین صورت عمل نموده است. PE Infection بحث مفصلی است که در این شماره پست مجالی برای شرح این مبحث وجود ندارد. هنگامیکه پروسه ای در UMode می خواهد حافظه را  allocate/deallocate کند ، پروسه و تریدی را اجرا نماید و … روند اجرای توابع از سطح کاربر به توابع کرنل ختم می شود. در تصویر زیر ارتباط Ring 3 را با Ring0 نشان می دهد:

from-user-to-kernel

روت کیت های سطح کاربر با هوک هایی مانند IAT خود را مخفی می کنند بعنوان مثال با هوک تابع ZwQueryDirectoryFile() فایل های خود را پنهان می کنند. در شماره 2 مجله درباره هوک ها حرف هایی گفته شد. وقتی روت کیت سطح هسته برروی سیستمی  نصب گردد می تواند ساختارهای کرنل را تغییر دهد مانند : لیست پروسه ها، توکن ها، جداول مهم مانند SSDT,IDT و …

 

ادامه بحث که درباره مفاهیم و ساختار ویندوز خواهد بود در بخش بعدی به آن خواهیم پرداخت.

 


 

[1] http://download.sysinternals.com/files/LiveKD.zip

[2] http://virtualkd.sysprogs.org

HamiD

قطره ای از دریای بیکران IT

More Posts

One thought on “آنالیز ساختار ویندوز و روت کیت های سطح هسته-بخش اول”

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *