تعريف فيروس الحاسب :-
ماهو فيروس الحاسب ؟ ومن هو هذا الكائن الذي أخذ يهدد عالم المعلوماتية بعد عقود قليلة من بدء عصر الحاسبات الألكترونية ؟
لقد ولدت فكرة الفيروس الإلكتروني منذ الأيام الأولى لعصر الحاسب وكان جون فون نيومن رائد الحاسبات الأول هو الذي أرسى حجر الأساس لذلك في مقالته التي نشرها بعنوان «نظرية وتنظيم الألة المعقدة ذاتية الحركة » إذ وضع فون تيومن «أوتومات» من حالة تقوم بإنتاج نسخة مطابقة لذاتها . وتعرف الأوتومات بأنها الصيغة الأبسط للنموذج الرياضي الذي يمثل آله مجردة تُعّرف بمجموعة من الحالات الممكنة وتستطيع هذه الآلة قراءة سلسلة من الرموز تشكل أبجدية خاصة بالآلة وتقوم هذه الآلة بتغيير حالتها الداخلية تبعاً للدخل المقروء والحالة الداخلية للآلة في تلك اللحظة ويستخدم هذا النموذج عادة لتوصيف النظم المنطقية والبرمجيات .
وفي عام 1983 نكث كين توميسون بوعد الشرف وهو كاتب النموذج الأصلي من نظام التشغيل المعروف UNIX وقد حصل على جائزة اتحاد الأجهزة الحاسبة تكريماً له . وعندما ألقى خطابه بهذه المناسبة لم يكتف توميسون بالكشف عن وجود فيروسات الحاسب الأولي وإنما يبين للحضور أيضاً كيفية صنعها وقال «إذا لم يكن قد سبق لكم فعل ذلك من قبل فإنني أحثكم أن يخربوه بأنفسكم »
وفي آيار من عام 1384 نشرت مجلة العلوم الأمريكية مقالة نصف تفاصيل لعبة حرب الوحدة المركزية وعرضت على القراء مقابل دولارين فقط هي أجرة البريد الحصول على التوجيهات اللازمة للكتابة مثل هذه البرامج «الفيروسات» ومن ذلك الوقت بدأت الفيروسات بالظهور والتكاثر .
أن الفيروسات البرمجية ليست مؤذية كبرامج بحد ذاتها . وخطورتها ناجمة أساساً عن قدرتها على السيطرة على العمليات التي تجري في الحاسب والبدء بعملية التكاثر والنسخ الذاتي وليس على قدرتها على أتلاف المعطيات .
أن تسمية هذه البرامج بالفيروسات غير دقيقة والتسمية العلمية الدقيقة لها هي «طفيليات برمجية قادرة على الانتساخ الذاتي »
أنماط الفيروسات :
يمكن تصنيف الفيروسات بعدة طرق ، إلا أن أكثر الفيروسات شيوعاً هو تلك التي تهاجم البرامج التطبيقية . إذ يتم حفظ البرامج والمعطيات التي لا تنتمي إلى نظام التشغيل بصيغة ملفات بسيطة ، لكل ملف اسم مؤلف من ثمانية أحرف بالإضافة إلى لاحقة من ثلاثة أحرف فيمكن مثلاً :-
1- تطلق على ملف ما أسم TRUE.TXT فتمثل الكلمة TRUE اسم الملف . في حين تمثل الأحرف TXT اللاحقة التي تختارها عادة بحيث تعطي بعض المعلومات عن طبيعة الملف ، ففي مثالنا هذا يمكن أن يكون الملف TRUE.TXT ملفاً نصياً . أما البرامج فتخزن في ملفات تنتهي أسماؤها بلاحقة مثل COM أو EXE أو SYS فتحت نظام التشغيل DOS لا يمكن تنفيذ إلا الملفات التي تحمل أسماؤها واحدة من هذه اللاحقات . وبما أن الفيروس هو برنامج ينتظر التنفيذ لذا عليه أن يلتصق بملف من نوع COM أو EXE أو SYS أما إذا التصق بملف من نوع آخر يمكنه أن ينفر ولا يتكاثر ولكن يمكن أن يخرب بعض المعلومات . ولكل نوع من الملفات القابلة للتنفيذ صيغة خاصة تختلف عن غيرها لذلك يصمم الفيروس بحيث يلتصق بنوع محدد من البرامج ، فالفيروسات المصممة لمهاجمة الملفات من النوع COM لا يستطيع مهاجمة الملف من نوع EXE والعكس أيضاً صحيح .
ويمكن بالطبع تصميم فيروسات تستطيع مهاجمة نوعين أو أكثر من البرامج إلا أن ذلك يتطلب استخدام طرق خاصة لإعادة انتاج الفيروس بطريقة مختلفة حسب نوع وصيغة الملف الذي يهاجمه .
العناصر الوظيفية للفيروس :
يتضمن الفيروس اجرائيين أساسيين لا غنى عنهما وهما :-
1- اجرائية البحث التي تقوم بتحديد الملفات أو مواقع الذاكرة التي يمكن أن تكون هدفاً للفيروس وتقوم هذه الاجرائية إذاً لتجديد الموقع الذي ستتم عملية نسخ الفيروس إليه كما تحدد إذا كان يجب أن يتم هذا النسخ بسرعة أم ببطء وإذا كان بإمكان الفيروس مهاجمة وحدات مختلفة داخل الحاسب أم القرص الصلب فقط مثلاً .
2- اجرائية النسخ التي تقوم بإعادة نسخ تعليمات الفيروس إلى المنطقة التي تكون اجرائية البحث قد حددتها في وقت سابق ويجب أن تكون هذه الاجرائية متطورة بما يكفي لأن تؤدي عملها دون أن تصبح عرضة للإكتشاف وكلما كانت هذه الإجرائية صغيرة كلما كان أداء الفيروس أفضل .
كتابة الفيروسات :-
تكتب الفيروسات باللغة التجميعية (assembly) فاللغات عالية المستوى مثل باسكال و C وغيرها تسمح بكتابة برامج مستقلة إلا أنها لا تقدم لنا الامكانيات التي تقدمها اللغة التجميعية فاللغة التجميعية هي اللغة الوحيدة التي تمكننا من أمتلاك السيطرة الكاملة على كافة موارد الحاسب واستخدامها بالطريقة التي نريد .
فيروس STEALTH
تعريفه :
يستطيع الاختباء على الأقراص المرنة والصلبة كما يستطيع أن يصيب الأقراص الأخرى بطريقة فعالة جداً وفي أي وقت وليس فقط خلال مرحلة تمهيد الحاسب وتحيل ترميز تعليمات هذا الفيروس أكثر من قطاع واحد وهو يستخدم تقنيات متقدمة نادرة الاستخدام تسمح له بالعمل دون تخريب أية معطيات موجودة على القرص . ويترك هذه الفيروس جزء من تعليماته مقيماً في الذاكرة .
إلا أنه لا يستطيع استخدام وظيفة نظام DOS الخاصة بذلك ( الوظيفة 31H ) كبقية البرامج المقيمة (TSR) لأنه يبدأ عمله قبل أن يتم شحن نظام DOS كما يقوم بخداع هذا النظام .
النسبة الأساسية للفيروس :
يتألف الفيروس STEALTH من ثلاثة أجزاء فهو يتضمن : قطاع التمهيد المصاب وهو عبارة عن قطاع من التعليمات الجديدة التي ستحتل مكان قطاع التمهيد الأساسي في المسار 5 الرأس 1 القطاع 1 . أما الجزء الثاني فهو برنامج الفيروس المؤلف من عدة قطاعات . الجزء الثالث : هو قطاع التمهيد القديم (الأساسي) يقوم قطاع التمهيد المصاب عند شحنه وتنفيذه بالذهاب إلى القرص ويشحن منه برنامج الفيروس الأساسي وقطاع التمهيد القديم . فيتم بعد ذلك تغيير برنامج الفيروس الذي يقوم باصابة القرص وربما يوضع في الذاكرة حيث يستطيع من هناك نقل العدوى لاحقاً لأقراص أخرى إلى نظام التشغيل ، يقوم قطاع التمهيد المصاب عند شحنه وتنفيذه بالذهاب إلى القرص ويشحن منه برنامج الفيروس الأساسي وقطاع التمهيد القديم ، فيتم بعد ذلك تنفيذ برنامج الفيروس الذي يقوم بإصابة القرص وربما بالتوضع في الذاكرة حيث يستطيع من هناك نقل العدوى لاحقاً لأقراص أخرى ، أما قطاع التمهيد القديم فيكتب في الذاكرة في العنوان 000:7c00h أي في المنطقة التي تقع بعد قطاع التمهيد المصاب ، وفي المرحلة الأخيرة يتم تنفيذ تعليمات قطاع التمهيد القديم بحيث يتم تمهيد الحاسب الشكل طبيعي .
يستطيع الفيروس STEALTH أن يصيب قطاع التمهيد الخاص بتجزئة القرص الصلب والذي يتضمن تعليمات تختلف تماماً عن تلك التي يحويها قطاع تمهيد التشغيل . يحتفظ هذا الفيروس بقطاع التمهيد الأساسي كما هو ولذلك فهو لا يحتاج للتمييز بين قطاع تمهيد القرص المرن وقطاع تمهيد القرص الصلب ، إذ يكتفي ببساطة بنسخ التعليمات الموجودة أساساً في القطاع ويستخدمها بطريقته الخاصة ، وهذا ما يجعله مستقلاً تماماً عن نظام التشغيل .
آلية النسخ :
قبل شرح آلية النسخ التي يستخدمها الفيروس سندرس كيفية اختفاء الفيروس على القرص إذا يحتاج هذا الفيروس إلى استخدام ستة قطاعات لتخزين تعليماته ، وهو يستخدم لذلك طريقة فعالة تسمح له بالاختفاء على كل أنواع الأقراص المرنة وكذلك على الأقراص الصلبة مهما كان نوعها .
توضع تعليمات هذا الفيروس في منطقة من القرص خارجة عن نطاق ما يمكن أن يفهمه نظم DOS ( أو غيره من نظم التشغيل ) بحيث يصبح غير مرئي نهائياً . ويترجم هذا الكلام ، في حالة الأقراص المرنة بتنسيق القرص بطريقة غير قياسية لكنها قادرة على احتواء تنسيق القطاعات القياسي الذي يستخدمه نظام DOS ، فيستطيع نظام DOS استخدام القطاعات المنسقة بالطريقة القياسية ، أما الأجزاء الأخرى فتكون غير مرئية بالنسبة له وفيها يتم تخزين تعليمات الفيروس . ويمكن الوصول إلى هذه القطاعات بكتابة برنامج خاص يستدعي مباشرة وظائف نظام BIOS الخاصة بالتعامل مع الأقراص .
يستخدم الفيروس STEALTH الطريقة السابقة مع الأقراص المرنة قياس 5.25 إنش وبسعة 360 كيلو بايت و 1.44 ميغابايت ، إذ يطلب الفيروس من النظام حجز منطقة معينة من القرص والبقاء بعيداً عنها ليتوضع فيها الفيروس .
لنتفحص طريقة تنسيق الأقراص 5.25 و 3.5 إنش لنرى كيف تساعد الطريقة الموصوفة سابقاً في إخفاء الفيروس ، ولنأخذ أولاً الأقراص المرنة بسعة 1.2 ميغابايت وقياس 5.25 إنش . ينسق القرص بشكل وجهين 0 و 1 يضم كل منها 80 مساراً مرقمة من 0 إلى 79 ، ويحتوي كل مسار 15 قطاعاً سعة كل منها 512 بايت ، وبالتالي تكون سعة هذا القرص : = 512 X2 X80 1228800 بايت . يستخدم جزء منها لتخزين قطاع التمهيد وجدول تخصيص الملفات (FAT) والدليل الجذري فيبقى منها 1213952 بايت يستخدمها المستثمر حسب حاجته .
ليس ثمة ما يمنع من تنسيق مسار إضافي على القرص يحمل الرقم 80 ، ويمكن لرأس القراءة والكتابة أن ينتقل إلى هذا المسار وبالتالي يمكنه تسجيل المعطيات على هذا المسار . وتصمم الأقراص دائماً بحيث تحوي هذه المساحة الزائدة . إن إضافة هذا المسار تعني إضافة 15 قطاع إلى كل وجه ، ونظام التشغيل لن يرى هذه القطاعات على الإطلاق .
عندما يحاول الفيروس إصابة قرص مرن قياس 5.25 إنش بسعة 1.2 ميغابايت فإنه يتقصى أثر المسار 80 أو المعطيات المسجلة في القطاعات من 1 إلى 5 ، ويقوم بقراءة قطاع التمهيد الأساسي إلى الذاكرة ثم يكتبه في نهاية القطاع رقم 6 من المسار 80 ، ويضع قطاع التمهيد المصاب الخاص به مكان التمهيد الأساسي في المسار 0 ، الوجه 0 القطاع 1 .
أما بالنسبة للأقراص المرنة قياس 3.5 إنش بسعة 720 كيلوا بايت والتي تحو 80 مساراً في كل وجه و 9 قطاعات في كل مسار فلا يقوم الفيروس بتنسيق مسار جديد ، بل يكتب تعليماته ومعطياته في القطاعات من 4 إلى 9 من المسار 79 على الوجه رقم (1). وهي القطاعات الستة الأخيرة من القرص والتي قد تحوي معطيات ، وبالتالي سيتم تخريب هذه المعطيات في حال إصابة القرص . يكبت الفيروس STEALTH تعليمات برنامجه الأساسي في القطاعات من 4 إلى 8 ، أما في القطاع رقم 9 فهو يخفي قطاع التمهيد الأساسي ، ولمنه نظام DOS من استخدام هذه المنطقة يلجأ الفيروس إلى كتابة معلومات في جدول تخصيص الملفات توحي لنظام التشغيل أن هذه القطاعات غير صالحة للاستعمال .
يرتب النظام DOS الأقراص المرنة في كتل عنقودية (Cluster) تضم كل منها قطاعاً واحداً أو عدة قطاعات متجاورة ويقابل كل كتلة مدخل في الجدول FAT يتضمن قيمة ترمز على 12بت . فعندما تكون الكتلة فارغة تكتب القيمة 0 في المدخل المقابل لها في الجدول FAT ، أما إذا كانت الكتلة مستخدمة فيتضمن المدخل المقابل لها عدداً يشير إلى رقم الكتلة التالية في الملف ، وتوضع في المدخل قيمة محصورة بين FF8 و FFF للإشارة إلى أن هذه الكتلة هي الكتلة الأخيرة من الملف ، وتستخدم القيمة FF7 للإشارة إلى أن الكتلة غير صالحة للاستخدام .
فعلى سبيل المثال تتألف كل كتلة عنقودية في القرص المرن ذي السعة 720 كيلو بايت من قطاعين ، فيقوم الفيروس STEALTH بكتابة القيمة FF7 في مداخل الكتل الثلاث الأخيرة مما يوحي لنظام التشغيل أن هذه الكتل ( 6 قطاعات ) غير صالحة للاستخدام وبالتالي يبتعد عنها .
يواجه الفيروس STEALTH مشكلة أخرى مع الأقراص الصلبة إذ توجد أنواع مختلفة من السواقات وعليه أن يتأقلم مع كل منها بطريقة مختلفة ، لكن هذه المشكلة محلولة من الناحية العملية إذ لا تنظم الأقراص الصلبة عادة بحيث يشغلها نظام DOS بالنسبة 100٪ فعلى كل قرص صلب منطقة غير خاضعة لنظام DOS ونخص بالذكر قطاع التمهيد الأول فهو ليس ملفاً ببنية ملفات نظام DOS .
إن إيجاد منطقة ما على قرص صلب غير خاضعة لنظام DOS ليس أمراً صعباً ، فإذا استخدمت برنامج FDISK لتجزئة القرص الصلب إلى عدة أجزاء ستكتشف وبسرعة أمراً هاماً ، فبالرغم من أن قطاع التمهيد الأول يتوضع في القطاع الأول من المسار 0 على الوجه 0 فإن برنامج FDISK ( في كل إصدارات نظام DOS ) لا يضع بداية الجزء الأول في القطاع الثاني من المسار 0 على الوجه 0 ، وبدلاً من ذلك يبدأ الجزء الأول دائماً عند القطاع الأول من المسار 0 على الوجه رقم (1) ، وهذا يعني أن المسار رقم 0 على الوجه رقم 0 ( باستثناء القطاع الأول منه ) يشكل مساحة حرة على القرص ، وحتى أصغر الأقراص الصلبة التي تتسع لـ 10 ميغا بايت فقط تحي 17 قطاع في كل مسار ، بذلك يستطيع الفيروس STEALTH الاختفاء في هذه القطاعات المهجورة ويستخدم لذلك التقنية نفسها مهما كان نمط وحجم القرص الصلب ( يُذكر هنا أن بعض برامج التنسيق على المستوى الأدني ( low level format ) تستخدم هذه القطاعات لتخزين بعض المعلومات الخاصة بها ، إلا أن كتابة الفيروس فوق هذه المعلومات لن تسبب أي ضرر لعمل الحاسب ) .
تجري عمل الإصابة بشكل تقليدي ، فالإصابة قرص ما ينفذ الفيروس الخطوات التالية :
(1 يحدد نمط القرص المستهدف : قرص صلب أم واحد من أنماط الأقراص المرنة الأربعة التي يعرفها .
( 2 يتفحص القرص ليعرف إذا كان مصاباً سابقاً ، فإذا كان الأمر كذلك لا يحاول إصابة القرص مرة أخرى .
( 3 ينقل ترميز تعليمات الفيروس بأكملها إلى المنطقة المخفية على القرص .
( 4 يقرأ قطاع التمهيد الأساسي عن القرص ويكتبه في المنطقة المخفية على القرص نفسه ، في القطاع الذي يلي مباشرة قطاعات ترميز تعليمات الفيروس .
( 5 يقرأ من قطاع التمهيد الأساسي المعطيات الخاصة بتحديد معاملات القرص ( بالإضافة للمعلومات المتعلقة بتجزئة القرص في حالة الأقراص الصلبة ) ويقوم بكتابة هذه المعطيات في المواقع المحددة لها في قطاع التمهيد المصاب ثم يكتب قطاع التمهيد الجديد ( المصاب ) في القطاع الأول من المسار رقم 0 على الوجه رقم 0 >
( 6 يعدّل مداخل تخصيص الملفات (FAT) ، حسب الحاجة ، بحيث تبدو القطاعات التي تحوي تعليمات الفيروس كقطاعات معطوبة غير صالحة للاستخدام .
ستلاحظ أثناء دراستك لتعليمات هذا الفيروس أن يرنامج النسخ يتضمن عدة مواقع تفريع أهمها البرنامجان الجزئيان INFECT_HARD الذي يصيب الأقراص الصلبة و INFECT_FLOPPY الذي يصيب الأنماط المختلفة من الأقراص المرنة . يقوم البرنامج INFECT_FLOPPY أولاً بتحديد نمط القرص الذي يتعامل معه بقراءة قطاع التمهيد الموجود على القرص وملاحظة عدد القطاعات الموجودة ( وهو المتحول SEC_COUNT في الجدول رقم 2 ) فإذا وجد ما يبحث عنه ، يستدعي إحدى الإجرائيات INFECT_12M , INFECT_720 , INFECT_360 أو INFECT_144M التي تختخص كل منها بإصابة أحد أنماط الأقراص المرنة . تجد عرضاً لكل هذه البرامج في الملحق (هـ)