مدخل لRootKit - نسخة قابلة للطباعة +- الفريق العربي للهندسة العكسية (https://www.at4re.net/f) +-- قسم : منتديات الهندسة العكسية - Reverse Engineering Forums (https://www.at4re.net/f/forum-4.html) +--- قسم : مختبر الفايروسات - Virus & Malware Labs (https://www.at4re.net/f/forum-30.html) +--- الموضوع : مدخل لRootKit (/thread-1978.html) |
مدخل لRootKit - SeGNMeNT - 04-08-2020 تم اقتباس هدا من ماكتبه عضو في منتدى 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-iat-and-inline-hooking/1108 https://guidedhacking.com/threads/how-to-hook-import-address-table-iat-hooking.13555/ https://www.malwaretech.com/2015/01/inline-hooking-for-programmers-part-1.html#:~:text=Inline%20hooking%20is%20a%20method,antiviruses%2C%20sandboxes%2C%20and%20malware.&text=Rootkits%20tend%20to%20use%20hooks,prevent%2Fmonitor%20potentially%20malicious%20operations. 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 |