المقدمة
Suricata هو أداة رصد أمن الشبكة (NSM) تستخدم مجموعات من التوقيعات التي أنشأتها المجتمع وتعريفها من قبل المستخدمين (المعروفة أيضًا باسم القواعد) لفحص ومعالجة حركة المرور على الشبكة. يمكن لـ Suricata توليد أحداث السجل، وتنبيهات الزر، وإسقاط حركة المرور عند اكتشافها لحزم مشبوهة أو طلبات إلى أي عدد من الخدمات المختلفة التي تعمل على الخادم.
بشكل افتراضي، يعمل Suricata كنظام كشف تسلل سلبي (IDS) لفحص حركة المرور المشبوهة على الخادم أو الشبكة. سيقوم بتوليد تنبيهات وتسجيلها للتحقيق اللاحق. يمكن أيضًا تكوينه كنظام وقائي ضد التسلل (IPS) لتسجيل وتنبيه وحظر حركة المرور على الشبكة تمامًا إذا تماثلت مع قواعد معينة.
يمكنك نشر Suricata على خادم بوابة في الشبكة لفحص كل حركة المرور الواردة والصادرة من الأنظمة الأخرى، أو يمكنك تشغيله محليًا على الأجهزة الفردية في أي من الوضعين.
في هذا البرنامج التعليمي، ستتعلم كيفية تثبيت Suricata، وكيفية تخصيص بعض الإعدادات الافتراضية الخاصة به على Centos 8 Stream لتناسب احتياجاتك. ستتعلم أيضًا كيفية تنزيل مجموعات التوقيعات الموجودة (عادة ما يشار إليها باسم مجموعات القواعد) التي يستخدمها Suricata لفحص حركة المرور على الشبكة. وأخيرًا، ستتعلم كيفية اختبار ما إذا كان Suricata يعمل بشكل صحيح عند اكتشاف طلبات وبيانات مشبوهة في الرد.
المتطلبات الأساسية
بناءً على تكوين شبكتك وكيفية نية استخدام Suricata، قد تحتاج إلى المزيد أو أقل من وحدة المعالجة المركزية والذاكرة العشوائية لخادمك. بشكل عام، كلما كنت تخطط لفحص مزيد من حركة المرور، يجب أن تخصص موارد أكثر لـ Suricata. في بيئة الإنتاج، خطط لاستخدام ما لا يقل عن وحدتين مركزيتين و 4 أو 8 غيغابايت من ذاكرة الوصول العشوائي للبدء. من هناك، يمكنك توسيع الموارد وفقًا لأداء Suricata وكمية حركة المرور التي تحتاج إلى معالجتها.
إذا كنت تخطط لاستخدام Suricata لحماية الخادم الذي يعمل عليه، ستحتاج إلى:
- خادم واحد يعمل بنظام Centos 8 Stream مع وحدتي معالجة مركزية أو أكثر، ومستخدم غير جذري مع إمكانيات sudo، وتمكين جدار حماية. لإعداد هذا، يمكنك اتباع الدليل الخاص بنا لـ إعداد الخادم الأولي باستخدام CentOS Linux 8.
أما إذا كنت تخطط لاستخدام Suricata على جهاز بوابة لمراقبة وحماية عدة خوادم، فيجب التأكد من تكوين شبكة الاتصال للجهاز الأصلي.
إذا كنت تستخدم DigitalOcean يمكنك اتباع هذا الدليل حول كيفية تكوين Droplet كبوابة VPC. يجب أن تعمل هذه التعليمات لمعظم خوادم CentOS و Fedora وغيرها من الخوادم المشتقة من RedHat أيضًا.
الخطوة ١ — تثبيت سوريكاتا
للبدء في تثبيت سوريكاتا، ستحتاج إلى إضافة معلومات مستودع البرمجيات لمؤسسة الأمن والمعلومات المفتوحة (OISF) إلى نظام CentOS الخاص بك. يمكنك استخدام أمر dnf copr enable
للقيام بذلك. ستحتاج أيضًا إلى إضافة مستودع Extra Packages for Enterprise Linux (EPEL).
لتمكين الأمر الفرعي لمشاريع المجتمع (copr
) لأداة الحزمة dnf
، قم بتشغيل الأمر التالي:
سيُطلب منك تثبيت بعض التبعيات الإضافية، بالإضافة إلى قبول مفتاح GPG لتوزيعة CentOS Linux. اضغط y
و ENTER
في كل مرة لإنهاء تثبيت حزمة copr
.
ثم قم بتشغيل الأمر التالي لإضافة مستودع OISF إلى نظامك وتحديث قائمة الحزم المتاحة:
اضغط y
و ENTER
عندما يُطلب منك تأكيد رغبتك في إضافة المستودع.
الآن أضف حزمة epel-release
، والتي ستجعل بعض حزم التبعية الإضافية متاحة لسوريكاتا:
عندما يُطلب منك استيراد مفتاح GPG، اضغط y
و ENTER
للقبول.
الآن بعد تمكين مستودعات البرمجيات المطلوبة، يمكنك تثبيت حزمة suricata
باستخدام أمر dnf
:
عندما يُطلب منك إضافة مفتاح GPG لمستودع OISF، اضغط على y
ثم ENTER
. سيتم الآن تنزيل الحزمة وتثبيتها.
بعد ذلك، قم بتمكين suricata.service
حتى يتم تشغيله عند إعادة تشغيل النظام. استخدم الأمر systemctl
لتمكينه:
يجب أن تتلقى مخرجات مثل التالي التي تشير إلى تمكين الخدمة:
OutputCreated symlink /etc/systemd/system/multi-user.target.wants/suricata.service → /usr/lib/systemd/system/suricata.service.
قبل المتابعة إلى الجزء التالي من هذا البرنامج التعليمي، الذي يشرح كيفية تكوين Suricata، قم بإيقاف الخدمة باستخدام systemctl
:
يضمن إيقاف Suricata أنه عند تحرير واختبار ملف التكوين، ستُدرج أي تغييرات تقوم بها وتحميلها عند بدء تشغيل Suricata مرة أخرى.
الخطوة ٢ — تكوين Suricata للمرة الأولى
تأتي حزمة Suricata من مستودعات OISF مع ملف تكوين يغطي مجموعة واسعة من حالات الاستخدام. يكون الوضع الافتراضي لـ Suricata هو وضع IDS، لذلك لن يتم إسقاط أي حركة مرور، فقط تسجيلها. ترك هذا الوضع على الإعداد الافتراضي فكرة جيدة أثناء تعلمك لـ Suricata. بمجرد أن يكون Suricata مكونًا ومتكاملاً في بيئتك، ولديك فكرة جيدة عن أنواع حركة المرور التي ستنبهك إليها، يمكنك اختيار تشغيل وضع IPS.
ومع ذلك، لا يزال لدى التكوين الافتراضي بعض الإعدادات التي قد تحتاج إلى تغييرها اعتمادًا على بيئتك واحتياجاتك.
(اختياري) تمكين تدفق المجتمع ID
يمكن لبرنامج Suricata أن يتضمن حقل معرف المجتمع في الإخراج JSON الخاص به لتسهيل مطابقة سجلات الحدث الفردية مع السجلات في مجموعات البيانات التي تم إنشاؤها بواسطة أدوات أخرى.
إذا كنت تخطط لاستخدام Suricata مع أدوات أخرى مثل Zeek أو Elasticsearch، فإن إضافة معرف المجتمع الآن فكرة جيدة.
لتمكين الخيار، افتح /etc/suricata/suricata.yaml
باستخدام vi
أو المحرر المفضل لديك:
ابحث عن السطر 120 الذي يقول # معرف تدفق المجتمع
. إذا كنت تستخدم vi
اكتب 120gg
للانتقال مباشرة إلى السطر. أسفل ذلك السطر هو مفتاح community-id
. ضبطه على true
لتمكين الإعداد:
. . .
# معرف تدفق المجتمع
# يضيف حقل 'community_id' إلى سجلات EVE. تهدف هذه السجلات إلى إعطاء
# تدفق متوقع يمكن استخدامه لمطابقة السجلات مع
# إخراج أدوات أخرى مثل Zeek (Bro).
#
# يأخذ 'بذرة' يجب أن تكون نفسها عبر المستشعرات والأدوات
# لجعل التعريف أقل تنبؤًا.
# تمكين/تعطيل ميزة معرف المجتمع.
community-id: true
. . .
الآن عندما تفحص الأحداث، ستكون لديها معرف مثل 1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ=
الذي يمكنك استخدامه لربط السجلات عبر أدوات NMS مختلفة.
احفظ وأغلق ملف /etc/suricata/suricata.yaml
. إذا كنت تستخدم vi
، يمكنك القيام بذلك باستخدام ESC
ثم :x
ثم ENTER
لحفظ والخروج من الملف.
تحديد الواجهة(ات) الشبكية(ات) للاستخدام
قد تحتاج إلى تجاوز الواجهة الشبكية الافتراضية أو الواجهات التي تود Suricata تفتيش حركة المرور عليها. يعتمد ملف التكوين الذي يأتي مع حزمة OISF Suricata افتراضيًا على تفتيش حركة المرور على جهاز يُسمى eth0
. إذا كانت نظامك يستخدم واجهة شبكية افتراضية مختلفة، أو إذا كنت ترغب في فحص حركة المرور على أكثر من واجهة، فسيتعين عليك تغيير هذه القيمة.
لتحديد اسم الجهاز لواجهة الشبكة الافتراضية الخاصة بك، يمكنك استخدام الأمر ip
على النحو التالي:
العلم -p
ينسق الإخراج ليكون أكثر قراءة، والعلم -j
يطبع الإخراج على شكل JSON.
يجب أن تتلقى إخراجًا مشابهًا للتالي:
Output[ {
"dst": "default",
"gateway": "203.0.113.254",
"dev": "eth0",
"protocol": "static",
"metric": 100,
"flags": [ ]
} ]
السطر dev
يشير إلى الجهاز الافتراضي. في مثال الإخراج هذا، الجهاز هو واجهة eth0
المميزة باللون. قد يظهر الإخراج الخاص بك اسم جهاز مثل ens...
أو eno...
. أيا كان الاسم، قم بتسجيله.
الآن يمكنك تحرير تكوين Suricata والتحقق أو تغيير اسم الواجهة. افتح ملف التكوين /etc/suricata/suricata.yaml
باستخدام vi
أو محررك المفضل:
انتقل إلى نهاية الملف حتى تصل إلى سطر يحتوي على af-packet:
حوالي السطر 580. إذا كنت تستخدم vi
يمكنك أيضًا الانتقال مباشرة إلى السطر عن طريق إدخال 580gg
. أسفل هذا السطر هو الواجهة الافتراضية التي سيريكاتا سيستخدمها لفحص حركة المرور. قم بتحرير السطر ليتطابق مع واجهتك كما في المثال المميز التالي:
# دعم التقاط السريع عالي السرعة في Linux
af-packet:
- interface: eth0
# عدد خيوط الاستقبال. "auto" يستخدم عدد النوى
#threads: auto
# clusterid الافتراضي. سيقوم AF_PACKET بتوزيع حزم البيانات بناءً على التدفق.
cluster-id: 99
. . .
إذا كنت ترغب في فحص حركة المرور على واجهات إضافية، يمكنك إضافة المزيد من كائنات YAML - interface: eth...
. على سبيل المثال، لإضافة جهاز يسمى enp0s1
، انتقل إلى نهاية قسم af-packet
حوالي السطر 650. لإضافة واجهة جديدة، قم بإدراجها قبل القسم - interface: default
كما في المثال المميز التالي:
# لإعداد eBPF و XDP بما في ذلك التجاوز والتصفية وتوزيع الحمل، يرجى
# الاطلاع على مستند/userguide/capture-hardware/ebpf-xdp.rst لمزيد من المعلومات.
- interface: enp0s1
cluster-id: 98
- interface: default
# الخيوط: تلقائي
# استخدم-mmap: لا
# tpacket-v3: نعم
تأكد من اختيار قيمة cluster-id
فريدة لكل كائن - interface
.
أبقِ محررك مفتوحًا وانتقل إلى القسم التالي حيث ستقوم بتكوين إعادة تحميل القواعد بشكل مباشر. إذا كنت لا ترغب في تمكين هذا الإعداد، يمكنك حفظ وإغلاق ملف /etc/suricata/suricata.yaml
. إذا كنت تستخدم vi
، يمكنك القيام بذلك عن طريق ESC
، ثم :x
و ENTER
لحفظ والخروج.
تكوين إعادة تحميل القواعد مباشرة
Suricata يدعم إعادة تحميل القواعد مباشرة، مما يعني أنه يمكنك إضافة وإزالة وتحرير القواعد دون الحاجة إلى إعادة تشغيل عملية Suricata الجارية. لتمكين خيار الإعادة التلقائية المباشرة، انتقل إلى أسفل ملف التكوين وأضف الأسطر التالية:
. . .
detect-engine:
- rule-reload: true
بهذا الإعداد في مكانه، ستتمكن من إرسال إشارة النظام SIGUSR2
إلى العملية الجارية، وسيقوم Suricata بإعادة تحميل أي قواعد تغيرت إلى الذاكرة.
A command like the following will notify the Suricata process to reload its rulesets, without restarting the process:
الجزء $(pidof suricata)
من الأمر يستدعي الغلاف الفرعي، ويجد معرف العملية لسيريكاتا التي تعمل. الجزء الأول sudo kill -usr2
من الأمر يستخدم أداة kill
لإرسال إشارة SIGUSR2
إلى معرف العملية الذي يُرجعه الغلاف الفرعي.
يمكنك استخدام هذا الأمر في أي وقت تقوم فيه بتشغيل suricata-update
أو عند إضافة أو تحرير قواعد مخصصة خاصة بك.
احفظ وأغلق ملف /etc/suricata/suricata.yaml
. إذا كنت تستخدم vi
، يمكنك القيام بذلك باستخدام ESC
، ثم :x
و ENTER
للتأكيد.
الخطوة 3 — تحديث مجموعات قواعد سيريكاتا
في هذه النقطة من البرنامج التعليمي، إذا كنت ستبدأ سيريكاتا، فسوف تتلقى رسالة تحذير مثل التالية في السجلات تفيد بأنه لا توجد قواعد محملة:
Output<Warning> - [ERRCODE: SC_ERR_NO_RULES(42)] - No rule files match the pattern /var/lib/suricata/rules/suricata.rules
بشكل افتراضي، يتضمن حزمة سيريكاتا مجموعة محدودة من قواعد الكشف (في الدليل /etc/suricata/rules
)، لذا فإن تشغيل سيريكاتا في هذه النقطة لن يكشف سوى كمية محدودة من حركة المرور السيئة.
تتضمن سيريكاتا أداة تسمى suricata-update
التي يمكنها جلب مجموعات قواعد من موفرين خارجيين. قم بتشغيلها على النحو التالي لتنزيل مجموعة قواعد محدثة لخادم سيريكاتا الخاص بك:
يجب أن تتلقى مخرجات مثل التالية:
Output19/10/2021 -- 19:31:03 - <Info> -- Using data-directory /var/lib/suricata.
19/10/2021 -- 19:31:03 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml
19/10/2021 -- 19:31:03 - <Info> -- Using /usr/share/suricata/rules for Suricata provided rules.
. . .
19/10/2021 -- 19:31:03 - <Info> -- No sources configured, will use Emerging Threats Open
19/10/2021 -- 19:31:03 - <Info> -- Fetching https://rules.emergingthreats.net/open/suricata-6.0.3/emerging.rules.tar.gz.
100% - 3062850/3062850
. . .
19/10/2021 -- 19:31:06 - <Info> -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 31011; enabled: 23649; added: 31011; removed 0; modified: 0
19/10/2021 -- 19:31:07 - <Info> -- Writing /var/lib/suricata/rules/classification.config
19/10/2021 -- 19:31:07 - <Info> -- Testing with suricata -T.
19/10/2021 -- 19:31:32 - <Info> -- Done.
الأسطر المميزة تشير إلى أن suricata-update
قام بجلب قواعد ET Open Rules المجانية لتهديدات الظهور وحفظها في ملف /var/lib/suricata/rules/suricata.rules
لـ Suricata. كما تشير أيضًا إلى عدد القواعد التي تم معالجتها، في هذا المثال تمت إضافة 31011 قاعدة ومن بينها تم تمكين 23649 قاعدة.
إضافة مزودي القواعد
يمكن لأداة suricata-update
جلب القواعد من مجموعة متنوعة من مزودي القواعد المجانية والتجارية. تتوفر بعض مجموعات القواعد مثل مجموعة ET Open التي قمت بإضافتها بالفعل بشكل مجاني، بينما تتطلب البعض الآخر اشتراكًا مدفوعًا.
يمكنك عرض قائمة مجموعة القواعد الافتراضية باستخدام علم list-sources
لـ suricata-update
مثل هذا:
ستتلقى قائمة بالمصادر مثل الأتي:
Output. . .
19/10/2021 -- 19:27:34 - <Info> -- Adding all sources
19/10/2021 -- 19:27:34 - <Info> -- Saved /var/lib/suricata/update/cache/index.yaml
Name: et/open
Vendor: Proofpoint
Summary: Emerging Threats Open Ruleset
License: MIT
. . .
على سبيل المثال، إذا كنت ترغب في تضمين مجموعة القواعد tgreen/hunting
، يمكنك تمكينها باستخدام الأمر التالي:
ثم قم بتشغيل suricata-update
مرة أخرى وسيتم إضافة مجموعة القواعد الجديدة، بالإضافة إلى مجموعة قواعد ET Open الحالية وأي مجموعات أخرى قمت بتنزيلها.
الخطوة 4 — التحقق من صحة تكوين Suricata
الآن بعد أن قمت بتحرير ملف تكوين Suricata لتضمين معرف المجتمع الاختياري، وتحديد واجهة الشبكة الافتراضية، وتمكين إعادة تحميل القواعد الحية، فإنه من الجيد فحص التكوين.
Suricata لديها وضع اختبار مدمج سيقوم بفحص ملف التكوين وأي قواعد مضمنة للتحقق من صحتها. قم بتحقق من التغييرات السابقة باستخدام العلم -T
لتشغيل Suricata في وضع الاختبار. يقوم العلم -v
بطباعة بعض المعلومات الإضافية، ويقول العلم -c
لـ Suricata أين يجب العثور على ملف التكوين:
الاختبار قد يستغرق بعض الوقت اعتمادًا على كمية وحدة المعالجة المركزية التي قمت بتخصيصها لـ Suricata وعدد القواعد التي قمت بإضافتها، لذا كن مستعدًا للانتظار لمدة دقيقة أو اثنتين لاكتماله.
مع مجموعة القواعد الافتراضية ET Open يجب أن تتلقى إخراجًا مثل الآتي:
Output21/10/2021 -- 15:00:40 - <Info> - Running suricata under test mode
21/10/2021 -- 15:00:40 - <Notice> - This is Suricata version 6.0.3 RELEASE running in SYSTEM mode
21/10/2021 -- 15:00:40 - <Info> - CPUs/cores online: 2
21/10/2021 -- 15:00:40 - <Info> - fast output device (regular) initialized: fast.log
21/10/2021 -- 15:00:40 - <Info> - eve-log output device (regular) initialized: eve.json
21/10/2021 -- 15:00:40 - <Info> - stats output device (regular) initialized: stats.log
21/10/2021 -- 15:00:46 - <Info> - 1 rule files processed. 23879 rules successfully loaded, 0 rules failed
21/10/2021 -- 15:00:46 - <Info> - Threshold config parsed: 0 rule(s) found
21/10/2021 -- 15:00:47 - <Info> - 23882 signatures processed. 1183 are IP-only rules, 4043 are inspecting packet payload, 18453 inspect application layer, 107 are decoder event only
21/10/2021 -- 15:01:13 - <Notice> - Configuration provided was successfully loaded. Exiting.
21/10/2021 -- 15:01:13 - <Info> - cleaning up signature grouping structure... complete
إذا كان هناك خطأ في ملف التكوين الخاص بك، فسيقوم وضع الاختبار بتوليد رمز خطأ محدد ورسالة يمكنك استخدامها للمساعدة في استكشاف الأخطاء. على سبيل المثال، تضمين ملف قواعد لا يوجد يسمى test.rules
سيولد خطأً مثل الآتي:
Output21/10/2021 -- 15:10:15 - <Info> - Running suricata under test mode
21/10/2021 -- 15:10:15 - <Notice> - This is Suricata version 6.0.3 RELEASE running in SYSTEM mode
21/10/2021 -- 15:10:15 - <Info> - CPUs/cores online: 2
21/10/2021 -- 15:10:15 - <Info> - eve-log output device (regular) initialized: eve.json
21/10/2021 -- 15:10:15 - <Info> - stats output device (regular) initialized: stats.log
21/10/2021 -- 15:10:21 - <Warning> - [ERRCODE: SC_ERR_NO_RULES(42)] - No rule files match the pattern /var/lib/suricata/rules/test.rules
باستخدام هذا الخطأ يمكنك بعد ذلك تحرير ملف التكوين الخاص بك لتضمين المسار الصحيح، أو إصلاح المتغيرات غير الصحيحة وخيارات التكوين.
بمجرد أن يكتمل تشغيل وضع اختبار Suricata بنجاح، يمكنك المضي قدمًا إلى الخطوة التالية، وهي بدء تشغيل Suricata في وضع الخادم.
الخطوة 5 — تشغيل Suricata
الآن بعد أن لديك تكوين Suricata ومجموعة قواعد صالحة، يمكنك بدء تشغيل خادم Suricata. قم بتشغيل الأمر التالي باستخدام systemctl
:
يمكنك فحص حالة الخدمة باستخدام الأمر systemctl status
:
يجب أن تتلقى مخرجات مثل التالية:
Output● suricata.service - Suricata Intrusion Detection Service
Loaded: loaded (/usr/lib/systemd/system/suricata.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2021-10-21 18:22:56 UTC; 1min 57s ago
Docs: man:suricata(1)
Process: 24588 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS)
Main PID: 24590 (Suricata-Main)
Tasks: 1 (limit: 23473)
Memory: 80.2M
CGroup: /system.slice/suricata.service
└─24590 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -i eth0 --user suricata
Oct 21 18:22:56 suricata systemd[1]: Starting Suricata Intrusion Detection Service..
Oct 21 18:22:56 suricata systemd[1]: Started Suricata Intrusion Detection Service.
. . .
كما هو الحال مع أمر وضع الاختبار، سيستغرق Suricata دقيقة أو دقيقتين لتحميل وتحليل جميع القواعد. يمكنك استخدام الأمر tail
لمراقبة رسالة معينة في سجلات Suricata التي تشير إلى أنه قد انتهى من البدء:
ستتلقى عددًا من الأسطر المخرجة، وقد يبدو أن الطرفية متعلقة أثناء تحميل Suricata. استمر في الانتظار للحصول على مخرجات حتى تتلقى سطرًا مثل الآتي:
Output19/10/2021 -- 19:22:39 - <Info> - All AFP capture threads are running.
يشير هذا السطر إلى أن Suricata قيد التشغيل وجاهز لفحص حركة المرور. يمكنك الخروج من أمر tail
باستخدام CTRL+C
.
الآن بعد التحقق من أن Suricata قيد التشغيل، الخطوة التالية في هذا البرنامج التعليمي هي التحقق مما إذا كان Suricata يكتشف طلبًا إلى عنوان URL اختباري مصمم لتوليد إنذار.
الخطوة 6 — اختبار قواعد Suricata
مجموعة القواعد المفتوحة ET التي قمت بتنزيلها تحتوي على أكثر من 30000 قاعدة. شرح كامل لكيفية عمل قواعد Suricata، وكيفية بنائها يتخطى نطاق هذا البرنامج التعليمي التمهيدي. ستشرح دروس متتالية في هذه السلسلة كيفية عمل القواعد وكيفية بناء الخاصة بك.
لأغراض هذا البرنامج التعليمي، يكفي اختبار ما إذا كان Suricata يكتشف حركة مرور مشبوهة باستخدام التكوين الذي أنشأته. يوصي دليل بدء سريع لـ Suricata باختبار قاعدة ET Open برقم 2100498
باستخدام أمر curl
.
قم بتشغيل الأمر التالي لإنشاء طلب HTTP، الذي سيعيد استجابة تتطابق مع قاعدة تنبيه Suricata:
سيقوم أمر curl
بإخراج استجابة مثل الآتي:
Outputuid=0(root) gid=0(root) groups=0(root)
تم تصميم بيانات الاستجابة في هذا المثال لتحفيز تنبيه، من خلال التظاهر بإرجاع إخراج أمر مثل id
الذي قد يتم تشغيله على نظام بعيد مخترق عبر واجهة shell ويب.
الآن يمكنك التحقق من سجلات Suricata للحصول على تنبيه مطابق. هناك سجلان ممكن تفعيلهما مع تكوين Suricata الافتراضي. الأول في /var/log/suricata/fast.log
والثاني هو سجل قابل للقراءة من الآلة في /var/log/suricata/eve.log
.
فحص /var/log/suricata/fast.log
للتحقق من وجود إدخال في /var/log/suricata/fast.log
يتوافق مع طلبك curl
استخدم أمر grep
. باستخدام معرف القاعدة 2100498
من وثائق البدء السريع، ابحث عن الإدخالات التي تتطابق معها باستخدام الأمر التالي:
إذا استخدمت طلبك IPv6، فسوف تتلقى مخرجات مثل التالي، حيث 2001:DB8::1
هو عنوان IPv6 العام لنظامك:
Output10/21/2021-18:35:54.950106 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 2600:9000:2000:4400:0018:30b3:e400:93a1:80 -> 2001:DB8::1:34628
إذا استخدم طلبك IPv4، فسيكون لديك سجل مثل هذا، حيث 203.0.113.1
هو عنوان IPv4 العام لنظامك:
Output10/21/2021-18:35:57.247239 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 204.246.178.81:80 -> 203.0.113.1:36364
لاحظ القيمة المميزة المظللة 2100498
في الناتج، والتي هي معرف التوقيع (sid
) الذي يستخدمه Suricata لتحديد قاعدة.
فحص /var/log/suricata/eve.log
يسجل Suricata أيضًا الأحداث في /var/log/suricata/eve.log
(المعروف أيضًا باسم سجل EVE) باستخدام تنسيق JSON لصياغة الإدخالات.
يوصي دليل Suricata باستخدام أداة jq
لقراءة وتصفية الإدخالات في هذا الملف. قم بتثبيت jq
إذا لم يكن مثبتًا على نظامك باستخدام الأمر dnf
التالي:
بمجرد تثبيت jq
، يمكنك تصفية الأحداث في سجل EVE عن طريق البحث عن التوقيع 2100498
باستخدام الأمر التالي:
يفحص الأمر كل إدخال JSON ويطبع أيًا منها يحتوي على كائن alert
، مع مفتاح signature_id
الذي يتطابق مع القيمة 2100498
التي تبحث عنها. سيكون الإخراج على النحو التالي:
Output{
"timestamp": "2021-10-21T19:42:47.368856+0000",
"flow_id": 775889108832281,
"in_iface": "eth0",
"event_type": "alert",
"src_ip": "203.0.113.1",
"src_port": 80,
"dest_ip": "147.182.148.159",
"dest_port": 38920,
"proto": "TCP",
"community_id": "1:vuSfAFyy7oUq0LQC5+KNTBSuPxg=",
"alert": {
"action": "allowed",
"gid": 1,
"signature_id": 2100498,
"rev": 7,
"signature": "GPL ATTACK_RESPONSE id check returned root",
"category": "Potentially Bad Traffic",
. . .
}
لاحظ السطر المميز "signature_id": 2100498,
، وهو المفتاح الذي يبحث عنه jq
. كما لاحظ السطر المميز "community_id": "1:vuSfAFyy7oUq0LQC5+KNTBSuPxg=",
في الإخراج JSON. هذا المفتاح هو معرف تدفق المجتمع الذي قمت بتمكينه في ملف تكوين Suricata.
سيولد كل تنبيه معرف تدفق مجتمع فريدًا. يمكن لأدوات NMS الأخرى أيضًا توليد نفس المعرف لتمكين الإشارة عبر الإنترنت لتنبيه Suricata مع الإخراج من الأدوات الأخرى.
A matching log entry in either log file means that Suricata successfully inspected the network traffic, matched it against a detection rule, and generated an alert for subsequent analysis or logging. A future tutorial in this series will explore how to send Suricata alerts to a Security Information Event Management (SIEM) system for further processing.
الخطوة 7 — التعامل مع تنبيهات Suricata
بمجرد إعداد التنبيهات واختبارها، يمكنك اختيار كيفية التعامل معها. بالنسبة لبعض الحالات الاستخدامية، قد تكون تسجيل التنبيهات لأغراض التدقيق كافية؛ أو قد تفضل اتخاذ نهج أكثر فعالية لحجب حركة المرور من الأنظمة التي تولد تنبيهات متكررة.
إذا كنت ترغب في حجب حركة المرور بناءً على التنبيهات التي يولدها Suricata، فإحدى الطرق هي استخدام إدخالات من سجل EVE ثم إضافة قواعد جدار حماية لتقييد الوصول إلى النظام الخاص بك أو الأنظمة. يمكنك استخدام أداة jq
لاستخراج حقول محددة من تنبيه، ثم إضافة قواعد UFW أو IPtables لحجب الطلبات.
مرة أخرى، هذا المثال هو سيناريو افتراضي يستخدم بيانات طلب واستجابة مصممة بشكل متعمد. معرفتك بالأنظمة والبروتوكولات التي يجب أن تكون قادرة على الوصول إليها في بيئتك أمر أساسي لتحديد أي حركة مرور هي شرعية وأيها يمكن حجبها.
الختام
في هذا البرنامج التعليمي، قمت بتثبيت Suricata من مستودعات البرمجيات لـ OISF. يضمن تثبيت Suricata بهذه الطريقة أن تتلقى التحديثات كلما تم إصدار إصدار جديد من Suricata. بعد تثبيت Suricata، قمت بتحرير التكوين الافتراضي لإضافة معرف تدفق مجتمعي للاستخدام مع أدوات الأمان الأخرى. كما قمت بتمكين إعادة تحميل القواعد الفورية، وقمت بتنزيل مجموعة أولية من القواعد.
بمجرد تحققك من تكوين Suricata، بدأت العملية وأنشأت بعض حركة المرور HTTP التجريبية. تحققت من أن Suricata يمكنه اكتشاف حركة المرور المشبوه من خلال فحص كل من السجلات الافتراضية للتأكد من أنها تحتوي على تنبيه متطابق مع القاعدة التي كنت تختبرها.
لمزيد من المعلومات حول Suricata، قم بزيارة الموقع الرسمي Suricata. لمزيد من التفاصيل حول أي من خيارات التكوين التي قمت بتكوينها في هذا البرنامج التعليمي، راجع دليل مستخدم Suricata.
الآن بعد أن قمت بتثبيت Suricata وتكوينه، يمكنك المتابعة إلى البرنامج التعليمي التالي في هذه السلسلة فهم توقيعات Suricata حيث ستستكشف كيفية كتابة قواعد Suricata المخصصة الخاصة بك. ستتعلم عن طرق مختلفة لإنشاء تنبيهات، أو حتى كيفية إسقاط حركة المرور تمامًا، استنادًا إلى معايير مثل حزم TCP/IP غير الصالحة، ومحتويات استعلامات DNS، وطلبات واستجابات HTTP، وحتى عمليات مصافحة TLS.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-suricata-on-centos-8-stream