
يُنتج بصمات فريدة لطلبات HTTP الضارة من ملفات pcap باستخدام Tshark، مما يتيح تحديد وتجميع عائلات البرامج الضارة من خلال تحليل بنية الطلب والرؤوس وخصائص الحمولة.
أداة لبصمة طلبات HTTP للبرامج الضارة. مبنية على Tshark ومكتوبة بلغة Python3. مرحلة نموذج أولي عملي :-)
هدفها الرئيسي هو تقديم تمثيلات فريدة (بصمات) لطلبات البرامج الضارة، مما يساعد في التعرف عليها. فريد يعني هنا أن كل بصمة يجب أن تُرى فقط في عائلة واحدة معينة من البرامج الضارة، ولكن يمكن لعائلة واحدة أن تحتوي على بصمات متعددة. يمثل Hfinger الطلب بشكل أقصر من طباعة الطلب بالكامل، لكنه يظل قابلاً للتفسير البشري.
يمكن استخدام Hfinger في تحليل البرامج الضارة يدويًا وأيضًا في أنظمة الصندوق الرملي أو أنظمة SIEM. البصمات المولدة مفيدة لتجميع الطلبات، وتحديد الطلبات لعائلات معينة من البرامج الضارة، وتحديد العمليات المختلفة لعائلة واحدة، أو اكتشاف الطلبات الخبيثة غير المعروفة التي تتجاهلها أنظمة الأمان الأخرى ولكنها تشترك في البصمة.
ورقة أكاديمية ترافق العمل على هذه الأداة، وتصف، على سبيل المثال، الدافع وراء اختيارات التصميم، وتقييم الأداة مقارنة بـ p0f وFATT وMercury.
الافتراض الأساسي لهذا المشروع هو أن طلبات HTTP لعائلات البرامج الضارة المختلفة فريدة إلى حد ما، لذا يمكن بصمتها لتوفير نوع من التعريف. يحتفظ Hfinger بمعلومات حول بنية وقيم بعض الرؤوس لتوفير وسائل لمزيد من التحليل. على سبيل المثال، تجميع الطلبات المتشابهة - في هذه اللحظة، لا يزال العمل قيد التقدم.
بعد تحليل طلبات HTTP ورؤوسها للبرامج الضارة، حددنا بعض أجزاء الطلبات على أنها الأكثر تميزًا. وتشمل هذه:
بالإضافة إلى ذلك، تم أيضًا أخذ بعض الميزات القياسية لعنوان URL للطلب في الاعتبار. تم ترجمة كل هذه الأجزاء إلى مجموعة من الميزات، موصوفة بالتفصيل هنا.
تُترجم الميزات المذكورة أعلاه إلى تمثيل بطول متغير، وهو البصمة الفعلية. اعتمادًا على وضع التقرير، يتم استخدام ميزات مختلفة لبصمة الطلبات. مزيد من المعلومات حول هذه الأوضاع معروضة أدناه. سيتم وصف عملية اختيار الميزة في الورقة الأكاديمية القادمة.
الحد الأدنى من المتطلبات اللازمة قبل التثبيت:
Python >= 3.3,Tshark >= 2.2.0.التثبيت متاح من PyPI:
pip install hfinger
تم اختبار Hfinger على Xubuntu 22.04 LTS مع حزمة tshark في الإصدار 3.6.2، ولكن يجب أن يعمل مع الإصدارات الأقدم مثل 2.6.10 على Xubuntu 18.04 أو 3.2.3 على Xubuntu 20.04.
يرجى ملاحظة أنه كما هو الحال مع أي PoC، يجب تشغيل Hfinger في بيئة منفصلة، على الأقل باستخدام بيئة Python الافتراضية. لا يتم تغطية إعدادها هنا، ولكن يمكنك تجربة هذا البرنامج التعليمي.
بعد التثبيت، يمكنك استدعاء الأداة مباشرة من سطر الأوامر باستخدام hfinger أو كوحدة Python باستخدام python -m hfinger.
على سبيل المثال:
foo@bar:~$ hfinger -f /tmp/test.pcap
[{"epoch_time": "1614098832.205385000", "ip_src": "127.0.0.1", "ip_dst": "127.0.0.1", "port_src": "53664", "port_dst": "8080", "fingerprint": "2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4"}]
يمكن عرض المساعدة باستخدام المفاتيح القصيرة -h أو الطويلة --help:
usage: hfinger [-h] (-f FILE | -d DIR) [-o output_path] [-m {0,1,2,3,4}] [-v]
[-l LOGFILE]
Hfinger - fingerprinting malware HTTP requests stored in pcap files
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE Read a single pcap file
-d DIR, --directory DIR
Read pcap files from the directory DIR
-o output_path, --output-path output_path
Path to the output directory
-m {0,1,2,3,4}, --mode {0,1,2,3,4}
Fingerprint report mode.
0 - similar number of collisions and fingerprints as mode 2, but using fewer features,
1 - representation of all designed features, but a little more collisions than modes 0, 2, and 4,
2 - optimal (the default mode),
3 - the lowest number of generated fingerprints, but the highest number of collisions,
4 - the highest fingerprint entropy, but slightly more fingerprints than modes 0-2
-v, --verbose Report information about non-standard values in the request
(e.g., non-ASCII characters, no CRLF tags, values not present in the configuration list).
Without --logfile (-l) will print to the standard error.
-l LOGFILE, --logfile LOGFILE
Output logfile in the verbose mode. Implies -v or --verbose switch.
يجب توفير مسار إلى ملف pcap (-f)، أو دليل (-d) يحتوي على ملفات pcap. المخرجات بتنسيق JSON. ستتم طباعتها إلى المخرجات القياسية أو إلى الدليل المقدم (-o) باستخدام اسم الملف المصدر. على سبيل المثال، مخرجات الأمر:
hfinger -f example.pcap -o /tmp/pcap
سيتم حفظه في:
/tmp/pcap/example.pcap.json
يمكن استخدام وضع التقرير -m/--mode لتغيير وضع التقرير الافتراضي عن طريق توفير عدد صحيح في النطاق 0-4. تختلف الأوضاع في ميزات الطلب الممثلة أو طرق التقريب. تم اختيار الوضع الافتراضي (2) من قبلنا لتمثيل جميع الميزات التي تُستخدم عادةً أثناء تحليل الطلبات، ولكنه يوفر أيضًا عددًا منخفضًا من التصادمات والبصمات المولدة. مع الأوضاع الأخرى، يمكنك تحقيق أهداف مختلفة. على سبيل المثال، في الوضع 3 تحصل على عدد أقل من البصمات المولدة ولكن فرصة أعلى للتصادم بين عائلات البرامج الضارة. إذا كنت غير متأكد، لست بحاجة لتغيير أي شيء. مزيد من المعلومات حول أوضاع التقرير هنا.
بدءًا من الإصدار 0.2.1، أصبح Hfinger أقل تفصيلاً. يجب استخدام -v/--verbose إذا كنت تريد تلقي معلومات حول القيم غير القياسية للرؤوس التي تمت مواجهتها، والأحرف غير ASCII في الجزء غير الحمولة من الطلب، وغياب علامات CRLF (\r\n\r\n)، ومشاكل أخرى في الطلبات المحللة التي ليست أخطاء تطبيق. عند مواجهة أي من هذه المشكلات في الوضع التفصيلي، سيتم طباعتها إلى مخرجات الخطأ القياسية. يمكنك أيضًا حفظ السجل في موقع محدد باستخدام مفتاح -l/--log (وهو يتضمن -v/--verbose). سيتم إلحاق بيانات السجل بملف السجل.
بدءًا من الإصدار 0.2.0، يدعم Hfinger الاستيراد إلى تطبيقات Python الأخرى. لاستخدامها في تطبيقك، ما عليك سوى استيراد دالة hfinger_analyze من hfinger.analysis واستدعائها بمسار ملف pcap ووضع التقرير. النتيجة المرجعة هي قائمة من القواميس (dicts) بنتائج البصمة.
على سبيل المثال:
from hfinger.analysis import hfinger_analyze
pcap_path = "SPECIFY_PCAP_PATH_HERE"
reporting_mode = 4
print(hfinger_analyze(pcap_path, reporting_mode))
بدءًا من الإصدار 0.2.1، يستخدم Hfinger وحدة logging لتسجيل المعلومات حول القيم غير القياسية للرؤوس التي تمت مواجهتها، والأحرف غير ASCII في الجزء غير الحمولة من الطلب، وغياب علامات CRLF (\r\n\r\n)، ومشاكل أخرى في الطلبات المحللة التي ليست أخطاء تطبيق. يقوم Hfinger بإنشاء مسجل خاص به باستخدام الاسم hfinger، ولكن بدون تكوين مسبق، يتم تجاهل معلومات السجل عمليًا. إذا كنت ترغب في تلقي معلومات السجل هذه، قبل استدعاء hfinger_analyze، يجب تكوين مسجل hfinger، وتعيين مستوى السجل إلى logging.INFO، وتكوين معالج السجل وفقًا لاحتياجاتك، وإضافته إلى المسجل. مزيد من المعلومات متوفرة في سلسلة توثيق (docstring) دالة hfinger_analyze.
تعتمد البصمة على الميزات المستخرجة من الطلب. استخدام ميزات معينة من القائمة الكاملة يعتمد على وضع التقرير المختار من قائمة محددة مسبقًا (مزيد من المعلومات حول أوضاع التقرير هنا). يمثل الشكل أدناه إنشاء بصمة نموذجية في وضع التقرير الافتراضي.

يتم تحليل ثلاثة أجزاء من الطلب لاستخراج المعلومات: URI، وبنية الرؤوس (بما في ذلك الطريقة وإصدار البروتوكول)، والحمولة. يتم فصل الميزات الخاصة للبصمة باستخدام | (خط عمودي). البصمة النهائية المولدة لطلب POST من المثال هي:
2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4
يتم وصف إنشاء الميزات أدناه بترتيب ظهورها في البصمة.
أولاً، يتم استخراج ميزات URI:
log10(43)≈2)،log10(20/3)≈1)،hfinger/configs/extensions.txt،log10(4)≈0.6).ثانيًا، يتم تحليل ميزات بنية الرؤوس:
PO)،لتمثيل ترتيب الرؤوس في الطلب، يتم ترميز اسم كل رأس وفقًا للمخطط في hfinger/configs/headerslow.json، على سبيل المثال، يتم ترميز رأس User-Agent كـ us-ag. يتم فصل الأسماء المشفرة بـ ,. إذا كان اسم الرأس لا يبدأ بحرف كبير (أو أي من أجزائه عند تحليل الرؤوس المركبة مثل Accept-Encoding)، فإن التمثيل المشفر يسبق بـ !. إذا لم يكن اسم الرأس موجودًا في قائمة الرؤوس المعروفة، يتم تجزئته باستخدام تجزئة FNV1a، ويتم استخدام التجزئة كترميز.
عند تحليل الرؤوس الشائعة، يتم التحقق مما إذا كانت موجودة في الطلب. هذه الرؤوس هي:
عند العثور على الرأس في الطلب، يتم التحقق من قيمته مقابل جدول القيم النموذجية لإنشاء أزواج من تمثيل_اسم_الرأس:تمثيل_القيمة. يتم ترميز اسم الرأس وفقًا للمخطط في hfinger/configs/headerslow.json (كما هو معروض سابقًا)، ويتم ترميز القيمة وفقًا للمخطط المخزن في دليل hfinger/configs أو ملف configs.py، اعتمادًا على الرأس. في المثال أعلاه، يتم ترميز Accept كـ ac وقيمته */* كـ as-as (asterisk-asterisk)، مما يعطي ac:as-as. يتم إدراج الأزواج في البصمة بترتيب ظهورها في الطلب ويتم الفصل بينها باستخدام /. إذا تعذر العثور على قيمة الرأس في جدول الترميز، يتم تجزئتها باستخدام تجزئة FNV1a. إذا كانت قيمة الرأس مكونة من قيم متعددة، يتم تقسيمها إلى رموز لتوفير قائمة من القيم مفصولة بـ ,، على سبيل المثال، Accept: */*, text/* ستعطي . ومع ذلك، في هذه المرحلة من التطوير، إذا كانت قيمة الرأس تحتوي على علامة "قيمة الجودة" ()، فسيتم ترميز القيمة بأكملها باستخدام تجزئة FNV1a الخاصة بها. أخيرًا، يتم ترميز قيم رأسي و مباشرة باستخدام تجزئات FNV1a الخاصة بهما.
أخيرًا، في ميزات الحمولة:
N، وبـ A بخلاف ذلك،يعمل Hfinger في خمسة أوضاع تقرير، تختلف في الميزات الممثلة في البصمة، وبالتالي المعلومات المستخرجة من الطلبات. هذه هي (مع الرقم المستخدم في تكوين الأداة):
0 - إنتاج عدد مماثل من التصادمات والبصمات كالوضع 2، ولكن باستخدام ميزات أقل،1 - تمثيل جميع الميزات المصممة، ولكن إنتاج تصادمات أكثر قليلاً من الأوضاع 0 و 2 و 4،2 - الأمثل (الوضع الافتراضي)، يمثل جميع الميزات التي تُستخدم عادةً أثناء تحليل الطلبات، ولكنه يوفر أيضًا عددًا منخفضًا من التصادمات والبصمات المولدة،3 - إنتاج أقل عدد من البصمات المولدة من جميع الأوضاع، ولكن تحقيق أعلى عدد من التصادمات،4 - تقديم أعلى إنتروبيا للبصمة، ولكنه يولد بصمات أكثر قليلاً من الأوضاع 0-2.تم اختيار الأوضاع من أجل تحسين قدرات Hfinger على التعرف الفريد على عائلات البرامج الضارة مقابل عدد البصمات المولدة. تقدم الأوضاع 0 و 2 و 4 عددًا مماثلاً من التصادمات بين عائلات البرامج الضارة، ومع ذلك، يولد الوضع 4 بصمات أكثر قليلاً من الاثنين الآخرين. يمثل الوضع 2 ميزات طلب أكثر من الوضع 0 مع عدد مماثل من البصمات المولدة والتصادمات. الوضع 1 هو الوحيد الذي يمثل جميع الميزات المصممة، لكنه يزيد عدد التصادمات بحوالي مرتين مقارنة بالأوضاع 0 و 1 و 4. ينتج الوضع 3 بصمات أقل بمقدار مرتين على الأقل من الأوضاع الأخرى، لكنه يقدم حوالي تسعة أضعاف التصادمات. وصف جميع الميزات المصممة هنا.
تتكون الأوضاع من الميزات (بترتيب الظهور في البصمة):
0:
1:
2:
3:
4:

ac:as-as,te-asq=