כיצד להתקין את Suricata על CentOS 8 Stream

הקדמה

Suricata הוא כלי ניטור אבטחת רשת (NSM) שמשתמש באוספים של חתימות שנוצרו על ידי הקהילה וחוקים הוגדרים על ידי המשתמש כדי לבדוק ולעבד תעבורת רשת. Suricata יכול ליצור אירועי יומן, להפעיל התראות, ולסנן תעבורה כאשר הוא זוהה חבילות חשודות או בקשות אל שירותים שונים כמספר של שרת.

בברירת המחדל Suricata פועל כמערכת זיהוי חדירה פסיבית (IDS) לסרוק את התעבורה החשודה על שרת או רשת. הוא יצור וירשום התראות למעקב נוסף. ניתן גם להגדיר אותו כמערכת מניעה של חדירה פעילה (IPS) לרשומת, להתראה ולחסום לחלוטין תעבורת רשת התואמת חוקים מסוימים.

ניתן להפעיל את Suricata על מארח שער ברשת כדי לסרוק את כל תעבורת הרשת הנכנסת והיוצאת ממערכות אחרות, או ניתן להפעיל אותו מקומית על מכונות יחידות באחד משני המצבים.

במדריך זה תלמד כיצד להתקין את Suricata, וכיצד להתאים אישית את חלק מהגדרותיו ברירת המחדל על Centos 8 Stream כדי להתאים אותו לצרכיך. תלמד גם כיצד להוריד אוספים קיימים של חתימות (שבדרך כלל מתייחסים אליהם כאן בשם קבוצות חוקים) ש-Suricata משתמש בהם לסריקת תעבורת רשת. לבסוף, תלמד כיצד לבדוק האם Suricata פועל נכון כאשר הוא זוהה בקשות חשודות ונתונים בתגובה.

דרישות מוקדמות

בהתאם לתצורת הרשת שלך ולכיצד אתה מתכנן להשתמש ב-Suricata, ייתכן ותצטרך יותר או פחות מעבד וזיכרון עבור השרת שלך. בדרך כלל, ככל שתתכנן לבדוק תעבורה רבה יותר, כך תצטרך להקצות יותר משאבים ל-Suricata. בסביבת ייצור תכנן להשתמש לפחות ב-2 יחידות מעבד ובין 4 ל-8 ג'יגה-בתים של זיכרון כדי להתחיל. משם, תוכל לגדול את המשאבים לפי ביצועי ה-Suricata וכמות התעבורה שעליך לעבד.

אם אתה מתכנן להשתמש ב-Suricata כדי להגן על השרת שהוא רץ עליו, תצטרך:

  • שרת Centos 8 Stream עם 2 או יותר מעבדים, משתמש לא ראשי עם הרשאות sudo, וחומת אש מופעלת. כדי להגדיר זאת, תוכל לעקוב אחרי המדריך שלנו על הגדרת השרת הראשונית עם CentOS Linux 8.

אחרת, אם אתה מתכנן להשתמש ב-Suricata על מארח שער לצורך מעקב והגנה על מספר שרתים, עליך לוודא שתצורת הרשת של המארח מוגדרת כראוי.

אם אתה משתמש ב-DigitalOcean תוכל לעקוב אחרי מדריך זה על איך להגדיר Droplet כשער VPC. ההוראות האלו צריכות לעבוד גם עבור רוב השרתים המבוססים על CentOS, Fedora, ושרתים מקוריים אחרים של RedHat.

שלב 1 — התקנת Suricata

כדי להתחיל בהתקנת Suricata, תצטרך להוסיף את מידע מאגר התוכנה של קרן האבטחה המידע הפתוח (OISF) למערכת ה־CentOS שלך. ניתן להשתמש בפקודת dnf copr enable כדי לעשות זאת. עליך גם להוסיף את מאגר התוכנה Extra Packages for Enterprise Linux (EPEL).

כדי לאפשר את הפקודה המשנית לפרויקטים קהילתיים (copr) עבור כלי החבילות dnf, הרץ את הפקודה הבאה:

  1. sudo dnf install 'dnf-command(copr)'

יתבקש ממך להתקין תלויות נוספות, וכן לאשר את מפתח ה־GPG עבור ההפצה של CentOS Linux. לחץ y ואז ENTER בכל פעם כדי לסיים את ההתקנה של החבילה copr.

לאחר מכן, הרץ את הפקודה הבאה כדי להוסיף את מאגר התוכנה של OISF למערכת שלך ולעדכן את רשימת החבילות הזמינות:

  1. sudo dnf copr enable @oisf/suricata-6.0

לחץ y ואז ENTER כאשר תתבקש לאשר שברצונך להוסיף את המאגר.

כעת הוסף את החבילה epel-release, שתגרום לחבילות תלויות נוספות להיות זמינות עבור Suricata:

  1. sudo dnf install epel-release

כאשר תתבקש לייבא את מפתח ה־GPG, לחץ y ואז ENTER כדי לאשר.

עכשיו שיש לך את מאגרי התוכנה הנדרשים מופעלים, תוכל להתקין את החבילה suricata באמצעות הפקודה dnf:

  1. sudo dnf install suricata

כאשר אתה מתבקש להוסיף את מפתח ה-GPG עבור מאגר ה-OISF, לחץ על y ואז על ENTER. החבילה והתלויות שלה יורדו ויתקנו כעת.

באשף ההתקנה, הפעל את suricata.service כך שהוא ירוץ כאשר המערכת שלך מתרעננת. השתמש בפקודת systemctl כדי להפעיל אותו:

  1. sudo systemctl enable suricata.service

תקבל פלט דומה לזה שמציין שהשירות הופעל:

Output
Created symlink /etc/systemd/system/multi-user.target.wants/suricata.service → /usr/lib/systemd/system/suricata.service.

לפני שנעבור לחלק הבא של המדריך, שמסביר איך להגדיר את Suricata, עצור את השירות באמצעות systemctl:

  1. sudo systemctl stop suricata.service

עצירת ה-Suricata מבטיחה שכאשר אתה מערוך ובודק את קובץ התצורה, כל השינויים שתבצע יאושרו ויטענו כאשר Suricata יתחיל לפעול שוב.

שלב 2 — הגדרת Suricata לפעם הראשונה

חבילת ה-Suricata ממאגרי ה-OISF מגיעה עם קובץ הגדרות שמכסה מגוון רחב של מקרים שימושיים. המצב המוגדר כברירת מחדל עבור Suricata הוא מצב IDS, כך שאין שום תעבורה שתיזוז, רק תתעד. להשאיר את המצב הזה כברירת מחדל הוא רעיון טוב כשאתה לומד את Suricata. לאחר שתהיה לך את Suricata מוגדרת ומשולבת בסביבתך, ותהיה לך רעיון טוב על סוגי התעבורה שהוא יתריע לך עליה, תוכל לבחור להפעיל את מצב ה-IPS.

עם זאת, ההגדרה המוגדרת כברירת מחדל עדיין כוללת מספר הגדרות שעשויות להיות צורך לשנות אותן בהתאם לסביבתך ולצרכיך.

(אופציונלי) הפעלת מזהה זרימת קהילה

Suricata יכול לכלול שדה מזהה קהילה בפלט JSON שלו כדי להקל על התאמה של רשומות אירועים יחידות לרשומות בקבוצות נתונים שנוצרו על ידי כלים אחרים.

אם תתכננו להשתמש ב-Suricata עם כלים אחרים כמו Zeek או Elasticsearch, הוספת מזהה הקהילה כעת היא רעיון טוב.

כדי לאפשר את האפשרות, פתחו את /etc/suricata/suricata.yaml באמצעות vi או העורך שאתם מעדיפים:

  1. sudo vi /etc/suricata/suricata.yaml

מצאו את השורה 120 שקוראת # מזהה זרימת קהילה. אם אתם משתמשים ב־vi, הקלידו 120gg כדי לעבור ישירות לשורה. מתחת לשורה זו נמצא המפתח community-id. הגדירו אותו כ־true כדי לאפשר את ההגדרה:

/etc/suricata/suricata.yaml
. . .
      # מזהה זרימת קהילה
      # מוסיף שדה '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 כדלקמן:

  1. ip -p -j route show default

הדגל -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 או העורך שאתה מעדיף:

  1. sudo vi /etc/suricata/suricata.yaml

גלול בקובץ עד שתגיע לשורה שקוראת af-packet: בערך בשורה 580. אם אתה משתמש ב- vi, תוכל גם לעבור ישירות לשורה על ידי הקלדת 580gg. מתחת לשורה זו נמצא הממשק המוגדר כברירת מחדל שבו ישתמש Suricata כדי לבדוק תעבורה. ערוך את השורה כך שתתאים לממשק שלך כמו בדוגמה המודגשת הבאה:

/etc/suriata/suricata.yaml
# תמיכה בכידון במהירות גבוהה של Linux
af-packet:
  - interface: eth0
    # מספר תהליכי קבלה. "auto" משתמש במספר הליבות
    #threads: auto
    # clusterid ברירת המחדל. AF_PACKET תטען לאיזון של חבילות בהתבסס על הזרימה.
    cluster-id: 99
. . .

אם ברצונך לבדוק תעבורה על ממשקים נוספים, תוכל להוסיף עוד אובייקטי YAML - interface: eth.... לדוגמה, כדי להוסיף מכשיר בשם enp0s1, גלול לתחתית סעיף ה- af-packet כ- בערך בשורה 650. כדי להוסיף ממשק חדש, הכנס אותו לפני סעיף - interface: default כמו בדוגמה המודגשת הבאה:

/ec/suricata/suricata.yaml
    #  עבור הגדרת eBPF ו־XDP כולל התעלמות, סינון ואיזון משאבים, אנא 
    #  ראה את doc/userguide/capture-hardware/ebpf-xdp.rst למידע נוסף.

  - interface: enp0s1
cluster-id: 98

  - interface: default
    #threads: auto
    #use-mmap: no
    #tpacket-v3: yes

ודא שבוחר ערך cluster-id ייחודי עבור כל אובייקט - interface.

שמור על העורך פתוח והמשך לסעיף הבא בו תגדיר את הטעינה החיה של כללים. אם אינך רוצה להפעיל את ההגדרה הזו, תוכל לשמור ולסגור את קובץ /etc/suricata/suricata.yaml. אם אתה משתמש ב־vi, תוכל לעשות זאת באמצעות ESC, אז :x וְENTER כדי לשמור ולצאת.

הגדרת טעינה חיה של כללים

Suricata תומך בטעינה חיה של כללים, המשמעות של זה היא שתוכל להוסיף, להסיר ולערוך כללים בלי צורך לאתחל את תהליך הרצה של Suricata. כדי להפעיל את האפשרות לטעינה החיה, גלול לתחתית קובץ ההגדרות והוסף את השורות הבאות:

/etc/suricata/suricata.yaml
. . .

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:

  1. sudo kill -usr2 $(pidof suricata)

החלק $(pidof suricata) של הפקודה קורא ל- תת־קושיה, ומוצא את מזהה התהליך של דמון Suricata הפועל. החלק הראשון sudo kill -usr2 של הפקודה משתמש ביישום kill כדי לשלוח את האות SIGUSR2 למזהה התהליך שמדווח על ידי התת־קושיה.

ניתן להשתמש בפקודה זו בכל פעם שאתה מפעיל את suricata-update או כאשר אתה מוסיף או עורך כללים מותאמים אישית שלך.

שמור וסגור את קובץ /etc/suricata/suricata.yaml. אם אתה משתמש ב- vi, תוכל לעשות זאת עם ESC, ואז :x ו־ ENTER כדי לאשר.

שלב 3 — עדכון סטי הכללים של Suricata

בנקודה זו במדריך, אם היית מנסה להתחיל את Suricata, היית מקבל הודעת אזהרה דומה להבאה ביומנים כי אין כללים טעונים:

Output
<Warning> - [ERRCODE: SC_ERR_NO_RULES(42)] - No rule files match the pattern /var/lib/suricata/rules/suricata.rules

כברירת מחדל, חבילת ה־ Suricata כוללת סט מוגבל של כללי זיהוי (בתיקיית /etc/suricata/rules), לכן דיבור על הפעלת Suricata בנקודה זו יזהה רק כמות מוגבלת של תעבורה רעה.

Suricata כולל כלי בשם suricata-update שיכול לקבל סטי כללים מספקים חיצוניים. הרץ אותו כדלקמן כדי להוריד סט כללים מעודכן עבור שרת ה-Suricata שלך:

  1. sudo suricata-update

תקבל פלט דומה לזה:

Output
19/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 כך:

  1. sudo suricata-update list-sources

תקבל רשימת מקורות כמו בדוגמה הבאה:

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, תוכל להפעיל אותו באמצעות הפקודה הבאה:

  1. sudo suricata-update enable-source tgreen/hunting

לאחר מכן, הפעל את suricata-update שוב והסט החדש של כללים יתווסף, בנוסף לכללי ET Open הקיימים וכללים אחרים שהורדת.

שלב 4 — אימות תצורת Suricata

עכשיו שערכת את קובץ התצורה של Suricata כך שיכלול את מזהה הקהילה האופציונלי, לציין את ממשק הרשת המוגדר כברירת מחדל, ולהפעיל טעינה חיה של כללים, זה רעיון טוב לבדוק את התצורה.

Suricata מגיע עם מצב בדיקה מובנה שיבדוק את קובץ התצורה וכללי המשחק שמצוים בו על תקינות. אמת את השינויים שבקטע הקודם באמצעות הדגל -T כדי להפעיל את Suricata במצב בדיקה. הדגל -v ידפיס מידע נוסף, והדגל -c מגיד ל-Suricata איפה למצוא את קובץ התצורה שלו:

  1. sudo suricata -T -c /etc/suricata/suricata.yaml -v

הבדיקה עשויה לקחת זמן, תלוי בכמות ה-CPU שהוקצת ל-Suricata ובמספר הכללים שהוספת, לכן הכינו עצמכם להמתין דקה או שתיים עד שתושלם.

עם סט הכללים הפתוח של ET כברירת מחדל, תקבלו פלט כזה:

Output
21/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 יצור טעות כזו:

Output
21/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:

  1. sudo systemctl start suricata.service

תוכל לבדוק את מצב השירות באמצעות הפקודה systemctl status:

  1. sudo systemctl status suricata.service

תקבל פלט דומה לזה:

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 שמציינת שסיים להתחיל:

  1. sudo tail -f /var/log/suricata/suricata.log

תקבל מספר שורות פלט, והטרמינל עשוי להיראות כאילו תקוע בזמן ש-Suricata טוען. המשך להמתין לפלט עד שתקבל שורה כמו זו:

Output
19/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:

  1. curl http://testmynids.org/uid/index.html

הפקודה curl תפיק תגובה כמו הבאה:

Output
uid=0(root) gid=0(root) groups=0(root)

נתוני התגובה בדוגמה זו מיועדים להפעיל התראה, על ידי עיצוב תוצאת פקודה כמו id שעשויה לרוץ על מערכת רחוקה ספקותית דרך קופסת רשת.

עכשיו תוכל לבדוק בלוגים של 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 מתוך התיעוד להתחלה מהירה, חפש ערכים התואמים באמצעות הפקודה הבאה:

  1. grep 2100498 /var/log/suricata/fast.log

אם הבקשה שלך השתמשה ב־IPv6, אז עליך לקבל פלט כמו בדוגמה הבאה, כאשר 2001:DB8::1 הוא כתובת ה־IPv6 הציבורית של המערכת שלך:

Output
10/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 הציבורית של המערכת שלך:

Output
10/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 log) ומשתמשת ב־JSON לפרמוט הרשומות.

התיעוד של Suricata ממליץ על שימוש בכלי jq כדי לקרוא ולסנן את הרשומות בקובץ זה. התקן את jq אם אין לך אותו במערכת שלך באמצעות הפקודה הבאה של dnf:

  1. sudo dnf install jq

ברגע שיש לך את jq מותקן, תוכל לסנן את האירועים ביומן ה-EVE על ידי חיפוש אחר חתימת 2100498 באמצעות הפקודה הבאה:

  1. jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json

הפקודה בודקת כל רשומת 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 יוצר, גישה אחת היא להשתמש בערכים מיומנים מיומן מיומן ולאחר מכן להוסיף כללי גישה לחסימת גישה למערכת או מערכות שלך. ניתן להשתמש בכלי 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