
التعرف على الأنماط للمضيفين والخدمات والمحتوى
Recog هو إطار عمل لتحديد المنتجات والخدمات وأنظمة التشغيل والأجهزة من خلال مطابقة البصمات مع البيانات المسترجعة من مختلف أدوات الاستطلاع الشبكي. يجعل Recog من السهل استخراج معلومات مفيدة من لافتات خوادم الويب، وحقول وصف نظام SNMP، وغير ذلك الكثير.
Recog هو برنامج مفتوح المصدر، يرجى الاطلاع على ملف LICENSE لمزيد من المعلومات.
في 31 مارس 2022، تم فصل محتوى Recog - ملفات بصمات XML والأدوات المساعدة - عن تطبيق مكتبة إطار عمل Recog. يحتوي مستودع Recog الأصلي الآن على محتوى Recog، بينما يحتوي مستودع Recog-Ruby على تطبيق لغة Ruby. يتم تضمين محتوى Recog في Recog-Ruby كوحدة فرعية تابعة لـ git (git submodule) وتكون متداخلة ضمن دليل recog. جميع إصدارات Recog gem بعد الانقسام والتي تساوي 3.0.0 أو أكبر سوف: 1. تحتوي على دليل بصمات XML ضمن دليل recog، و 2. تتضمن فقط أداة recog_match نظرًا لأن الأدوات الأخرى تركّز على إدارة البصمات.
إلى جانب تقسيم المستودع، تمت إعادة تسمية الفرع الافتراضي من master إلى main. أي نسخ مستنسخة (clones) تم إنشاؤها قبل هذه التغييرات يجب تحديثها يدويًا في بيئتك المحلية. إذا كان لديك fork، فانتقل إلى إعدادات fork واتبع التعليمات الخاصة بـ إعادة تسمية فرع لتغيير الفرع الافتراضي إلى main.
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
بشكل اختياري، قم بتشغيل الأمر التالي لإزالة المراجع التتبعية لاسم الفرع القديم.
# dry-run to confirm stale references that will be deleted before proceeding
git remote prune origin --dry-run
git remote prune origin
إذا كنت تستخدم سابقًا فرع التتبع العلوي upstream-master، فقم بتشغيل الأوامر التالية لإزالة الفرع القديم وإنشاء فرع تتبع علوي جديد.
git branch -d upstream-master
git checkout -b upstream-main --track upstream/main
بشكل اختياري، قم بتشغيل الأمر التالي لإزالة المراجع التتبعية لاسم الفرع العلوي القديم.
# dry-run to confirm stale references that will be deleted before proceeding
git remote prune upstream --dry-run
git remote prune upstream
| الميزة ✨ | rapid7/recog-ruby | rapid7/recog-java | runZeroInc/recog-go |
|---|---|---|---|
| أداة سطر الأوامر للتحقق من البصمات | ✅ | ✅ | ✅ |
| أداة سطر الأوامر لمطابقة البصمات | ✅ | ✅ | |
| يدعم الأمثلة المشفرة بـ base64 | ✅ | ✅ | ✅ |
| يدعم الأمثلة الخارجية المستندة إلى نظام الملفات | ✅ | ✅ | ✅ |
| استيفاء معامل CPE في مطابقة البصمات | ✅ | ✅ | ✅ |
يتكون Recog من ملفات بصمات XML ومجموعة متنوعة من الأكواد البرمجية، معظمها بلغة Ruby، مما يسهل تطوير البصمات المضمنة واختبارها واستخدامها. لاستخدام كود Ruby المضمن، يلزم إصدار حديث من Ruby (2.31+) إلى جانب Rubygems وحزمة bundler. بمجرد توفر هذه المتطلبات، استخدم الأوامر التالية للحصول على أحدث كود مصدري وتثبيت أي تبعيات إضافية.
$ git clone [email protected]:rapid7/recog.git
$ cd recog
$ bundle install
يُرجى ملاحظة أنه بينما تُعد بصمات XML نفسها مستقرة جدًا ومختبرة جيدًا، فإن قاعدة كود Ruby لا تزال جديدة نسبيًا وقابلة للتغيير السريع. يرجى التواصل معنا (research[at]rapid7.com) قبل استخدام كود Recog في أي مشاريع إنتاجية.
يتم تخزين البصمات داخل Recog في ملفات XML، صُمم كل منها لمطابقة سلسلة استجابة أو حقل بروتوكول معين. على سبيل المثال، يمكن لملف ssh_banners.xml تحديد نظام التشغيل (os) والبائع (vendor) وأحيانًا المنتج العتادي (hardware product) من خلال مطابقة سلسلة لافتة برنامج SSH daemon الأولية.
يتكون ملف البصمات من مستند XML مثل التالي:
<fingerprints matches="ssh.banner">
<fingerprint pattern="^RomSShell_([\d\.]+)$">
<description>Allegro RomSShell SSH</description>
<example service.version="4.62">RomSShell_4.62</example>
<param pos="0" name="service.vendor" value="Allegro"/>
<param pos="0" name="service.product" value="RomSShell"/>
<param pos="1" name="service.version"/>
</fingerprint>
</fingerprints>
يجب أن يتكون السطر الأول دائمًا من تعريف إصدار XML. يجب أن يكون العنصر الأول دائمًا كتلة fingerprints مع سمة matches تشير إلى البيانات التي من المفترض أن يطابقها ملف البصمات هذا. عادةً ما تكون سمة matches بالشكل protocol.field.
داخل عنصر fingerprints يجب أن يكون هناك عنصر fingerprint واحد أو أكثر. يجب أن يحتوي كل fingerprint على سمة pattern، والتي تحتوي على التعبير النمطي (regular expression) الذي سيتم استخدامه للمطابقة مع البيانات. يمكن تحديد سمة اختيارية flags للتحكم في كيفية تفسير التعبير النمطي. راجع توثيق Recog لـ FLAG_MAP لمزيد من المعلومات.
داخل البصمة، يجب أن يحتوي عنصر description على سلسلة نصية مفهومة للبشر تصف هذه البصمة.
يجب أن يكون هناك عنصر example واحد على الأقل، ومع ذلك يُفضَّل وجود عناصر example متعددة. تُستخدم هذه العناصر كجزء من التغطية الاختبارية في rspec التي تتحقق من أن البيانات المقدمة تطابق التعبير النمطي المحدد. بالإضافة إلى ذلك، إذا كانت البصمة تستخدم عناصر param لاستخراج قيم الحقول من البيانات (كما هو موضح لاحقًا)، يمكنك إضافة هذه الاستخراجات المتوقعة كسمات لعناصر example. في المثال أعلاه، هذا:
<example service.version="4.62">RomSShell_4.62</example>
يختبر أن RomSShell_4.62 يطابق التعبير النمطي المقدم وأن قيمة service.version هي 4.62.
يمكن ترميز سلسلة example بترميز base64 للسماح باستخدام أحرف غير قابلة للطباعة. ولإبلاغ Recog بذلك، تتم إضافة سمة _encoding بقيمة base64 إلى عنصر example. يمكن لف النص المشفر بـ Base64 الذي يزيد طوله عن 80 حرفًا عبر أسطر جديدة كما هو موضح أدناه لتسهيل القراءة.
<example _encoding="base64">
dGllczGEAAAAlQQWMS4yLjg0MC4xMTM1NTYuMS40LjgwMAQuZGF0YS5yZW1vdmVkLjCEAAAAK
AQdZG9tYWluQ29udHJvbGxlckZ1bmN0aW9uYWxpdHkxhAAAAAMEATc=
</example>
بالإضافة إلى ذلك، يمكن وضع الأمثلة في دليل له نفس الاسم الأساسي لملف XML، وفي نفس الدليل الذي يوجد به ملف XML:
xml/services.xml
xml/services/file1
xml/services/file2
...
يمكن بعد ذلك تحميلها باستخدام سمة _filename:
<example _filename="file1"/>
هذا مفيد للأمثلة الطويلة.