تخطي إلى المحتوى

حالة استخدام

يُعدّ أي موقع ويب على الإنترنت معرضًا لشكل مستمر للهجوم، وعلى أقل تقدير تغرق بهجمات غير موجّهة من أعداد كبيرة من روبوتات تُديرها جهات إجرامية. والأمر الأكثر إثارة للقلق هو الهجمات المستهدفة لأن حتى المهاجمين غير المهرة مع القليل من المثابرة والحظ، يمكنهم العثور على نقاط ضعف في موقع الويب.

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

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

سيغطي هذا الموضوع الفرعي مناهج تسجيل مواقع الويب لتعظيم الفائدة لأصحاب مواقع الويب وتقليل المخاطر التي يتعرض لها مستخدمو الموقع.

الأهداف

بعد استكمال هذا الموضوع الفرعي، يجب أن يكون الممارس قادرًا على القيام بما يلي:

  • فهم تسجيل الأحداث المدمجة لخوادم الويب الرئيسية
  • فهم سجلات التطبيق التي يجب إضافتها لاكتشاف الهجمات
  • معرفة كيفية تقليل المعلومات الحساسة في السجلات

العرض

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

  • سجلات أحداث مدمجة للمنصات الشائعة(Built-in logs for popular platforms)
  • إضافة سجلات لتسجيل الأحداث الأمنية المهمة (Adding logs to catch important security events)
  • تقليل المخاطر المرتبطة بتسجيل الأحداث

سجلات أحداث مدمجة

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

أباتشي (Apache)

أباتشي هو خادم ويب مكتمل الميزات والأكثر شعبية على الإنترنت ويخدم مواقع أكثر نشاطًا من أي خادم آخر، وبشكل افتراضي يُسجل الأحداث للملف على نظام ملفات خادم الويب. يوجد ملفان: access_log وerror_log. ويضم سجل الوصول معلومات منظمة حول كل طلب بينما يحتوي سجل الأخطاء على المزيد من البيانات شبه المنظمة حول الأشياء التي حدثت بشكل خاطئ.

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

  • عنوان بروتوكول الإنترنت لمقدم الطلب The requester’s IP address
  • المستخدم مسجل الدخول على الجهاز مقدم الطالب، لكن غالبا ما لا يرسل هذا وكذلك دائمًا ما يكون مجرد شَرطة a dash .
  • قام المستخدم بتسجيل الدخول إذا كان موقع الويب يستخدم مصادقة أساسية لبروتوكول نقل النص التشعبي وسيكون هذا أيضًا دائمًا شرطة.
  • تاريخ ووقت الطلب محاطين بأقواس معقوفة. لاحظ أن هذا الحقل سيحتوي عادةً على مسافات فيه.
  • خط طلب بروتوكول نقل النص التشعبي المرسل من العميل، محاطًا بقوسين (على سبيل المثال “GET / HTTP/1.1”). ستحتوي هذه الحقول دائمًا على مسافات..
  • رمز استجابة بروتوكول نقل النص التشعبي من الخادم، على سبيل المثال 200، 404، 500، وما إلى ذلك.
  • حجم الاستجابة التي تم إرجاعها من الخادم

إليك مثال على ذلك:

127.0.0.1 - - [13/Dec/2023:13:55:36 -0700] "GET / HTTP/1.1" 200 2326

لاحظ أنه يمكن تكوين كل خادم أباتشي لتسجيل المزيد من بيانات أقل. لمزيد من المعلومات، راجع وثائق أباتشي ولمزيد من المعلومات حول سجل وصول أباتشي وكيفية استخدامهthe Apache documentation، راجع هذه المقالة..

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

  • تاريخ ووقت الطلب محاطين بأقواس معقوفة. لاحظ أن هذا الحقل سيحتوي عادةً على مسافات فيه.
  • مستوى الخطأ (مثل الإشعار والخطأ) محاطًا بأقواس معقوفة.
  • إذا كان الخطأ مرتبطًا بطلب فإن كلمة “العميل” وعنوان بروتوكول الإنترنت لمقدم الطلب ستكون بين قوسين معقوفين.
  • رسالة الخطأ الفعلية نفسها ستحتوي دائمًا على عدد من المسافات>

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

إنترنت إنفورميشن سيرفيسيز (IIS)

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

  • Request time
  • Requester’s IP address
  • HTTP method (e.g. GET, POST, HEAD, etc.)
  • URI (e.g. /, /index.htm, /posts/34/reply, etc.)
  • Server response code (e.g. 200, 404, 500, etc.)
  • HTTP protocol version (e.g. HTTP/1.1)

لاحظ أن السجلات الافتراضية لا تسجل سلسلة الاستعلام، لذلك على سبيل المثال سيسجل طلب http://example.com/profile?profileID=34 will only log /profile. اجع وثائق مايكروسوفت. Microsoft documentation.

سجلات الأخطاء ضمن إنترنت إنفورميشن سيرفيسيز أكثر تعقيدًا قليلًا. حسب نوع الخطأ قد ينتقل إلى ملف سجل HTTP.SYS HTTPERR أو سجل أحداث ويندوز.

يحتوي ملف HTTPERR على أخطاء على مستوى البروتوكول وهو بصيغة منظمة مع فصل الحقول التالية بمسافات:

  • تاريخ الطلب
  • وقت الطلب
  • عنوان بروتوكول الإنترنت لمقدم الطلب
  • منفذ مقدم الطلب (وليس منفذ الخادم)
  • عنوان بروتوكول إنترنت الخادم
  • منفذ الخادم
  • بروتوكول نقل نص تشعبي (مثل HTTP/1.1)
  • طرق بروتوكول نقل نص تشعبي (على سبيل المثال، غت (GET)، بوست (POST)، هيد (HEAD)، وما إلى ذلك.)
  • عنوان موقع ويب وسلسلة الاستعلام
  • رمز استجابة الخادم (على سبيل المثال 200، 404، 500، وما إلى ذلك)

لمزيد من المعلومات حول سجل الأخطاء، راجع وثائق مايكروسوفتMicrosoft documentation.

يحتوي سجل أحداث ويندوز على أخطاء تم إنشاؤها من خادم التطبيق (مثل ASP.NET) أو التطبيق، وهي متوفرة في عارض أحداث ويندوز وهي شبه منظمة:

  • مستوى الخطأ (مثل المعلومات، التحذير، الخطأ)
  • التاريخ والوقت
  • البرنامج الذي سجّل الخطأ (يمكن أن تأتي إدخالات السجل من أي برنامج على النظام وليس فقط خادم الويب)
  • معرّف فريد للحدث/الخطأ
  • الفئة
  • معلومات غير منظمة خاصة بالخطأ

لمزيد من المعلومات حول العثور على سجلات الأخطاء على ويندوز، راجع هذه المقالة.

إن جي آي إن إكس (nginx)

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

تتشابه سجلات الوصول الافتراضية مع سجلات أباتشي الافتراضية، ولكن مع الحقول التالية في نهاية كل سطر:

  • قيمة رأس المُحيل المرسل مع الطلب
  • تم إرسال وكيل المستخدم (إصدار المتصفح) مع الطلب

لمزيد من المعلومات حول سجلات إن جي آي إن إكس، راجع الوثائق الرسمية.

سجلات أخطاء إن جي آي إن إكس شبه منظمة وتشمل الحقول التالية مفصولة بمسافات:

  • تاريخ الطلب
  • وقت الطلب
  • مستوى الخطأ داخل الأقواس المعقوفة
  • معلومات معرّف العملية حول مثيل إن جي آي إن إكس الذي سجل الخطأ
  • معرّف اتصال (اختياري)
  • رسالة الخطأ بشكل نص حر

للاطلاع على مزيد من المعلومات، انظر هذه المقالة.

سجلات شبكة توصيل المحتوى بالاتجاه الصاعد

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

إعداد سجلات الخادم

عند إعداد سجلات الخادم، توجد بعض خطوات يجب اتخاذها لزيادة قيمة أمان السجلات.

  • تأكد من أن السجلات تحتوي على الأقل على عنوان بروتوكول الإنترنت لمقدم الطلب، وكامل عنوان معرف الموارد المنتظم المطلوب (بما في ذلك سلسلة الاستعلام)، والوقت المستغرق لخدمة الطلب وحجم الاستجابة والمُحيل ووكيل المستخدم. يمكن أن تكون هذه المعلومات مفيدة للغاية عند التحقيق في حادث ما.
  • حاول إخراج السجلات من خادم الويب في أسرع وقت ممكن لأنه تعرض الخادم نفسه للاختراق من المحتمل أن يحاول المهاجمون إخفاء مساراتهم عن طريق حذف سجلات الخادم أو تعديلها. تشمل بعض طرق تحقيق ذلك ما يلي:
    • إجراء عملية تسحب ملفات السجل من الخادم بشكل دوري، ولا بأس بدفع السجلات من خادم الويب على الرغم من أنه من المهم عدم استخدام عملية الدفع لحذف السجلات الاحتياطية.
    • سجلات “البث” من خادم الويب إلى جهاز تحكم عن بعد من أي وقت مضى، على سبيل المثال، باستخدام syslog-ng، وهذا يوفر حماية كبيرة ضد فقدان السجلات. عادة ما يكون من المستحسن إبقاء السجلات على خادم الويب أيضًا في حالة انقطاع الشبكة.

قيود تسجيل الخادم

حتى عند تكوينها بالكامل غالبًا ما تفقد سجلات الخادم المضمّنة الكثير من المعلومات المهمة، ومن الأمثلة على ذلك:

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

لم يتم تضمين الكثير من هذه المعلومات لسبب وجيه ويمكن أن يكون للكثير منها آثار سيئة على خصوصية المستخدم، يتطلب بعضها الآخر (مثل تسجيل الأخطاء المفيدة) معرفة متعمّقة بالتطبيق نفسه ولذلك لا يمكن القيام بذلك بواسطة خادم الويب.

مقاربة تسجيل الأحداث من أجل الأمن

يتمثل الغرض الرئيسي من تسجيل الأحداث على مستوى التطبيق في تطبيق الويب في التغلب على قيود تسجيل الخادم للأحداث، وهناك العديد من المقالات التي تصف أفضل الممارسات لتسجيل الأحداث، وفيما يلي بعض منها:

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

تسجيل الأحداث والمعلومات الحساسة

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

توفر هذه المقالة بعض أفضل الممارسات العامة للتعامل مع البيانات الحساسة أثناء التسجيل، وفيما يلي بعض الأساليب التي يجب مراعاتها لأنواع محددة من البيانات:

معلمات بوست

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

  • يجب إعفاء صفحات معينة (مثل صفحة تسجيل الدخول) و/أو المعلمات (رقم بطاقة الائتمان وحقول كلمة المرور) من تسجيل الأحداث.

  • بالنسبة لمعلمات النشر التي سيتم تسجيلها، يجب أن تراعي تنقيحها لإخفاء المعلومات التي يحتمل أن تكون حساسة مع متابعة تحديد حركة المرور الضارة. يمكن لتعليمات بايثون البرمجية التالية أن تساعدك:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    import re
    
    keep = ['select', 'where', 'from', 'and', 'script', 'on', 'src', '../', '<', '>']
    output = ''
    
    i = 0
    while i < len(target):
    	matched = False
    	for j in keep:
    		if target[i:i+len(j)].lower() == j.lower():
    			output = output + target[i:i+len(j)]
    			i=i+len(j)
    			matched = True
    	if not matched:
    		if ' ' == target[i:i+1]:
    			output = output + ' '
    		elif re.search('\w', target[i:i+1]):
    			output = output + "A"
    		elif re.search('\d', target[i:i+1]):
    			output = output + "1"
    		else:
    			output = output + "*"
    		i = i+1
أخطاء متعلقة بالأمن

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

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

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

معلومات الهوية

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

Practice

اقرأ أمثلة الأوامر التالية التي تستخدم أدوات يونكس الشائعة مثل awk وsort وuniq وgrep لإجراء التحليل على سجلات أباتشي وإن جي آي إن إكس.

مقدمة موجزة عن أدوات تحليل نص يونكس

فيما يلي أمثلة أوامر تستخدم أدوات يونكس الشائعة مثل awk وsort وuniq وgrep لإجراء التحليل على سجلات أباتشي وإن جي آي إن إكس. تُعدّ awk أداة سطر أوامر قوية لمعالجة الملفات النصية في أنظمة التشغيل الشبيهة بيونكس، وبناء جملها بسيط، وفيما يلي البناء الأساسي لأمر awk ما يلي:

awk 'pattern { action }' file

For example let’s consider the following text file (we will call it example.txt):

apple red 5
banana yellow 10
pear green 15
Orange orange 20

بتقسيم كل سطر من سطور الإدخال إلى حقول حسب المسافة الفارغة (افتراضيًا). يمكن الإشارة إلى الحقول باستخدام 1$ و2$ وما إلى ذلك حيث يشير 1$ إلى الحقل الأول و2$ إلى الحقل الثاني وما إلى ذلك.

على سبيل المثال لطباعة العمود الأول بأمر awk نحتاج إلى استخدام:

awk '{ print $1 }' example.txt

يمكننا استخدام التصفية الشرطية، على سبيل المثال إذا اردنا طباعة الأسطر التي يكون فيها العمود الثالث أكبر من 10، نستخدم:

awk '$3 > 10 {print $1, $3}' example.txt

لاستخدام محدِّد مخصص مع awk، استخدم خيار F- متبوعًا بحرف المحدِّد. على سبيل المثال، إذا كان لدينا ملف مقسوم بالفواصل، فيمكننا استخدام ‘,‘F- (أرفق حرف المحدِّد بين علامات اقتباس مفردة) لتحديد الفاصلة (,) بحيث تكون هي المحدِّد.

awk -F',' '{print $1, $3}' comma-delimited.txt

يمكننا إجراء العمليات الحسابية باستخدام awk، ويحسب هذا الأمر مجموع القيم في الحقل الثالث عبر جميع الأسطر ويطبع الإجمالي في النهاية. يُعدّ “END” نمطًا خاصًا يُستخدم لتنفيذ البيانات بعد معالجة السجل الأخير

awk '{total += $3} END {print "Total:", total}' example.txt
هناك بعض المتغيرات المدمجة في awk. على سبيل المثال، NR هو متغير مدمج في awk يُمثل رقم السجل الحالي. يزداد NR بمقدار واحد لكل سطر مقروء من ملف (أو ملفات) الإدخال.

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

awk '{print NR, $0}' example.txt

Practice exercise 1: تحليل سجل وصول أباتشي

اقض بعض الوقت في تجربة أوامر awk التالية، ويمكنك استخدام سجل من خادم الويب الخاص بك أو استخدام سجل تدريبي، مثل هذا.

تحديد العدد الإجمالي للطلبات المسجلة في سجل الوصول

cat apache_access.log | wc -l

Determine the most frequently requested URLs.

awk '{print $7}' apache_access.log | sort | uniq -c | sort -nr | head -5

سيقوم أمر awk هذا بطباعة العمود السابع من كل سطر من السجل ثم يقوم بتوصيل خرج أمر awk السابق إلى أمر sort ويستخدم sort لترتيب أسطر النص أبجديًا أو رقميًا وبشكل افتراضي يفرزها بترتيب تصاعدي. بعد فرز المُخْرج باستخدام sort، يستخدم أمر uniq -c لحساب تكرارات كل سطر فريد في الخرج الذي تم فرزه. ويُستخدم أمر sort -nr لفرز المُخْرج رقميًا (n-) بترتيب عكسي (r-)، وهذا يعني أن الخطوط تفرز بناءً على قيمها العددية مع ظهور أعلى القيم أولًا. يُستخدم أمر head -5 لعرض أول 5 أسطر من الإدخال.

تعرّف على أعلى 5 عناوين بروتوكول إنترنت تُقدم طلبات إلى الخادم

awk '{print $1}' apache_access.log | sort | uniq -c | sort -nr | head -5

تحليل توزيع طرق الطلبات.

awk '{print $6}' apache_access.log | sort | uniq -c

تمرين تدريبي 2: تحليل سجل وصول إن جي آي إن إكس

حساب العدد الإجمالي للطلبات في سجل وصول إن جي آي إن إكس ويمكنك استخدام سجل من خادم الويب الخاص بك أو استخدام سجل تدريبي مثل هذا.

cat nginx_access.log | wc -l

تحديد عناوين مواقع الويب الأكثر طلبًا ورموز الحالة المقابلة لها

awk '{print $7, $9}' nginx_access.log | sort | uniq -c | sort -nr | head -5

حساب متوسط حجم الطلبات (بالبايت)

awk '{sum+=$10} END {print "Average request size:", sum/NR, "bytes"}' nginx_access.log

يحسب أمر AWK هذا متوسط حجم الطلبات عن طريق تلخيص القيم في العمود العاشر (يُفترض أنه يمثل أحجام الطلبات) لجميع الأسطر في ملف nginx_access.log، ثم يُقسم المجموع الإجمالي على عدد الأسطر (NR) وهو ما يمثل متوسط حجم الطلبات بالبايت، وأخيرًا تُطبع النتيجة جنبًا إلى جنب مع رسالة وصفية.

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

تحديد أفضل 5 وكلاء مستخدمين يصلون إلى الخادم

awk -F'"' '{print $6}' nginx_access.log | sort | uniq -c | sort -nr | head -5
من كل سطر من ملف nginx_access.log. يفترض هذا أن إدخالات السجل يتم تنسيقها بطريقة تجعل عنوان موقع ويب أو مسار الطلبات محاطًا بعلامات اقتباس مزدوجة، ثم يتم توصيل عناوين مواقع الويب المستخرجة أو مسارات الطلبات لفرزها أبجديًا، زيُستخدم uniq -c لحساب تكرار كل عنوان موقع ويب أو مسار طلب فريدين. يجري بعدها إيصال النتائج مرة أخرى إلى أمر sort -nr لفرز النتائج رقميًا بترتيب تنازلي حسب العدد.

وأخيرًا يُستخدم head -5 لعرض أفضل 5 عناوين مواقع الويب أو مسارات الطلب التي تحتوي على أعلى عدد مرات حدوث.

تحليل توزيع الطلبات حسب الساعة في اليوم

awk '{print $4}' nginx_access.log | cut -c 14-15 | sort | uniq -c

يستخدم awk لاستخراج الحقل الرابع (4$) من كل سطر من ملف access.log الذي يحتوي عادةً على الطابع الزمني.

ثم يطبق أمر cut لاستخراج الأحرف من 14 إلى 15 من كل طابع زمني والتي تتوافق مع الجزء من الساعة.

يتم توصيل قيم الساعات المستخرجة للفرز لترتيبها بترتيب تصاعدي ويستخدم uniq -c لحساب تكرارات كل قيمة ساعة فريدة.

سيعرض الخرج عدد إدخالات السجل لكل ساعة في ملف السجل.

تمرين تدريبي 3: تحليل سجل الأخطاء (كل من أباتشي وإن جي إن جي آي إن إكس)

حساب العدد الإجمالي لإدخالات الخطأ في السجل

ويمكنك استخدام سجل من خادم الويب الخاص بك أو استخدام سجل تدريبي، مثل هذا.

cat apache_error.log | grep 'error' | wc -l
cat nginx_error.log | grep 'error' | wc -l

تحديد أكثر أنواع الأخطاء شيوعًا يقوم أمر awk ‘{print $NF}’ بقراءة كل سطر من بيانات الإدخال ويقسمها إلى حقول (مفصولة بمسافة بيضاء افتراضيًا) ثم يطبع قيمة الحقل الأخير من كل سطر.

cat apache_error.log | grep 'error' | awk '{print $NF}' | sort | uniq -c | sort -nr | head -5

The number at the beginning of each line shows how many times a particular error occurred in the log. In this case, “2047” means that the error with the last field “757” occurred 2047 times.

The last field represents different things in each line. It could be a file path, a specific action, or some other identifier related to the error. For instance, “757” or “154” could be error codes or unique identifiers, while “/home/mysite/public_html/new/wp-content/plugins/woocommerce/includes/data-stores/abstract-wc-order-data-store-cpt.php:100” could be a file path and line number where the error occurred.

nginx: Determine the top 5 IP addresses, domains, or file paths generating errors.

cat nginx_error.log | grep 'error' | awk '{print $NF}' | sort | uniq -c | sort -nr | head -5

Apache: Analyze the distribution of errors by date or time.

cat apache_error.log | grep 'error' | awk '{print $1}' | sort | uniq -c

Apache: Investigate any recurring error patterns and propose potential solutions. {$1=""; $2=""; $3="";}: This part of the awk command sets the first three fields (date, time, and timezone information) to empty strings.

cat apache_error.log | grep 'error' | awk '{$1=""; $2=""; $3=""; print}' | sort | uniq -c | sort -nr | head -10

مقدمة حول التعبيرات العادية واستخدامها لتحليل سجل

بالنسبة لهذا التمرين، نستخدم ملفات السجل التالية this collection (same collection as the other files in this practice section)

في هذه المهمة سنستخدم التعبيرات العادية (Regular expressions أو regex اختصارًا) وهي تشبه أدوات البحث القوية التي تساعدك في العثور على أنماط محددة في البيانات. على سبيل المثال، إذا كنت تحقق في حركة مرور مشبوهة على الشبكة وتعلم أن الطلبات الضارة غالبًا ما تحتوي على أنماط معينة من الأحرف، فيمكنك استخدام التعبيرات العادية للبحث في السجلات أو تسجيلات حركة المرور للعثور على تلك الطلبات. تتيح لك التعبيرات العادية تحديد أنماط البحث المرنة، مثل:

**[a-z] range **- Matches a character in the range "a" to "z". Case sensitive.


I.e. [g-s] matches a character between g and s inclusive


abcdef**ghijklmnopqrs**tuvwxyz


**[A-Z] range -**  Matches a character in the range "A" to "Z" . Case sensitive.


**[0-9] range - **Matches a character in the range "0" to "9". Case sensitive.


We can also use **quantifiers** to match  the specified quantity of the previous token. {1,3} will match 1 to 3. {3} will match exactly 3. {3,} will match 3 or more.

[a-d]{3} matches any sequence of exactly three characters within the given range, each of which can be any lowercase letter from ‘a’ to ’d’. So, it would match strings like ‘abc’, ‘bda’, ‘cad’, etc. Some characters have special meanings within regexes these characters are:

SymbolNameDescription
\BackslashUsed to escape a special character
^CaretBeginning of a string
$Dollar signEnd of a string
.Period or dotMatches any single character
|Vertical bar or pipe symbolMatches previous OR next character/group
?Question markMatch zero or one of the previous
*Asterisk or starMatch zero, one or more of the previous
+Plus signMatch one or more of the previous
( )Opening and closing parenthesisGroup characters
[ ]Opening and closing square bracketMatches a range of characters
{ }Opening and closing curly braceMatches a specified number of occurrences of the previous

في مهمتنا سنستخدم الخط المائل العكسي لإلغاء حرف خاص “".

يمكنك قراءة المزيد عن التعبيرات العادية هنا: https://en.wikipedia.org/wiki/Regular_expression

إذا اطلّعت على سجل وصول إن جي آي إن إكس المقدم يمكنك رؤية هذا النوع من الأسطر:

181.214.166.113 - - [15/Feb/2024:15:05:19 -0500] "[L\x9E\x804\xD9-\xFB&\xA3\x1F\x9C\x19\x95\x12\x8F\x0C\x89\x05\x81" 400 181 "-" "-"
45.95.169.184 - - [15/Feb/2024:15:49:27 -0500] "\x10 \x00\x00BBBB\xBA\x8C\xC1\xABDAAA" 400 181 "-" "-"

كما ترون، يحتوي كلا السطرين على x\ متبوعين بحرفين بالضبط يمثلان التدوين السداسي العشري (لذلك يستخدمان الأرقام من 0-9 والحروف من A إلى F)، مثل x9C\ وx10\ وxBA\ وما إلى ذلك. لتصفية جميع الأسطر، نحتاج إلى استخدام نمط ‘\x[a-fA-F0-9]’ حيث يكون \x[a-fA-F0-9] هو رمزنا المميز وهو محددنا الكمي.

سنستخدم أمر grep للبحث عن النمط المحدد في النص مثل:

يصفي أمرgrep ‘abcd’ جميع الأسطر التي تحتوي على سلسلة “abcd”.

يتيح خيار “E-” في أمر grep استخدام تعبيرات عادية موسّعة لمطابقة نمط grep -E ‘abcd[0-9]’ لتصفية النص مثل abcd\34 أو abcd\47 وما إلى ذلك.

تمرين تدريبي 4: استخدام التعبيرات العادية (regexes)

بالنسبة لتلك التمارين، نستخدم ملفات السجل التالية this collection (كما هو الحال في القسم أعلاه)

  1. Use grep and the '\\x[a-fA-F0-9]{2}' regex to filter requests from nginx access.log containing a suspicious payload. The regex '\x[a-fA-F0-9]{3}' matches a sequence starting with ‘\x’ followed by exactly three hexadecimal characters (0-9, a-f, or A-F). How many lines are there?
  2. Using the same filter determine which IP address is making the most requests
  3. Examine error.log by running more error.log. You can quit this command with ctrl+c or press the “q” key to return command prompt. Excluding “PHP Notice” errors. What kind of critical errors can you find in the log?
  4. Exclude PHP errors from the error.log and find the lines where requests are denied due to security rules. Which sensitive file has been requested?
Practice exercise 4: answers

التمرين 1: الإجابة الصحيحة: 113 lines

Command(s) to execute: grep -E '\\x[a-fA-F0-9]{2}' nginx_access.log|wc|awk '{print $1}'

التمرين 2: الإجابة الصحيحة: 222.186.13.131 20 lines

Command(s) to execute: grep -E '\\x[a-fA-F0-9]{2}' nginx_access.log|sort|awk '{print $1}'| sort | uniq -c | sort -nr

التمرين 3: الإجابة الصحيحة: أخطاء مصافحة طبقة مآخذ التوصيل الآمنة الأمر أو الأوامر الواجب تنفيذها: SSL handshaking errors

Command(s) to execute:

more nginx_error.log
cat nginx_error.log|grep -v "PHP"|grep crit

التمرين 4: الإجابة الصحيحة: .git/config

Command(s) to execute: cat nginx_error.log|grep -v "PHP"|grep forbidden

اختبار مهارة

سيكون اختبار المهارة هذا أسهل بكثير إذا كنت قد أكملت التمرين التدريبي أعلاه أولًا.

قُدّم لك سجل وصول إن جي آي إن إكس من موقع ويب يتعرض للهجوم كي تحقق فيه: download here

حدد مسارًا مشبوهًا يتم استهدافه، واستخرج عناوين بروتوكول الإنترنت التي ترسل طلبات مشبوهة واكتشف البلدان التي توجد فيها عناوين بروتوكول هذه (يمكنك استخدام قواعد بيانات جيو آي بي (geoIP)، الموضحة بمزيد من التفصيل في مسار تعلم البنية التحتية الضارة لهذا الغرض). يمكنك استخدام أدوات واجهة سطر الأوامر القياسية مثل awk وgrep وsort وuniq. لمعرفة أرقام AS والبلدان نوصي باستخدام خدمات البحث ذات الصلة عبر الإنترنت.

تلميح: يوفر ipinfo.io طريقة مريحة للبحث عن تفاصيل بروتوكول الإنترنت، ويمكنك استخدام curl للحصول عليها.

127.0.0.1 - - [13/Dec/2023:13:55:36 -0700] “GET / HTTP/1.1” 200 2326

import re

keep = [‘select’, ‘where’, ‘from’, ‘and’, ‘script’, ‘on’, ‘src’, ‘../’, ‘<’, ‘>’] output = '’

i = 0 while i < len(target): matched = False for j in keep: if target[i:i+len(j)].lower() == j.lower(): output = output + target[i:i+len(j)] i=i+len(j) matched = True if not matched: if ’ ’ == target[i:i+1]: output = output + ’ ' elif re.search(’\w’, target[i:i+1]): output = output + “A” elif re.search(’\d’, target[i:i+1]): output = output + “1” else: output = output + “*” i = i+1

موارد التعلّم

ملفات السجل - أباتشي

مجانًا

نظرة عامة على كيفية قراءة ملفات السجل في خادم ويب أباتشي

اللغات: الإنجليزية
زيارة الموقع

فهم الوصول إلى أباتشي وسجل الأخطاء

مجانًا

مقالتان أخريان حول كيفية قراءة سجلات خادم ويب أباتشي

اللغات: الإنجليزية
زيارة الموقع

فهم الوصول إلى أباتشي وسجل الأخطاء

مجانًا

مقالتان أخريان حول كيفية قراءة سجلات خادم ويب أباتشي

اللغات: الإنجليزية
زيارة الموقع

تسجيل الأحداث من جانب الخادم

مجانًا

تحليل السجلات داخل خادم مايكروسوفت إنترنت إنفورميشن سيرفيسيز

اللغات: الإنجليزية
زيارة الموقع

(ASP.Net) الفاشلة سجلات أخطاء إنترنت إنفورميشن سيرفيسيز والطرق الأخرى للعثور على طلبات إيه إس ب دوت نت

مجانًا

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

اللغات: الإنجليزية
زيارة الموقع

تكوين تسجيل الأحداث على إن جي آي إن إكس

مجانًا

وثائق خادم الويب إن جي آي إن إكس حول كيفية تكوين السجلات والعمل معها

اللغات: الإنجليزية
زيارة الموقع

دليل لسجلات إن جي آي إن إكس

مجانًا

نظرة عامة على مختلف سجلات إن جي آي إن إكس وصيغها

اللغات: الإنجليزية
زيارة الموقع

سجل الأمان: أفضل الممارسات لتسجيل الأحداث وإدارتها

مجانًا

تحليل متى تكون السجلات مفيدة وكيف يمكننا تحليلها والسياسات التي يمكننا إنشاؤها حولها

اللغات: الإنجليزية
زيارة الموقع

ورقة معلومات مرجعية والمفردات لتسجيل أحداث مشروع أمان تطبيق الويب المفتوح

مجانًا

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

اللغات: الإنجليزية
زيارة الموقع

ورقة معلومات مرجعية والمفردات لتسجيل أحداث مشروع أمان تطبيق الويب المفتوح

مجانًا

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

اللغات: الإنجليزية
زيارة الموقع

أبق البيانات الحساسة خارج سجلاتك: أفضل 9 ممارسات

مجانًا

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

اللغات: الإنجليزية
زيارة الموقع