כתיבת חוקי Yara ו IPS
במהלך הזמן אתם תקבלו הרבה IOC's (אינדיקטורים) שבהם מצויין חוקי YARA או חוקי IPS
חוקי IPS הם חוקים המתקשרים לתעבורת הרשת עצמה, זאת אומרת שIPS צריך להיות בין הרשת החיצונית של הארגון לרשת הפנימית.
מערכת ה IPS , לרוב מוטמעת בתוך ה Firewall על מנת שכל המידע הזורם דרך ה FW יזרום גם דרך מערכת ה IPS, ה IPS ע"פ חוקים מגדיר לאיזה Data Stream מותר לעבור ולאיזה לא.
מערכת Yara לעומת זאת, היא מערכת הדומה למנגנון האנטי ווירוס, היא משתמש בחתימות על מנת לחסום קבצים המכילים חתימה מזהה כלשהיא.
למשל, בהתראה זו ששלחו ממשל זמין, ניתן להבחין שהם מצרפים חוקי Yara
ואילו בהתראה הזו שהוציאו במערך הסייבר, מתייחסים לEternal Blue, שהוא אינו קובץ, אלא Remote Excecution Exploit שעובר כמובן דרך הרשת, אז למקרה זה דרוש חוק IPS
אכן רשום חוק Snort ואילו Snort הוא מערכת IPS שבה יש חוקי IPS ולפי חוקים אלו חוסמת תעבורה.
על מנת להבין טוב יותר חוקי YARA ו IPS נתחיל מYara
חוקי YARA
תחילה נתקין ב Kali את Yara
apt-get install yara -y
לאחר ההתקנה ניקח קובץ של Petya Ransomware שנוכל להוריד כאן
*אזהרה! הורידו את הקובץ בתוך קאלי בלבד, אל תפעילו את הקובץ שכן זה Petya "חי" שכן הרצה שלו תצפין לכם את קבצי המחשב*
חילצתי את הקובץ ושיניתי את שמו ל petya.exe
לאחר שהורדנו נוציא ממנו Strings ע"י הפקודה
strings petya.exe > stringspetya.txt
כעת יש לנו קובץ בשם wannacry.txt שמכיל את כל ה strings
אם נרצה להיות קצת יותר מדוייקים ושיהיה קל לכתוב את החוק נכתוב את הפקודה כך
strings -el petya.exe
נפתח את הקובץ ונתחיל לחפש strings מעניינים שאיתם נוכל לכתוב את Yara Rule
3
כעת נתחיל לכתוב את החוק השאלה הגדולה היא מה מה Strings האלו הוא ייחודי?
פה דרוש קצת ידע בעולם התוכנה, אבל אנחנו פה למטרת בדיקה בלבד
לכן ניקח את ה Strings הבאים
ונציב אותם בחוק שכתבנו
rule Petya_Ransomware { meta: description = "Petya_Ransomware" author = "Tal BS" email = "tal@shushan.co.il" reference = "https://github.com/ytisf/theZoo/blob/master/malwares/Binaries/Ransomware.Petya/Ransomware.Petya" date = "2020/01/1" hash0 = "e8fb95ebb7e0db4c68a32947a74b5ff9" strings: $a = "d:/re/workspace/8-2-build-windows-i586-cygwin/jdk8u73/6086/install/src/ipc/share/Mutex.cpp" $b = "d:/re/workspace/8-2-build-windows-i586-cygwin/jdk8u73/6086/install/src/ipc/windows/ConditionalImpl.cpp" condition: all of them }
כל ה meta הוא מידע על החוק
ה strings אלו הם ה strings שהוספנו, התנאי למטה, ה condition למעשה אומר שחייב להיות 2 הStrings האלו , על מנת להגדיר את הקובץ כזהה
ניצור את הקובץ ונקרא לו petya.yara
כעת נציב אותו בתיקיה בה אנחנו נמצאים בטרמינל ונבדוק אם החוק yara מגיב לקובץ petya.exe
yara -smgr Petya.yara petya.exe
כאשר מוצג לנו המשך הפקודה, yara מציג כי אכן נמצא ה strings האלו והם זהים
יש עוד המון אפשרויות שYara יכול לבצע, להגדיר משתנים בC ולהגדיר תנאים שאם $s1 ו $s5 זהים גם אז החוק תקף וכו'
חוקי IPS
Yara הוא בודק וחוסם Malware ולרוב ישב על Sandbox או אנטי ווירוס, אבל IPS הוא כלי בהגנה נגד מתקפות "רשת"
IPS הוא קיצור של intrusion prevention system וגם הוא ע"פ חוקים, בודק חבילות רשת, אם ה Data Stream זהה לחוק שכתוב במערכת, הוא יכול לבצע שני דברים.
הראשון – להתריע למערכת הSIEM או אצלו במערכת הלוגים שלו
השני – לבצע פעולה אקטיבית ולחסום את ה Data Steam הזה
Snort הוא אחד מהIPS ה Open Sorce היותר טובים בשוק,
לא חובה, אך תוכלו לבצע את המדריך הבא על מנת להגדיר אותו אצלכם:
נכנס לאתר של snort ושם נוריד את חוקי הקהילה
נוריד את community-rules
ונפתח אותם ב kali (או בווינדוס עם notepad ++ וכו')
כעת נפתח את הקובץ, נבחין שיש אלפי חוקים, כל שורה זה חוק
תחילה נתקין snort
apt-get install snort
כעת נגדיר כאן רק את כתובת ה IP שלנו, בכדי שנוכל לבדוק את המעבדה ובהמשך הכתובת הזו תיהיה ה HOME_NET אם יש רשת שעוברת דרכו, הגדירו את טווח הרשת שלכם
כעת בסיום ההתקנה נגדיר קובץ חוקים משלנו בשם myrules.rules, נערוך את קובץ ההגדרות
sudo nano /etc/snort/snort.conf
מחפש על ידי הקשה של CTRL +W ואז את המילה include
נגיע לתחתית הרשימה של החוקים שנכללים ושם נוסיף חוק משלנו
include $RULE_PATH/myrules.rules
- הוסיפו לכל ה include $RULE_PATH סולמית בכדי שלא יחולו ולא תתרחש התנגשות.
נשמור ונסגור
כעת ניצור חוק
sudo nano /etc/snort/rules/myrules.rules
החוק בנוי כך:
alert - הוא תמיד ההתחלה בחוקי snort tcp - הפרוטוקול אותו הוא יבדוק $HOME_NET - כתובת ה IP הפנימית בה יש מטרה והיא נמצאת מאחורי Snort $HOME_NET! - הוספת ! אומרת שזה External_NET שזו הרשת החיצונית ניתן גם לבנות חוק ב Snort ע"י האתר http://snorpy.com
חוק פשוט –
החוק שאני מעוניין לכתוב נניח הוא כל פניה שמגיע אליי בפורט 22 הלוא הוא SSH
alert - תן אזהרה tcp - פרוטוקול $EXTERNAL_NET - כל מה שמגיע מהרשת החיצונית - קרי לא הכתובת IP שלכם, any הוא כל פורט בין 0-65535 שכן אתם פונים ל22 והפורט שחוזר אל התחנה שפנתה הוא פורט רנדומלי <- החץ אומר מהרשת החיצונית אליכם $HOME_NET - הרשת שלכם או כתובת ה IP שלכם 22 - פורט SSH msg:"SSH Incoming Connection" - ההודעה שתוצג בלוג sid:999 - מספר ההתראה, כתבו כל מה שתרצו, קחו בחשבון שאם יש לכם חוקים אחרים , בדקו שהSID לא מתנגש
alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"SSH Incoming Connection"; sid:999; rev:14;)
נשמור את הקובץ
ונפעיל את snort
service snort start
כעת נפתח במחשב הפיזי או מחשב אחר ברשת putty וננסה להתחבר ל snort בפורט 22
כעת נבדוק אם snort תיעד את החיבור
נוכל לבדוק ע"י הכלי u2spewfoo
cd /var/log/snort u2spewfoo snort.og
נוכל גם לבדוק את זה ע"י
snort -c /etc/snort/snort.conf -q -A fast
בתצורה זו snort בונה קובץ log חדש , אם יעבור Packet שעונה על החוק שיצרנו, אז הקובץ ישאר ואם לא יעבור Packet ברגע שתסגרו את התהליך הקובץ יעלם
נבצע כעת התחברות שוב ב SSH
כעת ניתן להבחין שהקובץ נוצר
נפתח את הקובץ, ניתן להבחין שאכן SSH עבר שם
הצורה הכי נוחה, שבה נוכל להבחין מיידית במתרחש ע"פ החוקים שיצרנו, זה ה console
snort -c /etc/snort/snort.conf -q -A console
כאן קיבלנו את ההתראה במידיית!
EternalBlue
כעת נבחן את החוק שאמור לחסום Exploit מסוג EternalBlue
אפשר להבחין שיש בדיוק את ההתחלה כמו בחוק הפשוט שהכנו קודם\ רק הפעם ההגדרה היא מכל מקום לכל מקום
ואילו כאן יש תוספות כמו
content:”|FF|SMB|32 02 00 00 c0|”; offset:4; depth:9
זה חלק מהMessage Signing ב SMB וכך למעשה הsnort rule יכול לזהות התקפה מסוג EternalBlue
alert tcp $HOME_NET any -> any any (msg:”EXPLOIT Possible Successful ETERNALBLUE Installation SMB MultiplexID = 82 – MS17-010″; flow:from_server,established; content:”|FF|SMB|32 02 00 00 c0|”; offset:4; depth:9; content:”|52 00|”; distance:21; within:23; classtype:trojan-activity; sid:5000072; rev:1;)# EternalBlue signature matching return signature for connection to pre-installed SMB payload