עם התפשטות הפשטות של פלישות סייבר, קייה צורך דחוף להבטיח את העסקים ולספק להם הגנה יותר טובה נגד האקרים. מערכת מניעת פריצות (Intrusion Prevention System (IPS)) היא אחת מהדרכים הטובות ביותר להגן על מחשבים מפני תקיפות. אך לפני שתתחיל לחפש באינטרנט IPS, נסה את Suricata.
במדריך זה, תלמד כיצד להגדיר מערכת IPS Suricata בשרת Linux כדי להגן על הרשת שלך מפני איומים מקוונים.
מוכן? קרא הלאה והתחל להגן על הרשת שלך!
דרישות מקדימות
מדובר בהדגמה ידיים. אם ברצונך להתחיל, הקפד לוודא שיש לך את התקנים הבאים:
- A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
- A non-root user with sudo privileges.
- בהתאם לתצורת הרשת שלך ואיך אתה מתכוון להשתמש ב-Suricata, ייתכן שתזקיק יותר או פחות יחידות Central Processing Unit (CPU) וזכרון (RAM) לשרת שלך. כללית, ככל שתתכוון לבדוק יותר תעבורה, כך תקצה יותר משאבים ל-Suricata. בסביבת מפתח, תכנן להשתמש בפחות 2 יחידות CPU ו-8GB RAM להתחלה כך ש-Suricata יוכל לבצע את המשימות שלו בלעדיו, מבלי לפגוע באיכות השירות לכל המשתמשים.
התקנת Suricata והוספת PPA Repository
אם אתה רואה את זה, זה אומר שהתרגום עבר בהצלחה.
1. הפעל את הפקודה apt update
כדי לעדכן את החבילות הזמינות במערכת שלך.

2. לאחר מכן, הפעל את הפקודה add-apt-repository
כדי להוסיף את ספק החבילות PPA שנתפקד על ידי קרן האבטחה של מידע פתוח (OISF). בהוספת ספק החבילות PPA, תקבל את הגרסה האחרונה והיציבה של Suricata (ppa:oisf/suricata-stable
).

3. הפעל מחדש את הפקודה sudo apt update
כדי לטעון את ספק החבילות של Suricata שנוסף לאינדקס החבילות של המערכת שלך.
4. כעת, הפעל את הפקודה sudo apt policy
כדי לוודא שהוספת את ספק החבילות של Suricata נכונה. ודא שאתה רואה את PPA של Suricata ברשימה כפי שמוצג למטה לפני התקנת Suricata

5. הפעל את הפקודה הבאה כדי להתקין suricata
במערכת שלך.

6. לאחר התקנה, הפעל את הפקודה systemctl status
למטה כדי לבדוק את status
של שירות suricata
.
למטה, ניתן לראות כי שירות Suricata הוא פעיל (פועל).

הגדרת Suricata
חבילת Suricata מגיעה עם קובץ הגדרות בשם suricata.yaml הממוקם בתיקיית /etc/suricata. קובץ ההגדרות הזה מכיל הגדרות שונות למקרים שימוש שונים. אך שימו לב שישנם מספר הגדרות בקובץ ההגדרות המוגדר בדיפולט שעליכם לשנות לפני שתשתמשו ב־Suricata.
המצב המוגדר כברירת מחדל עבור Suricata הוא מצב זיהוי פריצות (IDS), שמקליט אך אינו מוריד תעבורה. מצב זה משמש כאשר מתבצעת הגדרה ומידע ראשוני על Suricata. כאשר תרגישו יותר בנוח עם Suricata ותבינו יותר טוב את סוגי התעבורה עליה Suricata תתריע לכם, תוכלו להפעיל את מצב IPS.
Suricata מוסיף שדה בפורמט JSON שלו (זיהוי זרם של הקהילה). זיהוי זרם של הקהילה הוא שדה בגודל 8 בתים שמאפשר לכם לקשר רשומות שנוצרו על ידי כלים אחרים. תכונה זו שימושית כאשר משתמשים ב־Suricata בשילוב עם כלים אחרים כמו Bro או Elasticsearch.
1. פתחו את קובץ /etc/suricata/suricata.yaml בעורך טקסט המועדף עליכם.
2. מצא שורה שקוראת community-id: false ושנה אותה ל- community-id: true. שמור את השינויים וצא מהעורך הטקסט.
בכל פעם שתבדוק אירועים, תראה את מזהה הזרם של הקהילה בפלט JSON שלהם.

לאחר מכן, הפעל את הפקודה הבאה כדי למצוא מכשיר עם מסלול ברירת מחדל במערכת שלך (route show default
). הדגל -p
אומר לפקודת ip
להדפיס את המכשיר בדרך שקלה לקריאה לאנשים, בעוד הדגל -j
מדפיס את הפלט בפורמט JSON.
Suricata מוגדרת לרכוש חבילות מכל ממשק רשת זמין כברירת מחדל. אך תוכל לשנות את ההתנהגות הזו ולציין ממשק עבור Suricata להאזין אליו כאשר היא מתחילה.
כפי שאתה רואה למטה, הפרמטר dev מציין את הממשק שבו תשתמש Suricata לקליטת חבילות. בדוגמה זו, הממשק הוא eth0, אך הממשק שלך עשוי להיות שונה, כמו tun0, wlan0, וכו'.

4. לבסוף, פתח את קובץ התצורה /etc/suricata/suricata.yaml, אתר את הפרמטר interface תחת הסעיף af-packet ושנה אותו בהתאם. בדוגמה זו, eth0 משמש כממשק לקליטת חבילות.
שמור את השינויים, אך השאר את העורך הטקסט פתוח לכעת.

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

כעת הפעל את פקודת kill
למטה כדי להודיע לתהליך Suricata שלך ($(pidof suricata)
) לעדכן את הכללים בלעדייך ללא התחלת מחדש.
הפקודה שולחת אותר יוזר-מוגדר (-usr2
) לזהות התהליך המסוים, ואז Suricata מבצעת אוטומטית את השלבים הבאים:
- טוען הגדרות חדשות כדי לעדכן משתנים וערכים של כללים.
- טוען כללים חדשים
- בונה מנוע גילוי חדש
- מחליף בין מנועי הגילוי הישנים והחדשים
- וודא שכל החוטים מתעדכנים
- שחרר את מנוע הגילוי הישן
עדכון סטיילים של Suricata
התכונה לטעינת כללים בזמן אמת מוכנה, אך היא לא תשרת את מטרתה אלא אם תעדכן את סטיילי הכללים שלך. כברירת מחדל, חבילת Suricata מכילה סטייל קטן הכולל רק פרוטוקולי רשת הנמצאים בספריית /etc/suricata/rules.
בנקודה זו, תקבל הודעת שגיאה אין קבצי כללים התואמים לתבנית, דומה לזו למטה, כל פעם שתנסה להתחיל ולהשתמש בשירות Suricata שלך. ההודעה מציינת כי אין סטים של כללים לשימוש של Suricata.

כדי לתקן את השגיאה הזו, ספק קבצי כללים למופע שלך של Suricata. למזלך, יש ל-Suricata כלי בשם suricata-update
שיסייע לך לשדרג עם יותר סטים מספקים צד ג',.
1. הפעל את הפקודה למטה כדי לשדרג את המופע שלך של Suricata.
כפי שאתה רואה למטה, הפלט מציין כי פקודת suricata-update
דגם את הכללים על ידי התחברות ל-https://rules.emergingthreats.net/open/. הפקודה כולה יושמר אז בכללים החדשים לתיקייה /var/lib/suricata/rules/
הפלט מדפיס גם את הבא:
- הסך הכל (31737) של סטים של כללים
- מספר הכללים שמופעלים (24355)
- כמות הכללים המוספים (31737)/המוסרים (0).

לבסוף, הפעל את הפקודה למטה כדי לרשום את כל ספקי הכללים (list-sources
).
פקודת
suricata-update
משדרגת סטים ממספר ספקים, כולל ספקים חינמיים ומסחריים.
למטה, תוכל לראות חלק קטן מהרשימה. שים לב לשם הסט שברצונך שה-Suricata ישדרג סטים ממנו בצורה ספציפית. במדריך זה, אנו משדרגים et/open סטים להדגמה (שלב שלוש).

3. הריצו את הפקודה למטה כדי לשאוב ולכלול (enable-source
) את סטי הכללים et/open
בקובץ הכללים שלכם ב-Suricata.

לבסוף, הריצו מחדש את הפקודה suricata-update
כדי לטעון את סט הכללים החדש שנבחר.
אימות תצורת ה-Suricata
הגדרתם את ה-Suricata ואפילו הוספתם סטי כללים, אז זה הזמן לוודא את השינויים שלכם ולהבטיח שהכל עובד כפי שצפוי. לחבילת ה-Suricata יש שירות אימות מובנה שמאפשר לכם לראות כל הסטייה מההגדרה הנוכחית.
הריצו את הפקודה suricata
למטה כדי לאמת את השינויים בקובץ התצורה של ה-Suricata (-c /etc/suricata/suricata.yaml
). הפקודה גם מציגה את כל הודעות האימות (-v
).
הדגל -T
מספר ל-Suricata להפעיל במצב "מבחן" ובמצב "למעלה-למטה". שני המצבים כוללים כללים קפדניים יותר להתאמת חבילות ופחות סבירים לטעות חיובית.
מאחר ו-Suricata הוא גישה לגדר גדר גבוהה, הבדיקה עשויה לקחת מספר דקות עד להשלמתה. אם אין שגיאות, תראו פלט דומה לזה שמציג הודעת שלמה.

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

בדיקת הכללים של ה-Suricata
עכשיו שקבצי התצורה שלך של Suricata אומתו, ניתן להפעיל את Suricata כדי לראות שהם עובדים כראוי. תשתמש ב-Suricata כדי לבדוק את ET Open (2100498) עם הפקודה curl
כדי לזהות פעילות/תעבורת חשודה.
כרגע, לאינסטנס שלך של Suricata יש מעל 30,000 כללים ש-Suricata משיגה מקובצי כללים שונים. לכן, בדיקה מלאה של כל הכללים עם הסברם לא תהיה מתאימה בתוך המדריך הזה.
1. הרץ את הפקודה curl
למטה כדי ליצור קצת תעבורת/בקשות HTTP/פעילות מאתר TestMyNIDS. TestMyNIDS הוא פרויקט למידה מקוונת המוקדש לתמיכה בבדיקות, אימות והשוואה של NIDS. האתר מספק פלטפורמה ייחודית לניתוח השוואתי של NIDS וכלים קשורים.
ניתן להשתמש באתר זה כדי לבדוק כל פעילות/תעבורת חשודה כדי לראות האם סט הכללים שלך מוגדר כראוי.
התגובה מותאמת להפעלת התרעה שקרית המתחזה למשתמש root של Linux/Unix. והמשתמש הזה של root נמצא במערכת שעשויה להיות פגועה.

בשלב הבא, הרץ את הפקודה grep
למטה כדי לבדוק את קובץ היומן fast.log
בתיקיית /var/log/suricata/ להודעת התרעה תואמת 2100498
. הפקודה הזו בודקת את קובץ היומן לתרעת משתמש.
מלבד קובץ fast.log, קובץ יומן נוסף לצפייה הוא קובץ היומן eve.log באותו התיקייה.
תראו פלט דומה לזה שמצוין למטה שמציג את כתובת ה-IPv4 הציבורית של המערכת שלך.

3. כעת, הפעילו את פקודת ה-jq
שמצוינת למטה כדי לבדוק את קובץ היומן eve.log. קובץ היומן eve.log משמש גם הוא לרישום של אירועים אך בפורמט JSON (/var/log/suricata/eve.json
). זהו קובץ היומן eve.json וקובץ היומן fast.log שתעזרו בהם לזיהוי תנועה חשודה וניסיונות חסימה. פעם שמצאתם, פעלו לפי הצורך.
למטה, תראו “signature_id”: 2100498 בפלט, שהוא מזהה החתימה להתראת האזהרה שציינתם בפקודה.
תראו גם את “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=” בפלט, שהוא מזהה זרימת הקהילה שהגדרתם בקובץ /etc/suricata/suricata.yaml.
מזהה הקהילה community_id הזה שימושי כאשר אתם משתמשים ב-Suricata בשילוב עם כלים אחרים כמו Elasticsearch כדי לקבל מערכת "ערימת מעקב בטחונית" מלאה בעלות נמוכה יחסית.

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