04-08-2020, 04:45 PM
(آخر تعديل لهذه المشاركة : 14-09-2020, 12:09 PM بواسطة the9am3.
تعديل السبب: اضافة المصدر بطلب من صاحب الموضوع
)
تم اقتباس هدا من ماكتبه عضو في منتدى 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]
عملیة ملء ال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
____
فكرة هذه الطريقة سهلة وتعتمد على التالي يقوم الRootkit بالبحث في ذاكرة الtable import التابعة لبرنامج معين
ومن ثم يقوم بتعديل عناوين الدوال التي تهمه الى عنواينه دوال تخصه )طبعا قبل ان يقوم بالتعديل لابد ان يحفظ العناوين
الحقيقية في مكان ما( .
لاحظ ان البرنامج لحظة استدعاء دالة معينة فانه اولا سيقوم بقراءة عنوان الدالة من الجدول ومن ثم يستدعيها بواسطة
العنوان المقروء. هناك عيب واضح في هذه الطريقة وهو ان الدوال التي يمكن عمل hook لها فقط دوال ستاتيكية وهذا
واضح في الرسم التالي
ولكن هناك نقطةايجابية ايضا في هذه الطريقة وهي ان التنفيذ سهل جدا اضافة الى وجود العديد من الامثلة التي تقوم بهذه
العملية
الشي الوحيد الذي من الممكن ان يشكل صعوبة هو البحث داخل الtable import وهنا تاتي مساعدة شركة مايكرو
سوفت والتي اعطتنا العديد من دوال الAPI التي تسهل الامر لذلك يبدو ال hook الممثل بهذه الطريقة لايزيد عن عدة
صفحات بلغة السي
ثالثا :عمل hook للدالتين LoadLibrary و GetProcAddress
ممكن ان نستعمل اي طريقة لعمل hook عادة نستخدم الطريقة الثانية .فكرة هذه الطريقة كالتالي عند عمل hook
للدالة ,GetProcAddress ممن الممكن اعطاء عنوان الدالة الخاصة بك بدلا من عنوان الدالة المطلوبة من وجهة نظر
البرنامج لا يوجد فرق بين الدوال فقط يطلب عنوانا وينفذ الامر
سلبية هذا الطريقة كونها لا تعمل hook للدوال الاستاتيكية وانما فقط للدوال المربوطة بشكل دينامكيي كما يبين ذلك
الرسم التوضيحي
___________________________________________________________
اجمع الطريقتين السابقتين
_____________
نعدل الtable improt بالطريقة 2 ثم نقوم بعمل hook للدالتين LoadLibrary و GetProcAddress بالطريقة
رقم 3 مستثنين اثناء ذلك الدوال اللازمة لعمل الRootKit وبهذا لن يتمكن البرنامج من معرفة العناوين الصحيحة للدوال
سوائ كان تحميلها ديناميكيا ام استاتكيا
انظر الرسم التوضيحي
_________________________
تغييركود دالة ال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
الروت كیت 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]
عملیة ملء ال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
____
فكرة هذه الطريقة سهلة وتعتمد على التالي يقوم الRootkit بالبحث في ذاكرة الtable import التابعة لبرنامج معين
ومن ثم يقوم بتعديل عناوين الدوال التي تهمه الى عنواينه دوال تخصه )طبعا قبل ان يقوم بالتعديل لابد ان يحفظ العناوين
الحقيقية في مكان ما( .
لاحظ ان البرنامج لحظة استدعاء دالة معينة فانه اولا سيقوم بقراءة عنوان الدالة من الجدول ومن ثم يستدعيها بواسطة
العنوان المقروء. هناك عيب واضح في هذه الطريقة وهو ان الدوال التي يمكن عمل hook لها فقط دوال ستاتيكية وهذا
واضح في الرسم التالي
ولكن هناك نقطةايجابية ايضا في هذه الطريقة وهي ان التنفيذ سهل جدا اضافة الى وجود العديد من الامثلة التي تقوم بهذه
العملية
الشي الوحيد الذي من الممكن ان يشكل صعوبة هو البحث داخل الtable import وهنا تاتي مساعدة شركة مايكرو
سوفت والتي اعطتنا العديد من دوال الAPI التي تسهل الامر لذلك يبدو ال hook الممثل بهذه الطريقة لايزيد عن عدة
صفحات بلغة السي
ثالثا :عمل hook للدالتين LoadLibrary و GetProcAddress
ممكن ان نستعمل اي طريقة لعمل hook عادة نستخدم الطريقة الثانية .فكرة هذه الطريقة كالتالي عند عمل hook
للدالة ,GetProcAddress ممن الممكن اعطاء عنوان الدالة الخاصة بك بدلا من عنوان الدالة المطلوبة من وجهة نظر
البرنامج لا يوجد فرق بين الدوال فقط يطلب عنوانا وينفذ الامر
سلبية هذا الطريقة كونها لا تعمل hook للدوال الاستاتيكية وانما فقط للدوال المربوطة بشكل دينامكيي كما يبين ذلك
الرسم التوضيحي
___________________________________________________________
اجمع الطريقتين السابقتين
_____________
نعدل الtable improt بالطريقة 2 ثم نقوم بعمل hook للدالتين LoadLibrary و GetProcAddress بالطريقة
رقم 3 مستثنين اثناء ذلك الدوال اللازمة لعمل الRootKit وبهذا لن يتمكن البرنامج من معرفة العناوين الصحيحة للدوال
سوائ كان تحميلها ديناميكيا ام استاتكيا
انظر الرسم التوضيحي
_________________________
تغييركود دالة ال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