الأمن السيبراني وأمن المعلومات

SPL للمبتدئين: البحث والتحقيق في Splunk

6 دقيقة قراءةتاريخ النشر: 5 أغسطس 2026
توضيح مرئي احترافي حول SPL للمبتدئين في مجال SIEM والكشف
إجابة سريعة

SPL — Search Processing Language — هي لغة البحث في Splunk. يبدأ البحث باختيار البيانات حسب الوقت، index، sourcetype والمصطلحات، ويستمر بأوامر Pipe التي تقوم بتصفية، إنشاء حقول، تلخيص وعرض النتائج. لمحلل SOC، من المهم أولاً تعلم البحث الدقيق، stats و eval، ثم الاستعلامات المعقدة. كل نتيجة هي نقطة تحقيق يجب التحقق منها مقابل الأحداث الخام.

تسمح Splunk بالبحث في البيانات المفهرسة، استخراج الحقول، إجراء Aggregation، إنشاء Reports و Alerts ودعم التحقيق في الأحداث. تتضمن SPL أوامر، دوال، Arguments و Clauses. كما هو الحال في KQL، يمكن النظر إلى الاستعلام كأنبوب: البحث الأولي يعيد Events، وكل أمر بعد | يغير النتيجة.

المفتاح للأداء والدقة هو البدء من مجموعة البيانات الأصغر والأكثر صلة: Time range, index و sourcetype. البحث عن `error` في جميع البيانات لمدة أسبوع قد يكون مكلفًا وغير دقيق. البحث المركز حسب المصدر والحقول يسمح بفهم ما يحدث حقًا.

تفترض الأمثلة بيانات معملية في index يسمى lab و sourcetype يسمى auth مع الحقول user, src_ip و action. في مؤسسة حقيقية، تتغير أسماء الحقول، وأحيانًا يتم استخدام CIM — Common Information Model. تحقق من Schema المحلي قبل النسخ.

البحث الأولي

يمكن أن يبدأ بحث بسيط في Splunk على النحو التالي:

index=lab sourcetype=auth earliest=-24h

يمكن لـ Time Range Picker تحديد الوقت، ولكن الكتابة الصريحة لـ earliest و latest مفيدة للاستعادة والتوثيق. index يحد من مخزن بيانات معين و sourcetype يصف بنية المصدر. يمكن إضافة شرط حقل بالفعل في البحث الأولي:

index=lab sourcetype=auth action=failure earliest=-24h

عندما يكون الحقل موجودًا في وقت البحث، فإن تحديد `field=value` يكون أكثر دقة من البحث النصي الحر. علامات الاقتباس مطلوبة للقيم التي تحتوي على مسافات. يمكن أن تكون Wildcards مفيدة، ولكن Wildcard رائد أو بحث واسع يؤثر على الأداء وقد يؤدي إلى نتائج غير متوقعة.

Pipe وأوامر العرض

العلامة | تنقل النتائج إلى الأمر التالي. `fields` يحفظ أو يزيل الحقول، و `table` يعرض جدولًا بالترتيب المختار. في بداية التحقيق، يساعد table في القراءة، ولكن لا تستخدمه مبكرًا جدًا إذا كان أمر لاحق يحتاج إلى الحقول التي أزلتها.

index=lab sourcetype=auth earliest=-24h
| fields _time user src_ip action host
| table _time user src_ip action host

`rename` يغير الأسماء للعرض. `sort` يرتب، و `head` يحد من النتائج. عادةً ما يتم عرض الأحداث من الأحدث إلى الأقدم، ولكن عند إنشاء Timeline، يوصى بالترتيب الصريح:

index=lab sourcetype=auth user="student" earliest=-4h
| table _time user src_ip action host
| sort 0 _time

الرقم 0 في sort يلغي حد افتراضي معين لعدد النتائج للترتيب، ولكن على كميات كبيرة، قد يكون الترتيب الكامل مكلفًا. في التحقيق، استخدم نطاقًا محدودًا.

eval — إنشاء الحقول

`eval` يحسب أو ينشئ حقلًا. يمكن استخدام if, case, lower, coalesce, tonumber ووظائف أخرى. على سبيل المثال، إنشاء Outcome موحد:

index=lab sourcetype=auth earliest=-24h
| eval outcome=case(action="success", "Success", action="failure", "Failure", true(), "Other")
| table _time user src_ip action outcome

`where` تقوم بالتصفية باستخدام تعبير بعد جمع الأحداث أو بعد إنشاء الحقول. البحث الأولي `action=failure` يكون عادةً أفضل للتصفية الأساسية. `where` مفيدة لمقارنة الحقول، الشروط الرقمية أو الحقول التي تم إنشاؤها بواسطة eval.

index=lab sourcetype=auth earliest=-24h
| stats count as attempts by user src_ip
| where attempts >= 5
| sort - attempts

stats — تحويل الأحداث إلى سؤال

`stats` تحسب Aggregations على النتائج. بدون BY، يتم الحصول على صف واحد؛ مع BY، يتم الحصول على صف لكل تركيبة قيم. تتضمن الأوامر الشائعة count, sum, avg, min, max, values و dc — distinct count.

index=lab sourcetype=auth action=failure earliest=-24h
| stats count as failures,
        earliest(_time) as first_seen,
        latest(_time) as last_seen,
        values(src_ip) as src_ips
  by user
| convert ctime(first_seen) ctime(last_seen)
| sort - failures

`values` تعيد قيمًا فريدة بدون ترتيب مضمون ويمكن أن تنمو. استخدمها بحذر وفضل قائمة محدودة أو Drill-down عندما يكون هناك العديد من عناوين IP. `list` يحفظ القيم بالترتيب ولكن قد يستهلك المزيد من الذاكرة.

stats مقابل eventstats و streamstats

الأمرماذا يفعلالاستخدام النموذجي
statsيستبدل الأحداث بجدول ملخصالعد حسب المستخدم، IP أو المضيف
eventstatsيحسب ملخصًا ويضيفه إلى كل حدثمقارنة حدث بقيمة جماعية دون فقدان الصفوف الخام
streamstatsيحسب إحصائيات تراكمية حسب ترتيب الأحداثالتسلسلات، عداد متدحرج أو الوقت منذ حدث سابق

يجب على المبتدئين إتقان stats قبل استخدام transaction. يمكن أن يكون `transaction` مناسبًا للتجميع، ولكنه مكلف على الكميات الكبيرة وأحيانًا يخفي المنطق. في كثير من الأحيان، توفر stats, streamstats أو eventstats حلاً أكثر فعالية وشفافية.

النوافذ الزمنية و timechart

`timechart` تنشئ سلسلة زمنية وتجمع حسب `_time`. إنها جيدة لتحديد Spike، الاتجاه والتغير في الحجم. على سبيل المثال:

index=lab sourcetype=auth action=failure earliest=-24h
| timechart span=30m count by src_ip limit=10

اختر span حسب السؤال. نافذة صغيرة جدًا ستنتج ضوضاء، ونافذة كبيرة جدًا ستخفي Burst. timechart هو أمر تحويلي: النتيجة هي جدول ملخص، وليس الأحداث الخام. لأغراض الإثبات، قم بإجراء Drill-down إلى النطاق وعنوان IP ذي الصلة.

تمرين: الفشل والنجاح في نفس النافذة

الهدف هو العثور على نوافذ قام فيها نفس المستخدم وعنوان IP بإنشاء عدة إخفاقات ونجاح واحد على الأقل. يستخدم الاستعلام التالي eval, bin و stats:

index=lab sourcetype=auth earliest=-24h
| eval failed=if(action="failure", 1, 0), success=if(action="success", 1, 0)
| bin _time span=30m
| stats sum(failed) as failures,
        sum(success) as successes,
        earliest(_time) as window_start,
        latest(_time) as window_end
  by _time user src_ip
| where failures >= 5 AND successes >= 1
| sort - failures

يشير الاستعلام إلى نافذة تتطلب تحقيقًا. نظرًا لتلخيص البيانات، فإنه لا يثبت أن النجاح كان بعد الإخفاقات. استخدم النتيجة لإجراء Drill-down على user, src_ip والوقت:

index=lab sourcetype=auth user="student" src_ip="203.0.113.25" earliest="08/01/2026:09:00:00" latest="08/01/2026:09:30:00"
| table _time user src_ip action host reason
| sort 0 _time

تحقق: هل ينتمي النجاح إلى نفس المضيف أو التطبيق؟ هل عنوان المصدر هو VPN؟ هل نتجت الإخفاقات عن كلمة مرور قديمة في الخدمة؟ هل يوجد نشاط متابعة؟ SPL يوفر البيانات؛ يتطلب التصنيف السياق.

الحقول، الاستخراج و CIM

تقوم Splunk باستخراج الحقول وقت الفهرسة أو البحث. قد يتطلب حقل مفقود `rex`، `spath` لـ JSON أو تعريف استخراج الحقول. يمكن أن يساعد الاستخراج المخصص في المختبر، ولكن الكشف في الإنتاج يتطلب محلل ونموذج بيانات يتم صيانتهما.

يقوم CIM بتوحيد المفاهيم بين المصادر، على سبيل المثال Authentication.user أو Network_Traffic.src. عندما تستخدم المؤسسة CIM، يمكن بناء Detectons و Dashboards قابلة للاستخدام على عدة منتجات. يجب التحقق من أن البيانات تتوافق حقًا مع النموذج وليس فقط أن التطبيق مثبت.

تحسين الأداء وقابلية القراءة

  • حدد Time range ضيقًا قدر الإمكان.
  • ابدأ بـ index, sourcetype وحقول معينة.
  • قم بالتصفية مبكرًا قبل stats أو sort.
  • تجنب Wildcard الرائد والبحث النصي الواسع عندما يكون هناك حقل.
  • استخدم fields لتقليل Payload، ولكن ليس قبل أمر يحتاج إلى حقل.
  • حدّد values/list والعمليات التي تستهلك ذاكرة كبيرة.
  • امنح أسماء حقول واضحة باستخدام `as`.
  • احفظ الاستعلام مع وصف، Owner، وقت وإصدار.
  • اختبر على عينة صغيرة قبل نطاق طويل.

الأخطاء الشائعة

  • البحث في جميع الـ indexes دون داع.
  • افتراض أن حقل action أو user موجود في كل sourcetype.
  • استخدام table مبكرًا وإزالة حقل مطلوب لاحقًا.
  • تفسير stats كـ Timeline دقيق.
  • استخدام transaction كافتراضي.
  • تفعيل Alert على استعلام لم يتم اختباره مقابل Baseline.
  • نسخ SPL من إصدار أو Data model آخر دون تعديل.
  • تجاهل المنطقة الزمنية و Ingestion delay.

قائمة التحقق للتمرين

  1. اعثر على index و sourcetype لبيانات المختبر.
  2. اعرض خمسة Events وتحقق من الحقول.
  3. قم بتصفية مستخدم أو IP واحد.
  4. اعرض Timeline باستخدام table و sort.
  5. لخص الإخفاقات باستخدام stats.
  6. أنشئ حقلًا باستخدام eval وقم بتصفيته في where.
  7. اعرض الحجم بمرور الوقت باستخدام timechart.
  8. اكتب ما يثبته كل استعلام وما لا يثبته.

الخلاصة و CTA

أنشئ index معمل صغير أو استخدم بيانات مرخصة، وقم بتشغيل نفس السيناريو في ثلاث طرق عرض: Raw events, stats و timechart. اكتب بجانب كل طريقة عرض السؤال الذي تجيب عليه والسياق المفقود. الخطوة التالية هي تحويل بحث مستقر إلى Detection مع Owner, Threshold و Playbook — ليس فقط حفظ استعلام مثير للإعجاب.

الأسئلة الشائعة

ما الفرق بين SPL و SPL2؟

تدعم Splunk SPL الكلاسيكية و SPL2 في منتجات وسياقات معينة. يتعامل هذا الدليل مع SPL الشائعة في Search & Reporting؛ يجب التحقق من بيئة المنتج والإصدار.

هل يجب تحديد index في كل استعلام؟

ليس دائمًا من الناحية الفنية، ولكن في البحث الاحترافي، يوصى بتقييد index و sourcetype لتحسين الأداء والدقة.

ما الفرق بين search و where؟

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

متى يتم استخدام stats؟

عندما ترغب في تحويل الأحداث إلى ملخص حسب المستخدم، IP، المضيف، الوقت أو حقل آخر. بعد ذلك، يتم إجراء Drill-down إلى Raw events لأغراض الإثبات.

هل الاستعلام الذي يجد الإخفاقات والنجاح يثبت اختراقًا؟

لا. إنه ينشئ Lead. يجب التحقق من الترتيب، MFA، VPN، المضيف، المستخدم والنشاط اللاحق قبل التصنيف.

هل تريد التحقق مما إذا كان هذا المسار يناسبك؟

اترك تفاصيلك وسيتصل بك مستشار من HPI لإجراء مكالمة قصيرة لتقييم الملاءمة، دون أي التزام.

يتم تخزين بياناتك بأمان.

لدراسات SOC والأمن السيبراني ضمن برنامج Cybersecurity & AI

هل ترغب في تفاصيل البرنامج؟ اترك بياناتك وسنتواصل معك.

مقالات ذات صلة