مضاد الفيروسات ClamAV هو مضاد الفيروسات الأشهر والأكثر انتشاراً على أنظمة لينوكس الحرة وهو مضاد قوي على أنظمة ويندوز عن طريق واجهة تستعمل قاعدة البيانات نفسها وهي ClamWin.

كذلك يمكن للبرنامج أن يجرب (حالياً ليست في ويندوز) فحصاً عند استخدام الملف عن طريق استخدام dazuko كما في وثائق البرنامج.

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

لتحديث قاعدة بيانات برنامج هناك عدة طرق:

  1. منها استخدام برنامج التحديث: $freshclam

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

  1. الطريقة الثانية: هي تحميل قاعدة البيانات كاملةً والتي تتألف من الملفين main.cvd و daily.cvd من الموقع الرسمي ثم حذف القديمة واستبدالها بالجديدة.

  2. الطريقة الثالثة: وهي تعريف الفيروسات يديوياً وهي ما سأتكلم عنه هنا.

أحياناً يواجه الخبير أو المستخدم المتمرس ملفاً يغلب على ظنه أو يعتقد جازماً أن هذا الملف فيروس أو برنامج خبيث.

وقد يفحص هذا الملف في مواقع فحص الملفات مثل virustotal ويجد أن كثيراً من مضادات الفيروسات تكشف الفيروس لكن ClamAV لا يكشفه فماذا يفعل؟

هناك عدة طريق كذلك لحل هذه المشكلة:

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

عندما تدخل صفحة الإرسال تجد عدة خيارات أدخل مسار الملف على جهازك في حقل Attach raw message containing virus وادخل اسمك وبريدك واسم الفيروس والمضادات التي كشفته والمعلومات الأخرى ثم اضغط زر الإرسال وسوف تتم إضافته.

يقول الموقع أنه يجب عليك ألا ترسل أكثر من ملفين باليوم، أما إذا كنت تنوي إرسال العديد من الملفات يومياً فيمكنك مراسلة Luca Gibelli من فريق عمل البرنامج.

  1. الطريقة الثانية: هي طريقة الإضافة اليدوية:

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

يقدم ClamAV أدوات قوية لإضافة تعريفات فيروسات أخرى عن طريق الـMD5 أو ما يشبهها.

اسم الأداة هي sigtool

للبدء بالعمل اكتب الأمر:

$sigtool --info

أو اختصاراً

$sigtool -i

وستحصل على خرج مشابه للتالي:

File: main.cvd
Build time: 14 May 2009 10:28 -0400
Version: 51
Signatures: 545035
Functionality level: 42
Builder: sven
MD5: 4e3fb7ff64c71cd4b79147ac30a382d3
Digital signature: RwTRRq4AMwgXuveEwXHfEGxHWZcuM/lzqJ17PesQxv7VHZozmONMjW63o3xSSYcPn9XKk3JXDcYlQ0RnDuUPih7td3szP4GnRAIhWWwPULzLi8JuZJQmi0bh2lN63vxfHkYQfOOUueogexH4CTz1Pst1x6bPyMTInY/WfzzoJaf
Verification OK.

الآن لدينا الملف test.exe وهو فيروس أو نظن أنه كذلك ونريد أن ينبهنا البرنامج عليه،

الطريقة الأولى وهي أن نعرّف رمز الـMD5 للملف كاملاً وسوف يكشفه البرنامج:

$ sigtool --md5 test.exe > test.hdb

ثم نجرب النتائج عن طريق $cat test.hdb لنجد أنه:

998150af15d15bf362eb119b1a4408d3:80655:test.exe

حسناً صار MD5 الملف الضار في ملف test.hdb نريد الآن من ClamAV أن يفحص الملفات لكن بالاعتماد على هذا الملف أي أن يعتبره قاعدة بيانات فيروسات وذلك عن طريق استخدام الوسيط -d (للحصول على قائمة بالوسائط وعملها راجع صفحة clamscan manual

فإذا جربنا الأمر:

$clamscan -d test.hdb test.exe

سيتم اكتشاف الفيروس ويكون الخرج كالتالي:

test.exe: test.exe FOUND
----------- SCAN SUMMARY -----------
Known viruses: 1
Scanned directories: 0
Engine version: 0.92.1
Scanned files: 1
Infected files: 1
Data scanned: 0.02 MB
Time: 0.024 sec (0 m 0 s)

من أجل العديد من الملفات يمكنك وضع الرمزات في ملف واحد وتسميه مثلاً: mydb.hdb وتستخدمها كقاعدة بيانات أو تضع كل رماز في ملف ويكون الأمر:

$clamscan -d *.hdb *.exe أو يمكنك دمج الملف مع قاعدة البيانات الأصلية بحيث يأخذها تلقائياً وسنتحدث عن ذلك لاحقاً.

الطريقة الثانية هي استخدام MD5 لكن بالنسبة إلى قسم من ملف PE:

وذلك عن طريق إنشاء ملف .mdb والذي سيحوي الرمز بهذا الشكل

PESectionSize:MD5:MalwareName

وذلك عن طريق تعليمة

$sigtool --mdb

وسيكون شبيهاً بهذا الشكل:

80655:998150af15d15bf362eb119b1a4408d3:test.exe

الطريقة الثالثة هي استخدام ترميز نظام العد الستة عشري:

وهذه الطريقة هي الافتراضية لقواعد بيانات ClamAV والواقع أن أكثر تطبيقات مضادات الفيروسات تستخدم هذه الطريقة ولو أنها تضيف إليها بعض الميزات لقوة أكبر.

وهذه الطريقة هي الأفضل لأن MD5 لا يمكنها أن تكون بمرونة هذه الطريقة ولا يمكن التنبيه عن الملفات المصابة إلا عن الفيروس نفسه وإن كان بإمكانها ذلك إلا أنها ليست بالمرونة الكافية لعمل تراميز معقدة كهذه الطريقة كما سيأتي.

إذا أردنا أن نحسب ترميز النظام الستة عشري لجملة محارف:

$sigtool --hex-dump
anything
616e797468696e670a

الترميز في السطر الثالث هو ترميز الجملة في السطر الثاني والأول هو الأمر الذي أدخلناه

لأجل دقة أكبر ومجال بحث أوسع يمكننا استخدام بعض المحارف في سلسلة الترميز الستة عشري هذه المحارف هي:

  • ؟؟

يطابق أي بايت

مثال:

aaa??bbb

سيتم التنبيه على:

aaaccbbb أو aaafebbb أو أي بايت بينهما.

ولن يتم التنبيه على:

aaabbb ولا على aaaeeccbbb لأنها يجب أن يفصل بينهما بواسطة بايت واحد فقط.

  • a?

يطابق الأربع بايتات العلوية (أي عن طريق الـnibble)

  • ?a

يطابق الأربع بايتات السفلية

ملاحظة: في الحالتين السابقتين يجب تفعيل المستوى الأدنى لوظيفية المحرك (MinEngineFunctionalityLevel) رقم 17 وذلك في ملف .ndb ذو صيغة التعريف الموسعة والتي سنتكلم عنها لاحقاً.

  • *

مطابقة أي عدد من البايتات

مثال:

aaa*bbb

سيتم التنبيه على: aaa1234567890cfedbbb وأي عدد من البايتات  بين السلسلتين. كذلك سيتم التنبيه على aaabbb.

  • {n}

مطابقة عدد n من البايتات

مثال:

aaa{2}bbb

سيتم التنبيه على:

aaa2f6ebbb بشرط ألا يزيد ما يفصلهما عن بايتين.

ولن يتم التنبيه على:

aaabbb أو aaa2fbbb أو aaa2f6e7cbbb

  • {-n}

مطابقة عدد n من البايتات على الأكثر

مثال:

aaa{-3}bbb

سيتم التنبيه على:

aaa2f6eccbbb أو aaa2f6ebbb أو aaabbb أو عدد أقل من البايتات بينهما.

ولن يتم التنبيه على:

aaa2f6eccddbbb لأنها فصلت بواسطة 4 بايتات.

  • {n-}

مطابقة عدد n من البايتات على الأقل

مثال:

aaa{2-}bbb

سيتم التنبيه على:

aaa2f6ebbb أو aaa2f6eccbbb

ولن يتم التنبيه على:

aaabbb ولا على aaa2fbbb لأنها فصلت ببايت واحد فقط.

  • (aa|bb|cc|..)

مطابقة aa أو bb أو cc ..

مثال:

(aaabbb|bbbaaa)

سيتم التنبيه على:

aabbbaaa أو efaaabbb32

  • HEXSIG[x-y]aa or aa[x-y]HEXSIG

مطبقة aa استناداً إلى ترميز a الستة عشري

مثال:

64[4-4]61616161{2}6262[3-6]65:27

سيتم التنبيه على:

daaaaaaaaddbbbbbcce

الطريقة الرابعة وهي طريقة البيانات الإضافية عن الملفات المؤرشفة (metadata):

تستطيع هذه الطريقة إعطاء بديل قوي عما مر من الطرق والتي لن تنجح نجاح هذه الطريقة في الكشف عن الملفات المؤذية التي تختبأ في ملفات أرشيف مشفرة كـZIP أو RAR.

ملف التعريف يكون .zmd لملفات ZIP أو .rmd لملفات RAR.

صيغة التعريف لهذه الطريقة هي:

virname:encrypted:filename:normal size:csize:crc32:cmethod:fileno:max depth

شرح الصيغة:

أولاً: اسم الفيروس.

ثانياً: هل الملف مشفر أما لا (1 = مشفر، 0 = غير مشفر).

ثالثاً: اسم الملف. وذلك إن كان الفيروس ينتشر باسم محدد ويمكن استخدام التعابير النظامية:http://xxx أو استخدام * للبحث في جميع الأسماء.

رابعاً: الحجم العادي (غير مضغوط). أو * لتجاهل هذا القيد.

خامساً: الحجم المضغوط، أو * لتجاهل هذا القيد.

سادساً: رمز CRC32، أو * لتجاهل هذا القيد.

سابعاً: طريقة الضغط، أو * لتجاهل هذا القيد.

ثامناً: موقع الملف في الأرشيف، أو * لتجاهل هذا القيد.

تاسعاً: الحد الأعلى للأرشيفات المعششة في الأرشيف الأب، أو * لتجاهل القيد والبحث فيها جميعاً.

والآن إلى تعريف الترميز في قاعدة البيانات وهناك ثلاث طرق لعمل ذلك:

الطريقة الأولى وهي الطريقة البدائية:

وهي عمل ملف .db (حصراً) يحوي بداخله جملة على الشكل التالي:

MalwareName=HexSignature

أي اسم الملف الضار = الترميز.

مع ملاحظة أن الترميز قد يحوي إضافات من التي ذكرناها قبلاً.

وعندما يمسح CalmAV الملفات ويحصل تطابق في أي ملف الفيروس نفسه أو ملف مصاب سيتم التنبيه عليه.

الطريقة الثانية وهي الطريقة الموسعة ويمكنك بواسطتها إضافة معلومات أكبر تساعد على البحث:

يجب أن يكون المعرف بالصيغة الموسعة في ملف .ndb حصراً، ويكون التعريف على الشكل التالي:

MalwareName:TargetType:Offset:HexSignature[:MinEngineFunctionalityLevel:[Max]]

شرح الصيغة:

أولاً: اسم الملف الضار، والمحارف المسموحة في الأسماء:الأحرف، الأرقام، الشرطة (-)، النقطة (.)، الشرطة التحتية (_) فقط.

تستخدم اللاحقة -zippwd في تسمية ملفات ZIP المشفرة، كما تستخدم اللاحقة -rarpwd في تسمية ملفات RAR المشقرة.

ويستعمل البرنامج البادئات التالية حسب نوع الملف افتراضياً:

  • Worm دودة إنترنت.
  • Trojan حصان طروادة.
  • Adware برنامج إعلانات غير مرغوبة.
  • Flooder برنامج إرسال حزم الفيض.
  • HTML ملفات HTML.
  • Email لرسائل البريد الإلكتروني.
  • IRC أ؛صنة طروادة على IRC.
  • JS ملف خبيث بلغة Javascript.
  • PHP ملف خبيث بلغة PHP.
  • ASP ملف خبيث بلغة ASP.
  • VBS ملف خبيث بلغة VBS.
  • BAT ملف دفعي خبيث.
  • W97M, W2000M ملفات ماكرو خبيثة في Word.
  • X97M, X2000M ملفات ماكرو خبيثة في Excel.
  • O97M, O2000M ملفات ماكرو خبيثة في Office.
  • DoS ملف هجوم إيقاف الخدمة.
  • DOS ملف هجوم إيقاف الخدمة قديم.
  • Exploit استغلال لثغرات معروفة.
  • VirTool أداة بناء فيروسات.
  • Dialer برنامج اتصال.
  • Joke للنكات والطرائف المزعجة.

أمثلة:

Worm.Bagle.Gen-zippwd
Trojan.FakeAV-198
Email.Trojan-126
Email.Phishing.Webmail-32
Exploit.PDF-420

ثانياً: نوع الملف، ويمكن أن تكون حسب التالي:

  • 0 = أي ملف.
  • 1 = Portable Executable
  • 2 = OLE2 Component (ملفات مدمجة بملفات مايكروسوفت أوفيس، سكربيتات VBA وماكرواتها، صور مدمجة الخ…).
  • 3 = ملف HTML عادي (ذلك بعد تعديلها وسنتكلم عن ذلك لاحقاً، كما يتم الكشف عن ثغرات Javascript واستغلالات الثغرات في هذا النوع أيضاً).
  • 4 = ملف بريد.
  • 5 = ملف رسومي.
  • 6 = ELF.
  • 7 = ملف ASCII عادي.

ثالثاً: الإزاحة، ويمكن أن تكون:

  • * = أي عدد من البايتات.
  • n = عدد محدد من البايتات من بداءة الملف.
  • EOF-n = عدد محدد من البايتات لكن من نهاية الملف.

في حال كان التعريف لملف Portable Executable أو ELF فيمكن أن تكون بالإضافة لما سبق:

  • EP+n = نقطة البداءة يضاف إليها عدد n من البايتات (EP+0 = EP).
  • EP-n= نقطة البداءة ينقص منها عدد n من البايتات.
  • Sx+n = بداءة القسم X يضاف إليها عدد n من البايتات (العد من الصفر).
  • Sx-n = بداءة القسم X ينقص منها عدد n من البايتات.
  • SL+n = بداءة القسم الأخير يضاف إليها عدد n من البايتات.
  • SL-n = بداءة القسم الأخير ينقص منها عدد n من البايتات.

جميع ما مر (عدا *) يمكن أن تكتب الإزاحة فيها بالفاصلة العائمة ويكون الرقم الأول هو إزاحة البدء والرقم الثاني إزاحة النهاية.

مثال:

EP+10,5 تعني الإزاحات من EP+10 إلى EP+10+5 = EP+15.

بالنسبة للإصدارات من البرنامج قبل 0.91 فإنه سوف يتجاهل مابعد الفاصلة آخذاً فقط الإزاحة الأولى وبدون تنبيه المستخدم إلى هذا.

رابعاً: الرمز بنظام العد الستة عشري وهو كما مر سابقاً.

خامساً: مستوى الوظيفية الأدنى للمحرك، وقد تكلمت أنه في حال تفعيل الرمز الستة العشري بإضافة الـnibbles مثل ?a فإنه يجب أن يكون 17 أو أعلى.

سادساً: العدد الأعلى من الرمزات في الملف الواحد.

الطريقة الثالثة وهي طريقة التعريفات المنطقية:

يمكن استخدام الصيغة الموسعة مع صيغة منطقية تتعامل مع عبارات منطقية تعطي المزيد من المرونة في التعامل. وتوضع الصيغة في ملف .ldb وتكون على الشكل التالي:

SignatureName;TargetDescriptionBlock;LogicalExpression;Subsig0;Subsig1;Subsig2;...

شرح الصيغة:

أولاً: اسم التوقيع.

ثانياً: كتلة توصيف الهدف وهي عبارة عن معلومات عن المحرك والهدف تفصل بواسطة فاصلة وتكون بيصغة (الوسيط:القيمة) بالنسبة للهدف فالمسموح هو رقم وحيد أما المحرك فالمسموح مجال من الأعداد.

مثال:

Target:1,Engine:18-20

ثالثاً: تعبير منطقي وهو عبارة عن العلاقة المنطقية بين Subsig0, Subsig1, …, SubsigN

وتكون عبارة عن نوعين:

عبارة أساسية: 0,1,2…,N فهارس الأعداد العشرية هي تعبيرات فرعية (SUB-EXPRESSIONS) تمثل Subsig0, Subsig1, Subsig2, …, SubsigN

عبارة شاملة: في حال كون A,Y تعبيرات فرعية و X,Y أعداد عشرية فهذا يعني أن:

كلها تعبيرات فرعية.

وهي تعني التالي:

  • & تعني (AND) و | تعني (OR).
  • A=X: إذا كان التعبير الفرعي يشير إلى تعريف وحيد فإن هذا التعريف يجب أن يطابق تماماً X مرة. وإذا كان يشير إلى كتلة منطقية من التعريفات فهذه الكتلة يجب أن تولد تطابق من X مرة من أي تعريف من تعريفاتها.
  • A=0: تطابق سلبي، لا التعريف ولا كتلة التعريفات يمكن أن تطابق.
  • A=X,Y: إذا كان التعبير الفرعي يشير إلى تعريف وحيد فإن هذا التعريف يجب أن يطابق تماماً X مرة. وإذا كان يشير إلى كتلة منطقية من التعريفات فهذه الكتلة يجب أن تولد تطابق من X مرة بشرط أن يحصل تطابق لـY تعريف من تعريفاتها على الأقل.
  • A>X: إذا كان التعبير الفرعي يشير إلى تعريف وحيد فإن هذا التعريف يجب أن يطابق عدد مرات أكبر تماماً من X. وإذا كان يشير إلى كتلة منطقية من التعريفات فهذه الكتلة يجب أن تولد تطابق عدد مرات أكبر تماماً من X من أي تعريف من تعريفاتها.
  • A>X,Y: إذا كان التعبير الفرعي يشير إلى تعريف وحيد فإن هذا التعريف يجب أن يطابق عدد مرات أكبر تماماً من X. وإذا كان يشير إلى كتلة منطقية من التعريفات فهذه الكتلة يجب أن تولد تطابق عدد مرات أكبر تماماً من X بشرط أن يحصل تطابق لـY تعريف نم تعريفاتها على الأقل.
  • A<X: نفس A>X لكن عدد مرات أصغر تماماً من X.
  • A<X,Y: نفس A>X,Y لكن عدد مرات أصغر تماماً من X.

رابعاً: تعريف فرعي بصيغة موسعة ويمكن أن تكون ناتجة عن الإزاحة. يمكن أن يصل N=63

أمثلة:

Sig1;Target:0;(0&amp;1&amp;2&amp;3)&amp;(4|1);6b6f74656b;616c61;7a6f6c77;73746566616e;deadbeef

Sig2;Target:0;((0|1|2)&gt;5,2)&amp;(3|1);6b6f74656b;616c61;7a6f6c77;73746566616e

Sig3;Target:0;((0|1|2|3)=2)&amp;(4|1);6b6f74656b;616c61;7a6f6c77;73746566616e;deadbeef

Sig4;Target:1,Engine:18-20;((0|1)&amp;(2|3))&amp;4;EP+123:33c06834f04100f2aef7d14951684cf04100e8110a00;S2+78:22??232c2d252229{-15}6e6573(63|64)61706528;S+50:68efa311c3b9963cb1ee8e586d32aeb9043e;f9c58dcf43987e4f519d629b103375;SL+550:6300680065005c0046006900

وبهذا نكون قد انتهينا من طرق إضافة الفيروس إلى قاعدة بيانات المضاد ClamAV.

روابط: