Suricata
يعتبر الـ Suricata برنامج مفتوح المصدر وأيضاً يُعتبر محرك لكشف التهديدات يقوم بمراقبة أمان الشبكة أو مايُسمى بالـ Network Security Monitoring (NSM) ، يمكن أن يعمل بما يُسمى بنظام كشف التسلل وهو الـ Intrusion Detection System (IDS) وهو يُعتبر نظام يقوم بتنبيه المستخدم عند وجود أي هجمات بالشبكة ، والنوع الأخر مايُسمى بنظام منع التسلل وهو الـ Intrusion Prevention System (IPS) يُعتبر هذا النظام شبيه بنظام كشف التسلل لكن هنا يقوم بمنعه.
كلا النظامين يعملان عن طريق تحليل الـ Network traffics للبحث عن الهجمات بالإعتماد على القواعد أو الـ Rules المكتوبة من قبل المستخدم.
الـ Suricata تتنفذ عن طريق مايُسمى بالـSignature Language وهي تعمل على مقارنة أو عمل Match مع التهديد الذي يستخدمه المخترق , الـ Suricata أيضاً قادر على إستخدام Ruleset مجموعة من القواعد التي تعمل على إكتشاف هذه التهديدات.
لماذا نستخدم الـ Suricata ؟
واحدة من المزايا التي يقدمها الـ Suricata بإستطاعته تسجيل الطلبات من أي Ports التي تتم بشكل كلي من خلال الـ HTTP Logging، أيضاً من المميزات التي يقدمها الـ Suricata يسجل جميع الـ Queries والـ Responses كـ DNS Logging
بالإضافة إلى إنه يسمح بتخزين وتسجيل الـ TLS certificates ويسمح بإستخراج الملفات وتخزينها على الـ disk.
بماذا يتميز الـ Suricata عن الـ Snort ؟
لو تم المقارنة بين الـ Suricata والـ Snort فكلا النظامين عبارة عن أنظمة للكشف عن التسلل تعتمد علىnetwork-based intrusion detection systems (NIDS) التي من خلالها يتم إكتشاف حركة المرور الضارة عبر شبكة بأكملها.
الإختلاف هنا بأنه يمكن لـSuricata والـ Snort إستخدام معظم الـ Rules لكن ليس كلها , والسبب يعود لو تم إستخدام جميع الـ Rules الموجودة في الـ Snort داخل الـ Suricata تحديداً داخل ملف الـ suricata.log ستظهر أخطاء وسيفشل التحميل فيتم تجاهل الـ Snort Rules التي لايفهمها الـ Suricata.
تثبيت برنامج Suricata على الـ Windows
الرابط التالي يوجد فيه إصدارات الـ Suricata على أنظمة مختلفة ،
سنقوم بتثبيت الـ Suricata على الـ Windows :
بعد ذلك نقوم بتحميل الـ Npcap على الـ Windows :
لابد من تحميل الـ Npcap على الـ Windows لأنه يعتبر كـ Library أو مكتبة تساعدنا نعمل Capture للـ Traffic بحيث نستطيع أن نحللها.
التعرف على القواعد / Rules في Suricata
كما ذكرنا سابقاً أن الـ Suricata تتعامل مع الـ Signature Language أو الـ Rules لتتناسب مع التهديدات أو السلوك الضار،
هذه الـ Rules لها Specific Format يُستخدم في تحليل الـ Network Packets وتُنفذ الإجراء أو الـ Action المناسب حسب أو بناءاً على نوع الـ Packet.
الـ Suricata Signatures / Rules تتكون من ثلاث مكونات أساسية وهي على النحو التالي :
الـ Action هي جزء من إجراءات عدة يتم إتخاذه عندما تتطابق الـ Packet مع الـ Rule.
الـ Header وهو الذي يتكون أو يحمل بداخله الـ Hosts , IP Address , Ports , Protocols الذي يحدد إتجاه الـ Network Traffic سواءاً كان Incoming أو كان Outgoing فيُشير الـ -> إلى إتجاه حركة مرور الـ Network Traffic.
الـ Options هي التي يكتب فيها مايُريده مُنشئ الـ Rules.
أنواع الـ Actions التي يؤديها الـ Suricata rule :
Alert : لإصدار رسالة تنبيه عند إكتشاف محاولة هجوم.
Pass : ليتجاهل الاتصال أو إسقاط الـ Packet.
Reject لعمل Block للـ Packet مع عمل خيار Log.
Drop : في حالة كانت تتطابق الـPacket مع الـ Rule يتم إسقاط الـ Packet ويتم إنشاء تنبيه عليها.
Rejectsrc : يؤدي نفس عمل الـ Reject.
Rejectdst : يتم إرسال كـ RST/ICMP error packet لمن يستقبل الـ Packet حين تتطابق مع الـ Rule التي كُتبت.
الـ RST يتم إرسالها للجهاز عندما الـ Server لايستمع للـ Port المخصص للـ TCP Protocol أو عندما يفشل الإتصال بين الجهاز المستقبل والمرسل , وتُخبر المرسل بأنه يُنشئ اتصال آخر وإعادة إرسال الـ Traffic مرة اخرى.
الـ ICMP يُقصد به أن الـ Port غير قادر على الإتصال بمنافذ أو الـ Ports الخاصة بالـ UDP Protocol.
الخصائص الموجودة في الـ header هي كالتالي :
يحتوي عادة على مُتغيرات أو Variable تكون بالمسميات التالي :
NET_HOME : يستخدم هذا المتغير لتحديد الشبكة الداخلية المراد حمايتها.
NET_EXTERNAL : يستخدم هذا المتغير الشبكة الخارجية التي نود أن تذهب إليها الـ Network Traffic.
Any : المقصود بها الـ Ports بشكل عام.
الخصائص الموجودة في الـ OPETIONS هي كالتالي :
كما ذكرنا سابقاً هي التي يكتب فيها مايُريده مُنشئ الـ Rules مثل :
الـ Signature ID ( sid ) والتي تُعبر عن رقم معرف فريد مخصص لكل Rule.
والـ msg التي نود إظهارها في الـ Rule.
الـ ( rev ) revision يرمز هنا إلى إصدار الـ Rule وكلما تم تحديث هذه الـ Rule تزداد برقم واحد.
الـ Contents يُكتب بها محتوى الذي يكون مُريب ونود إستكشافه في الـ Network Traffic.
هنا الأساس الذي تعتمد عليه الـ Rule في الـ Suricata:
شرح إستخدام الـ Suricata
حينما ننتهي من تحميل الـ Suricata نذهب لملف إسمه suricata.yaml يحتوي هذا الملف على الـ Configuration الخاصة بالـ Suricata ، مابداخل هذا الملف يوجد Variable مهمة لابد أن يتم تعديلها مثل الـ HOME_NET وهي عبارة عن Variable تفيدنا عندما نكتب Rules بأن لابد أن نحدد من خلالها الـ Traffic التي خارجة من الـ HOME_NET ، فسيتم تغيير الـ IP الموجودة في الملف للـ IP الخاص بنا.
بعد ذلك نبحث عن الـ Rule Path نتأكد من مسار الـ Rules .. كنوع من التجربة قمنا بوضع # "أي كأنها تعليق" بمعنى أن كل مسارات الـ Rules لاتعمل عند وضع الـ # ، فسنقوم بإنشاء ملف جديد لـ Rule الخاصة بنا حتى نختبر عملها كيف يكون ونسميها TestMyRule كما هو ظاهر بالصورة :
قبل أن ندخل بالتفاصيل , لابد أن نفعل الـ Suricata داخل الـ Services للعمل بشكل Automatically حتى نستطيع إكتشاف الهجمات , فنكتب الأمر الظاهر لنا ، لكن قبل كتابته لابد أن يكون المستخدم Administrator.
سبب ظهور الـ Error بالأمر السابق هو إنني قمت بتحميل الـ Suricata as Service بداخل الـ Services كما ظاهر في الصورة ، لكن لابد أن يعمل بشكل Automatically.
كيف ممكن تتسجل الـ Logs في الـ Suricata ؟
في مجلد الـ Logs يتم تخزينها في ملفات وتنسيقات مختلفة , تُنشئ بشكل تلقائي عندما يتم تشغيل الـ Suricata.
ملف الـ Events Log الأساسي هو الـ eve.json حيث يتم تخزين الـ events على اساس تُنسق فيها الأحداث بحيث يكون event قابل للتوسيع أو كـ Extensible Event Format.
ملف الـ fast.log يحتوي على الـ Events Log لكن على تنسيق أو format يكون بسطر واحد.
الملفين الآخرين إسمهما stats.log والـ suricata.log هما ملفان يختصان في النظام الأساسي للـ Suricata بكيف يعملان.
بعد ماتعرفنا على كيف تتخزن الـ Logs في الـ Suricata نُطبق حالياً الـ Rules التي انشاءناها في ملف الـ TestMyRule سنحاول أن نطبق عليها الآتي ..
SURICATA AS IPS
كما ذكرنا سابقاً أن الـ IPS يعتبر نظام منع التسلل وهو الـIntrusion Prevention System (IPS) هو نظام يلتقط الـ Packet التي تحمل تهديدات قبل أن تصل وأيضاً يقوم بمنعه.
الـ Rule التي كتبناها في ملف الـ TestMyRule ليتم تشغيلها في الـ Suricata هي كالتالي :
الـ Rule السابقة التي كتبناها في ملف الـ MyTestRule تُمثل هجمة الـ SQL injection vulnerability حتى نستطيع كشف أي محتوى في بروتوكول tcp يحتوي على union select وهذه الكلمة مستخدمة كثيراً في هجمة الـ SQL Injection و هي مخصصة لربط جدولين مع بعض.
سنقوم بتشغيل الـ Suricata من خلال الأمر التالي :
الـ c- يمثل الـ Configuration وهو ملف الـ suricata.yaml.
بعد ذلك حددنا الـ Interface الـ IP الخاص بنا.
الـ l- تمثل الـ default directory الخاصة بالـ log.
لمعرفة كل اوامر الـ Suricata نكتب فقط suricata.exe وتظهر جميع الأوامر.
بعد أن تم تشغيل الـ Suricata في الـ cmd كما ظاهر في الصورة التالية :
نقوم بعد ذلك بفتح الـ Powershell في مجلد الـ Log حتى يتم قراءة الأحداث أو الهجمات التي تحدث ، فنكتب الأمر التالي :
سبب إستخدامنا ملف الـ fast.log في الـ Powershell بأنه يختصر علينا قراءة الـ events بسطر واحد فقط.
تطبيق عملي لإختبار الـ Suricata as IPS
كما ذكرنا سابقاً بأننا إستخدمنا Rule تتمثل في كيفية إيقاف الـ Packet التي تحتوي بداخلها هجمة الـ SQL Injection.
بعد ذلك فتحنا الـ google.com حتى نقوم بعملSQL Injection Attack حتى يظهر التنبيه الذي انشناءه في الـ Rule.
ظهر لدينا Alert يوضّح أن هناك SQL Injection Attack وتم منعه , الـ Alert الظاهر لدينا يُحفظ تلقائياً في ملف الـ fast.log.
يمكن إظهار التفاصيل الكاملة للحدث عن طريق ملف الـ eve.json:
SURICATA AS IDS
فكرة الـ IDS كما ذكرنا مسبقاً بأنه نظام كشف التسللIntrusion detection system وهو عبارة عن نظام لتنبيه المستخدم عند وجود أي هجمات بالشبكة.
تطبيق عملي لإختبار الـ Suricata as IDS
الـ Rule التي كتبناها في ملف الـ TestMyRule سيتم تعديلها كالتالي :
الأن نعود لتشغيل الـ Suricata عن طريق الـ cmd ونقرأ ملف الـ Log عن طريق الـ Powershell مرة أخرى بنفس الخطوات السابقة.
سيظهر لدينا الـ Alert السابق الذي يُحفظ تلقائياً في ملف الـ fast.log , فلو ذهبنا لملف الـ eve.json سيظهر الحدث بشكل تفصيلي كالتالي :