تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مدخل لRootKit
#1
 تم اقتباس هدا من ماكتبه عضو في منتدى arabteam2000

الروت كیت RootKit اتى من عالم الUnix  المقصود به  مجموعة من ال utilities و  كان الهاكرز یضعونها على
الحواسیب المخترقة بعد الحصول على ال access Initial
كانت هذه المجموعة تضم utilities لاخفاء اثار اقتحام النظام و ادوات اخرى مثل (scanner,sniffers ) اضافة ل برامج
اخرى لمراقبة utilities الخاصة بالنظام
حقیقة الروت كیت تسمح للهاكر یعمل حقن لادواته في النظامCode injectاضافة الى مسح اثار الاختراق. بعالم الویندوز من
المعتاد اطلاق اسم RootKit على البرامج التي تقوم بالتغلغل في النظام وتعمل على التقاط (hook ) دوال الAPI
طبعا بدیهي نقول انه لن یستطیع التقاط وتعدیل الFunction APIذات المستوى المنحفض الا برنامج یخفي وجوده في النظام
بشكل جید وكذلك یخفي الاثار الخاصة به
إخفاء Folders & Files
2- اخفاء Processes
3- اخفاء Handles
4- اخفاء Values & Keys Registry
5- اخفاء Services
6- اخفاء Sockets UDP/TCP
7- اخفاء Icons Systray
.العدید من rootkits تقوم بتنصیب ال Services والDrivers و *.sys 
ویتعامل معها مثل ملفات النظام تماما
مبدا استدعاء دوال الAPI :
قبل ان نعرف بدا عمل الRootKits على Windows لازمنا نعرف الطریقة التي یتم بها استدعاء دوال الAPI الموجودة في
ملف DLL ولعمل ذلك هتاك طریقتان اساسیتان
Statically imported functions
یعتمد على كون المترجم "یعرف" ماهي المكتبات التي تتبعها كل الدوال التي یقوم باستدعائها البرنامج
بالاعتماد على هذه المعلومة فان المترجم یوم بعمل import of table The للملف التنفیذي.
import of table The هي structure من نوع خاص یشكل جدول ب یحتوي على قائمة باسماء المكتبات وقوائم بكل الدوال
التي تصدرها كل مكتبة ولكل داله
هناك حقل في الجدول یحوي عنوان الدالة و هذا الجدول في الheader الخاص في بالملف التنفیذي
واثناء عمل Loading للملف التنفیذي ب یقوم النظام بتحلیل الجدول الخاص ب الملف وبالتالي تحمیل المكتبات الموجودة هناك
ومن ثم منح عناوین حقیقیة للدوال الموجوة في المكتبات (طبعا نحن نتحدث عن مكتبات dll )
في الحقیقة في المكتبات التي تربط بشكل استاتیكي خاصیة ذهبیة اثناء اقلاع البرنامج تكون كل مكتبات الdll محملة كما ان
table import ب تكون جاهزة كما ان كل هذه الاشیاء بیعملها النظام بدون التدخل من البرنامج.
لو ما تواجدت اجد المكتبات او الدوال المذكورة ب table import
ح یحدث خطا ولن نتمكن من اقلاع البرنامج كما اننا لانحتاج دائما الى تحمیل كل المكتبات عند بدایة عمل البرنامج

[img] https://archive.org/download/edit_20200800/EDIT.PNG[/img]
[صورة مرفقة: EDIT.PNG]




عملیة ملء الable imprt بالعناوین
قبل استدعاء دالة معینة اخذ عنوانها من الجدول السایق
عمایة الاستدعاء
____________________________________________
الربط المتاخر او الدینامیكي
____
یختلف عن سابقه بان تحمیل المكتبة یتم عن طریق دالة الLoadLibrary API التي تقع في الdll.kernel32 كمأن الحصول
على عنوان الدالة یتم عن طریق الدالة GetProcAddress التي تقع في ال dll.kernel32 ایضا.
لاحظ في الرسم السابق :
4- تحمیل المكتبات بواسطة المكتبة LoadLibrary والحصوال على عنوان الدالة بواسطة دالة الGetProcAddress API
5- استدعاء دالة المطلوبة.
ولكي لا نضطر الى استدعاء الدالة


لاحظ في الرسم السابق :
4- تحميل المكتبات بواسطة المكتبة LoadLibrary  والحصوال على عنوان الدالة بواسطة دالة الAPI
GetProcAddress
5- استدعاء دالة المطلوبة.
ولكي لا نضطر الى استدعاء الدالة GetProcAddress عند كل مرة نحتاج فيها دالة معينة بامكاننا ان نحفظ عنوان الدالة 
في متغير مثلا. وبغض النظر عن الطريقة التي تم بها الربط مع المكتبة فلابد من معرفة الدوال التي تصدرها المكتبة ولهذا 
الغرض فان لدى كل مكتبة dll جدول اسمه table export يحتوي على ارقام الدوال المصدرة وعناوينها
طرق عمل hook لدوال الAPI :
اولا : عمل تعديل في كود البرنامح المكتوب بلغة الالة : في هذا النوع فان التعديل يحدث على تعديل على الكود الذي يقوم 
باستدعاء دالة API معينة .في الحقيقة هذا العملية صعبة جدا لوجود العديد من دوال لغات البرمجة والعديد من اصدارات 
المترجمات ولكن هذا نظريا ممكن اذا كنا نريد التغلغل في كود برنامج معروف الاصدار بحيث نستطيع تحليل الكود وكتابة
برنامج لالتقاط الدوال المطلوبة



طرق عمل hook لدوال الAPI :
اولا : عمل تعديل في كود البرنامح المكتوب بلغة الالة : في هذا النوع فان التعديل يحدث على تعديل على الكود الذي يقوم 
باستدعاء دالة API معينة .في الحقيقة هذا العملية صعبة جدا لوجود العديد من دوال لغات البرمجة والعديد من اصدارات 
المترجمات ولكن هذا نظريا ممكن اذا كنا نريد التغلغل في كود برنامج معروف الاصدار بحيث نستطيع تحليل الكود وكتابة
برنامج لالتقاط الدوال المطلوبة.









________________________________________
تعديل الtable import
____


[صورة مرفقة: EDITING1.PNG]


فكرة هذه الطريقة سهلة وتعتمد على التالي  يقوم الRootkit بالبحث في ذاكرة الtable import التابعة لبرنامج معين 
ومن ثم يقوم بتعديل عناوين الدوال التي تهمه الى عنواينه دوال تخصه )طبعا قبل ان يقوم بالتعديل لابد ان يحفظ العناوين 
الحقيقية في مكان ما( .
لاحظ ان البرنامج لحظة استدعاء دالة معينة فانه اولا سيقوم بقراءة عنوان الدالة من الجدول ومن ثم يستدعيها بواسطة 
العنوان المقروء. هناك عيب واضح في هذه الطريقة وهو ان الدوال التي يمكن عمل hook لها فقط دوال ستاتيكية وهذا 
واضح في الرسم التالي


ولكن هناك نقطةايجابية ايضا في هذه الطريقة وهي ان التنفيذ سهل جدا اضافة الى وجود العديد من الامثلة التي تقوم بهذه 
العملية
الشي الوحيد الذي من الممكن ان يشكل صعوبة هو البحث داخل الtable import وهنا تاتي مساعدة شركة مايكرو 
سوفت والتي اعطتنا العديد من دوال الAPI التي تسهل الامر لذلك يبدو ال hook الممثل بهذه الطريقة لايزيد عن عدة 
صفحات بلغة السي
ثالثا :عمل hook للدالتين LoadLibrary و GetProcAddress 
ممكن ان نستعمل اي طريقة  لعمل hook عادة نستخدم الطريقة الثانية .فكرة هذه الطريقة كالتالي عند عمل hook
للدالة ,GetProcAddress ممن الممكن اعطاء عنوان الدالة الخاصة بك بدلا من عنوان الدالة المطلوبة من وجهة نظر 
البرنامج لا يوجد فرق بين الدوال فقط يطلب عنوانا وينفذ الامر
سلبية هذا الطريقة كونها لا تعمل  hook للدوال الاستاتيكية وانما فقط للدوال المربوطة بشكل دينامكيي  كما يبين ذلك 
الرسم التوضيحي

[صورة مرفقة: EDITING2.PNG]


___________________________________________________________
 اجمع الطريقتين السابقتين
_____________ 
نعدل الtable improt بالطريقة 2 ثم نقوم بعمل hook للدالتين LoadLibrary و GetProcAddress بالطريقة
رقم 3 مستثنين اثناء ذلك الدوال اللازمة لعمل الRootKit وبهذا لن يتمكن البرنامج من معرفة العناوين الصحيحة للدوال
سوائ كان تحميلها ديناميكيا ام استاتكيا
انظر الرسم التوضيحي

[صورة مرفقة: LAST%20EDIT.PNG]


_________________________
 تغييركود دالة الAPI 
___
واضح ان هذه الطريقة في التنفذ اصعب كثيرا في التنفيذ من مجرد تغيير العنوان وذلك لان الrootkit يقوم بالبحث عن 
كود الدالة التي يبحث عنها وبالتالي تغييره وبهذا لن يحتاج الى تغيير عنوان الدالة في الtable import
كل شيء يبقى على حاله مع فارق بسيط وهو داخل العنوان الاصلي واخل المكتبة الاصلية يقع الكود الخاص 
بالrootkit نفسه. في بداية كود الدالة التي تم تشويه كودها نضع تعليمتين او ثلاث تقومان بعمل بنقل التحكم الى 
الاوامر الخاصة بالhooker وفي الاخر تعليمتين او 3 بحيث ينتهى الامر كما لو ان دالتنا انتهت من عملها بشكل طبيعي

دائما اذا كنت تريد ان تعمل Run لا نوع من الفيروسات سواء التي تعمل في الكيرنل مود او يوزر مود اعمل على   VMware
VMware هو برنامج يقوم بعمل نظام وهمي في الذاكرة
طبعا ليس اذا عملت run منه على النظام Host
ويمكنك   حذف  النظام الوهمي أو تغير مواصفاته بامكانيات لا تتعدى جهاز Host 
بامكانك تنزيل VirtualBox وربما ستواجهك مشاكل مع Hardware Access..etc مثل ما حصل معي  بامكانك حلها من BIOS

فاستعمل VMware Workstation Player 
تستطيع منه تثبيت نظام من ملف iso أو من CD




مصادر للاطلاع:   
بعضها بالروسي


https://f3real.github.io/iat_hooking.html

https://0x00sec.org/t/user-mode-rootkits...oking/1108

https://guidedhacking.com/threads/how-to...ing.13555/


https://www.malwaretech.com/2015/01/inli...operations.


https://xakep.ru/2018/01/26/winapi-hooks/

https://xakep.ru/2018/03/14/kmdf-driver/
https://bytecode77.com/hacking/payloads/r77-rootkit
https://xakep.ru/2018/01/26/winapi-hooks/
https://www.apriorit.com/dev-blog/160-apihooks




كلمات للبحث :
RootKit
User-mode RootKit
Kernel-mod RootKit
Hooking
Hooking Windows Kernel Function 
Windows DLL inject
Hooking Linux Kernel Function
Hooking System CALLs
Inline Hooking
Inline IATl
أعضاء أعجبوا بهذه المشاركة : Cyros , 0b3l1sk , M!X0R , sitifis , ExCodeMaker , redsea , farfes , الباحث , Gu-sung18 , rce3033 , [email protected]


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم