Taskkill و الهفوات البرمجية إستغلال ثغرة Format String لتخطي إغلاق العمليات

الناقل : elmasry | الكاتب الأصلى : DATA_SNIPER | المصدر : www.arabteam2000-forum.com

السلام عليكم ورحمة الله.
في بعض الأحيان عندما يصادفك فيروس وقد قام بتعطيل tagsk manager فالملاذ الوحيد هو Taskkill المرفق مع الويندوز(في حالة أنه لا يوجد عندك العتاد مثل Process Explorer وغايره)
لكنك ستواجه مشكلة إن تم تعطيله او فقد فعاليته (و هذا ماسنتحدث عنه).
لذلك سنتعرض لحل هذه المشكلة وحلها الذي ربما يخفى عليكم.
طريقة تعطيل Taskkill وذلك عن طريق حذفه (مع الأخذ بعين الإعتبار تعطيل Windows File Protection) أو إستعمال خدعة Image File Execution Hijack.
أما الطريقة الأخرى (تعطيل شبه جزئي) و هي التي سنتحدث فيها.

طريقة إستعمال Taskkill:

TASKKILL /?

حيث ?/ تمثل أحد الأوامر التالية:
/FI,/PID,/IM

مع العلم أن هذه الأوامر مختصرة فقط يمكنك الرجوع إلى هذا الموضوع لتجد فيه جميع الأوامر
http://www.computerh...om/taskkill.htm
أثناء تعاملي مع Taskkill وجدت أن به ثغرة Format String، لكن ما الفائدة منها؟
سيأتي التحدث عن فائدتها بعد قليل.

إستخدام الفراغ في الإسم لتخطي إغلاق الفيروس:

أدات Taskkill تعتمد على Command Line لتنفيذ أمر ما فعلى سبيل المثال عملية إغلاق Process بإسم Virus.exe تتم بالأمر التالي:
TASKKILL /im Virus.exe

في بعض الأحيان Taskkill يمكن أن يتقبل أكثر من وسيط كالتالي:
TASKKILL /im Virus.exe /f

الوسيط f/ يخبر الأداة بإغلاق Virus.exe بخاصية Force .
طبعا إن كان عندك مسكة عقل برمجية :) فإنك ستعرف أن الـوسائط يتم تحديدها بواسطة الفراغات الموجودة بين كل وسيط فعلى سبيل المثال:
لماذا لا يعتبر أن إم process هو Virus.exe /f بل يأخذها على أساس أنها Virus.exe.
طبعا هذا يرجع لتواجد الفراغ بعد Virus.exe و الذي يفصل بين الوسيط f/ و إسم العملية Virus.exe.
جميــل،إذا أردنا أن نستغل هذا الموقف أحسن إستغلال فلماذا لا نفكر أن نجعل إسم الفيروس به فراغ اي Vir us.exe وبالتالي فإن Taskkill أثناء معالجة الأمر الذي يكون بالشكل التالي:
TASKKILL /im Vir us.exe

فإنه سيحلل العبارة بالشكل التالي:
1- الوسيط im/
2-إسم العملية vir
3-الوسيط الأخير us.exe

وقع في الفخ (في الحقيقة أنت الذي وقعت في الفخ ستعرف ذلك بعد قليل) وسيقول البرنامج لك أن الوسيط us.exe غير معرف لدي وبالتالي فلن يتم إغلاق العمليةVir us.exe
أي أنه لا يمكن للأداة Taskkill أن تغلق عملية يكون إسمها يحتوي على فراغ.
إستعمال ثغرة Format String:

ثغرات Format String هي ثغرات معروفة وتحدث أثناء التعامل مع دوال التنسيق مثل:
Printf()
Snprintf()
Vprintf()


وفي حالتنا هذه نحن سنتعامل مع الدالة wsprintfw،ماهو مشهور على هذا النوع من الثغرات هو أنها تستعمل في Memory Leak (وتستعمل كإتثمار لتشغيل شل كود ايضا)،أي أننا من خلالها نستطيع قرائة البيانات الموجودة في Stack و ذلك عن طريق تمرير الوسيط:

x%:لإستخراج البيانات الموجودة في Stack بتنسيق HEX

d%:لإستخراج البينات بتنسيق DECIMAL

فكرتنا هي أن نقوم بتسمية الفيروس بإم لإستثمار الثغرة.

لكي تأخذ صورة عن الإتثمار.

في أغلب إتثمارات Format String وأثناء التعامل مع Memory Leak فإنك على سبيل المثال عندما تكتب الأمر بالشكل التالي:
bug.exe %x%x%x%x

سيكون الناتج شيفرات مكتوبة بالهكس بهذا الشكل:
7FE4005263DA

وبالتالي فإن قمنا بتسمية الملف هكذا:
x%x%x%.exe

فإن الأداة ستمرر الإسم على الدالة wsprintfw وسترجع له إسم مغاير ويكون طبق لمحتويات Stack في تلك الحالة.
شاهد الصورة:
Resized to 81% (was 800 x 570) - Click image to enlargePosted Image

إذن وقع في الفخ كان يريد إغلاق process التي إسمها x%x%x%.exe فذهب ليبحث عن 07fe4c0.exe وللأسف لم يجدها.

ربما تتذكر العبارة “في الحقيقة أنت الذي وقعت في الفخ ”

نعم أنت الذي وقعت في الفخ ففي النهاية أنت الخاسر فإن كنت مستخدم تريد أن تحمي نفسك فأنت الآن في ورطة وإن كنت مطور فيروسات فإن البرنامج يدعم خاصية أخرى للإغلاق :)

وذلك عن طريق إستعمال الوسيط PID/ فما عليك إلا أن تعطيه رقم العملية وهو سيغلقها ولن تكسر رأسك بقضية إسم الفيروس.
ويمكن أيضا إستعمال علامة التنصيص مثل "Vir us.exe" وسيتم إغلاق العملية.
taskkill /im "Vir us.exe"

وفي النهاية أنا وضعت الدرس للإخوة لكي يستفيدوا من إستثمار الثغرات(في غير Shellcode Exploit) ولا يظنوا أن هنالك ثغرات لا تجدي نفعا بل إن الثغرات كالجراد أينما تحل تهلك.
أتمنى أنكم إستفدتم.
لاتنسوني من خالص دعائكم والسلام عليكم ورحمة الله تعالى وبركاته.