ماهو الــ Exploit ؟
هو جزء من كود برنامج كتب ليستغل exploit الثغرات او الــ Bugs لتطبيق application ما .
- الــ Exploits تتألف من Shellcode وجزء من كود يتم دمج الــ shellcode فيه , ويحقن في التطبيق المصاب vulnerable .

متطلبات كتابة الــ exploits والـــ Shellcode :
- فهم مفاهيم البرمجة مثلا برمجة الــ C .
- فهم أساسيات لغة الأسمبلي Assemply .
- معرفة شاملة بإدارة الذاكرة وأنظمة العنونة Addressing systems ,( المكدس Stack , والـ heap , والــ buffer , والــ Registers , والــ Reference and pointers

) .

الهدف من كتابة الــ Exploit ؟
- لاختبار التطبيق والتأكد من خلوه من أي ثغرة أو Bug .
- لفحص فيما إذا كانت الــ Bug يمكن الإستفادة منها أم لا .
- الـــ Attackers يستخدمون الــ Exploits للإستفادة من الثغرات .

أنواع الــ Exploits :
1- Stack overflow Exploits
2- heap corruption Exploit
3- Format String Attack
4- integer Bug Exploits
5- Race conditions
6- TCP/IP attack

Stack overflow Exploits :
هجمات طفحان المكدس أو Stack overflow تحدث عندما يتم كتابة حجم زائد oversized من المعطيات في المكدس .
هذا الطفحان قد يؤدي الى اعادة كتابة overwrite معطيات البرنامج الأساسية أو المتحولات الأخرى .


heap corruption exploit :
إفساد أو تخريب الــheap يحدث عنما تكون منطقة الــ Heap في الذاكرة ليس لديها المساحة الكافية لتخزين المعطيات التي يتم كتابتها فيها .
ذاكرة الــ heap تستخدم بشكل ديناميكي ( مؤقت ) من قبل التطبيق في وقت التنفيذ .


Format String Attack :
يحدث هذا النوع من الهجمات عندما يقوم المستخدمون بإدخال قيمة خاطئة يتم إسنادها الى متحول من نوع String ضمن تابع لغة C مثل printf()
- إدخال بارامترات غيرآمنة ضمن توابع الـ C قد يؤي الى ظهور Format String Bugs

Integer Bug Exploits :
تستغل الــ integer Bug عن طريق تمرير قيمة كبيرة زائدة عن الحجم oversized للمتحول المحجوز .
- ربما يسبب إعادة كتابة overWrite المعطيات المتحكمة في سير تنفيذ برنامج ما وبالتالي نقل التنفيذ الى الكود الخبيث malicious الذي تم كتابته .

Race condition :
حالات السباق Race conditions هي ثغرة في الــ Software تحدث عندما يكون هناك عدة عمليات processes تريد الحصول على مورد مشترك ( مثلا الطابعة ) ولكن هذا

المورد يعطى الى process واحدة فقط, ويكون التحكم بعملية وهب المورد الى أية process ليس متحكما به بدقة كبيرة .

أنواع هجمات الــ Race conditions :

File Race condition :
يحدث عندما يقوم المهاجم Attacker باستغلال حالة غير ذرية موقوتة Timed non-atomic condition وذلك عن طريق إنشاء وكتابة وقراءة وحذف ملف في المسار المؤقت

temporary directory
- ذري أو Atomic يقصد بها بأن التنفيذ لن يتم مقاطعته من قبل المعالج حتى ينتهي بشكل كامل .

Signal Race condition :
عندما يحدث تغير في إشارتين Signals أو أكثر مما يؤثر على الخرج تقريبا في نفس اللحظة


TCP/IP Attack :
تستغل علاقة الثقة الموجودة بين الأنظمة وذلك باتباع الخداع في اتصال الــ TCP أو TCP Spoofing .

TCP Spoofing :
- وفيه يظهر النظام الموجود على جهاز المخترق نفسه على أنه شرعي ويرسل SYN packets مزيفة الى النظام المراد إختراقه .
- يقوم النظام الهدف (المعرض للهجوم ) بالرد على المخترق أو المهاجم Attacker بإرسال SYN+ACK packets الى العنوان المزيف الذي تم استقبال الــ Packets منه .
- يبدأ المخترق هجوم DoS or Denial of Service على ذلك النظام فيمنعه من إرسال RST packets لإنهاء الإتصال .
-يقوم بتزويرالـ TCP packets القادمة الى ذلك النظام لإرسالها الى نظام مزيف أو الى جهاز المخترق .
- يستمر في التزوير حتى يحقق مراده .

أمثلة :

proof-of-concept Exploit :
طريقة موثوقة لاختبارالنظم من الثغرات
وتستخدم من أجل :
- التعرف على مصدر المشكلة .
- الحلول السريعة قبل أن يقوم بائع البرنامج بالقيام بحلها.

Commerical Grade Exploit :
عبارة عن Exploit موثوقة ومحمولة Portable وتعمل في الزمن الحقيقي Real-time .
ميزاتها :
- يمكن إعادة استخدام الكود Code Reuse .
- المنصة التي تعمل عليها مستقلة platform independency .

طرق الهجوم :


1- Remote Exploits :
وتستخدم لإستغلال الــ Bugs في الــ Server حيث يكون المستخدم لايملك تصريحا أو دخولا شرعيا الى الـ Server .
- تستخدم الــ Remote Exploits بشكل عام لاستغلال الخدمات Services التي لاتعمل أو تحتاج الى صلاحيات الـ ROOT أو مدير النظام .

2- Local Exploits :
تستغل الــ Bugs للتطبيقات المحلية local aplications مثل إدارة النظام system segmentation ,
وتستخدم الـ Local Exploits لزيادة صلاحيات المستخدم Escalate privileges .

3- Two Stage Exploit :
تقوم بالدمج بين الــ Remote والــ Local Exploits من أجل نجاح أكبر في الدخول الى النظام .

Socket Binding Exploits :
تتضمن استغلال ثغرات الــ Sockets :

Client side Socket programming :
تتضمن كتابة كود لربط التطبيق مع الــ Server عن بعد .

Server side Socket programming :
تتضمن كتابة كود من أجل الإصغاء listening لبورت معين ومعالجة الاتصالات القادمة منه .

أدوات تستخدم في كتابة الــ Exploits :
مثل :
1- LibExploit
2- Metasploit
3- CANVAS

LibExploit :
أداة عامة لكتابة الــ Exploit

ميزاتها :
- وجود توابع الشبكات الشهيرة والأكثر استخداما .
- وجود توابع الــ Buffer overflow الشهيرة .
- الاختيار بين عدة أنواع للـ Shellcode من أجل أنظمة تشغيل مختلفة .
- تشفير الــ Shellcode لتخطي الــ NIDS .

MetaSploit :
هي عبارة عن open source platform لكتابة واختبار واستخدام كود الـ Exploit
- تسمح MetaSploit بإرسال أنواع مختلفة من الهجمات بالاعتماد على الـ Exploit التي تعمل .
- تم كتابتها باستخدام لغة Perl وتعمل على Windows & Linux

ميزاتها :
- كودها كامل وفعال ويتمتع بتطويره السريع .
- تم دعم وتحسين الــ handler and callback التي تجعل كود الــ Exploit أقصر .
- تدعم خيارات الشبكات المختلفة وبروتوكولاتها , وكودها بشكل عام مستقل عن نوع البروتوكول المستخدم .
- تتضمن أدوات ومكتبات لدعم الخصائص مثل :
timeOuts ,Logging ,Encoding ,debugging ,SSL
- قابلة للفهم Comprehensible
- وجود Exploits إضافية للمساعدة في إختبار تقنيات الــ Exploitation , ويوجد أمثلة توضيحية عنها .



CANVAS :
هي أداة حماية كتبت باستخدام لغة python وتم تطويرها من قبل فريق immunity Software's team .
- وهي عبارة عن نظام Exploitaion شامل يقوم بإعطاء معلومات عن الثغرات باستخدام الــ Exploits .

ميزاتها :
- وجود نظام تشفير قوي .
- وجود جزء من أجل الــ Automatic SQL injection .
- يعمل على أنظمة Windows و Linux ويعمل من أجل واجهات أو بدون واجهات باستخدام command line .



خطوات كتابة الــ Exploit :
1- معرفة وتحليل ثغرة التطبيق Application Bug
2- كتابة كود للتحكم بذاكرة جهاز الضحية .
3- أعادة توجيه تدفق تنفيذ البرنامج الذي يعمل على جهاز الضحية .
4- إحقن الــ Shellcode .
5- شفرالإتصال لتجنب الــ IDS .

الاختلافات بين Windows and Linux Exploits :
- الــ Exploits في Linux تستخدم إستدعاءات النظام System Calls بينما في Windows يتم استدعاء توابع تقدمها مكتبات Dynamic Link أو DLL
- في linux الــ Exploits تسيطر على عنوان التعليمة التالية Return address مع عنوان المكدس حيث تكون معطيات المستخدم موجودة هناك أما في Windows تقوم الــ

Exploit بإعادة كتابة overwite عنوان التعليمة التالية Return address في المكدس مع العنوان الذي يحوي تعليمة Jmp reg , حيث Reg هو مسجل ما .

Shellcodes :
هي مجموعة من التعليمات المستخدمة في برامج الــ Exploit للحصول على التابع المطلوب .
- يتم تشغيلها بعد أن يتم إستغلال الثغرة .
- تستغل الــ shellcode تعليمات الآلة في مصفوفة محارف Character array
- تعليمات الآلة تستخدم لتعالج مباشرة التعليمة المطلوبة في حجرة الذاكرة .
- تعليمات الآلة هذه تتكون من OPCODE

NULL byte :
توابع الــ Shell يتم إعادة حقنها inject باستخدام توابع الــ String مثل :
read(),sprintf(),Strcpy()d
- معظم توابع السلاسل String تتوقع وجود Null Byte في نهاية إدخال السلسلة النصية .
مثال :
في لغة الأسمبلي :
I am muhannad " , ox00"
ox تعني أن الرقم الذي يليها مكتوب بالنظام الست عشري hexadecimal

أنواع الــ Shellcodes :

1- Remote Shellcodes :

* port Binding Shellcode
* Socket Descriptor Reuse Shellcode

2- Local Shellcode :
* Execve Shellcode
* Setuid Shellcode
* Chroot Shellcode
* Windows Shellcode

أدوات تستخدم لتطوير الــ Shellcode :
NASM,GDB,Objdump,Ktrace,Readelf,Strace

NASM :
هو عبارة عن أسمبلر assempler لمعالجات x86 يدعم الصيغ التالية :
Linux a.out and ELF.COFF
microsoft 16-bit OBJ and Win32

GDB :
عبارة عن GNU project Debugger يعطي تفاصيل حقيقية للبرنامج أثناء التنفيذ ( مثلا بإمكانه إعطاء تعليمات الأسمبلي للبرنامج الذي يتم تنفيذه والعناوين الذاكرية المستخدمة

...الخ )
منصات العمل platform التي يدعمها :
- UNIX
- Microsoft Windows

لغات البرمجة التي يدعمها :
C++,Fortran,Pascal,java,Assemply

objdump :
- تستخدم لإظهار معلومات أكثر عن ملف object File أو أكثر .
- تأخذ الــ object files كدخل وتظهر النتيجة في ملف مخصص .

Ktrace :
- تابع Ktrace يستخدم تتبع النواة trace Kernel من أجل عملية process أو أكثر في حالة عمل running .
- خرج تتبع النواة يخزن في ملف Ktrace.out
والعمليات التالية في النظام يمكن أن يتم تتبعها :
- System Calls
- Siganl processing
- I/O

Strace :
عبارة عن أداة Debugging تستخدم لتتبع trace كل استدعاءات النظام System calls التي تقوم بها عمليات processes أو برامج أخرى .
- يمكن لــ Strace تتبع Trace ملفات ثنائية Binary Files إذا كان المصدر غير متاح .
- يساعد في عزل الــ bug واكتشافها وفي اكتشاف حالات السباق Race conditions

ReadELF :
- يستخدم للحصول على معلومات عن الملفات ذات الامتداد .elf
- يدعم صيغ ملفات .elf 32bit and 62bit

خطوات كتابة الــ Shellcode :
- اكتب كودا بلغة الأسمبلي أو الـ C ثم قم بفك تجميعه Disassemble
- احصل على البارامترات Args وعلى الــ System ID
- حول كود الأسمبلي الى Opcode .
- قم بإزالة الـ Null bytes
- قم بــ Spawn Shell
- ترجمه Compile
- نفذه execute
- Trace the code
- إحقنه inject في برنامج في حالة عمل running

بعض القضايا المتعلقة بكتابة الــ Shellcode :
- مشكلة العنونة Addressing Problem
- مشكلة البايت الفارغ NULL byte Problem
- تطبيق إستدعاء النظام System Call implementation


نهاية الجزء الأول