JAAS

لغات البرمجة وأمن التطبيقات ( الجزء الأول )

16 ردود في هذا الموضوع

السلام عليكم ورحمه الله ,,,

-

معظم البرامج والمواقع ومختلف التطبيقات التي تكتب , تمر بهذة المرحلة أو هذا الإختصاص ( أمن التطبيقات )

بإختصار : مجال أمن التطبقات هو البحث في الشفرة المصدرية لأي تطبيق عن إمكانية حدوث ثغرة أمنية!

أو البحث عن إحتمال إستغلال شفرة معينة مكتوبة في التطبيق لتنفيذ أي أمر وبأي طريقة,,,

سنقوم بكتابة هذا الموضوع في قسمين :

القسم الأول : مجال أمن التطبيقات للملفات التنفيذية, وهو يبحث طرق إيجاد الثغرات وتجنبها

في الشفرة المصدرية للملفات التنفيذية , تكتب الملفات التنفيذية بعدة لغات مثل

لغة الإسمبلي , السي , البيسك , الباسكال ... وغيرها

أنواع الثغرات في هذا المجال Buffer Overflow بأنواعها stack,heap.. وثغرات Format String و File Handling ..وغيرها

القسم الثاني : مجال أمن تطبيقات الإنترنت ومواقع الويب

وهو يبحث في إستغلال أخطاء لغات وسكربتات برمجة الوب perl ,asp , php ,jsp ..

أنواع الثغرات في هذا المجال Injection بأنواعها cmd ,sql... وثغرات CSS/XSS أو مايعرف Cross-Site Scripting وغيرها

نبدأ الموضوع

أي برنامج أو تطبيق مكتوب بلغة برمجة يمر بعدة مراحل , وهي

الفكرة وبعد ذلك مرحلة كتابة التطبيق بلغة برمجة وبعد ذلك تنقيح الأخطاء

وبعد هذة المراحل يكون التطبيق جاهز للتنفيذ وبدون أخطاء برمجية .

وهنا تبدأ مرحلة جديدة وهي أمن التطبيق , وهي البحث عن أي تعليمة يمكن إستغلالها في الكود الذي قمنا بكتابتة

لتنفيذ أو تغيير مجرى التنفيذ , ماهي الخطوات والحلول والأساليب المتبعة في هذا المجال؟!!

أولاً : الملفات التنفيذية

الملفات التنفيذية تكتب بعدة لغات , ولكن الحلول والخطوات متشابهة في كل لغات البرمجة

لأن كل اللغات تعتمد على دوال API , ولذلك سنستخدم لغة السي في بقية الأمثلة

-

أغلب الثغرات في كتابة الملفات التنفيذية هي ثغرات الفيض في مخزن البيانات ,, ومكانها الذاكرة

ولذلك تجد أهم الدوال المستخدمة في أمن التطبيقات محصورة في دوال الذاكرة مثل

FillMemory
CopyMemory
MoveMemory
-
IsBadReadPtr
IsBadWritePtr
IsBadStringPtr
-

إستخدام دوال إعادة التحجيم
LocalReAlloc
LocalSize
GlobalReAlloc
HeapReAlloc
....وغيرها

-

ولآن سنحاول كتابة المثال المشهور لإحداث ثغرة فيض .. وبعد ذلك سنكتب الحلول

الكود:

#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<winbase.h>

int main(int argc,char *argv[]){

char name[200];
if (argc != 2)
return 1;

lstrcpy(name,argv[1]);
printf(name);
return 0;
}

هذا المثال عبارة عن برنامج بسيط , يستقبل مدخلات عبارة عن إسم المستخدم ويقوم بطباعتها على الشاشة

بالتأكيد الكود السابق صحيح وبدون أخطاء,, ,وكما هو واضح تم تحديد طول إسم المستخدم 200 حرف ,

ومن المستحيل وجود إسم طولة أكثر من 200 حرف ,, ومع ذلك يعتبر هذا الكود خطأ أمني يمكن أن يستغل

لحدوث فيض وإدخال أي برنامج أو shellcode والطريقة معروفة .. إدخال حجم بيانات أكبر من 200 حرف

والحل في مثل هذة الظروف يكون بإستخدام تعليمات تقييد المدخلات وهي تعليمات مهمة ,, لاحظ تغيير التعليمة

lstrcpy(name,argv[1]);

إلى

CopyMemory(name,argv[1],199);

لاحظ كيف قيدنا أي مدخلات لمخزن البيانات بحجم لا يتجاوز 200 بايت من 0 إلى 199 =200 بايت

هذة القاعدة مهمة جداً في أمن التطبيقات

القاعدة الأولى : تقييد المدخلات لمخزن البيانات

إستخدام الدالة CopyMemory بدل أغلب دوال النصوص التي تتعامل مع مخزن بيانات متغير مثل lstrcpy,lstrcat ....وغيرها

إستخدام المايكرو memcpy بدل المايكروstrcpy,strcat .......... وهكذا

-

مثال بسيط لأهمية هذة القاعدة ,,,

قبل فترة قمت بدراسة لبرنامج مشهور وهو مشغل الفلاش Macromedia Flash Player 6 في حزمة MX

وفي مراحل مراقبة طريقة تقسيم ملف الفلاش وطريقة قرائتة ,, أعتقدت أني وجدت خطأ وهو طريقة قرائة

إسم الخط المستخدم في ملف الفلاش ؟ يتم نقل إسم الخط مباشرة إلى المكدس!! وهنا وجدت خطأ مؤكد لإكتشاف ثغرة

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

وهو إستخدام تقييد لمخزن المدخلات memcpy ,, لاحظ الصورة

post-4702-1115759772_thumb.gif

الخطوة الثانية : التحقق من إمكانية الوصول إلى ذاكرة مخزن البيانات

دوال التحقق وهي : IsBadStringPtr , IsBadWritePtr ,IsBadCodePtr...

هذة الدوال مهمة جداً في عمل البرامج ومع ذلك لم أرى برنامج عربي يستخدمها

-

هل تريد نصيحة وطريقة تضمن لك ثبات أي برنامج تقوم بكتابتة ؟ فقط إحفظ هذة القواعد

1 - إذا قمت بتعريف أي متغير في برنامجك ,, وقبل أن تخزن بة أي بيانات دائما تحقق من إمكانية الكتابة

مثلاً في برنامجنا السابق نضيف ,, قبل الكتابة للمتغير name

if(IsBadWritePtr (name,200)==0){

هنا نضيف دوال الكتابة للمتغير
}

هذا البلوك أضفة في أي مكان في البرنامج تجد عملية كتابة للمتغير name

2- تحقق من العنوان الذاكري قبل أي عملية قرائة للمتغير

مثال

if(IsBadReadPtr (name,200)==0){
memcpy(des,name);

3 - قبل أن تستخدم أي سلسلة نصية ,, فقط مررها على الدالة IsBadStringPtr

4- قبل أن تتصل بأي دالة أو عنوان تنفيذي ... تحقق من وجودة بهذة الدالة IsBadCodePtr

وتوجد طرق أخرى كثيرة ...

--

لضيق الوقت سنكمل هذة السلسلة من الدروس بالأقساط

وبالتوفيق ,,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

فين الغيبه اخى jaas نورت المنتدى .

سؤال بسيط فى حالة إستخدامCopyMemory كيف تقراء النص؟؟ هل تقراء إلى ان تصل إلى علامة الصفر, اتوقع ان تكون كذالك ...... ام ان لها طريقة عمل اخرى؟

درس ممتاز كالعاده وياريت تشرح بقية الدوال وهل هى جزء من مكتبة stdio وكيف يمكن إستدعائها بالـMasm32 :

والسلام

تم تعديل بواسطه احمد غريب
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مرحبا أخي أحمد ,,,

هذة الأيام صعب الواحد يلاقي وقت للفراغ

فى حالة إستخدامCopyMemory كيف تقراء النص؟؟

تجد في الصورة وباللون الأخضر المسجل ecx

والقانون = ecx * 4+4

الرقم اربعة يعني 4 بايت أي 32 بت وهو حجم مسجلات المعالج

وبالتأكيد يتم إنقاصها إلى أن تصل 0 لتخرج من دورة الكتابة لمخزن البيانات

وهل هى جزء من مكتبة stdio وكيف يمكن إستدعائها بالـMasm32

أعتقد ولا دالة تستخدم تعريف stdio

بالنسبة للمايكروات مثل memcpy و memset...

تستخدم في الفيجول سي ملف string وفي البورلند وبقية المترجمات ملف memory

بالنسبة لدوال API مثل CopyMemory

تجدها في مكتبة kernel32.dll وطريقة إستخدامها في masm32 , مثل إستخدام بقية دوال api

-

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

يااااااااااااااه :) فينك يا Jaas وراجع بموضوع متقدم جدا

على العموم هذا هو Jaas وفقك الله وسدد خطاك

-

جارى القراءة ,,,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جزاك الله خيرا على هذةالمعلومات الجميلة الاكثر من رائعة ومفيدة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الأخ العزيز Jass

إن عملية تصميم برنامج لا تقتصر على كتابة الكود أو إستخدام دوال معينة حماية للبرنامج من الاخطاء ..و لا يمكن بحال من الأحوال سد جميع الثغرات في أي نظام معين و القول بأنه نظام خالي من الثغرات بنسبة 100% ولهذا اقول بأن الأخطاء التي يمكن ان يقع فيها المصمم تختلف فمنها ما تعتبر ثغرات في خدمة يستخدمها المبرمج أو في ثغرة برمجية يمكن أن يستغلها المستخدم إلى ثغرة في لغة البرمجة نفسها أو سوء في إستخدام المصادر, أو سوء تصميم النظام , إلى اخر القائمة.

ربما لا يكون قصدي واضحا و لكن يمكن القول أن التقيد بخطوات دورة حياة البرنامج إبتداء من التحليلي الجيد و المتقن للنظام مرورا بالتصميم و إنتهاء بالتنفيذ تقيد إلى حد بعيد عدد الأخطاء التي يمكن أن يقع فيها المصمم..فعمليا و من أجل منتج برمجي جيد لابد من توفر تحليل منهجي و نموذجي للمنتج البرمجي على اختلافها و من ثم توضيح المتطلبات التي يحتاج المنتج المقترح إلى تنفيذها و الطريقة المثلى التي يتم تحقيق هذه المتطلبات.

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

-خطأ برمجي (كما ذكرته في مثالك) فهذا يمكن تلافيه بإستخدام Error Handler مناسب سواء اكانت تقدمه اللغة البرمجية التي يستخدمها المبرمج أو يمكن أن يصممه المبرمج بنفسه.

-خطأ برمجي ينم عن عدم إحترافية برمجية : و هذا مما لا يصلحه العطار...و يحتاج إلى إعادة نظر في الإمكانات الاحترافية للمبرمج.

اعتذر ربما يكون ردي غير مفصل بشكل واضح و لكنني قد كتبته بعجالة و ساعود مرة اخرى ان اقتضى الامر...

تحياتي للجميع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

وجدت بعض الكتب الالكترونيه وحبيت اشارككم بها

الكتاب الاول والثانى سهل وممتاز كبدايه, والكتاب الاول جيد لمن اراد ان يفهم لغة الاسمبلى فهو يستفيض فى شرح المكدس وكيفية عمل البرنامج, انواع الذاكره والشبكات والتشفير. يتكون الكتاب من 5 فصول

اما الكتاب الثانى فهو يتشرح بطريقه سؤال جواب وتحليل لكل حاله ويحتوى تقريباً على كل انواع الثغرات وكيفيه تامينها يتكون الكتاب من 13 فصل.

بقية الكتب لم اطلع عليها بعد.

حمل الكتاب الاول من هنا

او من هنا

حمل الكتاب الثانى من هنا

او من هنا للتحميل من هذا الرابط إختر free وإنتظر 70 ثانيه سيظهر لك رابط التحميل تختاره لتحميل الكتاب.

الكتاب الثالث لحفظ هذا الكتاب إختر بالزر الايمن و save target as..

الكتاب الرابع الكتاب للاسف حذف ولكن السرفر ظريف ويعتذر بطريقه مبتكره عن عدم العثور على الصفحه..

الكتاب الخامس يمين وإحفظ الملف بنفس الطريقه المذكوره فى الكتاب الثالث.

والسلام

والسلام

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

حسبى الله ونعم الوكيل فيك يا جاس

اما الاخ احمد غريب ف منه لله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ملعش كان ممكن انسى اوضح السبب فى دعائى عليكم

فانتم ببساطه ناوين تتعبوا اعصاب مبرمجين الفجوال بيسك الغلابه الى عندهم برامج عاوزين يبعوها

وتلاقى الواحد فيهم بيرتعد وهو يتخيل كيف ان يمكن بازدياد

من يجيدون الاسمبلى

ان يصبح برنامجه يوزع بالمجان ويخسر تلك الشهور التى قضاها

فى تصميمه

هذا ان لم يصبح هو الاخر محترف اسمبلى

وبالتالى فانه علينانحن مبرمجى فجوال بيسك المساكين قبل ان نصنع الرنامج ان نصنع له الحمايه

والا فسيصيبنا الحزن ونحن نرى برامجنا توزع لها فى المستقبل القريب كراكات

فالعلم يا جماعه لا ينشر الا الى اهله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

الاخ سامى فى الواقع لا اجد تعليق لما ذكرته, فى بعض الاحيان السكوت من ذهب..

بالنسبه للاخوه المتابعين للموضوع وجدت موقع فيه اكثر من 100 درس لاداة ollydbg واغلبها للمبتدئين .

http://cracking.accessroot.com/

اختر الصوره الضخمه فى اعلى الصفحه ثم اختر tutorials من الصفحه التاليه ستجد الدروس.

بالتوفيق..

والسلام عليكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

وهذا موقع اخر يحتوى على بعض الدروس فى البرمجه العكسيه

http://www.yates2k.net/tug.htm

وموقع اخر

http://www.mihir.2ya.com/

معى الاعتذار الشديد للاخ jaas تحوير الموضوع من امن التطبيقات إلى اختراق البرامج ولكن اعلم انك تعشقها لذلك لم استطع المقاومه..

والسلام عليكم

تم تعديل بواسطه احمد غريب
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الاخوه الافاضل ابشركم بان احد اعضاء المنتدى الافاضل

قد بدا فعلا فى انشاء برنامج عربى للتشفير مستعملا الكثير

من التقنيات

وهو ما يمثل املا لنا نحن (اصحاب المصلحه )فى ظل دعاوى

تخريب البرامج

بل اننى اكاداجزم انه لن يتواجد شىء اسمه فك حمايه بعد

نزول برنامج الاخ الفاضل

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جزاك الله خيرا جاز

جزاك الله خيرا احمد غريب

ربنا يهديك سامي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

دعونى اوضح الموضوع ببساطه هو اننا لازم نفرق بين فك جمايه البرامج الامريكيه مثلا وفكر حمايه برامج اخواننا .........

فالبعض يستمرىء الاولى وقد اعذرهم فقد صادر الامريكان اموال المسلمين بحجه انها اموال الارهابين

اما من يستمرئون الثانيه فاليراجعوا انفسهم هذا ماقصدت واذكر

اننى اعطيت نسخه تجريبيه لموزع فاخبرنى بالطريقه التى كنت

احمى بها البرنامج

وبالتالى توقعت لماذا قطع صلته بى بعدما اخذ النسخه التجريبيه واكتفى بها!!!!!!!!!!!

لذا فالعلم لاهله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
بل اننى اكاداجزم انه لن يتواجد شىء اسمه فك حمايه بعد

نزول برنامج الاخ الفاضل

لا اعلم من هو هذا الاخ الفاضل و لا اعلم على اى اساس بلغت ثقتك به و لكن كرر من ورائى هذه الجملة

you can not crack everything, but everything is crackable

شكراً يا احمد على الكتب و للعلم فهى موجوده فى مكتبة الفريق العربى للامن منذ فترة ليست بالقصيرة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

اخى طارق إبراهيم المنتدى كبير والواحد مش عارف فيه إيه ومافهوش إيه, على كل حال وضع روابط للكتب لا تكلف المنتدى مساحه على الموقع وكذلك تكون قريبه من موضوع ذو صله.

الاخ سامى انت تاتى هنا وتهيننا ثم تقول لم تفهمو قصدى.

اولاً من قال لك اننا نخترق البرامج العربيه, وهذا لو افترضنا انه فيه برامج عربيه تستحق الاختراق اصلاً.

ثانياً هو عشان إنتا واحد ضحك عليك حتطلع غلك فى كل مبرمجين الاسمبلى, إحنا ذنبنا إيه, انا حذفت مداخلاتك إلى مالهاش لازمه, وارجوك لو عندك شيئ مفيد تفيدنا بيه اهلاً وسهلاً , إنما تجى هنا وتتهكم علينا فهذا غير مقبول.

وللمره الثانيه هذا الموقع من افضل المواقع للمبتدئين http://cracking.accessroot.com وجدت فيه اشياء عجيبه تستحق الاهتمام.

وختاماً السلام عليكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .