• 0
Rasool Micro

كيف اقوم بوصف توقيع الفايروس؟

سؤال

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

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

عندما قمت بتحميل ملف يحتوي على قائمة من الفايروسات وتواقيعها (فايروسات التي تقوم بعمل نسخ لنفسها في داخل البرامج) وهذه امثلة من داخل ملف قاعدة البيانات:


Attention #3=b0008bdab501433a0775fb4b4b81275f
Austr. Para-155=a30201b440b19bb601cd21b8004233d233c9cd21b440b601b104cd21b43ecd21
Austr. Para-162=b8023dba9e00cd218bd8b905008d962101b43fcd2189d6ad
Austr. Para-187=a30201a30501b440b9bb00ba0001cd21b8004233d233c9cd21b440b601b104cd21
Austr. Para-215=a30201a30501b440b9d700ba0001cd21b8004233d233c9cd21b440b601b104cd21
Austr. Para-338=c606ef01b8b440b95201ba0001cd21b8004233c933d2cd21b90300ba0001b440cd21
Austr. Para-377=b440b97901ba0000cd21b8004233c933d2cd21b90300ba0000b440cd21
Austr. Para-3896=b440b9380fba0001cd21b8004233d233c9cd21b440b90400ba0001cd21595a
Austr. Para-491=b9eb01ba0001b440cd21b8004233c933d2cd21b440b90700ba0001cd21b80242

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

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

ان كان هناك غموض في سؤالي فارجو الرد لاني اجد في هذا المنتدى بالذات تفاعل بطيئ بين الاعضاء ولا افهم لماذا.....

وشكراً

1

شارك هذا الرد


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

4 إجابة على هذا السؤال .

  • 0

أعتقد أن هناك فكرة غابت عنك

التواقيع السابقة لا تحسب من الـ entry point

وإنما قد تكون في أي مكان على طول الفيروس

والتوقيع ببساطة عبارة عن special characteristic يتصف بها الفيروس، مثلاً قد يتم اعتماد مجموعة تعليمات تقوم بتنفيذ إجراء خاص لم يسبق لأي فيروس من قبل القيام به

أو يتم اعتماد مجموعة من البايتات يظهر فيها كلمة خاصة قام بإدراجها مبرمج الفيروس للتبجّح (فقد يكتب اسمه أو يكتب عبارة أو يكتب الاسم الذي يريد أن يختاره للفيروس فيه، مثل Gauss)

والمسألة تختلف من شركة لأخرى

في النهاية يكون التوقيع الأفضل هو الذي لا يمكن أن يتشابه مع توقيع أي فيروس آخر، حتى لو اضطر الأمر إلى اعتبار بضع مئات من البايتات عبارة عن توقيع.

من ناحية أخرى، قد تجد بأن هناك برامج يتم كشفها على أنها مثلاً Trojan.Generic.123

لماذا Generic ؟ لأنه ببساطة لا يوجد اسم معين لهذا التروجان، وقد تم استخدام توقيع عام قد تتشابه فيه برمجيات عديدة، فمثلاً لو كان الفيروس يقوم بوضع Hook على حدث التقاط مفاتيح الكيبورد، فسيتم اعتباره Trojan بغض النظر إن كان موجود في قاعدة البيانات من قبل أم لا، حيث يتم الاعتماد على التوقيع العام لاستدعاء التابع SetWindowsHookEx مع البارامتر WH_KEYBOARD أو WH_KEYBOARD_LL ويتم اعتباره تروجان خبيث.

لهذا تجد ظهور false/positive فقد يكون البرنامج يستخدم هذه الخاصة لغرض سلمي تماماً ولا يوجد أي شئ خبيث حولها، لكن بسبب استخدام توقيع عام يتشابه مع ما تقوم به الفيروسات ظهر لدينا false/positive.

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

وتم إدراج طرق كشف أخرى تسمح بتحليل عمل البرنامج بخوارزمية ما وتحدد فيما إذا كان يجب تصنيفه كـ hostile أو friend.

بكل الأحوال إن أردت الاعتماد على التواقيع فقط في برنامجك للوقت الحالي، فالمسألة ليست بالبساطة التي تتخيلها، فمسألة اختيار التوقيع شئ غير بسيط.

أتمنى أن تكون الصورة قد اتضحت.

2

شارك هذا الرد


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

شكراً اخي على ردك..

لكن ردك هذا قد غير تفكيري عن الفايروسات فاذا كان التوقيع هو مجرد مجموعة من الحروف التي تمثل خصائص او كود او اي قيم يتفرد به عن بقية الفايروسات فكيف اقوم بتنظيف البرنامج من الفايروس؟؟؟ هذا السؤال الاول

اما السؤال الثاني هو:

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

ارجو ان تنور لي الطريق اكثر لو سمحت وارجو ان لا يكون طلبي غالي شوي..... :)

0

شارك هذا الرد


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

هو طلبك غالي شوي لأن الإجابة عليه لا يمكن أن تكون بسيطة :)

لكن بكل الأحوال سأجيبك باختصار، ومن ثم عليك متابعة البحث

OEP = Original Entry Point

EP = Entry Point

لكن ردك هذا قد غير تفكيري عن الفايروسات فاذا كان التوقيع هو مجرد مجموعة من الحروف التي تمثل خصائص او كود او اي قيم يتفرد به عن بقية الفايروسات فكيف اقوم بتنظيف البرنامج من الفايروس؟؟؟ هذا السؤال الاول

الفيروسات التي تصيب الملفات وتقوم بالتعديل عليها أنواع:

- فيروسات تكتب نفسها في المساحة الحرة من البرنامج (نعم يوجد مساحات حرة ضائعة في كل برنامج تقريباً وهناك أسباب لذلك)

ومن ثم تقوم بالتعديل على الـ OEP بوضع قفزة إلى بداية مقطع الفيروس، وفي آخره تقوم تقوم بوضع التعليمة التي تم استبدالها في بداية الـ OEP ومن ثم تضع قفزة إلى بداية البرنامج الأساسي

* قد لا يقوم الفيروس بكتابة كل شفرته بشكل متصل في المساحة الحرة، فقد يقوم بكتابتها على أجزاء مختلفة في مساحات موزعة وبالتالي لو أردت إزالته بالكامل فستحتاج لإزالة جميع تلك الأجزاء

هذه يمكن حلها بسهولة من خلال استعادة التعليمة المسروقة إلى بداية OEP وبالتالي يصبح ترميز الفيروس useless لأنه لم يعد يستدعى من قبل البرنامج الرئيسي.. فبقاؤه داخل شفرة البرنامج لن تضر إطلاقاً وحتى لن تؤثر على حجم البرنامج الأصلي.

- فيروسات تقوم بالتعديل على الـ PE الخاص بالملف التنفيذي وتقوم بإنشاء مقاطع إضافية لتخزين نفسها فيه وقد تقوم بنقل الـ OEP بالكامل من خلال PE header إلى أحد تلك المقاطع حيث تبدأ شفرة الفيروس.

هذا النوع سيؤدي حتماً إلى زيادة حجم البرنامج ويمكن إزالته باستعادة OEP الأصلي وحذف المقاطع الإضافية الخاصة بالفيروس

طبعاً فالعملية ليست بتلك السهولة عندما يقوم الفيروس بوضع مقاطع جديدة بأسماء عشوائية.. فعليك حينها تحديد المقاطع الخاصة بالفيروس من خلال بعض التواقيع الإضافية الخاصة به.

- فيروسات تقوم بكتابة ترميز الفيروس بالكامل على جزء من ترميز البرنامج الأصلي

هذا النوع يستحيل إزالته لأنك لا تملك الجزء الأصلي الذي تمت الكتابة فوقه وبالتالي هذا النوع يقوم بعطب الملفات التنفيذية بالكامل.

- فيروسات مرافقة تقوم بكتابة نسخة مخفية من نفسها بامتداد آخر (مثلاً: com مع exe) مستغلة الطريقة التي يعمل بها نظام ما، حيث أن نظام DOS مثلاً عندما تقوم بتنفيذ برنامج ما من خلال كتابة اسمه في سطر الأوامر، ودون أن تقوم بتحديد امتداد ذلك البرنامج فإن النظام يبحث أولاً عن نسخة بامتداد com لتنفيذها، فإن لم يجد فإنه يبحث عن نسخة بامتداد exe.

هذا النوع يكفي حذفه بعد تحديد أنه فيروس ضار.

- فيروسات polymorphic (متحولة الأشكال) حيث يكون ترميز الفيروس تقريباً عشوائي من نسخة لأخرى، حيث يتم ذلك بالاعتماد على التشفير والـ obfuscation من خلال إنتاج سلاسل تعليمات مختلفة تؤدي ذات الهدف في النهاية وبالتالي يكون من الصعب حتى كشفها.

هذا النوع سيحتاج إلى كتابة محركات بحث خاصة لتحليل الـ Pattern التي يقوم فيروس ما بإنتاجها وبالتالي الحصول على تواقيع معينة لعمليات التشفير وفك التشفير والـ obfuscation التي يستخدمها.

- ...

- ...

هناك العديد من الأنواع، فلم نعد في عام 1980 ولا 1990

الأنواع التي ذكرتها جميعها أنواع قياسية قديمة، لكنها ما تزال رائجة حتى الآن لأن الأمر ممكن

في النهاية يوجد تقريباً تصنيفات لأنواع الفيروسات تندرج تحتها

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

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

لا يهم من أتى أولاً: تقنية الحماية أم الفيروس الذي استخدم مثل هذه التقنية من قبل لحماية نفسه من الاكتشاف

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

اما السؤال الثاني هو:

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

لن تستطيع التعرف على اسم الفيروس ما لم تذكر القاعدة شيئاً حول الاسم

تماماً كما في التواقيع التي قمت بوضعها، فاسم الفيروس يسبقها (ولكن هذا فقط اسم الفيروس حسب الشركة التي وضعت هذه التواقيع.. حتى الأسماء تختلف بين الشركات :D)

أما كيف تقوم بتحديد أن برنامج ما هو "فيروس" بناء على توقيع ما، فيكفي أن تقوم بكتابة خوارزمية تقوم بقراءة بايتات البرنامج (كل دفعة يكون طولها بطول السلسلة مثلاً) وبزيادة بايت في كل دفعة وتقوم بمقارنة الدفعة مع التوقيع.

كتابة برامج مكافحة الفيروسات ليست one man's show

هناك عشرات المبرمجين + المحللين (المبرمج وظيفته تختلف عن وظيفة المحلل فالمحلل يقضي وقته بالكامل على تحليل ودراسة البرامج المشبوهة ولا علاقة له بكتابة الخوارزميات الخاصة بكشف أحد الفيروسات.. فقط يكفي أن يقوم بتحديد توقيع مناسب مثلاً أو يضع ملاحظاته حول صفات عمل الفيروس ليقوم المبرمج بتحويلها إلى خوارزمية لكشف هذه الصفات)

وعلى الرغم من أن هناك شركات كثيرة تقوم بترويج برامج مكافحة خاصة بها إلا أنهم يستخدمون تواقيع خاصة ببرامج مكافحة أخرى -- ومثل هذه الشركات لا تستحق فعلياً أن تستمر وعليها أن تبحث عن عمل آخر فما الذي أضافته إلى برامج المكافحة سوى بعض الواجهات المزخرفة؟

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

هذا جوابي ونصائحي ولك حرية الاختيار :)

بالتوفيق

1

شارك هذا الرد


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

شكراً اخي لقد نورت طريقي الله ينور طريقك لقد وفيت شكراً جزيلاً :)

0

شارك هذا الرد


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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

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

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