הקדמה
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
, הרץ את הפקודה הבאה:
יתבקש ממך להתקין תלויות נוספות, וכן לאשר את מפתח ה־GPG עבור ההפצה של CentOS Linux. לחץ y
ואז ENTER
בכל פעם כדי לסיים את ההתקנה של החבילה copr
.
לאחר מכן, הרץ את הפקודה הבאה כדי להוסיף את מאגר התוכנה של OISF למערכת שלך ולעדכן את רשימת החבילות הזמינות:
לחץ y
ואז ENTER
כאשר תתבקש לאשר שברצונך להוסיף את המאגר.
כעת הוסף את החבילה epel-release
, שתגרום לחבילות תלויות נוספות להיות זמינות עבור Suricata:
כאשר תתבקש לייבא את מפתח ה־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 יתחיל לפעול שוב.
שלב 2 — הגדרת Suricata לפעם הראשונה
חבילת ה-Suricata ממאגרי ה-OISF מגיעה עם קובץ הגדרות שמכסה מגוון רחב של מקרים שימושיים. המצב המוגדר כברירת מחדל עבור Suricata הוא מצב IDS, כך שאין שום תעבורה שתיזוז, רק תתעד. להשאיר את המצב הזה כברירת מחדל הוא רעיון טוב כשאתה לומד את Suricata. לאחר שתהיה לך את Suricata מוגדרת ומשולבת בסביבתך, ותהיה לך רעיון טוב על סוגי התעבורה שהוא יתריע לך עליה, תוכל לבחור להפעיל את מצב ה-IPS.
עם זאת, ההגדרה המוגדרת כברירת מחדל עדיין כוללת מספר הגדרות שעשויות להיות צורך לשנות אותן בהתאם לסביבתך ולצרכיך.
(אופציונלי) הפעלת מזהה זרימת קהילה
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
. מתחת לשורה זו נמצא הממשק המוגדר כברירת מחדל שבו ישתמש Suricata כדי לבדוק תעבורה. ערוך את השורה כך שתתאים לממשק שלך כמו בדוגמה המודגשת הבאה:
# תמיכה בכידון במהירות גבוהה של 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 כולל התעלמות, סינון ואיזון משאבים, אנא
# ראה את 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. כדי להפעיל את האפשרות לטעינה החיה, גלול לתחתית קובץ ההגדרות והוסף את השורות הבאות:
. . .
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)
של הפקודה קורא ל- תת־קושיה, ומוצא את מזהה התהליך של דמון 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 שלך:
תקבל פלט דומה לזה:
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 איפה למצוא את קובץ התצורה שלו:
הבדיקה עשויה לקחת זמן, תלוי בכמות ה-CPU שהוקצת ל-Suricata ובמספר הכללים שהוספת, לכן הכינו עצמכם להמתין דקה או שתיים עד שתושלם.
עם סט הכללים הפתוח של ET כברירת מחדל, תקבלו פלט כזה:
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
שעשויה לרוץ על מערכת רחוקה ספקותית דרך קופסת רשת.
עכשיו תוכל לבדוק בלוגים של 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 log) ומשתמשת ב־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 יוצר, גישה אחת היא להשתמש בערכים מיומנים מיומן מיומן ולאחר מכן להוסיף כללי גישה לחסימת גישה למערכת או מערכות שלך. ניתן להשתמש בכלי 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