درخواست های ارتباط
جستجو
    لیست دوستان من
    صندوق پیام
    همه را دیدم
    • در حال دریافت لیست پیام ها
    صندوق پیام
    رویدادها
    همه را دیدم
    • در حال دریافت لیست رویدادها
    همه رویدادهای من
    اطلاعات دوره آموزشی
    اطلاعات مطلب
      مدرس/نویسنده
      محمد نصیری
      امتیاز: 802020
      رتبه:1
      364
      1646
      801
      10551
      محمد نصیری ، بنیانگذار TOSINSO ، کارشناس امنیت اطلاعات و ارتباطات و کشف جرائم رایانه ای ، هکر کلاه سفید ، تخصص در حوزه امنیت سیستم عامل و تست های نفوذسنجی ، لینوکس ، مجازی سازی ، سرویس های کاربردی سرور و ... سابقه همکاری در بیش از 40 سازمان دولتی ، خصوصی و نظامی در حوزه پروژه ، مشاوره و آموزش ، بیش از 10 هزار ساعت سابقه آموزشی در طی 12 سال فعالیت حرفه ای ... پروفایل کاربر

      تفاوت Kernel Mode Rootkit و User Mode Rootkit در Rootkit های ویندوزی ::: قسمت دوم

      تاریخ 5 ماه قبل
      نظرات 0
      بازدیدها 86
      اما با توجه به اینکه تمامی Application هایی که در User Mode سیستم عامل اجرا می شوند برای خودشان یک فضای حافظه دارند ، Rootkit مجبور است که این فرآیند Patch یا وصله کردن DLL را به گونه ای انجام بدهند که کلیه Application هایی که در حال حاضر بر روی حافظه در حال اجرا هستند را نیز در بر بگیرد. علاوه بر این Rootkit باید کلی سیستم را مانیتور کند و Application های جدیدی که اجرا می شوند را نیز قبل از اینکه بصورت کامل اجرا شوند Patch کند تا بصورت موفقیت آمیزی اجرا شوند. اما خوب ، این یکی از تکنیک های System Hooking است ، در برخی انواع دیگر الزامی به Patch کردن و مانیتور کردن مستمر Application های ورودی به حافظه نیست . در واقع در System Hooking های دیگر در لایه Kernel تمامی مسیرها در نهایت به سمت Rootkit هدایت می شوند.

      روتکیت های حالت کرنل یا Kernel Mode Rootkits


      برخلاف User Mode Rootkits این نوع Rootkit ها در لایه هسته سیستم عامل یا Kernel فرآیند System Hooking را انجام می دهند و تغییرات خودشان را در فضای Kernel سیستم عامل ویندوز عملیاتی می کنند . باز هم برخلاف User Mode Rootkits که دسترسی آن وابسته به نوع کاربری و دسترسی های User است ، Kernel Mode Rootkit ها فارغ از بحث دسترسی های کاربری فعالیت می کنند و در واقع هیچ یک از محدودیت هایی که برای کاربر استاندارد در سیستم عامل وجود دارد برای Kernel Rootkit ها وجود ندارد. در این نوع Rootkit دسترسی مشاهده و تغییر حافظه مورد استفاده در Kernel داده می شود . لایه Kernel مناسب ترین لایه ممکن برای انجام فرآیند System Hooking است زیرا نزدیک ترین لایه و پایین ترین لایه به هسته سیستم عامل است و به همین دلیل بهترین محل و مطمئن ترین جا برای System Hooking است . مسیر فراخوانی سیستم که بایستی از Kernel عبور کند از بسیاری از Hook Point ها ( نقاط اتصال یا فراخوانی نقطه دیگر ) عبور می کند .

      برخی از این Hook Point ها را در ادامه توضیح می دهیم ، به محض اینکه یک System Call از User Mode وارد Kernel Mode می شود بایستی از یک Gate یا دروازه عبور کند . هدف از قراردادن یک دروازه ورودی بین Kernel Mode و User Mode این است که کدهای قسمت User Mode نباید به فضای حفاظت شده Kernel Mode ورود کنند.این دروازه یا Gate بایستی هدف از درخواست سیستمی که از طرف User Mode به سمت Kernel Mode می آید را شناسایی کند و کدهای مورد نیاز برای اجرا شدن در فضای Kernel Mode را اجرا کند و نتیجه را مجددا به سمت User Mode بازگشت بدهد . در واقع این Gate یک پروکسی بین User Mode و Kernel Mode در سیستم عامل ویندوز است . در نسخه های قبلی سیستم عامل ویندوز این Proxy توسط وقفه ها یا Interrupt ها انجام می شد اما در نسخه های جدیدتر ویندوز توسط Model Specific Registers یا MSR ها اینکار انجام می شود . به هر حال هر دوی این روش ها توسط System Hooking قابل هک شدن هستند و درخواست های اجرای کد می توانند توسط Gate به جای اینکه به سمت Kernel Mode اصلی هدایت شوند به سمت Rootkit هدایت می شوند .
       تصویر Gate بین User Mode  و Kernel Mode


      یکی دیگر از مواردی که به خوبی می توان در آن Hook ایجاد کرد قسمت System Service Descriptor Table یا SSDT است . SSDT یک جدول Pointer یا اشاره گر به Function ها یا توابع در حافظه Kernel است که تمامی آدرس های مربوط به توابع System Call یا فراخوانی سیستمی را در خودش نگهداری می کند . با دستکاری کردن این قسمت از اطلاعات جدول ، Rootkit به راحتی می تواند کدهای خودش را به جای کدهای فراخوانی اصلی سیستم اجرا کند. مشابه تکنیک های قبلی که اشاره کردیم ، Rootkit می تواند System Call اصلی را فراخوانی کند و خودش را در هنگام بازگشت دادن نتیجه به سمت User Mode از نتیجه حذف کند تا مخفی باقی بماند. برای مثال حافظه کرنل یا Kernel Memory لیستی از کلیه پردازش های در حال اجرا را می خواهند نمایش بدهد و Rootkit براحتی پردازش خودش و کدهای مخربی که خودش تعریف کرده است را می توان از این لیست نتایج حذف کند ، این تکنیک به عنوان Direct Kernel Object Modification یا DKOM نیز شناخته می شوند.

       تصویر DKOM


      نتیجه گیری


      بسیاری از همین تکنیک هایی که در همین مقاله اشاره شد در بسیاری از Application های مختلف مورد استفاده قرار می گیرند. اما مهمترین چیزی که در خصوص یک Rootkit اهمیت دارد و فرآیند System Hooking هم به همین دلیل انجام می شود مخفی کردن رفتارها ، برنامه ها و رخدادهایی است که در نتیجه عملکرد Rootkit بر روی سیستم عامل به وجود می آید . برای مثال یک فایروال برای اینکه ترافیک غیرمعمول را به کاربر اعلام کند اقدام می کند و به محض اینکه Rootkit این را متوجه می شود جلوی ارسال دستور به کاربر و سیستم را می گیرد و Connection ای که خودش ساخته است را از دید کاربر مخفی می کند و آن را به عنوان یک Backdoor مخرب برای استفاده های آینده خودش مخفی نگه می دارد. Rootkit ها قابلیت دور زدن اکثر نرم افزارهای امنیتی و حفاظتی سیستم را دارند و به همین دلیل می توانند حتی خودشان را از دید این نرم افزارها نیز به خوبی مخفی کنند ، به همین دلیل است که برای مهاجمین Rootkit ها از جمله مواردی هستند که بسیار جذابیت دارند. به عنوان یک کد نویس مباحث امنیتی شما باید به خوبی نحوه عملکرد Rootkit ها را بدانید و با آنها به درستی برخورد کنید . قبلا در خصوص مکانیزم های جلوگیری و شناسایی Rootkit ها در توسیسنو صحبت کرده ایم امیدوارم مورد توجه شما قرار گرفته باشد.


      نویسنده : محمد نصیری
      منبع : جزیره امنیت وب سایت توسینسو
      هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد
      برچسب ها
      ردیفعنوان
      1تفاوت Kernel Mode Rootkit و User Mode Rootkit در Rootkit های ویندوزی ::: قسمت اول
      2تفاوت Kernel Mode Rootkit و User Mode Rootkit در Rootkit های ویندوزی ::: قسمت دوم
      دورهمجموعه کل دوره
      مطالب مرتبط

      در حال دریافت اطلاعات

      نظرات
      هیچ نظری ارسال نشده است

        برای ارسال نظر ابتدا به سایت وارد شوید

        arrow